
  /* ── Design tokens ─────────────────────────────────────────────────────── */
  :root {
    /* ── v2 design tokens ─────────────────────────────── */
    --v2-indigo:        #5B4FE5;
    --v2-indigo-dark:   #4A3FD1;
    --v2-indigo-50:     #EEEDFE;
    --v2-indigo-tint:   #F4F2FE;
    --v2-band-1:        #F4EDE2;
    --v2-band-2:        #EBE0CC;
    --v2-surface:       #FAF6EE;
    --v2-line:          #E7E2D6;
    --v2-line-2:        #F0EBDD;
    --v2-row-alt:       #FAF8F3;
    --v2-ink:           #1F2030;
    --v2-ink-2:         #4A4C5B;
    --v2-ink-3:         #8A8C9C;
    --v2-ink-4:         #B5B4AC;
    --v2-success:       #3FA85C;
    --v2-success-bg:    #EAF5EC;
    --v2-success-ink:   #2C7C42;
    --v2-success-deep:  #1F7340;
    --v2-coral:         #E8896F;
    --v2-coral-bg:      #FBE4DE;
    --v2-coral-ink:     #B14A33;
    --v2-amber:         #F5B53C;
    --v2-amber-bg:      #FBEFE0;
    --v2-amber-ink:     #8B6516;
    --v2-orange:        #E08B3F;
    --v2-sage:          #6B8E62;
    --v2-sage-bg:       #E5EFD8;
    --v2-sage-ink:      #4F6B36;
    --v2-orange:        #E08B3F;
    --v2-orange-bg:     #FCEDD8;
    --v2-orange-ink:    #8E5713;
    --v2-teal-bg:       #DCEEED;
    --v2-teal-ink:      #2E6B6A;
    --v2-whatsapp:      #25D366;
    --v2-whatsapp-hover:#1FBC5A;
    --v2-live:          #E14E3C;
    --v2-live-bg:       #FCEEEA;
    --v2-danger:        #C24F3C;
    --v2-danger-bg:     #FCEEEA;
    /* AI assistant — brand indigo→violet (replaces off-brand Google blue) */
    --v2-ai-1:          #5B4FE5;
    --v2-ai-2:          #8B5CF6;
    --v2-font-display:  'Plus Jakarta Sans', 'Inter', system-ui, sans-serif;
    /* ── keep legacy tokens pointing at v2 values ───── */
    --primary: #5B4FE5;
    --primary-dark: #4A3FD1;
    --primary-darker: #3D34CC;
    --primary-light: #EEEDFE;
    --primary-lighter: #F4F2FE;
    --primary-gradient: linear-gradient(135deg, #5B4FE5 0%, #7B6FF0 100%);
    --surface-0: #FAF6EE;
    --surface-1: rgba(250, 246, 238, 0.92);
    --surface-2: rgba(250, 246, 238, 0.75);
    --surface-3: rgba(255, 255, 255, 0.97);
    --text-primary: #0F172A;
    --text-secondary: #475569;
    --text-muted: #64748B;
    --text-disabled: #CBD5E1;
    --toggle-off: #CBD5E1;
    --success: #10B981;
    --success-light: #D1FAE5;
    --warning: #F59E0B;
    --warning-light: #FEF3C7;
    --danger: #EF4444;
    --danger-light: #FEE2E2;
    --info: #3B82F6;
    --info-light: #DBEAFE;
    --border: #E7E2D6;
    --border-dark: #D6CFBF;
    --bg-hover: rgba(99, 102, 241, 0.05);
    --bg-active: rgba(99, 102, 241, 0.1);
    --elevation-1: 0 1px 2px rgba(0, 0, 0, 0.05), 0 1px 3px rgba(0, 0, 0, 0.03);
    --elevation-2: 0 4px 6px rgba(0, 0, 0, 0.07), 0 10px 16px rgba(0, 0, 0, 0.05);
    --elevation-3: 0 10px 15px rgba(0, 0, 0, 0.1), 0 20px 25px rgba(0, 0, 0, 0.08);
    --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
    --font-weight-regular: 400;
    --font-weight-medium: 500;
    --font-weight-semibold: 600;
    --font-weight-bold: 700;
    --font-weight-extrabold: 800;
    --text-xs: 0.75rem;
    --text-xs-lh: 1rem;
    --text-sm: 0.875rem;
    --text-sm-lh: 1.25rem;
    --text-base: 1rem;
    --text-base-lh: 1.5rem;
    --text-md: 1.125rem;
    --text-md-lh: 1.75rem;
    --text-lg: 1.25rem;
    --text-lg-lh: 1.875rem;
    --text-xl: 1.5rem;
    --text-xl-lh: 2rem;
    --text-2xl: 1.875rem;
    --text-2xl-lh: 2.25rem;
    --letter-spacing-tight: -0.02em;
    --letter-spacing-normal: 0;
    --letter-spacing-relaxed: 0.04em;
    --space-0: 0;
    --space-1: 0.25rem;
    --space-2: 0.5rem;
    --space-3: 0.75rem;
    --space-4: 1rem;
    --space-5: 1.25rem;
    --space-6: 1.5rem;
    --space-8: 2rem;
    --space-10: 2.5rem;
    --space-12: 3rem;
    --radius-sm: 0.5rem;
    --radius-md: 0.75rem;
    --radius-lg: 1rem;
    --radius-xl: 1.25rem;
    --radius-full: 999px;
    --duration-fast: 120ms;
    --duration-normal: 220ms;
    --duration-slow: 380ms;
    --duration-slower: 500ms;
    --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
    --easing-smooth: cubic-bezier(0.4, 0, 0.2, 1);
    --easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
    --easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
    --easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
    --radius: 0.75rem;
    --shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 4px 16px rgba(0, 0, 0, 0.06);
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
    --shadow-md: 0 4px 20px rgba(0, 0, 0, 0.1);
    --card: var(--surface-1);
    --bg: var(--surface-0);
    --text: var(--text-primary);
    --muted: var(--text-muted);
    --secondary: #8B5CF6;
    --birthday-bg: #f3e8ff;
    --birthday-text: #9333ea;
    --sport-bg: #dcfce7;
    --sport-text: #16a34a;
    --sos-bg: #fee2e2;
    --sos-text: #dc2626;
    --warning-bg: #fef3c7;
    --warning-border: #fcd34d;
    --warning-text: #92400e;
    --info-bg: #f0f8ff;
    --info-border: #90caf9;
    --info-text: #1e40af;
    --danger-bg: #fee2e2;
    --danger-border: #fecaca;
    --danger-text: #991b1b;
    --success-bg: #dcfce7;
    --success-border: #bbf7d0;
    --success-text: #166534;
    --admin-gradient: linear-gradient(135deg, #1e3a5f, #0d47a1);
    --admin-green-gradient: linear-gradient(135deg, #217346, #1a5c38);
    --purple-bg: #f3e8ff;
    --purple-text: #7c3aed;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; }
  html { height: 100%; }
  body { font-family: var(--font-family);
         background: var(--bg); color: var(--text); min-height: 100%; font-size: 1rem;
         line-height: 1.6; -webkit-font-smoothing: antialiased; overscroll-behavior-y: none; }
  .app { display: flex; flex-direction: column; min-height: 100vh; min-height: -webkit-fill-available; }

  /* ── Header ────────────────────────────────────────────────────────────── */
  header { background: linear-gradient(135deg, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.85));
           backdrop-filter: blur(24px);
           color: #333; padding: 0 var(--space-4);
           padding-top: env(safe-area-inset-top);
           display: flex; align-items: center; height: calc(56px + env(safe-area-inset-top));
           gap: var(--space-2); position: sticky; top: 0; z-index: 500;
           box-shadow: var(--elevation-1);
           border-bottom: 1px solid rgba(99, 102, 241, 0.1); }
  header h1 { font-size: 1.05rem; font-weight: 700; letter-spacing: -.3px; flex-shrink:0; }
  #circle-switcher-btn { display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.22);border:none;color:#fff;border-radius:22px;padding:.35rem 1rem .35rem .7rem;cursor:pointer;font-size:.9rem;font-weight:700;flex:1;max-width:260px;transition:background .15s;min-width:0;margin:0 .25rem;min-height:44px }
  #circle-switcher-btn:hover { background:rgba(255,255,255,.32) }
  #circle-switcher-btn .csw-name { overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.9rem }
  #circle-switcher-btn .csw-arrow { opacity:.8;font-size:.75rem;flex-shrink:0 }
  #circle-dropdown { display:none;position:fixed;top:calc(56px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);min-width:260px;background:#fff;border-radius:14px;box-shadow:0 8px 32px rgba(0,0,0,.18);z-index:800;overflow:hidden;border:1px solid rgba(0,0,0,.08) }
  .csw-item { display:flex;align-items:center;gap:10px;padding:12px 16px;cursor:pointer;transition:background .12s;border:none;width:100%;background:transparent;text-align:left;font-size:.875rem }
  .csw-item:hover { background:#f5f7ff }
  .csw-item.active { background:#eef3ff;font-weight:600 }
  .csw-item .csw-dot { width:10px;height:10px;border-radius:50%;flex-shrink:0 }
  .csw-item .csw-check { margin-left:auto;color:var(--primary);font-size:1rem;flex-shrink:0 }
  .csw-divider { height:1px;background:rgba(0,0,0,.07);margin:4px 0 }
  .csw-new { color:var(--primary);font-weight:600 }
  .csw-join { color:#059669;font-weight:600 }
  .csw-section-header { font-size:.68rem;font-weight:700;color:var(--muted);padding:8px 16px 2px;letter-spacing:.06em;text-transform:uppercase;background:var(--bg);border-top:1px solid var(--border) }
  .csw-section-header:first-child { border-top:none }
  /* Circles panel in Members tab */
  .circles-panel { background:var(--card);border-radius:var(--radius);padding:1.1rem;margin-bottom:.75rem;box-shadow:var(--shadow);border:1px solid var(--border) }
  .circles-panel-header { display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem }
  .circles-panel-header h3 { font-size:1rem;font-weight:800;margin:0;color:var(--text) }
  .circle-cards { display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.6rem }
  .circle-card { background:var(--bg);border-radius:12px;padding:.75rem;cursor:pointer;border:2px solid transparent;transition:border-color .15s,background .15s;text-align:left;display:flex;flex-direction:column;gap:.3rem }
  .circle-card:hover { background:#eef3ff }
  .circle-card.active { border-color:var(--primary);background:#eef3ff }
  .circle-card-name { font-weight:600;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
  .circle-card-meta { font-size:.72rem;color:var(--muted) }
  .circle-card-add { background:var(--bg);border-radius:12px;padding:.75rem;border:2px dashed var(--border);display:flex;align-items:center;justify-content:center;gap:.5rem;cursor:pointer;color:var(--primary);font-weight:700;font-size:.82rem;transition:background .15s,border-color .15s }
  .circle-card-add:hover { background:#eef3ff;border-color:var(--primary) }
  .header-actions { display: flex; gap: .4rem; align-items: center; }
  .btn-icon { background: rgba(255,255,255,.18); border: none; color: #fff; border-radius: 10px;
              padding: .45rem .75rem; cursor: pointer; font-size: .9rem; transition: background .15s; min-height: 44px; min-width: 44px; display: flex; align-items: center; justify-content: center; }
  .btn-icon:active { background: rgba(255,255,255,.3); }
  #install-btn { display: none; background: rgba(255,255,255,.22); font-size: .78rem; font-weight: 700;
                 padding: .35rem .8rem; border-radius: 20px; }

  /* ── Navigation ─────────────────────────────────────────────────────────── */
  /* Top nav - desktop only */
  .nav-tabs { display: flex; overflow-x: auto; background: var(--surface-0); border-bottom: 1px solid var(--border);
              -webkit-overflow-scrolling: touch; scrollbar-width: none; position: sticky;
              top: calc(56px + env(safe-area-inset-top)); z-index: 490; }
  .nav-tabs::-webkit-scrollbar { display: none; }
  .nav-tab { flex-shrink: 0; padding: .75rem .95rem; border: none; background: none; cursor: pointer;
             color: var(--muted); font-size: .85rem; white-space: nowrap; font-weight: 600;
             border-bottom: 3px solid transparent; transition: color .15s, border-color .15s; }
  .nav-tab.active { color: var(--primary); border-bottom-color: var(--primary); }
  .nav-tab.active::after {
    content: '';
    position: absolute;
    bottom: -1px;
    left: 0;
    right: 0;
    height: 3px;
    background: var(--primary-gradient);
    animation: slideIn var(--duration-normal) var(--easing-smooth);
  }
  /* Bottom nav - mobile only */
  .bottom-nav { display: none; }
  @media (max-width: 640px) {
    .desktop-nav { display: none; }
    .desktop-header-btn { display: none; }
    .bottom-nav { display: flex; position: fixed; bottom: 0; left: 0; right: 0; z-index: 600;
                  background: linear-gradient(180deg, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.9));
                  backdrop-filter: blur(20px);
                  border-top: 1px solid rgba(255, 255, 255, 0.3);
                  padding-bottom: env(safe-area-inset-bottom);
                  box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.05);
                  transition: transform .3s cubic-bezier(.4,0,.2,1); }
    .bottom-nav.nav-hidden { transform: translateY(calc(100% + env(safe-area-inset-bottom))); }
    /* Pull-to-refresh indicator */
    .ptr-indicator { position: absolute; top: -44px; left: 50%; transform: translateX(-50%);
                     width: 36px; height: 36px; border-radius: 50%; background: var(--card);
                     box-shadow: 0 2px 8px rgba(0,0,0,.12); display: flex; align-items: center;
                     justify-content: center; font-size: 1.1rem; opacity: 0; transition: opacity .2s;
                     pointer-events: none; z-index: 10; }
    .ptr-indicator.ptr-visible { opacity: 1; }
    .ptr-indicator.ptr-spinning { animation: spin .6s linear infinite; }
    @keyframes spin { to { transform: translateX(-50%) rotate(360deg); } }
    .bnav-btn { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
                padding: .5rem .2rem .45rem; border: none; background: none; cursor: pointer;
                color: var(--muted); transition: color .15s; min-height: 62px; position: relative;
                gap: 2px; }
    .bnav-btn.active { color: var(--primary); }
    .bnav-btn.active::before { content: ''; position: absolute; top: 0; left: 50%; transform: translateX(-50%);
                               width: 40px; height: 3px; background: var(--primary-gradient);
                               border-radius: 0 0 3px 3px; animation: slideDown var(--duration-normal) var(--easing-spring); }
    /* Navigation icon system: SVG icons via .bnav-icon class */
    .bnav-icon { display: flex; align-items: center; justify-content: center;
                 width: 24px; height: 24px; line-height: 1; }
    .bnav-label { font-size: .7rem; font-weight: 600; letter-spacing: -.05px; }
    .more-menu-btn { display: flex; flex-direction: row; align-items: center; justify-content: flex-start;
                     gap: .85rem; padding: .85rem 1.1rem; border: none; background: var(--card);
                     border-radius: 0; cursor: pointer; font-size: 1.4rem; font-weight: 700;
                     color: var(--text); transition: background .15s; min-height: 56px;
                     width: 100%; border-bottom: 1px solid var(--border); }
    .more-menu-btn:last-child { border-bottom: none; }
    .more-menu-btn span { font-size: .95rem; font-weight: 600; }
    .more-menu-btn:active { background: var(--primary-light); }
    /* Sections are their own scroll containers - reliable scroll on all mobile browsers/iOS.
       --app-h is set by JS (window.innerHeight) for accuracy when iOS URL bar shows/hides. */
    .section.main {
      overflow-y: auto;
      -webkit-overflow-scrolling: touch;
      /* Do NOT use overscroll-behavior-y:contain - it can block reaching the last scroll position on iOS */
      height: calc(100dvh - 56px - env(safe-area-inset-top) - 62px - env(safe-area-inset-bottom));
      height: calc(var(--app-h, 100dvh) - 56px - env(safe-area-inset-top) - 62px - env(safe-area-inset-bottom));
      padding-bottom: 0; /* iOS Safari ignores padding-bottom on scroll containers - use .scroll-spacer instead */
    }
    /* Scroll-to-bottom fix: generous DOM spacer so last card clears the bottom nav.
       Extra-tall to absorb any device-specific variance. */
    .scroll-spacer { height: calc(env(safe-area-inset-bottom) + 6rem);
                     flex-shrink: 0; pointer-events: none; }
    #section-location .map-layout { height: calc(100dvh - 56px - env(safe-area-inset-top) - 60px - env(safe-area-inset-bottom)); }

    /* ── Monthly calendar: full-width, compact cells ───────────────── */
    #section-calendar .main-inner, #section-calendar { overflow-x: hidden; }
    /* Pull the grid edge-to-edge by negating the .main padding */
    .cal-grid-wrap { margin: 0 -1.1rem; }
    .cal-grid { border-radius: 0; border-left: none; border-right: none; gap: 0; }
    .cal-dow  { padding: .38rem .05rem; font-size: .62rem; letter-spacing: 0; }
    .cal-day  { min-height: 42px; padding: .12rem .08rem; }
    .cal-day-num { font-size: .72rem; margin-bottom: .1rem; }
    /* Collapse event labels to colour-only dots on narrow screens */
    .cal-event-dot { font-size: 0 !important; width: 7px; height: 7px; padding: 0 !important;
                     border-radius: 50%; margin: 1px auto; display: block; }
    /* Today circle fits the smaller cell */
    .cal-day.today .cal-day-num { width: 20px; height: 20px; font-size: .7rem; }
  }

  /* ── Layout ────────────────────────────────────────────────────────────── */
  .main { flex: 1; padding: 1rem 1.1rem; max-width: 960px; margin: 0 auto; width: 100%;
          -webkit-overflow-scrolling: touch; }
  .section { display: none; }
  .section.active { display: block; }

  /* ── Cards ─────────────────────────────────────────────────────────────── */
  .card { background: var(--surface-1); border-radius: var(--radius-lg); padding: var(--space-5);
          margin-bottom: .75rem; box-shadow: var(--elevation-1); border: 1px solid rgba(255,255,255,0.2);
          backdrop-filter: blur(16px); transition: all var(--duration-normal) var(--easing-smooth); }
  .card:hover { background: var(--surface-2); box-shadow: var(--elevation-2); transform: translateY(-1px); }

  .alert-warning { background:var(--warning-bg,#fef3c7);border:1px solid var(--warning-border,#fcd34d);border-radius:10px;padding:.65rem .85rem;font-size:.82rem;color:var(--warning-text,#92400e); }
  .alert-info { background:var(--info-bg,#f0f8ff);border:1px solid var(--info-border,#90caf9);border-radius:8px;padding:.65rem .85rem;font-size:.82rem;color:var(--info-text,#1e40af); }

  /* ── Buttons ───────────────────────────────────────────────────────────── */
  .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2);
         padding: 0.6rem 1.25rem; border: none; border-radius: var(--radius-md); cursor: pointer;
         font-size: var(--text-sm); font-weight: var(--font-weight-semibold); 
         transition: transform var(--duration-fast) var(--easing-spring), background var(--duration-normal) var(--easing-smooth), box-shadow var(--duration-normal) var(--easing-smooth);
         letter-spacing: var(--letter-spacing-normal); user-select: none; -webkit-tap-highlight-color: transparent; min-height: 44px; white-space: nowrap; }
  .btn:hover  { transform: translateY(-1px); }
  .btn:active { transform: scale(0.97); }
  .btn-primary { background: var(--primary); color: #fff; box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3); }
  .btn-primary:hover { background: var(--primary-dark); box-shadow: 0 4px 12px rgba(79, 70, 229, 0.4); }
  .btn-primary:active { background: var(--primary-darker); box-shadow: none; }
  .btn-success { background: var(--success); color: #fff; box-shadow: 0 1px 4px rgba(22,163,74,.25); }
  .btn-success:active { background: #15803D; }
  .btn-danger  { background: var(--danger);  color: #fff; box-shadow: 0 1px 4px rgba(220,38,38,.25); }
  .btn-danger:active  { background: #B91C1C; }
  .btn-outline { background: transparent; color: var(--primary); border: 1.5px solid var(--primary); }
  .btn-outline:hover  { background: var(--primary-light); }
  .btn-outline:active { background: var(--primary); color: #fff; }
  .btn-sm { padding: .26rem .65rem; font-size: .775rem; border-radius: 8px; }
  .btn-lg { padding: .58rem 1.4rem; font-size: .9rem; border-radius: 12px; }
  .btn:disabled { opacity: .5; cursor: not-allowed; transform: none !important; filter: none !important; box-shadow: none; }
  .btn:focus-visible, .btn-icon:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
  /* Clear "active/selected" state for toggle-style buttons */
  .btn.active, .btn[aria-pressed="true"] { box-shadow: inset 0 1px 4px rgba(0,0,0,.18); filter: brightness(.93); }

  /* ── Forms ─────────────────────────────────────────────────────────────── */
  input, select, textarea { width: 100%; padding: 0.65rem 0.95rem; border: 1.5px solid var(--border);
                             border-radius: var(--radius-md); font-size: 1rem; background: var(--surface-1);
                             color: var(--text-primary); font-family: var(--font-family);
                             transition: border-color var(--duration-fast) var(--easing-smooth), background var(--duration-fast) var(--easing-smooth), box-shadow var(--duration-fast) var(--easing-smooth);
                             -webkit-appearance: none; }
  @media (min-width: 960px) { input, select, textarea { font-size: 1rem; } }
  /* Restore native checkbox appearance stripped by the rule above */
  input[type="checkbox"] { -webkit-appearance: checkbox; appearance: checkbox;
                            width: 20px; height: 20px; padding: 0; border: none;
                            background: none; cursor: pointer; flex-shrink: 0; }
  input[type="color"] { padding: .2rem; border-radius: 8px; }
  input::placeholder, textarea::placeholder { color: #9CA3AF; }
  input:focus, select:focus, textarea:focus { outline: 2px solid transparent; border-color: var(--primary);
    background: var(--surface-2); box-shadow: 0 0 0 3px var(--primary-lighter); }
  input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
  .form-group { margin-bottom: 1.1rem; }
  .form-group label { display: block; font-size: .8rem; font-weight: 700; color: var(--muted);
                      margin-bottom: .4rem; text-transform: uppercase; letter-spacing: .5px; }
  /* Inline form validation feedback (#13) */
  .field-err { display:none; margin-top:.3rem; font-size:.74rem; font-weight:600; color:var(--v2-coral-ink,#B14A33); }
  .field-hint { display:block; margin-top:.3rem; font-size:.74rem; font-weight:600; min-height:1em; }
  .field-hint.warn { color:var(--v2-amber-ink,#8B6516); }
  .field-hint.ok { color:var(--v2-success-ink,#2C7C42); }
  /* ── Password field: show/hide toggle + strength meter (R8) ────────────── */
  /* inset-inline-end keeps the eye on the correct side under RTL automatically. */
  .pw-field { position: relative; }
  .pw-field > input { padding-inline-end: 2.6rem; }
  .pw-toggle { position: absolute; inset-inline-end: .4rem; top: 50%; transform: translateY(-50%);
               background: none; border: none; cursor: pointer; padding: .35rem; line-height: 1;
               font-size: 1.05rem; opacity: .65; border-radius: 8px; min-width: 32px; min-height: 32px; }
  .pw-toggle:hover { opacity: 1; }
  .pw-toggle:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
  .pw-meter { display: flex; gap: 4px; margin-top: .45rem; }
  .pw-meter > span { flex: 1; height: 4px; border-radius: 3px; background: var(--border,#e0e0e0); transition: background .2s; }
  .pw-meter[data-score="1"] > span:nth-child(-n+1),
  .pw-meter[data-score="2"] > span:nth-child(-n+2),
  .pw-meter[data-score="3"] > span:nth-child(-n+3),
  .pw-meter[data-score="4"] > span:nth-child(-n+4) { background: var(--pw-meter-color,#999); }
  .sr-only { position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0; }
  summary:focus { outline: none; }
  summary:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; border-radius: 4px; }

  /* ── Calendar ──────────────────────────────────────────────────────────── */
  .cal-header { display: flex; align-items: center; gap: .5rem; margin-bottom: .75rem; }
  .cal-header h2 { flex: 1; text-align: center; font-size: 1rem; font-weight: 700; }
  .btn-icon-nav { background: var(--bg); border: 1.5px solid var(--border); color: var(--text);
                  border-radius: 10px; min-width: 44px; min-height: 44px; width: 34px; height: 34px; cursor: pointer; font-size: 1.1rem;
                  font-weight: 700; display: flex; align-items: center; justify-content: center; transition: background .1s; }
  .btn-icon-nav:active { background: var(--primary-light); }
  .cal-view-toggle { display: flex; background: var(--bg); border: 1.5px solid var(--border);
                     border-radius: 10px; padding: 2px; gap: 2px; }
  .cal-view-btn { border: none; background: none; padding: .25rem .6rem; border-radius: 7px;
                  font-size: .75rem; font-weight: 700; color: var(--muted); cursor: pointer; transition: all .15s; }
  .cal-view-btn.active { background: var(--primary); color: #fff; box-shadow: 0 1px 4px rgba(26,115,232,.3); }
  /* Week view */
  .week-grid { display: grid; grid-template-columns: repeat(7,1fr); gap: 3px; }
  .week-day-col { border-radius: 10px; overflow: hidden; min-height: 120px; }
  .week-day-hdr { text-align: center; padding: .4rem .2rem; font-size: .7rem; font-weight: 700;
                  background: var(--primary); color: #fff; }
  .week-day-hdr.today { background: var(--primary-dark); }
  .week-day-body { background: #fff; border: 1px solid var(--border); border-top: none;
                   border-radius: 0 0 10px 10px; padding: .3rem; display: flex; flex-direction: column; gap: 2px; min-height: 80px; }
  .week-event { font-size: .78rem; padding: 3px 6px; border-radius: 5px; color: #fff;
                font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
                cursor: pointer; line-height: 1.3; }
  @media (max-width:420px) {
    .week-event { font-size:.73rem; padding:2px 4px; }
    .week-key-chip { font-size:.68rem; }
  }
  /* Day view */
  .day-view-header { font-size: 1.05rem; font-weight: 800; margin-bottom: .75rem; color: var(--text); }
  .day-event-card { background: #fff; border-radius: 12px; padding: .85rem 1rem;
                    border-left: 4px solid var(--primary); box-shadow: var(--shadow);
                    margin-bottom: .6rem; cursor: pointer; border: 1px solid var(--border);
                    border-left-width: 4px; }
  .day-event-time { font-size: .8rem; font-weight: 700; color: var(--muted); margin-bottom: .25rem; }
  .day-event-title { font-size: .95rem; font-weight: 700; }
  .day-event-members { display: flex; gap: 3px; margin-top: .3rem; flex-wrap: wrap; }
  .cal-grid { display: grid; grid-template-columns: repeat(7,1fr); gap: 1px; background: var(--border);
              border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
  .cal-dow { background: var(--primary); color: #fff; text-align: center; padding: .55rem .2rem;
             font-size: .72rem; font-weight: 700; letter-spacing: .3px; }
  .cal-day { background: var(--card); min-height: 72px; padding: .4rem; cursor: pointer; transition: background .1s; }
  .cal-day:hover { background: var(--primary-light); }
  .cal-day.today { background: var(--primary-light, #EFF6FF); border: 1px solid var(--primary); }
  .cal-day.today .cal-day-num { background: var(--primary); color: #fff; border-radius: 50%;
                                 width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; font-weight: 800; }
  .cal-day.other-month { background: var(--bg); }
  .cal-day.other-month .cal-day-num { color: #CBD5E1; }
  .cal-day-num { font-size: .78rem; font-weight: 700; margin-bottom: .2rem; line-height: 1; }
  .cal-events { display: flex; flex-direction: column; gap: 2px; }
  .cal-event-dot { font-size: .75rem; padding: 2px 5px; border-radius: 4px; color: #fff;
                   white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.4; font-weight: 500; }
  .cal-member-dots { display: flex; gap: 2px; flex-wrap: wrap; margin-top: 2px; }
  .cal-member-dot { width: 7px; height: 7px; border-radius: 50%; }
  .member-legend { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .75rem; }
  .member-legend-item { display: flex; align-items: center; gap: .3rem; font-size: .78rem; }
  .member-legend-color { width: 11px; height: 11px; border-radius: 50%; }

  /* ── Members ───────────────────────────────────────────────────────────── */
  .grid-3 { display: grid; grid-template-columns: repeat(auto-fill,minmax(150px,1fr)); gap: .75rem; }
  .member-dot { width: 48px; height: 48px; border-radius: 50%; display: inline-flex; align-items: center;
                justify-content: center; color: #fff; font-weight: 800; font-size: 1.1rem; flex-shrink: 0; }
  .member-dot-sm { width: 22px; height: 22px; font-size: .65rem; }
  .member-dot-md { width: 32px; height: 32px; font-size: .8rem; }
  .day-chip { display:inline-flex;align-items:center;gap:.3rem;padding:.4rem .75rem;border:1.5px solid var(--border);
              border-radius:99px;cursor:pointer;font-size:.85rem;font-weight:700;transition:all .15s;min-height:40px }
  .day-chip:has(input:checked) { background:var(--primary);color:#fff;border-color:var(--primary); }
  .day-chip input { display:none; }

  /* ── Tags / badges ─────────────────────────────────────────────────────── */
  .badge { display: inline-block; padding: .2rem .65rem; border-radius: 99px; font-size: .75rem; color: #fff; font-weight: 700; }
  .tag { display: inline-block; padding: .25rem .7rem; border-radius: 99px; font-size: .8rem; font-weight: 700; }
  .priority-high { color:var(--danger,#dc2626);font-weight:700; }
  .priority-medium { color:var(--warning-text,#92400e);font-weight:600; }
  .priority-low { color:var(--success-text,#166534); }

  /* ── Left-align + force LTR for RTL-locale browsers ────────────────────── */
  /* These sections must always render left-to-right regardless of browser locale */
  #section-tasks, #section-shopping, #section-bring { text-align: left; direction: ltr; }

  /* ── Game Time ───────────────────────────────────────────── */
  .game-card {
    border-radius: 14px; border: 1.5px solid var(--border); padding: .85rem 1rem;
    cursor: pointer; transition: border-color .15s, box-shadow .15s, background .12s;
    background: var(--card); display: flex; align-items: center; gap: .9rem;
  }
  .game-card:hover { border-color: var(--primary); box-shadow: 0 3px 14px rgba(0,0,0,.08); }
  .game-card:active { background: var(--bg); }
  .game-card-icon {
    width: 48px; height: 48px; border-radius: 14px; flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
  }
  .game-card-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: .18rem; }
  .game-card-name { font-weight: 700; font-size: .95rem; color: var(--text); }
  .game-card-meta { font-size: .78rem; color: var(--muted); }
  .game-card-badge {
    display: inline-block; font-size: .7rem; font-weight: 700;
    padding: .1rem .5rem; border-radius: 8px; margin-top: .2rem;
  }
  .game-card-arrow { font-size: 1.1rem; color: var(--muted); opacity: .45; flex-shrink: 0; }
  /* Word Puzzle */
  .wp-row { display:flex; gap:6px; }
  .wp-cell { width:52px; height:52px; border:2px solid var(--border); border-radius:8px; display:flex; align-items:center; justify-content:center; font-size:1.45rem; font-weight:900; color:var(--text); transition:border-color .1s; user-select:none; }
  .wp-cell.filled { border-color:var(--text); animation:wpPop .08s ease; }
  @keyframes wpPop { 0%{transform:scale(1)} 50%{transform:scale(1.1)} 100%{transform:scale(1)} }
  .wp-cell.correct { background:#22c55e; border-color:#22c55e; color:#fff; }
  .wp-cell.present { background:#eab308; border-color:#eab308; color:#fff; }
  .wp-cell.absent  { background:var(--muted,#9ca3af); border-color:var(--muted,#9ca3af); color:#fff; }
  .wp-cell.shake   { animation:wpShake .4s ease; }
  @keyframes wpShake { 0%,100%{transform:translateX(0)} 20%{transform:translateX(-5px)} 40%{transform:translateX(5px)} 60%{transform:translateX(-4px)} 80%{transform:translateX(4px)} }
  .wp-key { min-width:30px; height:44px; border-radius:7px; border:none; background:var(--bg); color:var(--text); font-size:.78rem; font-weight:700; cursor:pointer; padding:0 .3rem; transition:background .1s,color .1s; flex:1; max-width:42px; }
  .wp-key.wide { flex:1.6; max-width:64px; font-size:.72rem; }
  .wp-key.correct { background:#22c55e; color:#fff; }
  .wp-key.present { background:#eab308; color:#fff; }
  .wp-key.absent  { background:var(--muted,#9ca3af); color:#fff; }
  /* Snake */
  #snake-canvas { border:2px solid var(--border); border-radius:12px; display:block; margin:0 auto; background:var(--bg); max-width:100%; }
  .snake-dpad-btn { width:52px; height:52px; border-radius:14px; border:1.5px solid var(--border); background:var(--card); font-size:1.1rem; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:background .1s; }
  .snake-dpad-btn:active { background:var(--primary); color:#fff; border-color:var(--primary); }
  /* Sudoku */
  .sudoku-board { border-collapse:collapse; margin:0 auto; }
  .sudoku-cell { width:min(52px,calc((100vw - 2.5rem)/6.2)); height:min(52px,calc((100vw - 2.5rem)/6.2)); text-align:center; vertical-align:middle; border:1px solid #bbb; cursor:pointer; background:var(--card); color:var(--primary); font-size:min(1.3rem,calc((100vw - 2.5rem)/6.2*.55)); font-weight:700; position:relative; user-select:none; -webkit-tap-highlight-color:transparent; box-sizing:border-box; }
  .sudoku-cell.given { color:var(--text); font-weight:800; }
  .sudoku-cell.selected { background:rgba(26,115,232,.22)!important; }
  .sudoku-cell.related { background:rgba(26,115,232,.07); }
  .sudoku-cell.same-num { background:rgba(26,115,232,.14); }
  .sudoku-cell.conflict { color:var(--danger)!important; background:rgba(239,68,68,.1)!important; }
  .sudoku-cell.done-cell { color:var(--success)!important; }
  .sudoku-cell.box-r { border-right:2.5px solid var(--text)!important; }
  .sudoku-cell.box-b { border-bottom:2.5px solid var(--text)!important; }
  .pencil-grid { display:grid; grid-template-columns:repeat(3,1fr); width:100%; height:100%; padding:1px; box-sizing:border-box; }
  .pencil-grid span { display:flex; align-items:center; justify-content:center; font-size:min(.55rem,calc((100vw - 2.5rem)/6.2*.3)); font-weight:600; color:var(--muted); line-height:1; }
  .sudoku-numpad { display:grid; grid-template-columns:repeat(7,1fr); gap:5px; max-width:340px; margin:.75rem auto 0; }
  .sudoku-numpad-btn { height:46px; border-radius:12px; border:1.5px solid var(--border); background:var(--card); font-size:1.15rem; font-weight:700; cursor:pointer; color:var(--text); transition:background .1s; }
  .sudoku-numpad-btn:active,.sudoku-numpad-btn.active { background:var(--primary); color:#fff; border-color:var(--primary); }
  .sudoku-numpad-btn.erase { font-size:.85rem; }
  .sudoku-diff-btn { padding:.25rem .6rem; border-radius:16px; border:1.5px solid var(--border); background:var(--card); font-size:.75rem; font-weight:700; color:var(--muted); cursor:pointer; transition:background .12s; }
  .sudoku-diff-btn.active { background:var(--primary); color:#fff; border-color:var(--primary); }
  /* Leaderboard */
  .lb-row { display:flex; align-items:center; gap:.65rem; padding:.65rem 0; border-bottom:1px solid var(--border); }
  .lb-row:last-child { border-bottom:none; }
  .lb-rank { width:26px; font-weight:800; font-size:.9rem; color:var(--muted); flex-shrink:0; text-align:center; }
  .lb-rank.gold   { color:#f59e0b; }
  .lb-rank.silver { color:#9ca3af; }
  .lb-rank.bronze { color:#cd7f32; }
  .lb-avatar { width:34px; height:34px; border-radius:50%; background:var(--primary); color:#fff; display:flex; align-items:center; justify-content:center; font-size:.85rem; font-weight:800; flex-shrink:0; }
  .lb-name  { flex:1; font-weight:600; font-size:.9rem; }
  .lb-score { font-weight:800; font-size:.9rem; color:var(--primary); }
  .lb-date  { font-size:.72rem; color:var(--muted); }
  .lb-window-btn { padding:.35rem .75rem; border:1.5px solid var(--border); background:var(--card); color:var(--muted); border-radius:20px; font-size:.78rem; font-weight:700; cursor:pointer; transition:all .12s; }
  .lb-window-btn.active { background:var(--primary); border-color:var(--primary); color:#fff; }
  /* ── Unified section header ──────────────────────────────────────────────── */
  .sec-header { display:flex;justify-content:space-between;align-items:center;margin-bottom:.6rem;gap:.5rem }
  .sec-header h2 { margin:0;font-size:1.1rem;font-weight:800;display:flex;align-items:center;gap:.4rem }
  .sec-header-actions { display:flex;gap:.4rem;align-items:center;flex-shrink:0 }
  /* ── Bring List ────────────────────────────────────────────── */
  /* ── Nominatim location autocomplete ──────────────────────────────── */
  #nominatim-dropdown .nom-item { display:flex;align-items:flex-start;gap:.55rem;padding:.6rem .75rem;cursor:pointer;border-bottom:1px solid var(--border);transition:background .1s }
  #nominatim-dropdown .nom-item:last-child { border-bottom:none }
  #nominatim-dropdown .nom-item:hover, #nominatim-dropdown .nom-item.nom-active { background:var(--primary-light,#eef2ff) }
  #nominatim-dropdown .nom-icon { font-size:.95rem;margin-top:.05rem;flex-shrink:0 }
  #nominatim-dropdown .nom-main { font-size:.84rem;font-weight:600;color:var(--text);line-height:1.3 }
  #nominatim-dropdown .nom-sub  { font-size:.74rem;color:var(--muted);margin-top:.1rem;line-height:1.3 }
  #nominatim-dropdown .nom-spin { text-align:center;padding:.75rem;font-size:.82rem;color:var(--muted) }
  /* ── Nearby Attractions sheet ───────────────────────────────────────── */
  #nearby-sheet-overlay { position:fixed;inset:0;z-index:9990;display:flex;flex-direction:column;justify-content:flex-end;background:rgba(0,0,0,.45) }
  #nearby-sheet { background:var(--card);border-radius:20px 20px 0 0;max-height:82vh;display:flex;flex-direction:column }
  .nearby-section-title { font-size:.7rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.07em;margin:.75rem 0 .35rem }
  .nearby-card { border:1.5px solid var(--border);border-radius:10px;padding:.6rem .75rem;margin-bottom:.4rem;display:flex;align-items:flex-start;gap:.65rem }
  .nearby-card-icon { font-size:1.2rem;flex-shrink:0;margin-top:.05rem }
  .nearby-card-name { font-size:.86rem;font-weight:700;color:var(--text) }
  .nearby-card-desc { font-size:.77rem;color:var(--muted);margin-top:.15rem;line-height:1.4 }
  .nearby-card-meta { display:flex;gap:.35rem;flex-wrap:wrap;margin-top:.3rem }
  .nearby-card-badge { font-size:.68rem;font-weight:600;padding:.1rem .45rem;border-radius:6px;background:var(--bg);border:1px solid var(--border);color:var(--muted) }
  .bring-table-wrap { border:1.5px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:.75rem }
  /* 8 columns: Owner | Category | Item | Qty | Unit | Comment | Status | Actions */
  .bring-table-header { display:grid;grid-template-columns:1.3fr 1.1fr 2fr .55fr .55fr 1fr 3.4rem;gap:0;background:var(--bg);padding:.4rem .65rem;font-size:.7rem;font-weight:800;letter-spacing:.05em;color:var(--muted);border-bottom:1px solid var(--border) }
  .bring-table-header span { overflow:hidden;white-space:nowrap;min-width:0 }
  .bring-item-row { display:grid;grid-template-columns:1.3fr 1.1fr 2fr .55fr .55fr 1fr 3.4rem;gap:0;padding:.5rem .65rem;border-bottom:1px solid var(--border);align-items:center;font-size:.86rem;transition:background .1s }
  .bring-item-row:last-child { border-bottom:none }
  .bring-item-row:hover { background:var(--bg) }
  .bring-item-row.bring-done { opacity:.6 }
  .bring-item-row.bring-done .bring-item-name { text-decoration:line-through;color:var(--muted) }
  .bring-item-cell { padding:0 .25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0 }
  .bring-item-name { font-weight:600;font-size:.88rem }
  .bring-owner-chip { display:inline-block;font-size:.8rem;font-weight:600;color:var(--text) }
  .bring-owner-cell { display:inline-flex;align-items:center;gap:.3rem;max-width:100%;overflow:hidden }
  .bring-owner-av { width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.68rem;font-weight:700;color:#fff;flex-shrink:0;text-transform:uppercase }
  .bring-cat-chip { display:inline-block;font-size:.7rem;font-weight:600;padding:.12rem .35rem;border-radius:5px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
  .bring-status-done { display:inline-flex;align-items:center;gap:.25rem;font-size:.72rem;font-weight:600;padding:.15rem .42rem;border-radius:6px;background:rgba(34,197,94,.12);color:#16a34a;white-space:nowrap }
  .bring-status-pending { display:inline-flex;align-items:center;gap:.25rem;font-size:.72rem;font-weight:600;padding:.15rem .42rem;border-radius:6px;background:rgba(249,115,22,.1);color:#d97706;white-space:nowrap }
  .bring-add-row { display:grid;grid-template-columns:1.3fr 1.1fr 2fr .55fr .55fr 1fr 3.4rem;gap:.25rem;padding:.5rem .6rem;background:var(--bg);border-top:1.5px dashed var(--border);align-items:center }
  .bring-add-row input, .bring-add-row select { font-size:.8rem;padding:.3rem .4rem;border:1px solid var(--border);border-radius:7px;background:var(--card);color:var(--text);width:100%;box-sizing:border-box }
  .bring-progress { height:5px;border-radius:99px;background:var(--border);overflow:hidden;margin:.4rem 0 .3rem }
  .bring-progress-fill { height:100%;border-radius:99px;background:var(--success,#16a34a);transition:width .4s }
  /* Action buttons: 4-column icon grid */
  .bring-actions-grid { display:grid;grid-template-columns:repeat(4,1fr);gap:.3rem;margin-top:.6rem }
  .bring-actions-grid button {
    display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:.2rem;padding:.4rem .1rem;font-size:.62rem;font-weight:600;
    border:1.5px solid var(--border);border-radius:9px;background:var(--card);
    cursor:pointer;color:var(--text);transition:background .1s;min-height:52px;line-height:1.2 }
  .bring-actions-grid button:active { background:var(--bg) }
  .bring-actions-grid button .bag-icon { display:flex;align-items:center;justify-content:center;font-size:1.05rem;line-height:1 }
  .bring-actions-grid button.bag-danger { border-color:var(--danger-light,#fca5a5);color:var(--danger,#dc2626) }
  .bring-actions-grid button.bag-danger:active { background:#fef2f2 }
  .status-badge { display:inline-flex;align-items:center;padding:.1rem .45rem;border-radius:99px;font-size:.68rem;font-weight:700;letter-spacing:.02em; }
  .status-badge-done { background:var(--success-bg,#dcfce7);color:var(--success-text,#166534); }
  .status-badge-pending { background:var(--warning-bg,#fef3c7);color:var(--warning-text,#92400e); }
  .status-badge-closed { background:var(--muted-bg,rgba(0,0,0,.06));color:var(--muted); }
  /* Pill toggle for New Bring List modal */
  .bring-start-toggle { display:flex;background:var(--bg);border-radius:10px;padding:.2rem;gap:.2rem;margin-bottom:.85rem }
  .bst-btn { flex:1;padding:.38rem .5rem;border:none;border-radius:8px;font-size:.84rem;font-weight:600;cursor:pointer;background:none;color:var(--muted);transition:all .15s;white-space:nowrap }
  .bst-btn.active { background:var(--card);color:var(--primary);box-shadow:0 1px 4px rgba(0,0,0,.12) }
  .bring-event-badge { display:inline-flex;align-items:center;gap:.35rem;font-size:.76rem;font-weight:600;color:var(--primary);background:var(--primary-light,#e0edff);border-radius:99px;padding:.2rem .6rem }
  button.bring-event-badge { cursor:pointer;border:none;text-align:left;transition:background .15s;-webkit-tap-highlight-color:transparent }
  button.bring-event-badge:hover { background:rgba(91,79,229,.22) }
  .ev-bl-chip { display:inline-flex;align-items:center;gap:.3rem;font-size:.76rem;font-weight:600;color:#b45309;background:rgba(253,224,71,.15);border:1px solid rgba(253,224,71,.4);border-radius:8px;padding:.25rem .55rem;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .12s;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
  .ev-bl-chip:hover { background:rgba(253,224,71,.28) }
  .ev-bl-chip-add { color:var(--primary);background:var(--primary-light,rgba(91,79,229,.08));border:1px dashed rgba(91,79,229,.35) }
  .ev-bl-chip-add:hover { background:rgba(91,79,229,.16) }
  /* ── Event entity strip (Sprint 3) ──────────────────────────────────────── */
  .ev-entity-strip { display:flex;flex-direction:column;gap:.35rem;margin-top:.45rem }
  .ev-entity-pills { display:flex;gap:.35rem;flex-wrap:wrap }
  .ev-entity-pill { display:inline-flex;align-items:center;gap:.3rem;font-size:.76rem;font-weight:600;border-radius:8px;padding:.25rem .55rem;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .12s;white-space:nowrap;border:1px solid transparent;background:none }
  .ev-entity-pill-supply { color:#b45309;background:rgba(253,224,71,.15);border-color:rgba(253,224,71,.4) }
  .ev-entity-pill-supply:hover { background:rgba(253,224,71,.28) }
  .ev-entity-pill-poll { color:#7c3aed;background:rgba(139,92,246,.1);border-color:rgba(139,92,246,.3) }
  .ev-entity-pill-poll:hover { background:rgba(139,92,246,.2) }
  .ev-entity-pill-task { color:#16a34a;background:rgba(34,197,94,.1);border-color:rgba(34,197,94,.3) }
  .ev-entity-pill-task:hover { background:rgba(34,197,94,.2) }
  .ev-entity-pill-attend { color:#0369a1;background:rgba(14,165,233,.1);border-color:rgba(14,165,233,.3) }
  .ev-entity-pill-attend:hover { background:rgba(14,165,233,.2) }
  .ev-entity-pill-add { color:var(--primary);background:var(--primary-light,rgba(91,79,229,.08));border:1px dashed rgba(91,79,229,.35) }
  .ev-entity-pill-add:hover { background:rgba(91,79,229,.16) }
  .ev-entity-actions { display:flex;gap:.35rem }
  .ev-entity-action-btn { flex:1;min-width:0;display:flex;align-items:center;justify-content:center;gap:.3rem;font-size:.77rem;font-weight:700;color:var(--primary);background:var(--primary-light,rgba(91,79,229,.08));border:1.5px solid rgba(91,79,229,.25);border-radius:10px;padding:.38rem .5rem;cursor:pointer;transition:background .12s;-webkit-tap-highlight-color:transparent }
  .ev-entity-action-btn:hover { background:rgba(91,79,229,.16) }
  @media(max-width:640px){
    /* Mobile: hide Category (col 2), Unit (col 5), Comment (col 6).
       7-col grid: Owner | Cat | Item | Qty | Unit | Comment | Actions(checkbox+edit)
       On mobile collapse to: Owner | (0) | Item | Qty | (0) | (0) | Actions */
    .bring-table-header { display:none !important }
    .bring-item-row {
      display:grid !important;
      grid-template-columns:auto 1fr auto !important;
      grid-template-rows:auto auto !important;
      column-gap:.45rem !important;
      row-gap:.28rem !important;
      padding:.6rem .65rem !important;
    }
    .bring-item-row > .bring-item-cell { padding:0 !important; white-space:normal; overflow:visible; text-overflow:clip; }
    .bring-item-row > .bring-item-cell:nth-child(1) { grid-column:1;grid-row:1;align-self:center }
    .bring-item-row > .bring-item-cell:nth-child(2) { grid-column:1;grid-row:2 }
    .bring-item-row > .bring-item-cell:nth-child(3) { grid-column:2;grid-row:1;font-weight:600;font-size:.9rem !important;align-self:center;min-width:0 }
    .bring-item-row > .bring-item-cell:nth-child(4) { grid-column:2;grid-row:2;font-size:.78rem !important;color:var(--muted) }
    .bring-item-row > .bring-item-cell:nth-child(5) { display:none !important }
    .bring-item-row > .bring-item-cell:nth-child(6) { display:none !important }
    .bring-item-row > .bring-item-cell:nth-child(7) { grid-column:3;grid-row:1;grid-row:1/3;align-self:center }
    .bring-add-row { display:none !important }
    .bring-actions-grid { grid-template-columns:repeat(4,1fr) }
    /* Boost readability on small screens */
    .bring-item-name { font-size:.9rem }
    .bring-table-header { font-size:.7rem }
  }
  .list-item { direction: ltr; text-align: left; }
  .list-item span { text-align: left; }

  /* ── Chat ───────────────────────────────────────────────────────────────── */
  /* Remove margin:0 auto so chat is left-aligned with the rest of the content */
  #section-chat { display: none; flex-direction: column;
    height: calc(100vh - 112px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
    height: calc(100dvh - 112px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
    padding: 0; width: 100%; overflow: hidden; }
  #section-chat.active { display: flex; flex-direction: column; }
  #chat-messages { flex: 1; overflow-y: auto; padding: .75rem 1rem; display: flex; flex-direction: column; gap: .5rem; scroll-behavior: smooth; direction: ltr; }
  .chat-bubble-wrap { display: flex; align-items: flex-end; gap: .5rem; max-width: 80%; }
  .chat-bubble-wrap.mine { align-self: flex-end; flex-direction: row-reverse; }
  .chat-bubble-wrap.theirs { align-self: flex-start; }
  .chat-avatar { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: .8rem; font-weight: 700; color: #fff; flex-shrink: 0; overflow: hidden; }
  .chat-bubble { padding: .65rem .9rem; border-radius: 18px; font-size: .95rem; line-height: 1.5; word-break: break-word; max-width: 100%; }
  .chat-bubble.mine { background: var(--primary); color: #fff; border-bottom-right-radius: 4px; }
  .chat-bubble.theirs { background: var(--surface-2, #f0f0f0); color: var(--text); border-bottom-left-radius: 4px; }
  .chat-bubble img { max-width: 220px; max-height: 220px; border-radius: 10px; cursor: pointer; display: block; margin-top: .2rem; }
  .chat-meta { font-size: .64rem; color: var(--muted); margin-top: .15rem; white-space: nowrap; }
  .chat-meta.mine { text-align: right; }
  .chat-bubble-wrap.mine .chat-meta { text-align: right; }
  #chat-typing { min-height: 22px; padding: .15rem 1rem; font-size: .78rem; color: var(--muted); font-style: italic; display: flex; align-items: center; gap: .4rem; }
  .typing-dots span { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--muted); animation: typingBounce 1.2s infinite; margin: 0 1px; }
  .typing-dots span:nth-child(2) { animation-delay: .2s; }
  .typing-dots span:nth-child(3) { animation-delay: .4s; }
  @keyframes typingBounce { 0%,60%,100% { transform: translateY(0); } 30% { transform: translateY(-5px); } }
  #chat-input-bar { display: flex; align-items: flex-end; gap: .5rem; padding: .7rem .85rem; padding-bottom: calc(.7rem + env(safe-area-inset-bottom)); border-top: 1px solid var(--border); background: var(--card,#fff); flex-shrink: 0; position: sticky; bottom: 0; z-index: 10; }
  #chat-input { flex: 1; border: 1.5px solid var(--border); border-radius: 24px; padding: .65rem 1.1rem; font-size: 16px; font-family: inherit; resize: none; max-height: 120px; overflow-y: auto; line-height: 1.5; background: var(--bg); color: var(--text); transition: border-color .15s, box-shadow .15s; }
  @media (min-width: 960px) { #chat-input { font-size: 1rem; } }
  #chat-input:focus { outline: 2px solid transparent; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(91,79,229,.15); }
  #chat-input:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
  .chat-icon-btn { width: 44px; height: 44px; border-radius: 50%; border: none; background: none; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; color: var(--muted); flex-shrink: 0; transition: color .15s, background .15s; padding: 0; }
  .chat-icon-btn:hover { color: var(--primary); background: var(--primary-light); }
  #chat-send-btn { width: 42px; height: 42px; border-radius: 50%; border: none; background: var(--primary); color: #fff; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; flex-shrink: 0; transition: background .15s, transform .1s; padding: 0; box-shadow: 0 2px 8px rgba(26,115,232,.35); }
  #chat-send-btn:hover { background: var(--primary-dark); }
  #chat-send-btn:active { transform: scale(.92); }
  #chat-send-btn:disabled { opacity: .45; box-shadow: none; }
  #chat-emoji-panel { position: absolute; bottom: calc(60px + env(safe-area-inset-bottom)); left: 0; right: 0; background: var(--card); border-top: 1px solid var(--border); padding: .5rem .75rem; z-index: 200; display: none; flex-wrap: wrap; gap: .2rem; box-shadow: 0 -4px 16px rgba(0,0,0,.08); }
  #chat-emoji-panel.open { display: flex; }
  /* ── Chat attach tray (+ button expands emoji / photo / location) ── */
  #chat-attach-tray { display:none; position:absolute; bottom:100%; left:0; right:0; background:var(--card,#fff); border-top:1px solid var(--border); box-shadow:0 -3px 14px rgba(0,0,0,.07); padding:.55rem .85rem; flex-direction:row; align-items:center; gap:.25rem; z-index:202; }
  #chat-attach-tray.open { display:flex; animation:traySlideUp .16s ease; }
  @keyframes traySlideUp { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
  .chat-tray-label { display:flex; flex-direction:column; align-items:center; gap:.2rem; flex:1; max-width:80px; }
  .chat-tray-label .tray-icon-btn { width:48px; height:48px; border-radius:14px; border:none; background:var(--bg); cursor:pointer; display:flex; align-items:center; justify-content:center; font-size:1.35rem; color:var(--muted); transition:background .15s, color .15s; }
  .chat-tray-label .tray-icon-btn:hover, .chat-tray-label .tray-icon-btn:active { background:var(--primary-light); color:var(--primary); }
  .chat-tray-label span.tray-icon-lbl { font-size:.65rem; font-weight:600; color:var(--muted); letter-spacing:.02em; }
  #chat-attach-toggle { transition:transform .2s, color .2s; }
  #chat-input-bar.tray-open #chat-attach-toggle { color:var(--primary); transform:rotate(45deg); }
  .emoji-btn { background: none; border: none; font-size: 1.4rem; cursor: pointer; padding: .2rem .15rem; border-radius: 6px; transition: background .1s; line-height: 1; min-width: 44px; min-height: 44px; }
  .emoji-btn:hover { background: var(--border); }
  .chat-date-divider { text-align: center; font-size: .7rem; color: var(--muted); margin: .25rem 0; }
  .chat-unread-badge { position: absolute; top: -6px; right: -8px; background: var(--danger); color: #fff; border-radius: 99px; font-size: .58rem; font-weight: 800; padding: .1rem .35rem; min-width: 16px; max-width: 32px; text-align: center; display: none; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; box-shadow: 0 1px 3px rgba(0,0,0,.3); }
  .beep-chip { display: inline-flex; align-items: center; gap: .4rem; padding: .5rem .85rem; border-radius: 99px; border: 1.5px solid var(--border); background: var(--card); color: var(--text); font-size: .87rem; font-weight: 600; cursor: pointer; transition: border-color .12s, background .12s, color .12s; white-space: nowrap; min-height: 40px; }
  .beep-chip:hover { border-color: var(--primary); background: var(--primary-light, #E8F0FE); }
  .beep-chip.selected { border-color: var(--primary); background: var(--primary); color: #fff; }
  .nav-tab-wrap { position: relative; display: inline-flex; }

  /* ── SOS overlay ────────────────────────────────────────────────────────── */
  #sos-overlay { display:none;position:fixed;inset:0;background:rgba(20,0,0,.96);z-index:9000;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;gap:1.25rem; }
  #sos-overlay.open { display:flex; }
  .sos-pulse { width:96px;height:96px;border-radius:50%;background:#ef4444;display:flex;align-items:center;justify-content:center;font-size:2.5rem;animation:sosPulse 1.1s ease-in-out infinite;border:4px solid rgba(255,100,100,.5); }
  @keyframes sosPulse { 0%,100%{transform:scale(1);box-shadow:0 0 0 0 rgba(239,68,68,.6)} 50%{transform:scale(1.08);box-shadow:0 0 0 20px rgba(239,68,68,0)} }
  #sos-overlay h2 { color:#fff;font-size:1.4rem;font-weight:800;text-align:center;margin:0 }
  #sos-status-text { color:rgba(255,255,255,.75);font-size:.9rem;text-align:center;min-height:1.4rem }
  .sos-type-grid { display:grid;grid-template-columns:1fr 1fr;gap:.75rem;width:100%;max-width:360px }
  .sos-type-btn { background:rgba(255,255,255,.08);border:2px solid rgba(255,255,255,.2);border-radius:16px;color:#fff;font-size:.95rem;font-weight:700;padding:1rem .75rem;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:.4rem;transition:background .15s,border-color .15s; }
  .sos-type-btn:hover { background:rgba(239,68,68,.35);border-color:var(--danger,#ef4444) }
  .sos-type-btn.selected { background:var(--danger,#ef4444);border-color:var(--danger,#ef4444) }
  .sos-type-icon { font-size:1.8rem;line-height:1 }
  .sos-dismiss { background:none;border:1.5px solid rgba(255,255,255,.3);border-radius:12px;color:rgba(255,255,255,.6);padding:.55rem 1.5rem;font-size:.85rem;cursor:pointer;margin-top:.25rem }
  .sos-dismiss:hover { border-color:rgba(255,255,255,.6);color:#fff }

  /* ── Time picker drum ────────────────────────────────────────────────────── */
  .tp-overlay { display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:2000;align-items:flex-end;justify-content:center;backdrop-filter:blur(4px) }
  .tp-overlay.open { display:flex }
  .tp-sheet { background:var(--card);border-radius:24px 24px 0 0;padding:0;width:100%;max-width:400px;padding-bottom:calc(1.25rem + env(safe-area-inset-bottom));animation:sheetUp .25s cubic-bezier(.32,1,.32,1) }
  .tp-header { display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem .5rem;border-bottom:1px solid var(--border) }
  .tp-header h4 { font-size:1rem;font-weight:700;color:var(--text);margin:0 }
  .tp-cols { display:flex;align-items:stretch;gap:0;padding:.5rem 0 }
  .tp-col { flex:1;display:flex;flex-direction:column;align-items:center;gap:0;position:relative;max-height:220px }
  .tp-col-label { font-size:.65rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;padding:.3rem 0 .2rem;text-align:center }
  .tp-scroll { overflow-y:scroll;scroll-snap-type:y mandatory;height:180px;-ms-overflow-style:none;scrollbar-width:none;width:100%;-webkit-overflow-scrolling:touch;position:relative }
  .tp-scroll::-webkit-scrollbar { display:none }
  .tp-pad { height:64px;flex-shrink:0;scroll-snap-align:none }
  .tp-item { height:52px;display:flex;align-items:center;justify-content:center;font-size:1.55rem;font-weight:700;color:var(--text);scroll-snap-align:center;opacity:.35;transition:opacity .1s;cursor:pointer;user-select:none;flex-shrink:0 }
  .tp-item.tp-selected { opacity:1 }
  .tp-highlight { position:absolute;top:50%;left:4px;right:4px;height:52px;transform:translateY(-50%);background:var(--primary-light,#E8F0FE);border-radius:12px;pointer-events:none;z-index:0 }
  .tp-scroll .tp-pad,.tp-scroll .tp-item { position:relative;z-index:1 }
  .tp-label { font-size:.62rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;padding:.3rem 0 .4rem;text-align:center }
  .tp-col-sep { width:1px;background:var(--border);align-self:stretch;margin:12px 0 }
  .tp-footer { display:flex;gap:.5rem;padding:.75rem 1.25rem 0;justify-content:flex-end }
  /* trigger button for time fields */
  .tp-trigger { display:flex;align-items:center;gap:.45rem;background:var(--bg);border:1.5px solid var(--border);border-radius:12px;padding:.6rem .9rem;cursor:pointer;font-size:.95rem;font-weight:600;color:var(--text);width:100%;text-align:left;transition:border-color .15s,background .15s;min-height:44px;-webkit-tap-highlight-color:rgba(99,102,241,.15) }
  .tp-trigger:hover { border-color:var(--primary) }
  .tp-trigger .tp-val { color:var(--primary) }
  [data-theme="dark"] .tp-trigger { background:#1e293b;border-color:#475569 }
  [data-theme="dark"] .tp-trigger:hover,[data-theme="dark"] .tp-trigger:focus { border-color:var(--primary);background:#263349 }

  /* ── Week key-events bar ─────────────────────────────────────────────────── */
  .week-key-bar { display:flex;flex-wrap:wrap;gap:.3rem;padding:.4rem .5rem .35rem;border-bottom:1px solid var(--border);margin-bottom:.25rem;min-height:28px }
  .week-key-chip { display:inline-flex;align-items:center;gap:.25rem;background:var(--primary-light,#E8F0FE);color:var(--primary);border-radius:99px;padding:.15rem .55rem;font-size:.7rem;font-weight:700;white-space:nowrap }
  .week-key-chip.birthday { background:var(--birthday-bg,#f3e8ff);color:var(--birthday-text,#9333ea) }
  .week-key-chip.sport { background:var(--sport-bg,#dcfce7);color:var(--sport-text,#16a34a) }
  .week-key-chip.sos { background:var(--sos-bg,#fee2e2);color:var(--sos-text,#dc2626) }

  /* ── Task filter pills ───────────────────────────────────────────────────── */
  .task-filter-bar { display:flex;gap:.4rem;margin-bottom:.75rem;flex-wrap:wrap }
  .tf-pill { padding:.4rem .95rem;border-radius:99px;border:1.5px solid var(--border);background:var(--card);cursor:pointer;font-size:.82rem;font-weight:700;color:var(--muted);transition:all .12s;min-height:40px }
  .tf-pill.active { background:var(--primary);color:#fff;border-color:var(--primary) }

  /* ── Chat reactions ─────────────────────────────────────────────────────── */
  .chat-reactions { display: flex; flex-wrap: wrap; gap: .2rem; margin-top: .25rem; }
  .reaction-chip { display: inline-flex; align-items: center; gap: .25rem; background: var(--bg); border: 1px solid var(--border); border-radius: 99px; padding: .15rem .55rem; font-size: .82rem; cursor: pointer; transition: background .12s, border-color .12s; user-select: none; min-height: 36px; }
  .reaction-chip:hover { background: var(--primary-light); border-color: var(--primary); }
  .reaction-chip.mine { background: var(--primary-light); border-color: var(--primary); font-weight: 700; }
  .reaction-chip .rc-count { font-size: .7rem; color: var(--muted); font-weight: 700; }
  .reaction-chip.mine .rc-count { color: var(--primary); }
  .chat-react-picker { position: absolute; background: var(--card); border: 1px solid var(--border); border-radius: 24px; padding: .35rem .5rem; display: flex; gap: .2rem; box-shadow: 0 4px 20px rgba(0,0,0,.15); z-index: 500; white-space: nowrap; }
  .chat-react-btn { background: none; border: none; font-size: 1.3rem; cursor: pointer; padding: .2rem .22rem; border-radius: 8px; transition: background .1s, transform .1s; line-height: 1; }
  .chat-react-btn:hover { background: var(--bg); transform: scale(1.25); }
  /* Circle avatar in header */
  .csw-avatar { width: 30px; height: 30px; border-radius: 50%; object-fit: cover; flex-shrink: 0; border: 1.5px solid rgba(255,255,255,.6); }
  /* ── List items ─────────────────────────────────────────────────────────── */
  .list-item { display: flex; align-items: center; gap: .7rem; padding: .75rem .6rem;
               border-bottom: 1px solid var(--border); min-height: 52px; }
  .list-item:last-child { border-bottom: none; }
  .checked { text-decoration: line-through; color: #9CA3AF; }
  /* Shopping list custom checkmark */
  .item-check-btn { width:22px;height:22px;border-radius:50%;border:1.5px solid #d1d5db;background:#fff;
    cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;
    transition:background .18s,border-color .18s,transform .12s;padding:0; }
  .item-check-btn:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
  .item-check-btn:active { transform:scale(.95); }
  .item-check-btn svg { width:12px; height:12px; stroke-width:3; }
  .item-check-btn.done { background:var(--success,#16a34a);border-color:var(--success,#16a34a); }
  /* Note: display:none must come BEFORE display:block so the .done override wins in cascade */
  .item-check-btn svg { display:none; }
  .item-check-btn.done svg { display:block; }
  .list-item.done { background:#f0fdf4;border-radius:10px;border-color:transparent !important; }
  .item-label { color:var(--text); } .list-item.done .item-label { text-decoration:line-through;color:#9ca3af; }

  /* ── Progress ───────────────────────────────────────────────────────────── */
  .progress-bar { height: 5px; background: var(--border); border-radius: 3px; overflow: hidden; }
  .progress-fill { height: 100%; background: var(--success); border-radius: 3px; transition: width .3s; }

  /* ── Modals ─────────────────────────────────────────────────────────────── */
  .modal-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.5);
                   z-index: 1000; align-items: flex-end; justify-content: center;
                   padding: 0; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
  .modal-overlay.open { display: flex; }
  .modal { background: var(--surface-1); border-radius: 20px 20px 0 0; padding: 1.5rem; padding-bottom: calc(1.5rem + env(safe-area-inset-bottom));
           width: 100%; max-width: 560px; max-height: 90dvh; overflow-y: auto;
           box-shadow: var(--elevation-3); backdrop-filter: blur(16px); border: 1px solid rgba(255,255,255,0.2);
           animation: sheetUp .25s var(--easing-spring); }
  @keyframes sheetUp { from { transform: translateY(40px); opacity: 0; } to { transform: none; opacity: 1; } }
  /* drag handle */
  .modal::before { content:''; display:block; width:36px;height:4px;background:#D1D5DB;
                   border-radius:4px;margin:-4px auto 1.1rem; }
  .modal h3 { margin-bottom: 1rem; font-size: 1.2rem; font-weight: 800; color: var(--text); }
  .modal-footer { display: flex; gap: .6rem; justify-content: flex-end; margin-top: 1.25rem; padding-top: .85rem; border-top: 1px solid var(--border); }
  @media (min-width: 600px) {
    .modal-overlay { align-items: center; padding: 1rem; }
    .modal { border-radius: 16px; max-width: 500px; padding-bottom: 1.5rem; }
    .modal::before { display: none; }
    @keyframes sheetUp { from { transform: translateY(16px); opacity: 0; } to { transform: none; opacity: 1; } }
  }
  .modal-close-btn { width:36px;height:36px;border-radius:50%;border:none;background:none;font-size:1.3rem;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,color .15s; }
  .modal-close-btn:hover { background:var(--border);color:var(--text); }

  /* ── Auth ───────────────────────────────────────────────────────────────── */
  #auth-screen { min-height: 100dvh; display: flex; flex-direction: column; align-items: center; justify-content: center;
                 background: linear-gradient(155deg, #1A73E8 0%, #6C47FF 55%, #9B27AF 100%);
                 padding: 2rem 1rem 2.5rem; gap: 1.5rem; position: relative; overflow: hidden; }
  /* Subtle radial glow in hero */
  #auth-screen::before { content: ''; position: absolute; top: -120px; left: 50%; transform: translateX(-50%);
    width: 600px; height: 600px; border-radius: 50%; background: radial-gradient(ellipse, rgba(255,255,255,.12) 0%, transparent 65%); pointer-events: none; }
  /* Hero - logo + name + tagline */
  .auth-hero { display: flex; flex-direction: column; align-items: center; gap: .65rem; position: relative; z-index: 1; }
  .auth-hero-logo { width: 88px; height: 88px; border-radius: 24px; background: rgba(255,255,255,.15);
    backdrop-filter: blur(12px); border: 2px solid rgba(255,255,255,.35);
    box-shadow: 0 8px 32px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.3);
    display: flex; align-items: center; justify-content: center; overflow: hidden; }
  .auth-hero-logo img { width: 60px; height: 60px; object-fit: contain; filter: brightness(0) invert(1); }
  .auth-app-name { font-size: 2rem; font-weight: 800; color: #fff; letter-spacing: -.025em; text-shadow: 0 2px 12px rgba(0,0,0,.25); }
  .auth-tagline { font-size: .88rem; color: rgba(255,255,255,.75); font-weight: 500; letter-spacing: .01em; }
  /* Card */
  .auth-card { background: #fff; border-radius: 22px; padding: 2rem 1.75rem 1.75rem; width: 100%; max-width: 390px;
               box-shadow: 0 24px 64px rgba(0,0,0,.3), 0 4px 16px rgba(0,0,0,.1); position: relative; z-index: 1; }
  .auth-card > h2 { display: none; } /* replaced by hero above */
  .auth-tab { display: flex; background: var(--bg); border-radius: 12px; padding: 4px; margin-bottom: 1.25rem; gap: 2px; }
  .auth-tab button { flex: 1; padding: .65rem .4rem; border: none; background: none; cursor: pointer;
                     font-weight: 700; color: var(--muted); border-radius: 10px; transition: all .2s; font-size: .82rem; min-height: 40px; }
  .auth-tab button.active { background: #fff; color: var(--primary); box-shadow: 0 1px 4px rgba(0,0,0,.1); }

  /* ── Toast ──────────────────────────────────────────────────────────────── */
  .toast-container { position: fixed; bottom: calc(1rem + env(safe-area-inset-bottom)); left: 50%;
                     transform: translateX(-50%); z-index: 9999; display: flex;
                     flex-direction: column; align-items: center; gap: .4rem; pointer-events: none; width: 92vw; max-width: 380px; }
  .toast { background: rgba(15, 23, 42, 0.95); color: #fff; padding: var(--space-3) var(--space-5); border-radius: var(--radius-md);
           box-shadow: var(--elevation-3); backdrop-filter: blur(16px); border: 1px solid rgba(255,255,255,0.2); animation: toastSlideUp var(--duration-normal) var(--easing-spring);
           width: 100%; display: flex; justify-content: space-between; align-items: center;
           gap: .75rem; pointer-events: all; font-size: .95rem; font-weight: 600; }
  .toast.success { background: #15803D; }
  .toast.error   { background: #B91C1C; }
  .toast.warn    { background: #B45309; }
  @keyframes toastSlideUp { from { opacity: 0; transform: translateX(-50%) translateY(20px); } to { opacity: 1; transform: translateX(-50%) translateY(0); } }
  /* Action toast — toast with Yes/No buttons */
  .toast-action { flex-direction: column; align-items: flex-start; gap: .5rem; }
  .toast-action-btns { display:flex; gap:.5rem; width:100% }
  .toast-action-btns button { flex:1; padding:.3rem .6rem; border-radius:8px; border:none; cursor:pointer; font-size:.82rem; font-weight:700; transition:opacity .12s }
  .toast-action-btns .tab-yes { background:#fff; color:#15803d }
  .toast-action-btns .tab-no  { background:rgba(255,255,255,.18); color:#fff }
  /* Post-event creation nudge sheet */
  #post-event-nudge { position:fixed; bottom:0; left:0; right:0; z-index:2200; background:var(--surface-0,#fff); border-top:1px solid var(--border); border-radius:20px 20px 0 0; padding:1.1rem 1rem calc(1.1rem + env(safe-area-inset-bottom)); box-shadow:0 -4px 24px rgba(0,0,0,.14); transform:translateY(100%); transition:transform .28s cubic-bezier(.32,1,.23,1); pointer-events:none }
  #post-event-nudge.open { transform:translateY(0); pointer-events:all }
  #prep-tasks-sheet { position:fixed; bottom:0; left:0; right:0; z-index:2200; background:var(--surface-0,#fff); border-top:1px solid var(--border); border-radius:20px 20px 0 0; padding:1.1rem 1rem calc(1.1rem + env(safe-area-inset-bottom)); box-shadow:0 -4px 24px rgba(0,0,0,.14); transform:translateY(100%); transition:transform .28s cubic-bezier(.32,1,.23,1); pointer-events:none }
  #prep-tasks-sheet.open { transform:translateY(0); pointer-events:all }
  /* Poll winner → Create event CTA */
  .poll-create-event-cta { display:flex; align-items:center; gap:.75rem; padding:.65rem .9rem; background:linear-gradient(135deg,rgba(22,163,74,.08),rgba(16,185,129,.06)); border:1.5px solid rgba(22,163,74,.3); border-radius:12px; margin-bottom:.5rem; cursor:pointer; transition:background .15s; text-align:left; width:100% }
  .poll-create-event-cta:hover { background:linear-gradient(135deg,rgba(22,163,74,.16),rgba(16,185,129,.12)) }

  /* ── Install banner ─────────────────────────────────────────────────────── */
  #install-banner { display: none; background: linear-gradient(135deg,var(--primary),var(--secondary));
                    color: #fff; padding: .75rem 1rem; font-size: .85rem; gap: .75rem;
                    align-items: center; justify-content: space-between; }
  #install-banner.visible { display: flex; }
  #install-banner .install-text { flex: 1; }
  #install-banner .install-text strong { display: block; font-size: .92rem; }
  #install-banner .install-text span { opacity: .85; font-size: .8rem; }

  /* ── Email verification banner ─────────────────────────────────────────── */
  /* Slim amber chip with dark text — passes WCAG AA (prev. white-on-#f59e0b ≈ 2.1:1). */
  #email-verify-banner { display: none; background: #FEF3C7; color: #92400E;
                         padding: .45rem 1rem; padding-top: calc(.45rem + env(safe-area-inset-top));
                         font-size: .82rem; font-weight: 600; text-align: center; gap: .6rem;
                         align-items: center; justify-content: center; flex-wrap: wrap;
                         border-bottom: 1px solid #FCD34D; }
  #email-verify-banner.visible { display: flex; }
  #email-verify-banner .evb-resend { background: #B45309; color: #fff; border: none;
                                      border-radius: 6px; padding: .25rem .7rem; font-size: .78rem;
                                      cursor: pointer; font-weight: 700; }
  #email-verify-banner .evb-resend:disabled { opacity: .6; cursor: default; }

  /* ── Push banner ────────────────────────────────────────────────────────── */
  #push-banner { display: none; background: var(--primary); color: #fff;
                 padding: .55rem 1rem; padding-top: calc(.55rem + env(safe-area-inset-top));
                 font-size: .85rem; text-align: center; gap: 1rem; align-items: center; justify-content: center; }
  #push-banner.visible { display: flex; }
  #offline-banner { display:none;position:sticky;top:calc(56px + env(safe-area-inset-top));left:0;right:0;
                    background:#dc2626;color:#fff;font-size:.82rem;font-weight:700;
                    padding:.5rem 1rem;z-index:495;gap:.5rem;align-items:center;justify-content:center;
                    text-align:center;box-shadow:0 2px 8px rgba(220,38,38,.4); }
  #offline-banner.visible { display:flex; }

  /* ── Map / Location ─────────────────────────────────────────────────────── */
  @keyframes livePulse { 0%,100%{opacity:1} 50%{opacity:.55} }
  #section-location { padding: 0; }
  .map-layout { display: flex; height: calc(100dvh - 107px); position: relative; }
  #leaflet-map { flex: 1; z-index: 1; }

  /* Desktop sidebar */
  .map-sidebar { width: 240px; min-width: 200px; overflow-y: auto; background: #fff;
                 border-right: 1px solid var(--border); padding: .85rem;
                 display: flex; flex-direction: column; gap: .75rem; z-index: 2; }

  /* Mobile: sidebar becomes a floating bottom sheet toggle */
  @media (max-width: 640px) {
    .map-layout { flex-direction: column; height: calc(100dvh - 107px); }
    #leaflet-map { flex: 1; height: 100%; }
    .map-sidebar { position: absolute; bottom: 0; left: 0; right: 0; width: 100%;
                   max-height: 42vh; border-right: none; border-top: 1px solid var(--border);
                   border-radius: 20px 20px 0 0; box-shadow: 0 -4px 24px rgba(0,0,0,.12);
                   padding-top: 1rem; transition: transform .3s cubic-bezier(.32,1,.32,1);
                   z-index: 10; overflow-y: auto; }
    .map-sidebar::before { content:''; display:block; width:36px;height:4px;background:var(--border);
                           border-radius:4px;margin:-.5rem auto .75rem; }
  }

  .member-location-card { border-radius: 12px; padding: .65rem .8rem; background: var(--bg);
                           cursor: pointer; transition: background .15s; min-height: 44px; }
  .member-location-card:hover { background: var(--primary-light); }
  .location-status { font-size: .75rem; color: var(--muted); margin-top: .15rem; }
  .geofence-item { font-size: .8rem; display: flex; justify-content: space-between;
                   align-items: center; padding: .35rem 0; border-bottom: 1px solid var(--border); }
  #add-geofence-mode { padding: .45rem .75rem; border-radius: 10px; border: 2px dashed var(--primary);
                       background: var(--primary-light); color: var(--primary); font-size: .8rem;
                       font-weight: 700; cursor: pointer; text-align: center; margin-top: .5rem; display: none; }

  /* ── Leaflet overrides ──────────────────────────────────────────────────── */
  .leaflet-div-icon { background: none !important; border: none !important; }
  .leaflet-control-layers { border-radius: 10px !important; box-shadow: 0 2px 10px rgba(0,0,0,.28) !important; border: none !important;
                             border: none !important; font-size: .8rem !important; }
  .leaflet-control-layers-toggle { width: 30px !important; height: 30px !important;
                                    background-size: 16px 16px !important; border-radius: 8px !important;
                                    background-color: rgba(255,255,255,.92) !important; }
  .leaflet-control-layers-expanded { padding: 6px 10px !important; background: rgba(255,255,255,.96) !important; }
  .leaflet-control-layers-expanded label { display: flex; align-items: center; gap: 5px; padding: 3px 0 !important;
                                            font-size: .78rem !important; color: #333 !important; cursor: pointer; }
  .leaflet-control-layers-expanded input[type=radio] { width: 13px; height: 13px; margin: 0 !important; cursor: pointer; }
  .leaflet-control-layers-separator { display: none !important; }
  .member-map-marker { width: 42px; height: 42px; border-radius: 50%; display: flex; align-items: center;
                       justify-content: center; color: #fff; font-weight: 800; font-size: .9rem;
                       border: 3px solid #fff; box-shadow: 0 3px 12px rgba(0,0,0,.3); position: relative; }
  .member-map-label { position: absolute; bottom: -20px; left: 50%; transform: translateX(-50%);
                      white-space: nowrap; font-size: .68rem; background: rgba(15,23,42,.8); color: #fff;
                      padding: 2px 6px; border-radius: 6px; font-weight: 700; }
  .geofence-popup { font-size: .875rem; }
  .leaflet-popup-content-wrapper { border-radius: 14px !important; box-shadow: 0 8px 24px rgba(0,0,0,.15) !important; }
  .leaflet-popup-tip-container { display: none; }

  /* ── Photos ─────────────────────────────────────────────────────────────── */
  .photo-grid { display: grid; grid-template-columns: repeat(auto-fill,minmax(140px,1fr)); gap: .75rem; }
  .photo-thumb { aspect-ratio: 1; border-radius: 14px; overflow: hidden; background: var(--border); position: relative; cursor: pointer; }
  .photo-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform .25s; }
  .photo-thumb:hover img { transform: scale(1.04); }
  .photo-caption { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(transparent,rgba(0,0,0,.7));
                   color: #fff; font-size: .72rem; padding: .5rem .5rem .35rem; }

  /* ── Empty states ───────────────────────────────────────────────────────── */
  .empty { text-align: center; padding: 3rem 1.25rem; color: var(--muted); }
  .empty h3 { margin-bottom: .5rem; font-size: 1.05rem; font-weight: 700; color: var(--text); }
  .empty-icon { font-size: 3rem; margin-bottom: .75rem; display: block; opacity: .75; }
  .empty p { font-size: .95rem; color: var(--muted); margin-bottom: 1.25rem; line-height: 1.6; max-width: 22rem; margin-left:auto; margin-right:auto; }
  .empty .btn { display: inline-flex; }
  /* #8 — standardized line-art empty-state badge */
  .empty-icon.v2-empty-badge { width: 64px; height: 64px; margin: 0 auto .9rem; border-radius: 18px;
    background: var(--v2-indigo-50); color: var(--v2-indigo); display: flex; align-items: center;
    justify-content: center; opacity: 1; font-size: 0; }
  .empty-icon.v2-empty-badge svg { width: 30px; height: 30px; }
  [data-theme="dark"] .empty-icon.v2-empty-badge { background: rgba(91,79,229,.2); color: #A89DF5; }

  /* ── Loading skeletons ──────────────────────────────────────────────────── */
  @keyframes shimmer {
    0%   { background-position: -1000px 0; }
    100% { background-position:  1000px 0; }
  }
  .skeleton { background: var(--surface-2);
              animation: shimmer 2s infinite;
              border-radius: var(--radius-md); }
  .skel-card { background: #fff; border-radius: var(--radius); padding: 1.1rem; margin-bottom: .75rem;
               box-shadow: var(--shadow); border: 1px solid var(--border); min-height: 100px; }
  .skel-line { height: 16px; margin-bottom: .6rem; }
  .skel-line.w90 { width: 90%; }
  .skel-line.w80 { width: 80%; }
  .skel-line.w70 { width: 70%; }
  .skel-line.w50 { width: 50%; }
  .skel-line.w40 { width: 40%; }
  .skel-avatar { width: 40px; height: 40px; border-radius: 50%; flex-shrink: 0; }

  /* ── Upgrade modal ──────────────────────────────────────────────────────── */
  #upgrade-modal .plan-card { border-radius: 12px; padding: 1.2rem; border: 2px solid var(--border); cursor: pointer; transition: border-color .15s, box-shadow .15s; }
  #upgrade-modal .plan-card:hover, #upgrade-modal .plan-card.selected { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(26,115,232,.12); }
  #upgrade-modal .plan-card.popular { border-color: var(--primary); }
  #upgrade-modal .plan-feature { display:flex;align-items:flex-start;gap:.4rem;font-size:.82rem;color:var(--text);margin-bottom:.3rem }
  #upgrade-modal .plan-feature .chk { color:var(--success);font-weight:700;flex-shrink:0 }
  .billing-interval-toggle { display:flex;background:var(--bg);border:1.5px solid var(--border);border-radius:10px;padding:2px;gap:2px;width:fit-content;margin:0 auto .75rem }
  .billing-int-btn { border:none;background:none;padding:.3rem .85rem;border-radius:8px;font-size:.8rem;font-weight:700;color:var(--muted);cursor:pointer;transition:all .15s }
  .billing-int-btn.active { background:var(--primary);color:#fff;box-shadow:0 1px 4px rgba(26,115,232,.3) }
  .upgrade-limit-modal { max-width:340px }

  /* ── Onboarding banner ──────────────────────────────────────────────────── */
  #cal-polls-strip .poll-nudge { display:flex;align-items:center;gap:.6rem;padding:.55rem .8rem;background:linear-gradient(135deg,#7c3aed,#4f46e5);border-radius:12px;color:#fff;font-size:.82rem;cursor:pointer;margin-bottom:.35rem;transition:opacity .15s; }
  #cal-polls-strip .poll-nudge:hover { opacity:.9; }
  #cal-polls-strip .poll-nudge-icon { font-size:1rem;flex-shrink:0 }
  #cal-polls-strip .poll-nudge-title { flex:1;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis }
  #cal-polls-strip .poll-nudge-voters { font-size:.75rem;opacity:.85;flex-shrink:0 }
  .poll-card { }
  .poll-option-btn { width:100%;padding:.7rem .9rem;border-radius:10px;border:1.5px solid var(--border);background:var(--card);color:var(--text);font-size:.9rem;font-weight:500;cursor:pointer;text-align:left;transition:border-color .15s,background .15s;margin-bottom:.4rem; }
  .poll-option-btn:hover { border-color:var(--primary);background:var(--primary-light,#eff6ff); }
  .poll-option-btn.voted { border-color:var(--primary);background:var(--primary-light,#eff6ff);font-weight:700; }
  .poll-result-bar-wrap { height:6px;border-radius:3px;background:var(--border);margin-top:.3rem;overflow:hidden; }
  .poll-result-bar-fill { height:100%;border-radius:3px;background:var(--primary);transition:width .4s ease; }
  #onboarding-banner { background: linear-gradient(135deg,var(--primary),#0D47A1); color:#fff; border-radius: var(--radius);
                       padding: 1rem 1.1rem; margin-bottom: 1rem; display:none; position:relative; }
  #onboarding-banner h3 { color:#fff; font-size:.95rem; margin-bottom:.35rem }
  #onboarding-banner p  { font-size:.82rem; opacity:.9; margin-bottom:.75rem }
  .ob-steps { display:flex; gap:.5rem; flex-wrap:wrap; margin-top:.3rem; }
  .ob-step { display:flex;align-items:center;gap:.5rem;background:rgba(255,255,255,.15);border-radius:10px;padding:.35rem .8rem;font-size:.8rem;font-weight:600;transition:background .15s }
  .ob-step::before { content:''; width:10px;height:10px;border-radius:50%;background:rgba(255,255,255,.4);flex-shrink:0 }
  .ob-step.done { opacity:.65 }
  .ob-step.done::before { background:#4ade80; content:'✓'; width:auto;height:auto;font-size:.7rem;color:#fff }
  .ob-progress { height:4px;background:rgba(255,255,255,.2);border-radius:2px;margin-top:.6rem;overflow:hidden }
  .ob-progress-fill { height:100%;background:#fff;border-radius:2px;transition:width .4s ease }

  /* ── Compact collapse/expand control (replaces full-width button pairs) ──── */
  .list-collapse-bar { display:flex; justify-content:flex-end; gap:.15rem; margin-bottom:.6rem; }
  .list-collapse-bar button { background:none; border:none; cursor:pointer; color:var(--muted);
    font-size:.76rem; font-weight:600; padding:.25rem .5rem; border-radius:8px;
    display:inline-flex; align-items:center; gap:.25rem; transition:background .12s,color .12s; }
  .list-collapse-bar button:hover { background:var(--bg-active); color:var(--text); }
  .ob-dismiss { position:absolute;top:.6rem;right:.75rem;background:none;border:none;color:rgba(255,255,255,.7);font-size:1.1rem;cursor:pointer;padding:.2rem .4rem;border-radius:6px }
  .ob-dismiss:hover { color:#fff;background:rgba(255,255,255,.15) }

  /* ── Product Tour ──────────────────────────────────────────────────────── */
  #tour-overlay { display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:9000;align-items:flex-end;justify-content:center;padding-bottom:env(safe-area-inset-bottom) }
  #tour-overlay.open { display:flex }
  #tour-card { background:var(--card);border-radius:20px 20px 0 0;width:100%;max-width:480px;padding:1.5rem 1.5rem 1.25rem;position:relative;box-shadow:0 -4px 24px rgba(0,0,0,.18) }
  .tour-icon { display:flex;align-items:center;justify-content:center;margin-bottom:.75rem }
  .tour-icon-circle { width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0 }
  .tour-title { font-size:1.05rem;font-weight:700;text-align:center;margin-bottom:.3rem;color:var(--text) }
  .tour-body { font-size:.88rem;color:var(--muted);text-align:center;line-height:1.5;margin-bottom:1.1rem }
  .tour-dots { display:flex;justify-content:center;gap:.4rem;margin-bottom:1rem }
  .tour-dot { width:8px;height:8px;border-radius:50%;background:var(--border);transition:background .2s }
  .tour-dot.active { background:var(--primary);width:20px;border-radius:4px }
  .tour-actions { display:flex;gap:.65rem }
  .tour-actions .btn { flex:1 }
  .tour-skip { position:absolute;top:1rem;right:1rem;background:none;border:none;color:var(--muted);font-size:.8rem;cursor:pointer;padding:.2rem .4rem }

  /* ── Inline help tooltip ───────────────────────────────────────────────── */
  .help-tip { display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--border);color:var(--muted);font-size:.65rem;font-weight:700;cursor:help;margin-left:.3rem;vertical-align:middle;flex-shrink:0;user-select:none }
  .help-tip:hover { background:var(--primary);color:#fff }
  [data-tip] { position:relative }
  [data-tip]:hover::after { content:attr(data-tip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:#1e293b;color:#fff;font-size:.74rem;line-height:1.4;padding:.4rem .65rem;border-radius:8px;white-space:normal;max-width:240px;width:max-content;z-index:200;pointer-events:none;box-shadow:0 4px 12px rgba(0,0,0,.2) }
  [data-tip]:hover::before { content:'';position:absolute;bottom:calc(100% + 1px);left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:#1e293b;z-index:200;pointer-events:none }

  /* ── AI Assistant ───────────────────────────────────────────────────────── */
  #ai-fab { position:fixed;bottom:calc(68px + env(safe-area-inset-bottom));right:16px;height:46px;border-radius:24px;background:linear-gradient(135deg,var(--v2-ai-1) 0%,var(--v2-ai-2) 100%);border:none;cursor:pointer;display:none;align-items:center;justify-content:center;gap:.4rem;box-shadow:0 4px 20px rgba(91,79,229,.45);z-index:850;color:#fff;transition:transform .2s,box-shadow .2s;padding:0 16px 0 14px }
  #ai-fab.ai-fab-visible { display:flex }
  #ai-fab .ai-fab-label { font-size:.9rem;font-weight:800;letter-spacing:.02em;line-height:1 }
  #ai-fab:hover { transform:scale(1.08);box-shadow:0 6px 28px rgba(139,92,246,.55) }
  #ai-fab:active { transform:scale(.94) }
  @keyframes ai-ring { 0%,100%{opacity:1;transform:scale(1)} 60%{opacity:.2;transform:scale(1.45)} }
  #ai-fab .ai-ring { position:absolute;inset:-5px;border-radius:50%;border:2px solid rgba(91,79,229,.4);animation:ai-ring 2.8s ease-in-out infinite;pointer-events:none }
  #ai-sheet-scrim { display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:870;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px) }
  #ai-sheet { position:fixed;bottom:0;left:0;right:0;background:var(--card);border-radius:20px 20px 0 0;box-shadow:0 -6px 32px rgba(0,0,0,.2);z-index:875;display:flex;flex-direction:column;transform:translateY(100%);transition:transform .32s cubic-bezier(.32,1,.46,1);max-height:78dvh;max-width:600px;margin:0 auto }
  #ai-sheet.open { transform:translateY(0) }
  .ai-sheet-handle { width:36px;height:4px;border-radius:2px;background:var(--border);margin:.6rem auto .2rem;flex-shrink:0 }
  .ai-sheet-hdr { display:flex;align-items:center;justify-content:space-between;padding:.4rem 1rem .5rem;flex-shrink:0;border-bottom:1px solid var(--border) }
  .ai-hdr-left { display:flex;align-items:center;gap:.5rem }
  .ai-hdr-title { font-weight:800;font-size:.95rem;background:linear-gradient(135deg,var(--v2-ai-1),var(--v2-ai-2));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text }
  .ai-hdr-sub { font-size:.7rem;color:var(--muted);margin-top:.05rem }
  #ai-quota-badge { font-size:.7rem;font-weight:700;padding:.18rem .55rem;border-radius:20px;background:var(--primary-light,#E8F0FE);color:var(--primary) }
  #ai-quota-badge.warn { background:#fef3c7;color:#92400e }
  #ai-quota-badge.empty { background:#fee2e2;color:#991b1b }
  .ai-sheet-hdr button { background:none;border:none;color:var(--muted);font-size:1.2rem;cursor:pointer;padding:.2rem .4rem;border-radius:8px;line-height:1;transition:background .15s }
  .ai-sheet-hdr button:hover { background:var(--bg) }
  .ai-chips-wrap { position:relative;flex-shrink:0 }
  .ai-chips-wrap::after { content:'';position:absolute;right:0;top:0;bottom:0;width:36px;background:linear-gradient(to right,transparent,var(--card));pointer-events:none;transition:opacity .2s;border-radius:0 }
  .ai-chips-wrap.at-end::after { opacity:0 }
  .ai-chips-row { display:flex;gap:.4rem;padding:.6rem 1rem .4rem;overflow-x:auto;flex-shrink:0;-ms-overflow-style:none;scrollbar-width:none }
  .ai-chips-row::-webkit-scrollbar { display:none }
  .ai-chip { flex-shrink:0;padding:.32rem .75rem;border-radius:20px;border:1.5px solid var(--border);background:var(--bg);font-size:.78rem;font-weight:600;color:var(--text);cursor:pointer;white-space:nowrap;transition:all .15s }
  .ai-chip:hover { border-color:var(--primary);color:var(--primary);background:var(--primary-light,#E8F0FE) }
  #ai-messages { flex:1;overflow-y:auto;padding:.5rem 1rem;display:flex;flex-direction:column;gap:.6rem;scroll-behavior:smooth }
  .ai-msg { max-width:88%;display:flex;flex-direction:column;gap:.15rem }
  .ai-msg.user { align-self:flex-end;align-items:flex-end }
  .ai-msg.bot  { align-self:flex-start;align-items:flex-start }
  .ai-bubble { padding:.6rem .85rem;border-radius:16px;font-size:.875rem;line-height:1.55;word-break:break-word }
  .ai-msg.user .ai-bubble { background:linear-gradient(135deg,var(--v2-ai-1),var(--v2-ai-2));color:#fff;border-bottom-right-radius:4px }
  .ai-msg.bot  .ai-bubble { background:var(--bg);color:var(--text);border-bottom-left-radius:4px;border:1px solid var(--border) }
  .ai-ts { font-size:.65rem;color:var(--muted);padding:0 .25rem }
  .ai-typing { display:flex;align-items:center;gap:.35rem;padding:.6rem .85rem;background:var(--bg);border-radius:16px;border-bottom-left-radius:4px;border:1px solid var(--border) }
  .ai-dot { width:7px;height:7px;border-radius:50%;background:var(--muted);animation:ai-bounce .9s infinite }
  .ai-dot:nth-child(2) { animation-delay:.15s }
  .ai-dot:nth-child(3) { animation-delay:.3s }
  @keyframes ai-bounce { 0%,80%,100%{transform:translateY(0)} 40%{transform:translateY(-6px)} }
  /* Confirm card */
  .ai-confirm-card { border:2px solid var(--primary);border-radius:14px;padding:.85rem 1rem;background:var(--primary-light,#E8F0FE);width:100%;max-width:340px }
  .ai-confirm-title { font-weight:700;font-size:.85rem;color:var(--primary);margin-bottom:.6rem;display:flex;align-items:center;gap:.4rem }
  .ai-confirm-field { margin-bottom:.45rem }
  .ai-confirm-field label { font-size:.7rem;font-weight:600;color:var(--muted);display:block;margin-bottom:.15rem;text-transform:uppercase;letter-spacing:.04em }
  .ai-confirm-field input,.ai-confirm-field select,.ai-confirm-field textarea { width:100%;border:1.5px solid var(--border);border-radius:8px;padding:.38rem .6rem;font-size:.82rem;background:var(--card);color:var(--text);outline:none;transition:border-color .15s }
  .ai-confirm-field input:focus,.ai-confirm-field select:focus { border-color:var(--primary) }
  .ai-confirm-actions { display:flex;gap:.5rem;margin-top:.7rem }
  .ai-confirm-actions .btn { flex:1;font-size:.8rem;padding:.45rem .6rem }
  .ai-confirm-actions .btn-outline { border:1.5px solid var(--border) }
  /* Input row */
  #ai-input-row { display:flex;gap:.5rem;padding:.6rem 1rem calc(.6rem + env(safe-area-inset-bottom));flex-shrink:0;border-top:1px solid var(--border) }
  #ai-input { flex:1;border:1.5px solid var(--border);border-radius:12px;padding:.5rem .75rem;font-size:.875rem;font-family:inherit;resize:none;outline:none;line-height:1.4;max-height:100px;overflow-y:auto;transition:border-color .15s;background:var(--bg);color:var(--text) }
  #ai-input:focus { border-color:var(--primary) }
  #ai-send-btn { flex-shrink:0;width:38px;height:38px;border-radius:50%;background:var(--primary);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;transition:background .15s,transform .1s;align-self:flex-end }
  #ai-send-btn:hover { background:var(--v2-indigo-dark) }
  #ai-send-btn:active { transform:scale(.92) }
  #ai-send-btn:disabled { background:var(--border);cursor:not-allowed }
  /* Upsell */
  #ai-upsell { padding:1rem;flex-shrink:0;border-top:1px solid var(--border);display:none }
  .ai-upsell-inner { background:linear-gradient(135deg,#EEF2FF,#E8F0FE);border-radius:14px;padding:1rem;text-align:center }
  .ai-upsell-inner h4 { font-size:.9rem;font-weight:700;margin-bottom:.3rem;color:var(--text) }
  .ai-upsell-inner p { font-size:.78rem;color:var(--muted);margin-bottom:.75rem }
  .ai-upsell-inner .btn { font-size:.82rem;padding:.5rem 1.25rem }

  /* ── Simple Mode ────────────────────────────────────────────────────────── */
  html.simple-mode body { font-size: 18px; }
  html.simple-mode .btn { padding: .6rem 1.2rem; font-size: .95rem; min-height: 52px; }
  html.simple-mode .btn-sm { padding: .45rem .9rem; font-size: .88rem; min-height: 44px; }
  html.simple-mode input, html.simple-mode select, html.simple-mode textarea { font-size: 1rem; padding: .85rem 1.1rem; }
  html.simple-mode .card { padding: 1.5rem; }
  html.simple-mode .bnav-icon { width: 28px; height: 28px; }
  html.simple-mode .bnav-icon svg { width: 28px !important; height: 28px !important; }
  html.simple-mode .bnav-label { font-size: .72rem; }
  html.simple-mode .bnav-btn { min-height: 68px; }
  html.simple-mode .chat-bubble { font-size: 1rem; padding: .7rem 1rem; }
  html.simple-mode .chat-avatar { width: 38px; height: 38px; font-size: .85rem; }
  html.simple-mode .item-check-btn { width: 28px; height: 28px; }
  html.simple-mode .member-dot { width: 52px; height: 52px; font-size: 1.1rem; }
  html.simple-mode .modal-box { padding: 1.5rem; }
  html.simple-mode .form-group label { font-size: .8rem; }
  html.simple-mode h3 { font-size: 1.1rem; }
  html.simple-mode .empty h3 { font-size: 1.1rem; }
  html.simple-mode .muted, html.simple-mode [style*="color:var(--muted)"] { color: #555 !important; }
  /* High-contrast muted text in simple mode */
  html.simple-mode { --muted: #555; }

  /* ── Shopping list table ─────────────────────────────────────────────────── */
  /* 6 cols: checkbox | item-name | qty | unit | note | delete */
  .shop-table-header { display:grid;grid-template-columns:2rem 1fr 3rem 3.2rem 1fr 1.6rem;gap:0;padding:.32rem .55rem .32rem .45rem;font-size:.68rem;font-weight:800;letter-spacing:.06em;color:var(--muted);border-bottom:1px solid var(--border);background:var(--bg) }
  .shop-item-row { display:grid;grid-template-columns:1.6rem 1fr 3rem 3.2rem 1fr 1.6rem;gap:0;padding:.38rem .55rem .38rem .45rem;border-bottom:1px solid var(--border);align-items:center;transition:background .1s }
  .shop-item-row:last-child { border-bottom:none }
  .shop-item-row:hover { background:var(--bg) }
  .shop-item-row.done .shop-item-name { text-decoration:line-through;color:var(--muted) }
  .shop-item-name { font-size:.88rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 .35rem }
  .shop-item-qty { font-size:.82rem;font-weight:600;text-align:center;color:var(--text) }
  .shop-item-unit { font-size:.78rem;color:var(--muted);text-align:center }
  .shop-item-note { font-size:.78rem;font-style:italic;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 .25rem }
  .shop-item-del { background:none;border:none;cursor:pointer;color:var(--muted);font-size:1rem;line-height:1;padding:0;opacity:.4;transition:opacity .15s;text-align:center }
  .shop-item-del:hover { opacity:1;color:var(--danger) }
  /* ── Shopping categories ─────────────────────────────────────────────────── */
  .shop-cat-section { }
  .shop-cat-header { display:flex;align-items:center;gap:.45rem;padding:.38rem .55rem .28rem;border-bottom:1px solid var(--border);background:var(--bg) }
  .shop-cat-icon-box { width:22px;height:22px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:.82rem;flex-shrink:0 }
  .shop-cat-label { font-size:.68rem;font-weight:800;letter-spacing:.06em;color:var(--text);flex:1;text-transform:uppercase }
  .shop-cat-count-badge { font-size:.65rem;color:var(--muted) }
  .shop-ai-section-header { display:flex;align-items:center;gap:.45rem;padding:.42rem .55rem .32rem;border-bottom:1px solid rgba(91,79,229,.18);background:rgba(91,79,229,.04) }
  .shop-ai-chip-inline { font-size:.58rem;font-weight:700;padding:.05rem .22rem;border-radius:4px;background:linear-gradient(135deg,#7B70F0 0%,#5B4FE5 100%);color:#fff;margin-left:.22rem;vertical-align:middle }
  .shop-regen-btn { font-size:.72rem;font-weight:700;padding:.22rem .65rem;border-radius:99px;border:1.5px solid rgba(91,79,229,.3);background:none;color:#5B4FE5;cursor:pointer;display:inline-flex;align-items:center;gap:.25rem;transition:background .12s;white-space:nowrap }
  .shop-regen-btn:hover { background:rgba(91,79,229,.09) }
  .shop-ai-regen-wrap { display:flex;justify-content:flex-end;padding:.35rem .55rem;border-top:1px solid rgba(91,79,229,.1);background:rgba(91,79,229,.02) }
  .shop-cat-icon { font-size:.9rem }

  /* ── Misc ───────────────────────────────────────────────────────────────── */
  h2 { font-size: 1.3rem; font-weight: 800; margin-bottom: 1rem; color: var(--text); }
  h3 { font-size: 1.05rem; font-weight: 700; margin-bottom: .75rem; color: var(--text); }
  @media (max-width: 480px) { .main { padding: .75rem; } h2 { font-size: 1.15rem; } }

  /* ── Dark Mode ──────────────────────────────────────────────────────────── */
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
      --surface-0: #0F172A;
      --surface-1: rgba(30, 41, 59, 0.8);
      --surface-2: rgba(30, 41, 59, 0.6);
      --surface-3: rgba(30, 41, 59, 0.95);
      --text-primary: #F1F5F9;
      --text-secondary: #CBD5E1;
      --text-muted: #94A3B8;
      --toggle-off: #475569;
      --text-disabled: #475569;
      --border: #334155;
      --border-dark: #475569;
      --bg-hover: rgba(99, 102, 241, 0.15);
      --bg-active: rgba(99, 102, 241, 0.25);
      --success-light: rgba(16, 185, 129, 0.2);
      --warning-light: rgba(245, 158, 11, 0.2);
      --danger-light: rgba(239, 68, 68, 0.2);
      --info-light: rgba(59, 130, 246, 0.2);
      --elevation-1: 0 1px 2px rgba(0, 0, 0, 0.3), 0 1px 3px rgba(0, 0, 0, 0.2);
      --elevation-2: 0 4px 6px rgba(0, 0, 0, 0.3), 0 10px 16px rgba(0, 0, 0, 0.25);
      --elevation-3: 0 10px 15px rgba(0, 0, 0, 0.4), 0 20px 25px rgba(0, 0, 0, 0.35);
      --bg: var(--surface-0);
      --card: var(--surface-1);
      --text: var(--text-primary);
      --muted: var(--text-muted);
      --primary-light: rgba(99, 102, 241, 0.2);
      --birthday-bg: #4a2060;
      --birthday-text: #d8b4fe;
      --sport-bg: #14532d;
      --sport-text: #86efac;
      --sos-bg: #7f1d1d;
      --sos-text: #fca5a5;
      --warning-bg: #4a3d2a;
      --warning-border: #d97706;
      --warning-text: #fef3c7;
      --info-bg: #0c2340;
      --info-border: #60a5fa;
      --info-text: #93c5fd;
      /* v2 "ink" text scale — must invert to light or titles render dark-navy on dark surface */
      --v2-ink: #F1F5F9;
      --v2-ink-2: #CBD5E1;
      --v2-ink-3: #94A3B8;
      --v2-ink-4: #64748B;
    }
  }
  [data-theme="dark"] {
    --surface-0: #0F172A;
    --surface-1: rgba(30, 41, 59, 0.8);
    --surface-2: rgba(30, 41, 59, 0.6);
    --surface-3: rgba(30, 41, 59, 0.95);
    --text-primary: #F1F5F9;
    --text-secondary: #CBD5E1;
    --text-muted: #94A3B8;
    --toggle-off: #475569;
    --text-disabled: #475569;
    --border: #334155;
    --border-dark: #475569;
    --bg-hover: rgba(99, 102, 241, 0.15);
    --bg-active: rgba(99, 102, 241, 0.25);
    --success-light: rgba(16, 185, 129, 0.2);
    --warning-light: rgba(245, 158, 11, 0.2);
    --danger-light: rgba(239, 68, 68, 0.2);
    --info-light: rgba(59, 130, 246, 0.2);
    --elevation-1: 0 1px 2px rgba(0, 0, 0, 0.3), 0 1px 3px rgba(0, 0, 0, 0.2);
    --elevation-2: 0 4px 6px rgba(0, 0, 0, 0.3), 0 10px 16px rgba(0, 0, 0, 0.25);
    --elevation-3: 0 10px 15px rgba(0, 0, 0, 0.4), 0 20px 25px rgba(0, 0, 0, 0.35);
    --bg: var(--surface-0);
    --card: var(--surface-1);
    --text: var(--text-primary);
    --muted: var(--text-muted);
    --primary-light: rgba(99, 102, 241, 0.2);
    --primary-lighter: rgba(99, 102, 241, 0.25); /* focus ring glow - must be visible on dark bg */
    --birthday-bg: #4a2060;
    --birthday-text: #d8b4fe;
    --sport-bg: #14532d;
    --sport-text: #86efac;
    --sos-bg: #7f1d1d;
    --sos-text: #fca5a5;
    --warning-bg: #4a3d2a;
    --warning-border: #d97706;
    --warning-text: #fef3c7;
    --info-bg: #0c2340;
    --info-border: #60a5fa;
    --info-text: #93c5fd;
    --danger-bg: #450a0a;
    --danger-border: #7f1d1d;
    --danger-text: #fca5a5;
    --success-bg: #052e16;
    --success-border: #14532d;
    --success-text: #86efac;
    /* v2 "ink" text scale — must invert to light or titles render dark-navy on dark surface */
    --v2-ink: #F1F5F9;
    --v2-ink-2: #CBD5E1;
    --v2-ink-3: #94A3B8;
    --v2-ink-4: #64748B;
  }
  /* Toast uses `background: var(--v2-ink) !important` (v2-brand.css) with white text.
     Now that --v2-ink is light in dark mode, repin the toast bg so it stays dark. */
  [data-theme="dark"] .toast { background: #1e293b !important; }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .toast { background: #1e293b !important; }
  }
  /* Cream "band" control surfaces (--v2-band-1 / --v2-surface) stay light in
     dark mode. With ink text now light, the calendar view-switcher, the month/
     date nav bar, and a hovered top-nav tab became light-text-on-light-surface
     (invisible). Darken just those surfaces so the light text reads. The
     `[data-theme="dark"] X` / `:root:not([data-theme="light"]) X` selectors
     out-specify the plain `.X !important` base rules in v2-brand.css. */
  [data-theme="dark"] .v2-cal-tab-row,
  [data-theme="dark"] .cal-view-toggle,
  [data-theme="dark"] .v2-month-nav {
    background: rgba(255, 255, 255, 0.06) !important;
    border-color: rgba(255, 255, 255, 0.12) !important;
  }
  [data-theme="dark"] .nav-tab:hover {
    background: rgba(255, 255, 255, 0.08) !important;
    color: var(--v2-ink) !important;
  }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .v2-cal-tab-row,
    :root:not([data-theme="light"]) .cal-view-toggle,
    :root:not([data-theme="light"]) .v2-month-nav {
      background: rgba(255, 255, 255, 0.06) !important;
      border-color: rgba(255, 255, 255, 0.12) !important;
    }
    :root:not([data-theme="light"]) .nav-tab:hover {
      background: rgba(255, 255, 255, 0.08) !important;
      color: var(--v2-ink) !important;
    }
  }
  /* ── Settings panel dark mode clarity fixes ──────────────────────────── */
  [data-theme="dark"] #account-prefs-panel { background: var(--bg) !important; }
  [data-theme="dark"] #account-prefs-panel .card {
    background: #1e293b !important;
    border-color: #334155 !important;
  }
  [data-theme="dark"] #account-prefs-panel [style*="color:var(--muted)"],
  [data-theme="dark"] #account-prefs-panel [style*="color: var(--muted)"] {
    color: var(--text-secondary) !important;
  }
  [data-theme="dark"] #account-prefs-panel [style*="border-top:1px solid var(--border)"],
  [data-theme="dark"] #account-prefs-panel [style*="border-top: 1px solid var(--border)"] {
    border-top-color: #334155 !important;
  }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) #account-prefs-panel { background: var(--bg) !important; }
    :root:not([data-theme="light"]) #account-prefs-panel .card {
      background: #1e293b !important;
      border-color: #334155 !important;
    }
    :root:not([data-theme="light"]) #account-prefs-panel [style*="color:var(--muted)"],
    :root:not([data-theme="light"]) #account-prefs-panel [style*="color: var(--muted)"] {
      color: var(--text-secondary) !important;
    }
  }
  /* ─────────────────────────────────────────────────────────────────────── */
  [data-theme="dark"] .nav-tabs,
  [data-theme="dark"] .bottom-nav { background: var(--card); }
  [data-theme="dark"] .modal-overlay { background: rgba(0,0,0,.7); }
  [data-theme="dark"] input, [data-theme="dark"] select, [data-theme="dark"] textarea {
    background: #0f172a; color: var(--text); border-color: var(--border); }
  [data-theme="dark"] .chat-bubble.mine { background: #1d4ed8; }
  [data-theme="dark"] .chat-bubble { background: #1e293b; }
  [data-theme="dark"] .btn-outline { border-color: var(--border); color: var(--text); }
  [data-theme="dark"] .tp-overlay { background: rgba(0,0,0,.8); }
  [data-theme="dark"] .tp-picker { background: var(--card); }
  [data-theme="dark"] .csw-dropdown { background: var(--card); border-color: var(--border); }
  [data-theme="dark"] .more-menu { background: var(--card); }
  [data-theme="dark"] .circle-card.active { background: #1e3a5f; }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .nav-tabs,
    :root:not([data-theme="light"]) .bottom-nav { background: var(--card); }
    :root:not([data-theme="light"]) .modal-overlay { background: rgba(0,0,0,.7); }
    :root:not([data-theme="light"]) input, :root:not([data-theme="light"]) select,
    :root:not([data-theme="light"]) textarea {
      background: #0f172a; color: var(--text); border-color: var(--border); }
    :root:not([data-theme="light"]) .chat-bubble.mine { background: #1d4ed8; }
    :root:not([data-theme="light"]) .chat-bubble { background: #1e293b; }
    :root:not([data-theme="light"]) .btn-outline { border-color: var(--border); color: var(--text); }
    :root:not([data-theme="light"]) .csw-dropdown { background: var(--card); border-color: var(--border); }
    :root:not([data-theme="light"]) .more-menu { background: var(--card); }
    :root:not([data-theme="light"]) .circle-card.active { background: #1e3a5f; }
    :root:not([data-theme="light"]) { --primary-lighter: rgba(99, 102, 241, 0.25); }
  }
  /* ── Skip-to-main-content link ─────────────────────────────────────────── */
  .skip-link { position:absolute;top:-40px;left:0;background:var(--primary,#5B4FE5);color:#fff;padding:.5rem 1rem;text-decoration:none;font-weight:700;z-index:9999;border-radius:0 0 8px 0;transition:top .2s; }
  .skip-link:focus { top:0; }
                                                                                                                                                                                       
  /* ═══════════════════════════════════════════════════════════════════════
     ╔═╗╦╦═╗╔═╗╦  ╔═╗╔═╗  ╦  ╦╔═╗  ╔╦╗╔═╗╔═╗╦╔═╗╔╗╔  ╔═╗╦ ╦╔═╗╔╦╗╔═╗╔╦╗
     ║  ║╠╦╝║  ║  ║╣ ║ ║  ╚╗╔╝╔═╝   ║║║╣ ╚═╗║║ ╦║║║  ╚═╗╚╦╝╚═╗ ║ ║╣ ║║║
     ╚═╝╩╩╚═╚═╝╩═╝╚═╝╚═╝   ╚╝ ╚═╝  ═╩╝╚═╝╚═╝╩╚═╝╝╚╝  ╚═╝ ╩ ╚═╝ ╩ ╚═╝╩ ╩
     Phase 1 — Pure CSS overrides. Zero logic changes. Safe to revert:
       git diff HEAD~1 -- apps/web/dist/index.html | grep "^-.*V2 DESIGN SYSTEM" -A 9999
       OR: git reset --hard v2026.05.19b
  ═══════════════════════════════════════════════════════════════════════ */

  /* ── Body / global surface ─────────────────────────────────────────────── */
  body { background: var(--v2-surface); color: var(--v2-ink); }

  /* ── Header logo (official brand mark + wordmark) ──────────────────────── */
  .header-logo {
    display: flex; align-items: center; gap: 9px;
    text-decoration: none; flex-shrink: 0; cursor: pointer;
  }
  .header-logo-mark {
    width: 36px; height: 36px; display: flex; align-items: center; flex-shrink: 0;
  }
  .header-logo-mark svg { width: 36px; height: 36px; display: block; }
  .header-logo-text {
    font-family: var(--v2-font-display); font-size: 15px; font-weight: 700;
    color: var(--v2-ink); letter-spacing: -0.01em; line-height: 1;
  }
  .header-logo-us { color: var(--v2-indigo); }
  @media (max-width: 600px) { .header-logo-text { display: none; } }

  /* ── App header — brand indigo (works on light + dark mode) ────────────── */
  header {
    background: var(--v2-indigo, #5B4FE5) !important;
    backdrop-filter: none !important;
    border-bottom: none !important;
    box-shadow: 0 1px 0 rgba(0,0,0,.15), 0 2px 8px rgba(91,79,229,.18) !important;
    color: #fff !important;
    padding-left: 12px !important;
    padding-right: 12px !important;
    gap: 6px !important;
  }
  header h1 { color: #fff; }
  /* Logo mark — white SVG on indigo */
  .header-logo-text { color: #fff !important; }
  .header-logo-us   { color: rgba(255,255,255,.75) !important; }
  /* Circle switcher button */
  #circle-switcher-btn {
    background: rgba(255,255,255,.16) !important;
    color: #fff !important;
    border: 1px solid rgba(255,255,255,.22) !important;
    border-radius: 20px !important;
    min-width: 0 !important; max-width: 220px !important;
    flex: 1 !important; padding: .3rem .85rem .3rem .65rem !important;
    font-size: .83rem !important;
  }
  #circle-switcher-btn:hover { background: rgba(255,255,255,.26) !important; }
  /* Header icon buttons */
  header .btn-icon {
    background: rgba(255,255,255,.14) !important;
    color: #fff !important;
    border: 1px solid rgba(255,255,255,.18) !important;
    min-width: 36px !important; min-height: 36px !important;
    width: 36px !important; height: 36px !important;
    padding: 0 !important; border-radius: 10px !important;
  }
  header .btn-icon:hover  { background: rgba(255,255,255,.24) !important; }
  header .btn-icon:active { background: rgba(255,255,255,.32) !important; }
  /* SOS button special treatment on indigo header */
  #sos-trigger-btn {
    background: rgba(255,255,255,.9) !important;
    color: var(--v2-coral-ink, #B14A33) !important;
    border: none !important;
    font-size: .68rem !important; font-weight: 800 !important;
    min-width: 38px !important; width: 38px !important;
    height: 38px !important; border-radius: 50% !important;
    box-shadow: 0 0 0 2px rgba(255,255,255,.4) !important;
    letter-spacing: .04em !important;
  }
  #sos-trigger-btn:hover { background: #fff !important; }
  /* Push header action buttons to the right side */
  header .header-actions { margin-left: auto; gap: 5px !important; }
  /* Always show settings/help/signout on desktop */
  @media (min-width: 641px) {
    .desktop-header-btn { display: flex !important; align-items: center; justify-content: center; }
  }
  /* Logo SVG: tint white on indigo bg */
  .header-logo-mark svg path[stroke="#5B4FE5"] { stroke: rgba(255,255,255,.92) !important; }
  .header-logo-mark svg g[fill="#5B4FE5"] { fill: rgba(255,255,255,.92) !important; }
  [data-theme="dark"] header { box-shadow: 0 1px 0 rgba(0,0,0,.3) !important; }

  /* ── Desktop nav tabs — pill active state (replaces underline) ─────────── */
  .nav-tabs {
    background: #fff !important;
    border-bottom: 1px solid var(--v2-line) !important;
    gap: 4px;
    padding: 6px 8px;
  }
  .nav-tab {
    border-bottom: none !important;
    border-radius: 10px !important;
    padding: 9px 18px !important;
    font-size: .82rem !important;
    font-weight: 500 !important;
    color: var(--v2-ink-2) !important;
    transition: background .12s, color .12s !important;
    min-width: 70px;
    text-align: center;
  }
  .nav-tab:hover { background: var(--v2-surface) !important; color: var(--v2-ink) !important; }
  .nav-tab.active {
    background: var(--v2-indigo-50) !important;
    color: var(--v2-indigo) !important;
    font-weight: 600 !important;
    border-bottom: none !important;
  }
  .nav-tab.active::after { display: none !important; }

  /* ── Mobile bottom nav — icon pill active state ────────────────────────── */
  .bnav-btn { color: var(--v2-ink-3) !important; gap: 3px; }
  .bnav-btn.active { color: var(--v2-indigo) !important; }
  .bnav-btn.active::before { display: none !important; }
  /* Icon pill — wraps .bnav-icon in an indigo-50 rounded square */
  .bnav-btn.active .bnav-icon {
    background: var(--v2-indigo-50);
    border-radius: 8px;
    width: 32px; height: 32px;
    display: inline-flex; align-items: center; justify-content: center;
  }
  .bnav-label { font-size: .68rem !important; font-weight: 500 !important; }
  /* Bottom nav background — white with warm border */
  .bottom-nav {
    background: #fff !important;
    border-top: 1px solid var(--v2-line) !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
  }

  /* ── Buttons ───────────────────────────────────────────────────────────── */
  .btn {
    border-radius: 10px !important;
    font-weight: 500 !important;
    border: 1px solid var(--v2-line) !important;
    background: #fff !important;
    color: var(--v2-ink) !important;
    transition: border-color .12s, background .12s, transform .1s !important;
  }
  .btn:hover { border-color: var(--v2-border-dark, #D6CFBF) !important; transform: none !important; }
  .btn:active { transform: scale(0.97) !important; }

  .btn-primary {
    background: var(--v2-indigo) !important;
    border-color: var(--v2-indigo) !important;
    color: #fff !important;
    font-weight: 600 !important;
    box-shadow: 0 2px 8px rgba(91,79,229,.22) !important;
  }
  .btn-primary:hover {
    background: var(--v2-indigo-dark) !important;
    border-color: var(--v2-indigo-dark) !important;
    box-shadow: 0 3px 12px rgba(74,63,209,.28) !important;
  }
  .btn-primary:active { background: var(--v2-indigo-dark) !important; box-shadow: none !important; }

  .btn-outline, .btn-ghost {
    background: #fff !important;
    color: var(--v2-ink) !important;
    border: 1px solid var(--v2-line) !important;
  }
  .btn-outline:hover, .btn-ghost:hover { border-color: var(--v2-border-dark, #D6CFBF) !important; }

  /* Danger ghost — for destructive secondary actions */
  .btn-danger {
    background: #fff !important;
    color: var(--v2-danger) !important;
    border: 1px solid #F2D7CF !important;
  }
  .btn-danger:hover { background: var(--v2-danger-bg) !important; }

  /* ── Cards / panels ────────────────────────────────────────────────────── */
  .card, [class*="-card"], .panel, .modal {
    border-radius: 16px !important;
    border: 1px solid var(--v2-line) !important;
    box-shadow: 0 1px 0 rgba(20,20,30,.02) !important;
  }
  /* Modals keep a bit more shadow since they float above content */
  .modal { box-shadow: 0 8px 32px rgba(20,20,30,.14) !important; border-radius: 20px !important; }

  /* ── Filter / tag pills ────────────────────────────────────────────────── */
  .pill, .filter-pill, [class*="filter"] button, .tag {
    border-radius: 99px !important;
    border: 1px solid var(--v2-line) !important;
    background: #fff !important;
    color: var(--v2-ink-2) !important;
    font-weight: 500 !important;
    transition: background .12s, border-color .12s !important;
  }
  .pill:hover, .filter-pill:hover { border-color: var(--v2-border-dark, #D6CFBF) !important; color: var(--v2-ink) !important; }
  .pill.active, .filter-pill.active, [class*="filter"] button.active {
    background: var(--v2-indigo) !important;
    border-color: var(--v2-indigo) !important;
    color: #fff !important;
    font-weight: 600 !important;
  }

  /* ── Form inputs ───────────────────────────────────────────────────────── */
  input[type="text"], input[type="email"], input[type="password"],
  input[type="number"], input[type="date"], input[type="time"],
  input[type="datetime-local"], textarea, select {
    border: 1px solid var(--v2-line) !important;
    border-radius: 10px !important;
    background: #FAF8F3 !important;
    color: var(--v2-ink) !important;
  }
  input:focus, textarea:focus, select:focus {
    border-color: var(--v2-indigo) !important;
    box-shadow: 0 0 0 3px rgba(91,79,229,.12) !important;
    outline: none !important;
  }
  input::placeholder, textarea::placeholder { color: var(--v2-ink-3) !important; }

  /* ── Section / page headings — Plus Jakarta Sans ───────────────────────── */
  h1, h2, h3, .modal-title, .section-title, .page-title,
  [class*="section-head"] h2, [class*="section-head"] h3 {
    font-family: var(--v2-font-display) !important;
    letter-spacing: -0.01em;
  }

  /* ── Section title scale (#11) — consistent page-title hierarchy ───────────
     Normalizes the per-section <h2> page titles to one size/weight without
     touching their inline icon layout. Sub-view headers that set an explicit
     inline font-size (games, modals) keep their own size. */
  .section > h2,
  .section > div > h2,
  .section > .section-head h2 {
    font-size: 1.2rem;
    font-weight: 800;
    line-height: 1.3;
    letter-spacing: -0.02em;
    color: var(--v2-ink);
  }
  /* Reusable heading utilities for future markup */
  .v2-h1 { font-family: var(--v2-font-display); font-size: 1.5rem; font-weight: 800; line-height: 1.25; letter-spacing: -0.02em; color: var(--v2-ink); }
  .v2-h2 { font-family: var(--v2-font-display); font-size: 1.2rem; font-weight: 800; line-height: 1.3;  letter-spacing: -0.02em; color: var(--v2-ink); }
  .v2-h3 { font-family: var(--v2-font-display); font-size: 1rem;   font-weight: 700; line-height: 1.35; letter-spacing: -0.01em; color: var(--v2-ink); }

  /* ── Status / priority chips ───────────────────────────────────────────── */
  /* Overdue / high-priority — coral */
  .chip-high, .priority-high, [class*="priority"][class*="high"],
  .overdue-badge, .badge-overdue {
    background: var(--v2-coral-bg) !important;
    color: var(--v2-coral-ink) !important;
    border-radius: 99px; padding: 3px 10px; font-size: 11.5px; font-weight: 600;
    display: inline-flex; align-items: center;
  }
  /* Medium / warning — amber */
  .chip-medium, .priority-medium, [class*="priority"][class*="medium"],
  .chip-warn, .badge-warning {
    background: var(--v2-amber-bg) !important;
    color: var(--v2-amber-ink) !important;
    border-radius: 99px; padding: 3px 10px; font-size: 11.5px; font-weight: 600;
    display: inline-flex; align-items: center;
  }
  /* Low / success — sage */
  .chip-low, .priority-low, [class*="priority"][class*="low"] {
    background: var(--v2-sage-bg) !important;
    color: var(--v2-sage-ink) !important;
    border-radius: 99px; padding: 3px 10px; font-size: 11.5px; font-weight: 600;
    display: inline-flex; align-items: center;
  }
  /* Success state chips */
  .badge-success, .chip-success, .status-done, .status-complete {
    background: var(--v2-success-bg) !important;
    color: var(--v2-success-ink) !important;
    border-radius: 99px; padding: 3px 10px; font-size: 11.5px; font-weight: 600;
  }

  /* ── Poll winner option — green gradient celebration ───────────────────── */
  .poll-option.winner, .poll-opt.winner, [class*="poll-opt"].winner,
  .poll-choice.winner {
    background: linear-gradient(135deg,#EAF5EC 0%,#CFE6D4 50%,#B5D8BC 100%) !important;
    border: 1.5px solid var(--v2-success) !important;
    box-shadow: 0 1px 0 rgba(63,168,92,.06), 0 4px 14px rgba(63,168,92,.08) !important;
  }
  /* Poll progress bar — winner vs non-winner */
  .poll-option.winner .progress-bar > span,
  .poll-opt.winner .poll-bar > span {
    background: linear-gradient(90deg, #3FA85C 0%, #5DC472 100%) !important;
  }

  /* ── Entity strip pills (Sprint 3 — event hub) ─────────────────────────── */
  .ev-entity-pill-supply  { color: #b45309; background: rgba(253,224,71,.15); border-color: rgba(253,224,71,.4); }
  .ev-entity-pill-poll    { color: #7c3aed; background: rgba(139,92,246,.1);  border-color: rgba(139,92,246,.3); }
  .ev-entity-pill-task    { color: #16a34a; background: rgba(34,197,94,.1);   border-color: rgba(34,197,94,.3);  }
  .ev-entity-pill-attend  { color: #0369a1; background: rgba(14,165,233,.1);  border-color: rgba(14,165,233,.3); }
  .ev-entity-pill-attend-done { color: #15803d; background: rgba(34,197,94,.12); border-color: rgba(34,197,94,.35); }

  /* ── Bring list progress bar ────────────────────────────────────────────── */
  .bring-progress > span, .bring-progress-fill {
    background: linear-gradient(90deg, var(--v2-indigo), #7B70F0) !important;
  }

  /* ── Toast improvements — warm bg + left-border status hint ────────────── */
  .toast {
    background: var(--v2-ink) !important;
    border-radius: 12px !important;
    font-family: inherit;
  }
  .toast.toast-success { border-left: 3px solid var(--v2-success) !important; }
  .toast.toast-error   { border-left: 3px solid var(--v2-coral)   !important; }
  .toast.toast-info    { border-left: 3px solid var(--v2-indigo)  !important; }

  /* ── Scrollbar — warm tinted ────────────────────────────────────────────── */
  ::-webkit-scrollbar { width: 6px; height: 6px; }
  ::-webkit-scrollbar-track { background: var(--v2-line-2); }
  ::-webkit-scrollbar-thumb { background: var(--v2-line); border-radius: 99px; }
  ::-webkit-scrollbar-thumb:hover { background: #C8C2B4; }

  /* ── Dark-mode guard — keep v2 tokens readable ──────────────────────────── */
  [data-theme="dark"] body { background: #1a1825; }
  /* dark mode: keep the indigo header — it looks great and keeps all buttons visible */
  [data-theme="dark"] header {
    background: var(--v2-indigo, #5B4FE5) !important;
    box-shadow: 0 1px 0 rgba(0,0,0,.3), 0 2px 8px rgba(0,0,0,.22) !important;
  }
  [data-theme="dark"] .nav-tabs { background: #1e1b2e !important; border-bottom-color: rgba(255,255,255,.08) !important; }
  [data-theme="dark"] .nav-tab.active { background: rgba(91,79,229,.25) !important; }
  [data-theme="dark"] .bottom-nav { background: #1e1b2e !important; border-top-color: rgba(255,255,255,.08) !important; }
  [data-theme="dark"] .bnav-btn.active .bnav-icon { background: rgba(91,79,229,.25); }
  [data-theme="dark"] .btn { background: rgba(255,255,255,.07) !important; border-color: rgba(255,255,255,.12) !important; color: #e8e4f0 !important; }
  [data-theme="dark"] .btn-primary { background: var(--v2-indigo) !important; color: #fff !important; }
  [data-theme="dark"] input, [data-theme="dark"] textarea, [data-theme="dark"] select {
    background: rgba(255,255,255,.07) !important;
    border-color: rgba(255,255,255,.12) !important;
    color: #e8e4f0 !important;
  }
  /* v06.09d: the global .card/[class*="-card"] rule (line ~179) paints a 1px
     var(--v2-line) cream border on EVERY "-card" element — including game-card
     child nodes (name/meta/badge) — drawing bright boxes in dark mode. Repaint to
     a subtle light-on-dark border. */
  [data-theme="dark"] .card,
  [data-theme="dark"] [class*="-card"],
  [data-theme="dark"] .panel,
  [data-theme="dark"] .modal { border-color: rgba(255,255,255,.10) !important; }
  /* game-card inner nodes have no surface of their own — the broad [class*="-card"]
     rule was drawing a box around each label. Drop their border; the .game-card
     container above keeps its subtle one. */
  [data-theme="dark"] .game-card-name,
  [data-theme="dark"] .game-card-meta,
  [data-theme="dark"] .game-card-body,
  [data-theme="dark"] .game-card-icon,
  [data-theme="dark"] .game-card-arrow { border-color: transparent !important; }
  /* v06.09d: the global pill/filter rule (line ~188) hardcodes background:#fff,
     so .tf-pill task filters render white-on-white in dark mode. */
  [data-theme="dark"] .pill,
  [data-theme="dark"] .filter-pill,
  [data-theme="dark"] [class*="filter"] button,
  [data-theme="dark"] .tag {
    background: rgba(255,255,255,.06) !important;
    border-color: rgba(255,255,255,.12) !important;
    color: var(--v2-ink-2) !important;
  }
  [data-theme="dark"] .pill.active,
  [data-theme="dark"] .filter-pill.active,
  [data-theme="dark"] [class*="filter"] button.active {
    background: var(--v2-indigo) !important;
    border-color: var(--v2-indigo) !important;
    color: #fff !important;
  }
  /* v06.09d: Lists hub sub-tab track (.lists-subtabs) uses a light lavender
     fallback (#f1f0fb) with no dark token, leaving Groceries/Bring/Tasks faint. */
  [data-theme="dark"] .lists-subtabs { background: rgba(255,255,255,.06) !important; }

  /* ─────────────────────────────────────────────────────────────────────────
     PHASE 3 — Calendar header, day-modal cards, event detail slide-in panel
  ───────────────────────────────────────────────────────────────────────── */

  /* ── Calendar view toggle — v2 pill style ─────────────────────────────── */
  .cal-view-toggle {
    background: var(--v2-band-1) !important;
    border: 1.5px solid var(--v2-line) !important;
    border-radius: 10px !important;
    padding: 2px !important;
    gap: 0 !important;
  }
  .cal-view-btn {
    border-radius: 7px !important;
    font-size: .78rem !important;
    font-weight: 500 !important;
    color: var(--v2-ink-2) !important;
    transition: background .12s, color .12s, box-shadow .12s !important;
  }
  .cal-view-btn.active {
    background: var(--v2-indigo) !important;
    color: #fff !important;
    box-shadow: 0 1px 4px rgba(91,79,229,.32) !important;
    font-weight: 600 !important;
  }

  /* ── Calendar filter bar — v2 indigo pill ──────────────────────────────── */
  #cal-filter-bar > div > button {
    font-size: .79rem !important;
    font-weight: 500 !important;
    transition: background .12s, color .12s !important;
    border-radius: 0 !important;
  }
  #cal-filter-all[style*="background:var(--primary)"],
  #cal-filter-mine[style*="background:var(--primary)"] {
    background: var(--v2-indigo) !important;
    color: #fff !important;
  }

  /* ── Day modal event cards — v2 clickable treatment ───────────────────── */
  #day-modal-events .card {
    border-left: 3px solid var(--v2-indigo) !important;
    transition: box-shadow .15s, transform .1s !important;
  }
  #day-modal-events .card:hover {
    box-shadow: 0 4px 18px rgba(91,79,229,.1) !important;
    transform: translateY(-1px) !important;
  }
  #day-modal-events .card:active { transform: scale(.99) !important; }
  .v2-event-title-link {
    cursor: pointer;
    color: var(--v2-ink);
    transition: color .12s;
  }
  .v2-event-title-link:hover { color: var(--v2-indigo) !important; }

  /* ── V2 Event Detail Panel ─────────────────────────────────────────────── */
  .v2-panel-backdrop {
    position: fixed; inset: 0; z-index: 1250;
    background: rgba(10,10,20,.48);
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
    opacity: 0; pointer-events: none;
    transition: opacity .25s ease;
    -webkit-tap-highlight-color: transparent;
  }
  .v2-panel-backdrop.open { opacity: 1; pointer-events: all; }

  .v2-event-panel {
    position: fixed; z-index: 1251;
    background: var(--v2-surface);
    display: flex; flex-direction: column;
    /* Mobile — bottom sheet */
    bottom: 0; left: 0; right: 0;
    border-radius: 24px 24px 0 0;
    max-height: 88dvh;
    transform: translateY(100vh);
    /* visibility hidden AFTER the slide-out completes (.32s delay) so it
       fully disappears even if the browser leaks stacking/clipping */
    visibility: hidden;
    transition: transform .32s cubic-bezier(.32,.72,0,1),
                visibility 0s linear .32s;
    box-shadow: 0 -4px 40px rgba(10,10,20,.14);
    overflow: hidden;
    pointer-events: none;
  }
  .v2-event-panel.open {
    transform: translateY(0);
    /* become visible immediately when opening */
    visibility: visible;
    transition: transform .32s cubic-bezier(.32,.72,0,1),
                visibility 0s linear 0s;
    pointer-events: auto;
  }

  /* Desktop — right rail */
  @media (min-width: 900px) {
    .v2-event-panel {
      top: 0; bottom: 0; right: 0; left: auto;
      width: 420px;
      border-radius: 0;
      max-height: 100dvh;
      transform: translateX(100vw);
      border-left: 1px solid var(--v2-line);
      box-shadow: -4px 0 40px rgba(10,10,20,.1);
    }
    .v2-event-panel.open { transform: translateX(0); }
  }

  .v2-panel-drag-handle {
    width: 36px; height: 4px; border-radius: 99px;
    background: var(--v2-line);
    margin: 10px auto 0;
    flex-shrink: 0;
  }
  @media (min-width: 900px) { .v2-panel-drag-handle { display: none; } }

  .v2-panel-header {
    padding: .75rem 1rem .6rem;
    border-bottom: 1px solid var(--v2-line);
    flex-shrink: 0;
  }
  .v2-panel-header-row {
    display: flex; align-items: flex-start; gap: .6rem;
  }
  .v2-panel-category-dot {
    width: 11px; height: 11px; border-radius: 50%;
    flex-shrink: 0; margin-top: 5px;
  }
  .v2-panel-title {
    font-family: var(--v2-font-display);
    font-size: 1.1rem; font-weight: 700; line-height: 1.3;
    color: var(--v2-ink); flex: 1;
  }
  .v2-panel-close {
    background: var(--v2-line-2); border: none; cursor: pointer;
    width: 28px; height: 28px; border-radius: 50%;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: .82rem; color: var(--v2-ink-2);
    flex-shrink: 0; transition: background .12s;
    -webkit-tap-highlight-color: transparent;
  }
  .v2-panel-close:hover { background: var(--v2-line); }

  .v2-panel-meta {
    margin-top: .45rem;
    display: flex; flex-wrap: wrap; gap: .3rem .65rem;
    font-size: .78rem; color: var(--v2-ink-2);
  }
  .v2-panel-meta-item { display: inline-flex; align-items: center; gap: .25rem; }

  .v2-panel-body {
    flex: 1; overflow-y: auto; padding: .875rem 1rem;
    display: flex; flex-direction: column; gap: .875rem;
    -webkit-overflow-scrolling: touch;
  }
  .v2-panel-section { display: flex; flex-direction: column; gap: .35rem; }
  .v2-panel-section-label {
    font-size: .67rem; font-weight: 700; text-transform: uppercase;
    letter-spacing: .07em; color: var(--v2-ink-3);
  }

  .v2-panel-actions {
    display: flex; gap: .45rem; flex-wrap: wrap;
    padding: .75rem 1rem;
    border-top: 1px solid var(--v2-line);
    background: var(--v2-surface);
    flex-shrink: 0;
  }
  .v2-panel-action-btn {
    flex: 1; min-width: 90px;
    padding: .55rem .7rem;
    border-radius: 10px;
    border: 1.5px solid var(--v2-line);
    background: #fff;
    color: var(--v2-ink);
    font-size: .82rem; font-weight: 600;
    cursor: pointer;
    display: inline-flex; align-items: center; justify-content: center; gap: .35rem;
    transition: background .12s, border-color .12s;
    -webkit-tap-highlight-color: transparent;
  }
  .v2-panel-action-btn:hover { background: var(--v2-band-1); border-color: #D6CFBF; }
  .v2-panel-action-btn:active { transform: scale(.97); }
  .v2-panel-action-btn.v2-pa-primary {
    background: var(--v2-indigo); border-color: var(--v2-indigo); color: #fff;
  }
  .v2-panel-action-btn.v2-pa-primary:hover { background: var(--v2-indigo-dark); border-color: var(--v2-indigo-dark); }
  .v2-panel-action-btn.v2-pa-danger { color: var(--v2-danger); border-color: #F2D7CF; }
  .v2-panel-action-btn.v2-pa-danger:hover { background: var(--v2-danger-bg); }

  /* ── Hero gradient header ─────────────────────────────────────────────── */
  .v2-panel-header {
    background: linear-gradient(170deg, var(--v2-band-1) 0%, #fff 100%);
    border-bottom: 1px solid var(--v2-line);
    flex-shrink: 0;
    padding: .85rem 1rem .65rem;
  }
  /* JS sets --v2-ev-color on the panel; tint blends event colour into header */
  #v2-event-panel { --v2-ev-color: #5B4FE5; }
  #v2-event-panel .v2-panel-header {
    background: linear-gradient(160deg,
      color-mix(in srgb, var(--v2-ev-color) 12%, var(--v2-band-1)) 0%,
      var(--v2-surface) 100%
    );
  }
  /* Fallback for browsers without color-mix: graceful warm gradient */
  @supports not (background: color-mix(in srgb, red 10%, white)) {
    #v2-event-panel .v2-panel-header {
      background: linear-gradient(160deg, var(--v2-band-1) 0%, #fff 100%);
    }
  }

  /* ── Tab bar ───────────────────────────────────────────────────────────── */
  .v2-panel-tab-bar {
    display: flex; gap: 0;
    border-bottom: 1px solid var(--v2-line);
    background: #fff;
    overflow-x: auto; overflow-y: hidden;
    scrollbar-width: none; flex-shrink: 0;
    -webkit-overflow-scrolling: touch;
  }
  .v2-panel-tab-bar::-webkit-scrollbar { display: none; }
  .v2-panel-tab {
    flex: 1; min-width: 68px; padding: .6rem .4rem;
    border: none; background: none; cursor: pointer;
    font-size: .72rem; font-weight: 600; color: var(--v2-ink-3);
    border-bottom: 2.5px solid transparent;
    transition: color .12s, border-color .12s;
    white-space: nowrap; text-align: center;
    -webkit-tap-highlight-color: transparent;
  }
  .v2-panel-tab:hover { color: var(--v2-ink); }
  .v2-panel-tab.active {
    color: var(--v2-indigo);
    border-bottom-color: var(--v2-indigo);
    font-weight: 700;
  }
  .v2-panel-tab-pane { display: none; }
  .v2-panel-tab-pane.active { display: flex; flex-direction: column; gap: .875rem; }

  /* ── RSVP avatar stack on event cards ─────────────────────────────────── */
  .v2-rsvp-stack {
    display: flex; align-items: center; gap: .35rem;
    margin-top: .35rem; flex-wrap: wrap;
  }
  .v2-rsvp-stack-avatars {
    display: flex;
  }
  .v2-rsvp-stack-avatars .member-dot {
    width: 22px; height: 22px; font-size: .6rem;
    border: 1.5px solid #fff;
    margin-left: -6px;
  }
  .v2-rsvp-stack-avatars .member-dot:first-child { margin-left: 0; }
  .v2-rsvp-count-pill {
    font-size: .68rem; font-weight: 700; color: var(--v2-success-ink);
    background: var(--v2-success-bg);
    border-radius: 99px; padding: 1px 7px;
  }
  .v2-rsvp-pending-pill {
    font-size: .68rem; font-weight: 600; color: var(--v2-ink-3);
  }

  /* ── Agenda / upcoming events view ─────────────────────────────────── */
  .agenda-section-label {
    font-size: .67rem; font-weight: 800; text-transform: uppercase;
    letter-spacing: .1em; color: var(--v2-indigo);
    padding: .9rem 0 .45rem; margin-top: .1rem;
    display: flex; align-items: center; gap: .5rem;
  }
  .agenda-section-label::after {
    content: ''; flex: 1; height: 1px; background: var(--v2-line);
  }
  .agenda-grid {
    display: grid;
    /* auto-fit collapses empty tracks, so 1 event = 1 column; 2+ events = 2 columns on desktop */
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: .6rem;
    margin-bottom: .75rem;
  }
  /* Mobile: always single column */
  @media (max-width: 560px) {
    .agenda-grid { grid-template-columns: 1fr; }
  }
  @media (max-width: 640px) {
    .agenda-card { min-height: 72px; }
    .agenda-date-col { min-width: 56px; padding: .65rem .5rem; }
  }
  .agenda-card {
    display: flex; border-radius: 14px; overflow: hidden;
    background: var(--v2-surface); border: 1.5px solid var(--v2-line);
    cursor: pointer; transition: transform .12s, box-shadow .12s;
    text-align: left;
  }
  .agenda-card:hover { transform: translateY(-2px); box-shadow: 0 4px 18px rgba(10,10,20,.09); }
  .agenda-card:active { transform: scale(.98); }
  .agenda-date-col {
    background: var(--v2-band-1); padding: .75rem .6rem;
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    min-width: 60px; flex-shrink: 0; gap: .04rem;
  }
  .agenda-dow  { font-size: .59rem; font-weight: 800; text-transform: uppercase;
                 letter-spacing: .07em; color: var(--v2-ink-3); }
  .agenda-num  { font-size: 1.85rem; font-weight: 900; line-height: 1; }
  .agenda-mon  { font-size: .59rem; font-weight: 700; text-transform: uppercase;
                 letter-spacing: .06em; color: var(--v2-ink-3); }
  .agenda-body { padding: .65rem .75rem; flex: 1; min-width: 0; display: flex;
                 flex-direction: column; gap: .2rem; }
  .agenda-title { font-size: .875rem; font-weight: 700; color: var(--v2-ink);
                  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
                  font-family: var(--v2-font-display); }
  .agenda-meta  { font-size: .72rem; color: var(--v2-ink-3);
                  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .agenda-dots  { display: flex; align-items: center; gap: 2px; margin-top: .15rem; }
  .agenda-badge {
    display: inline-flex; align-items: center; gap: 3px;
    font-size: .7rem; font-weight: 700; border-radius: 99px;
    padding: 1px 7px; margin-top: .25rem; width: fit-content;
  }
  .agenda-badge-coral  { background: var(--v2-coral-bg);   color: var(--v2-coral-ink); }
  .agenda-badge-green  { background: var(--v2-success-bg);  color: var(--v2-success-ink); }
  .agenda-badge-grey   { background: var(--v2-line);        color: var(--v2-ink-3); }
  .agenda-badge-indigo { background: var(--v2-indigo-50);   color: var(--v2-indigo); }
  [data-theme="dark"] .agenda-card { background: #1e1b2e; border-color: rgba(255,255,255,.1); }
  [data-theme="dark"] .agenda-date-col { background: #2a2638; }

  /* ── Calendar section header redesign ──────────────────────────────── */
  .v2-cal-header {
    display: flex; align-items: center; gap: .5rem;
    margin-bottom: .5rem; flex-wrap: wrap;
  }
  .v2-cal-title {
    display: flex; align-items: center; gap: .55rem;
    font-size: 1.2rem; font-weight: 800; color: var(--v2-ink);
    font-family: var(--v2-font-display); letter-spacing: -.02em;
    flex: 1; min-width: 0;
  }
  .v2-cal-title-icon {
    width: 34px; height: 34px; border-radius: 10px;
    background: var(--v2-indigo-50); display: flex; align-items: center;
    justify-content: center; flex-shrink: 0; color: var(--v2-indigo);
  }
  .v2-cal-actions { display: flex; align-items: center; gap: .4rem; flex-shrink: 0; }
  /* Hide the calendar sync icon on mobile — it causes a stray map-pin to appear
     alone when the header wraps on narrow screens. Accessible via Settings > Sync. */
  @media (max-width: 767px) { .v2-cal-sync-btn { display: none !important; } }
  /* View tabs row — full width below the title row */
  .v2-cal-tab-row {
    display: flex; width: 100%; gap: 0;
    background: var(--v2-band-1); border: 1.5px solid var(--v2-line);
    border-radius: 12px; padding: 3px; margin-bottom: .85rem;
  }
  .v2-cal-tab-row .cal-view-btn {
    flex: 1; text-align: center; border-radius: 8px !important;
    font-size: .8rem !important; padding: .35rem .5rem !important;
    font-weight: 600 !important; color: var(--v2-ink-2) !important;
    transition: background .12s, color .12s !important;
    min-height: 36px;
  }
  .v2-cal-tab-row .cal-view-btn.active {
    background: var(--v2-indigo) !important; color: #fff !important;
    box-shadow: 0 1px 6px rgba(91,79,229,.28) !important;
    font-weight: 700 !important;
  }
  .v2-month-nav {
    display: flex; align-items: center; gap: .25rem;
    background: var(--v2-band-1); border: 1.5px solid var(--v2-line);
    border-radius: 99px; padding: 2px 4px;
  }
  .v2-month-nav-btn {
    width: 28px; height: 28px; border: none; background: none;
    border-radius: 99px; cursor: pointer; display: flex; align-items: center;
    justify-content: center; color: var(--v2-ink-2);
    transition: background .12s;
  }
  .v2-month-nav-btn:hover { background: var(--v2-line); }
  .v2-month-label {
    font-size: .83rem; font-weight: 700; color: var(--v2-ink); min-width: 88px;
    max-width: 220px; overflow: hidden; text-overflow: ellipsis;
    text-align: center; white-space: nowrap;
  }
  /* Date-nav always sits on its own row below the title + actions row.
     This prevents the long "Monday, May 18, 2026" label from squeezing
     the "Events" title in day/week view on any screen width. */
  .v2-cal-header { flex-wrap: wrap; }
  .v2-cal-title   { order: 1; }
  .v2-cal-actions { order: 2; }
  .v2-month-nav   { order: 3; width: 100%; justify-content: center; margin-top: .1rem; }
  @media (max-width: 480px) {
    .v2-month-label { font-size: .77rem; max-width: 200px; }
  }
  .v2-add-event-btn {
    display: inline-flex; align-items: center; gap: .35rem;
    background: var(--v2-indigo); color: #fff;
    border: none; border-radius: 12px; padding: .45rem .9rem;
    font-size: .83rem; font-weight: 700; cursor: pointer;
    transition: background .12s, transform .1s;
    white-space: nowrap;
  }
  .v2-add-event-btn:hover  { background: var(--v2-indigo-dark); }
  .v2-add-event-btn:active { transform: scale(.97); }

  /* ── v2: native checkbox / radio accent matches brand ────────────────── */
  input[type="checkbox"] { accent-color: var(--v2-indigo); }
  /* Bring-list "packed" checkboxes use green to signal completion */
  .bring-item-row input[type="checkbox"] { accent-color: var(--v2-success); }

  /* dark-mode panel */
  [data-theme="dark"] .v2-event-panel { background: #1e1b2e; }
  [data-theme="dark"] .v2-panel-header { background: linear-gradient(160deg, #2a2638 0%, #1e1b2e 100%) !important; }
  [data-theme="dark"] .v2-panel-tab-bar { background: #1e1b2e; border-bottom-color: rgba(255,255,255,.1); }
  [data-theme="dark"] .v2-panel-tab { color: rgba(255,255,255,.45); }
  [data-theme="dark"] .v2-panel-tab.active { color: #A89DF5; border-bottom-color: #A89DF5; }
  [data-theme="dark"] .v2-panel-actions { background: #1e1b2e; }
  [data-theme="dark"] .v2-panel-action-btn { background: rgba(255,255,255,.07); color: #e8e4f0; }

  /* ── Defensive layout guards ───────────────────────────────────────────── */
  /* Ensure main content container never gets an accidental flex-row layout */
  #main-content { display: block !important; width: 100% !important; }
  /* Ensure active sections are always full-width block elements */
  .section.active { display: block !important; width: 100% !important; }
  #section-chat.active { display: flex !important; flex-direction: column !important; }
  /* Sign-out button: white on indigo (override the old danger-light inline color) */
  #header-signout-btn { color: #fff !important; }

  /* ── Lists hub sub-tabs (Phase 2 #2) ──────────────────────────────────── */
  .lists-subtabs {
    display: flex; gap: .35rem; margin-bottom: .85rem; padding: .25rem;
    background: var(--v2-surface-2, #f1f0fb); border-radius: 12px;
  }
  .lst-tab {
    flex: 1; border: none; background: transparent; cursor: pointer;
    padding: .5rem .4rem; border-radius: 9px; font-size: .85rem; font-weight: 700;
    color: var(--v2-ink-2, #6b6b80); font-family: var(--v2-font-body, inherit);
    transition: background .15s, color .15s, box-shadow .15s; white-space: nowrap;
  }
  .lst-tab.active {
    background: var(--v2-surface, #fff); color: var(--v2-indigo, #5B4FE5);
    box-shadow: 0 1px 3px rgba(20,20,50,.12);
  }
  .lst-tab:not(.active):hover { color: var(--v2-ink, #1a1a2e); }

  /* ══════════════════════════════ END V2 DESIGN SYSTEM ══════════════════ */

/* ── Splash Screen ─────────────────────────────────────────────────────────── */
#splash-screen {
  position: fixed;
  inset: 0;
  background: linear-gradient(135deg, #5B4FE5 0%, #7B70F0 100%);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  z-index: 99999;
  transition: opacity .45s ease, visibility .45s;
  color: #fff;
  padding-bottom: env(safe-area-inset-bottom);
}
#splash-screen.hiding {
  opacity: 0;
  visibility: hidden;
}
#splash-screen.gone {
  display: none;
}
.splash-logo-wrap {
  animation: splashFadeUp .5s ease forwards;
}
.splash-name {
  font-family: 'Plus Jakarta Sans', 'Inter', sans-serif;
  font-size: 2rem;
  font-weight: 800;
  color: #fff;
  margin-top: .6rem;
  animation: splashFadeUp .5s .1s ease forwards;
}
.splash-tagline {
  font-size: .9rem;
  color: rgba(255,255,255,.72);
  margin-top: .25rem;
  animation: splashFadeUp .5s .2s ease forwards;
}
.splash-spinner {
  width: 28px;
  height: 28px;
  border: 3px solid rgba(255,255,255,.22);
  border-top-color: #fff;
/* ═══════════════════════════════════════════════════════
   i18n-rtl.css — Right-to-left (Hebrew) layout overrides
   ───────────────────────────────────────────────────────
   Additive & fully scoped to html[dir="rtl"]. When the language is NOT Hebrew
   the document stays dir="ltr" and NONE of these rules apply — so LTR languages
   (English / Spanish / Russian) are byte-for-byte unchanged. Zero regression by
   construction.
═══════════════════════════════════════════════════════ */

/* Hebrew-capable display font (loaded via <link> in index.html). */
html.lang-he,
html.lang-he body {
  font-family: 'Rubik', 'Heebo', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
html.lang-he {
  --font-family: 'Rubik', 'Heebo', -apple-system, BlinkMacSystemFont, sans-serif;
  --v2-font-display: 'Rubik', 'Heebo', 'Plus Jakarta Sans', sans-serif;
}

/* ── Global direction ──────────────────────────────────────────────────────── */
html[dir="rtl"] body { direction: rtl; }
html[dir="rtl"] { text-align: right; }

/* Inputs / textareas follow the script automatically (handles mixed Latin). */
html[dir="rtl"] input,
html[dir="rtl"] textarea,
html[dir="rtl"] select { text-align: right; }
html[dir="rtl"] input[type="email"],
html[dir="rtl"] input[type="url"],
html[dir="rtl"] input[type="tel"],
html[dir="rtl"] input[type="number"] { direction: ltr; text-align: right; }

/* ── Header / nav ──────────────────────────────────────────────────────────── */
html[dir="rtl"] header .header-actions,
html[dir="rtl"] .header-actions { margin-left: 0; margin-right: auto; }
html[dir="rtl"] .csw-item .csw-check { margin-left: 0; margin-right: auto; }
html[dir="rtl"] .csw-item,
html[dir="rtl"] .circle-card,
html[dir="rtl"] .tp-trigger,
html[dir="rtl"] button.bring-event-badge { text-align: right; }

/* Desktop nav icon spacing (was margin-right on the inline SVG). */
html[dir="rtl"] .nav-tab svg { margin-right: 0; margin-left: .3rem; }

/* ── Sections that were force-locked to LTR — release them for Hebrew ───────── */
html[dir="rtl"] #section-tasks,
html[dir="rtl"] #section-shopping,
html[dir="rtl"] #section-bring { direction: rtl; text-align: right; }
html[dir="rtl"] .list-item { direction: rtl; text-align: right; }
html[dir="rtl"] .list-item span { text-align: right; }

/* ── Chat: bubbles mirror; keep message body bidi-aware ────────────────────── */
html[dir="rtl"] #chat-messages { direction: rtl; }
html[dir="rtl"] .chat-meta.mine { text-align: left; }
html[dir="rtl"] .chat-meta:not(.mine) { text-align: right; }

/* ── Avatar stacks (overlap used margin-left) ──────────────────────────────── */
html[dir="rtl"] .v2-rsvp-stack-avatars .member-dot { margin-left: 0; margin-right: -6px; }
html[dir="rtl"] .v2-rsvp-stack-avatars .member-dot:first-child { margin-right: 0; }

/* ── Settings panel slides in from the LEFT edge in RTL ────────────────────── */
html[dir="rtl"] #account-prefs-panel {
  right: auto;
  left: 0;
  box-shadow: 4px 0 24px rgba(0,0,0,.18);
  transform: translateX(-100%);
}
html[dir="rtl"] #account-prefs-panel.open { transform: translateX(0); }

/* ── V2 event side panel (desktop) slides from the LEFT in RTL ─────────────── */
@media (min-width: 900px) {
  html[dir="rtl"] .v2-event-panel {
    right: auto; left: 0;
    transform: translateX(-100vw);
  }
  html[dir="rtl"] .v2-event-panel.open { transform: translateX(0); }
}

/* ── Directional chevrons (month nav, back arrows) flip horizontally ───────── */
html[dir="rtl"] .v2-month-nav-btn svg,
html[dir="rtl"] .btn-icon-nav svg { transform: scaleX(-1); }

/* ── Generic helpers: flip common physical-margin utilities used inline ────── */
html[dir="rtl"] .toast-container { left: 50%; right: auto; transform: translateX(-50%); }
