/* The retired inline app's stylesheet, verbatim, in one cascade layer (the boot splash keeps
   its own inline block in the shell so it paints before JS). React rules stay unlayered, so
   they win over anything here exactly as they did when wickette.css loaded after the inline
   styles. */
@layer legacy {
  /* Wickette palette. A wicket is a small garden gate, so the accent is sage and the
     ground stays warm cream. Gold is demoted to a secondary: it survives only where it
     is doing a job sage can't — the journey progress rings, the check-off confetti, and
     the plan-strength ramp (whose "strong" step is already a dark green).
     The hexes are still written out literally throughout the file; these vars are the
     canonical reference for new work, so reach for var(--accent) rather than a hex. */
  /* ====================================================================
     Wickette color system — raw scales, then semantic roles. Components
     reference the semantic --color-* roles (or the legacy aliases at the
     bottom, repointed here), never the raw scales directly. */
  :root {
    /* Raw scales (paint; unchanged between light and dark) */
    --chartreuse-wash: #f1efd8; --chartreuse-light: #dbd36a; --chartreuse-base: #d5cc51;
    --chartreuse-muted: #b9b06a; --chartreuse-ink: #6f661a;
    --pink-wash: #f1dee7; --pink-light: #c1698f; --pink-marketing: #9b3c60;
    --pink-base: #7a2e4d; --pink-pressed: #5e2138;
    --navy-50: #e8edf5; --navy-300: #a8bedc; --navy-600: #34537f;
    --navy-700: #2c4668; --navy-800: #1f3049; --navy-900: #16233a;
    --green-50: #edf0e4; --green-200: #afbe93; --green-400: #8ca368;
    --green-500: #74904f; --green-700: #4c6635; --green-900: #2a3d26;
    --greige-50: #fdfbf7; --greige-100: #f7f4ed; --greige-200: #efebe1; --greige-300: #e3ded4;
    --greige-400: #cfc9bc; --greige-500: #ada69a; --greige-600: #8a8378; --greige-700: #635c55;
    --greige-800: #423d38; --greige-900: #2a2724;
    --status-success: #3f7a55; --status-success-light: #6bae80; --status-success-wash: #e6f0e9;
    --status-warning: #96600c; --status-warning-light: #e0a340; --status-warning-wash: #f9eeda;
    --status-danger: #c0424c; --status-danger-light: #e8737e; --status-danger-wash: #f8e6e7;
    --dark-canvas: #161a22; --dark-surface: #1f2634; --dark-raised: #262e3e;
    --dark-border: #2c3140; --dark-border-strong: #3d4354; --dark-ink: #f2eee6; --dark-secondary: #b4ada2;

    /* Semantic roles — light */
    --color-bg: var(--greige-50); --color-bg-surface: var(--greige-100); --color-bg-raised: var(--greige-200);
    --color-border: var(--greige-300); --color-border-strong: var(--greige-400);
    --color-text: var(--greige-900); --color-text-secondary: var(--greige-700);
    --color-text-muted: var(--greige-600); --color-text-disabled: var(--greige-500);
    --color-brand: var(--chartreuse-base); --color-brand-ink: var(--chartreuse-ink);
    --color-brand-wash: var(--chartreuse-wash); --color-on-brand: var(--greige-900);
    --color-primary: var(--pink-base); --color-primary-hover: var(--pink-pressed);
    --color-primary-wash: var(--pink-wash); --color-on-primary: var(--greige-50);
    --color-chrome: var(--navy-800); --color-on-chrome: var(--greige-50);
    --color-link: var(--navy-600); --color-link-wash: var(--navy-50);
    --color-accent-green: var(--green-700); --color-accent-green-wash: var(--green-50);
    --color-success: var(--status-success); --color-success-wash: var(--status-success-wash);
    --color-warning: var(--status-warning); --color-warning-wash: var(--status-warning-wash);
    --color-danger: var(--status-danger); --color-danger-wash: var(--status-danger-wash);
    --color-on-status: var(--greige-50);

    /* Legacy aliases, repointed to the new roles (older code still uses these) */
    --ink: var(--color-text); --body: var(--greige-800); --muted: var(--color-text-secondary);
    --faint: var(--color-text-disabled); --ground: var(--color-bg); --line: var(--color-border);
    --accent: var(--color-primary); --accent-deep: var(--color-primary-hover);
    --accent-soft: var(--color-primary-wash); --gold: var(--color-brand); --gold-bright: var(--color-brand);
  }

  /* Semantic roles — dark (only the role layer is reassigned) */
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme='light']) {
      --color-bg: var(--dark-canvas); --color-bg-surface: var(--dark-surface); --color-bg-raised: var(--dark-raised);
      --color-border: var(--dark-border); --color-border-strong: var(--dark-border-strong);
      --color-text: var(--dark-ink); --color-text-secondary: var(--dark-secondary);
      --color-text-muted: var(--greige-600); --color-text-disabled: var(--greige-700);
      --color-brand: var(--chartreuse-light); --color-brand-ink: var(--chartreuse-light);
      --color-brand-wash: #2e2b1c; --color-on-brand: var(--dark-canvas);
      --color-primary: var(--pink-light); --color-primary-hover: var(--pink-marketing);
      --color-primary-wash: #331f29; --color-on-primary: var(--dark-canvas);
      --color-chrome: var(--dark-surface); --color-on-chrome: var(--dark-ink);
      --color-link: var(--navy-300); --color-link-wash: #1c2635;
      --color-accent-green: var(--green-200); --color-accent-green-wash: #232a1d;
      --color-success: var(--status-success-light); --color-success-wash: #1b2a20;
      --color-warning: var(--status-warning-light); --color-warning-wash: #2d2417;
      --color-danger: var(--status-danger-light); --color-danger-wash: #2e1b1d;
      --color-on-status: var(--dark-canvas);
    }
  }
  [data-theme='dark'] {
    --color-bg: var(--dark-canvas); --color-bg-surface: var(--dark-surface); --color-bg-raised: var(--dark-raised);
    --color-border: var(--dark-border); --color-border-strong: var(--dark-border-strong);
    --color-text: var(--dark-ink); --color-text-secondary: var(--dark-secondary);
    --color-text-muted: var(--greige-600); --color-text-disabled: var(--greige-700);
    --color-brand: var(--chartreuse-light); --color-brand-ink: var(--chartreuse-light);
    --color-brand-wash: #2e2b1c; --color-on-brand: var(--dark-canvas);
    --color-primary: var(--pink-light); --color-primary-hover: var(--pink-marketing);
    --color-primary-wash: #331f29; --color-on-primary: var(--dark-canvas);
    --color-chrome: var(--dark-surface); --color-on-chrome: var(--dark-ink);
    --color-link: var(--navy-300); --color-link-wash: #1c2635;
    --color-accent-green: var(--green-200); --color-accent-green-wash: #232a1d;
    --color-success: var(--status-success-light); --color-success-wash: #1b2a20;
    --color-warning: var(--status-warning-light); --color-warning-wash: #2d2417;
    --color-danger: var(--status-danger-light); --color-danger-wash: #2e1b1d;
    --color-on-status: var(--dark-canvas);
  }

  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  .serif { font-family: 'Cormorant Garamond', Georgia, serif; }

  /* The standing (closed) wicket — the logotype's companion mark. Strokes inherit
     currentColor, so it takes the colour of whatever it sits in. Same drawing the boot
     overlay splits in half and swings open. */
  .gate-mark { flex: none; display: block; }

  body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    background: #fdfbf7;
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    align-items: center;
    color: #2a2724;
    overflow-x: hidden;
  }

  /* App surface — mobile-first column, fills the viewport on any screen */
  .phone {
    width: 100%;
    max-width: 420px;
    min-width: 0;
    height: 100dvh;
    background: white;
    box-shadow: 0 0 60px rgba(24,36,32,0.08);
    overflow: hidden;
    position: relative;
  }

  /* Scroll region inside the app surface */
  .viewport {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
  }
  .viewport::-webkit-scrollbar { width: 0; }

  /* Screen */
  .screen { display: none; padding: 0 0 90px; min-height: 100%; }
  .screen.active { display: block; }

  /* Content padding */
  /* 88px bottom: the nav is absolutely positioned over this scroll area, so the
     last element needs room to clear it (66px nav + 22px breathing space). */
  .content { padding: 16px 20px 88px; }

  /* ── Desktop shell ─────────────────────────────────────────── */
  @media (min-width: 860px) {
    body { flex-direction: row; align-items: stretch; }
    .phone {
      max-width: none;
      flex: 1;
      height: 100dvh;
      box-shadow: none;
    }
    /* Content sits in a centered, readable column within the wide surface */
    .screen { max-width: 960px; margin: 0 auto; padding-bottom: 48px; }
  }

  /* Cards */
  .card {
    background: #fdfbf7;
    border: 1px solid #e3ded4;
    border-radius: 16px;
    padding: 14px 16px;
    margin-bottom: 12px;
  }
  .card-title {
    font-size: 13px;
    font-weight: 600;
    color: #2a2724;
    margin-bottom: 10px;
    display: flex;
    align-items: center;
    gap: 6px;
  }
  .card-title i { font-size: 16px; }

  /* Home — the glass surface from Figma (the "site-tab-landing" frame on the Home Dashboard
     page, which is the Home screen). Scoped to #s-home; every other tab keeps its own surface. */
  #s-home { background: linear-gradient(90deg, #f7f7f7 0%, #f4f4f4 35%, #f1f1f1 65%, #fafafa 100%); }
  #s-home .card, #s-home .ask-orb {
    background: rgba(255,255,255,0.45);
    border: 1px solid rgba(255,255,255,0.6);
    border-radius: 16px;
    box-shadow: 0 8px 20px -10px rgba(66,47,49,0.10);
    backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
  }

  .gbtn {
    width: 36px; height: 36px; border-radius: 18px; cursor: pointer; flex-shrink: 0;
    background: rgba(255,255,255,0.5); border: 1px solid rgba(255,255,255,0.6);
    backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
    box-shadow: 0 4px 12px rgba(66,47,49,0.04);
    display: flex; align-items: center; justify-content: center; color: #2e2528; font-size: 16px;
  }
  .gbtn.sm { width: 32px; height: 32px; border-radius: 10px; font-size: 13px; }

  .stat {
    background: #FFFFFF;
    border: 1px solid #e3ded4;
    border-radius: 16px;
    padding: 14px 16px;
  }

  /* Logged-in desktop layouts — use the width (all min-width:860 only) */
  @media (min-width: 860px) {
    #s-home { max-width: 1000px; }

    #s-home .content {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 16px;
      align-items: start;
    }

    #s-home .content > .card { margin-bottom: 0; }

  }

  /* "Your Wedding" (the screen formerly titled My Profile; ids stay `account`).
     Three things drive this layout: the whole row is the tap target (the pencil is a
     hint, not the only way in); an empty field asks for what it wants *under* the
     label rather than in the value slot, so an unanswered row stops being taller and
     louder than an answered one; and a value the assistant inferred is labelled as a
     guess instead of passing for a stated fact. */
  .acct-section { margin-bottom: 18px; }
  .acct-sec-title { font-size: 11px; font-weight: 700; color: #2a2724; text-transform: uppercase; letter-spacing: 0.06em; margin: 0 2px 3px; }
  .acct-sec-sub { font-size: 12px; color:#736c63; line-height: 1.45; margin: 0 2px 8px; }
  .acct-field { display: flex; align-items: center; padding: 13px 0; border-bottom: 1px solid #e3ded4; gap: 10px; cursor: pointer; -webkit-tap-highlight-color: transparent; }
  .acct-field:last-child { border-bottom: none; }
  .acct-field:active { background: #f7f4ee; }
  .acct-field.editing, .acct-field.editing:active { cursor: default; background: transparent; }
  .acct-field.editing .acct-edit-btn { visibility: hidden; }   /* the row is already open; the pencil is noise */
  .acct-body { flex: 1; min-width: 0; }
  .acct-row { display: flex; align-items: center; gap: 12px; }
  .acct-label { font-size: 11px; color:#736c63; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; width: 108px; flex-shrink: 0; overflow-wrap: anywhere; line-height: 1.3; }
  .acct-val { flex: 1; font-size: 15px; color: #2a2724; min-width: 0; }
  .acct-val.empty { color: #34537f; font-size: 13.5px; font-weight: 600; }
  .acct-hint { font-size: 12px; color:#736c63; line-height: 1.4; margin: 4px 0 0 120px; }
  .acct-hint.hide { display: none; }
  .acct-src { display: inline-block; margin-left: 7px; font-size: 9.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: #96600c; background: #f9eeda; border-radius: 999px; padding: 2px 7px; vertical-align: 1px; white-space: nowrap; }
  .acct-flash { margin-left: 8px; font-size: 11px; font-weight: 700; white-space: nowrap; }
  .acct-flash.ok { color: #3f7a55; }
  .acct-flash.bad { color: #c0424c; }
  .acct-input { flex: 1; font-size: 15px; color: #2a2724; border: none; border-bottom: 1.5px solid #34537f; outline: none; background: transparent; padding: 2px 0; }
  .acct-wrap { flex: 1; display: flex; align-items: center; gap: 10px; min-width: 0; }
  .acct-wrap .acct-input { min-width: 0; }
  .acct-edit-btn { font-size: 13px; color: #34537f; cursor: pointer; padding: 4px; flex-shrink: 0; }
  /* Essentials banner: what is still missing and what filling it unlocks. `can_advise`
     has always gated whether advice is real or generic; this is the first place that
     says so on the screen where you can fix it. */
  .acct-banner { display: flex; align-items: flex-start; gap: 11px; padding: 13px 14px; border-radius: 14px; margin-bottom: 16px; }
  .acct-banner.todo { background: #f9eeda; border: 1px solid #f0dcb4; cursor: pointer; }
  .acct-banner.done { background: #edf0e4; border: 1px solid #dde3cd; }
  .acct-banner > i { font-size: 17px; flex-shrink: 0; margin-top: 1px; }
  .acct-banner.todo > i { color: #96600c; }
  .acct-banner.done > i { color: #3f7a55; }
  .acct-banner .ab-title { font-size: 13px; font-weight: 700; color: #2a2724; }
  .acct-banner .ab-sub { font-size: 12px; color: #635c55; line-height: 1.45; margin-top: 2px; }
  .acct-meter { height: 4px; border-radius: 99px; background: rgba(42,39,36,0.10); margin-top: 9px; overflow: hidden; }
  .acct-meter > div { height: 100%; border-radius: 99px; background: #96600c; transition: width .3s; }

  /* Checklist note Private / Shared toggle */
  .note-vis { display: inline-flex; background: #fdfbf7; border: 1px solid #e3ded4; border-radius: 999px; padding: 2px; }
  .note-vis .nv-opt { border: none; background: none; font-size: 11px; font-weight: 600; color:#736c63; padding: 4px 10px; border-radius: 999px; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
  .note-vis .nv-opt.on { background: #fff; color: #2a2724; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
  /* Check-off delight */
  .timeline-task-check.pop { animation: checkPop 0.4s ease; }
  @keyframes checkPop { 0% { transform: scale(1); } 40% { transform: scale(1.35); } 100% { transform: scale(1); } }
  .confetti-bit { position: fixed; width: 7px; height: 7px; border-radius: 2px; pointer-events: none; z-index: 9999; animation: confettiPop 0.65s ease-out forwards; }
  @keyframes confettiPop { 0% { transform: translate(-50%,-50%) scale(0); opacity: 1; } 60% { opacity: 1; } 100% { transform: translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) scale(1) rotate(200deg); opacity: 0; } }
  @keyframes phaseGlow { 0%, 100% { background: transparent; } 30% { background: rgba(200,162,74,0.16); } }
  .timeline-phase-header.phase-celebrate, .jr-chapter.phase-celebrate { animation: phaseGlow 1.2s ease; border-radius: 14px; }

  /* Savings cards */
  .savings-teaser.hide { display: none; }

  .rec-row { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid #e3ded4; align-items: flex-start; }
  .rec-row:last-child { border-bottom: none; padding-bottom: 0; }
  .rec-row:first-child { padding-top: 0; }
  .rec-ico {
    width: 30px; height: 30px; border-radius: 8px;
    display: flex; align-items: center; justify-content: center;
    flex-shrink: 0;
  }
  .rec-ico.save { background: #edf0e4; }
  .rec-ico.dont { background: #f9eeda; }
  .rec-txt { font-size: 13px; color: #2a2724; flex: 1; line-height: 1.4; }

  .rec-warn { font-size: 11px; color: #96600c; font-weight: 600; margin-top: 2px; }

  /* Inbox */
  .thread { display: flex; gap: 10px; padding: 10px 0; border-bottom: 1px solid #e3ded4; align-items: flex-start; cursor: pointer; }
  .thread:last-child { border-bottom: none; }
  .thread:first-child { padding-top: 0; }
  .avatar {
    width: 34px; height: 34px; border-radius: 50%;
    background: #e3ded4;
    display: flex; align-items: center; justify-content: center;
    font-size: 11px; font-weight: 600; color: #635c55;
    flex-shrink: 0;
  }
  .thread-name { font-size: 13px; font-weight: 600; color: #2a2724; }
  .thread-preview { font-size: 12px; color: #635c55; line-height: 1.4; margin-top: 2px; }
  .unread-dot { width: 7px; height: 7px; border-radius: 50%; background: #635c55; flex-shrink: 0; margin-top: 5px; }

  /* Vendor rows */
  .vendor-row { display: flex; gap: 10px; padding: 9px 0; border-bottom: 1px solid #e3ded4; align-items: center; }
  .vendor-row:last-child { border-bottom: none; }
  .vendor-name { font-size: 13px; font-weight: 600; color: #2a2724; }
  .vendor-sub { font-size: 11px; color: #635c55; margin-top: 1px; }

  /* Badges */
  .badge {
    font-size: 10px; font-weight: 600;
    padding: 3px 8px; border-radius: 99px;
    margin-left: auto; white-space: nowrap;
    letter-spacing: 0.02em;
  }
  .badge-pending { background: #f9eeda; color: #96600c; }
  .badge-draft { background: #e3ded4; color: #635c55; }
  .badge-noreply { background: #f8e6e7; color: #ad3841; }
  .badge-booked { background: #e6f0e9; color: #376b4b; }

  /* Category labels */
  .cat-label {
    font-size: 11px; font-weight: 600; color: #635c55;
    letter-spacing: 0.06em; text-transform: uppercase;
    margin: 4px 2px 8px;
  }

  /* Saved grid */
  .saved-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
  .saved-tile {
    background: #fdfbf7;
    border-radius: 12px;
    padding: 12px;
  }

  /* Onboarding — premium Wickette AI split login */
  #s-onboard { padding: 0; }
  .ob-split { display: flex; flex-direction: column; min-height: 100dvh; }

  .ob-brand {
    position: relative; overflow: hidden; text-align: center;
    padding: 44px 30px 38px;
    color: #2a2724;
    background:
      radial-gradient(115% 85% at 12% 8%, rgba(111,102,26,0.16) 0%, transparent 55%),
      radial-gradient(90% 80% at 92% 96%, rgba(111,102,26,0.10) 0%, transparent 52%),
      linear-gradient(152deg, #d5cc51 0%, #dbd36a 100%);
  }
  .ob-brand-inner { position: relative; z-index: 1; }
  .ob-logo {
    display: inline-flex; align-items: center; gap: 8px;
    font-family: 'Cormorant Garamond', Georgia, serif;
    font-size: 25px; font-weight: 600; letter-spacing: 0.01em;
    color: #2a2724; margin-bottom: 22px;
  }
  .ob-logo i { color: #6f661a; font-size: 21px; }

  /* Form pane */
  .ob-form { flex: 1; display: flex; flex-direction: column; background: #fff; }
  .ob-form-inner { width: 100%; max-width: 384px; margin: 0 auto; }

  /* Desktop: true split screen */
  @media (min-width: 860px) {
    #s-onboard { max-width: none; margin: 0; padding: 0; }
    .ob-split { flex-direction: row; }
    .ob-brand {
      flex: 1.05; text-align: left;
      display: flex; align-items: center;
      padding: 56px clamp(44px, 5vw, 72px);
    }

    .ob-form { flex: 1; justify-content: center; padding: 48px 40px; }

  }

  .bubble { border-radius: 16px; padding: 10px 14px; font-size: 13px; line-height: 1.5; max-width: 85%; }
  .bubble.agent { background: #fdfbf7; color: #2a2724; align-self: flex-start; }
  .bubble.user { background: #1f3049; color: #fdfbf7; align-self: flex-end; }
  .chat-input-row { display: flex; gap: 8px; padding: 0 20px; margin-top: 8px; }
  .chat-input-row input {
    flex: 1; padding: 10px 14px; font-size: 13px;
    border: 1px solid #e3ded4; border-radius: 99px;
    background: #fdfbf7; color: #2a2724; outline: none;
  }
  .chat-input-row input::placeholder { color:#736c63; }
  .send-btn {
    width: 36px; height: 36px; border-radius: 50%;
    background: #1f3049; color: #fdfbf7; border: none;
    display: flex; align-items: center; justify-content: center;
    cursor: pointer; font-size: 16px; transition: background 0.2s;
  }
  .send-btn:hover { background: #16233a; }

  /* ===== Brain-dump voice orb ===== */
  .braindump { display: flex; flex-direction: column; align-items: center; padding: 20px; min-height: 640px; }
  .bd-prompt { text-align: center; margin-bottom: 4px; }
  .bd-stage {
    font-size: 11px; font-weight: 600; color: #34537f;
    letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 6px;
  }
  .bd-head { font-size: 20px; font-weight: 700; color: #2a2724; line-height: 1.3; }
  .bd-sub { font-size: 13px; color: #635c55; margin-top: 6px; line-height: 1.45; }

  .orb-stage { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; width: 100%; }
  .orb-wrap { position: relative; width: 200px; height: 200px; display: flex; align-items: center; justify-content: center; }
  .orb {
    width: 140px; height: 140px; border-radius: 50%;
    background: radial-gradient(circle at 30% 25%, #edf0e4 0%, #afbe93 20%, #74904f 40%, #34537f 65%, #1f3049 100%);
    box-shadow:
      0 0 60px rgba(79,115,85, 0.55),
      0 0 40px rgba(79,115,85, 0.35),
      0 20px 60px rgba(44, 30, 20, 0.4),
      inset 0 -15px 30px rgba(44, 30, 20, 0.3),
      inset 0 10px 25px rgba(255, 245, 230, 0.25),
      inset -5px -5px 15px rgba(24,36,32, 0.2);
    display: flex; align-items: center; justify-content: center;
    color: #f9eeda; font-size: 42px; cursor: pointer;
    position: relative; z-index: 2;
    transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
    border: 2px solid rgba(79,115,85, 0.35);
  }
  .orb:hover {
    transform: scale(1.08);
    box-shadow:
      0 0 80px rgba(79,115,85, 0.75),
      0 0 60px rgba(79,115,85, 0.5),
      0 25px 80px rgba(44, 30, 20, 0.5),
      inset 0 -15px 30px rgba(44, 30, 20, 0.3),
      inset 0 10px 25px rgba(255, 245, 230, 0.25),
      inset -5px -5px 15px rgba(24,36,32, 0.2);
  }
  .orb:active { transform: scale(0.95); }
  .orb-ring {
    position: absolute; top: 50%; left: 50%;
    width: 140px; height: 140px; margin: -70px 0 0 -70px;
    border-radius: 50%;
    border: 2px solid rgba(79,115,85, 0.38);
    animation: orbPulse 3.2s ease-out infinite;
  }
  .orb-ring:nth-child(2) {
    animation-delay: 1.1s;
    border-width: 1.5px;
    border-color: rgba(79,115,85, 0.24);
  }
  .orb-ring:nth-child(3) {
    animation-delay: 2.2s;
    border-width: 1px;
    border-color: rgba(79,115,85, 0.14);
  }
  @keyframes orbPulse {
    0% { transform: scale(1); opacity: 0.8; }
    100% { transform: scale(2.2); opacity: 0; }
  }
  .orb-hint {
    font-size: 16px; font-weight: 700; color: #2a2724;
    margin-top: 8px; letter-spacing: -0.3px;
  }
  .orb-hint-sub {
    font-size: 13px; color: #635c55; margin-top: 6px;
    font-weight: 500;
  }
  .type-toggle {
    font-size: 12px; color: #635c55; font-weight: 600;
    background: none; border: none; cursor: pointer;
    text-decoration: underline; text-underline-offset: 3px;
  }

  /* Listening waveform */
  .wave { display: none; gap: 5px; height: 48px; align-items: center; margin-top: 12px; }
  .wave.show { display: flex; }
  .wave span {
    width: 5px; background: linear-gradient(to top, #96600c, #b9b06a); border-radius: 99px;
    animation: waveMove 0.8s ease-in-out infinite;
    box-shadow: 0 2px 8px rgba(79,115,85, 0.4);
  }
  .wave span:nth-child(1){height:12px;animation-delay:0s}
  .wave span:nth-child(2){height:28px;animation-delay:.1s}
  .wave span:nth-child(3){height:42px;animation-delay:.2s}
  .wave span:nth-child(4){height:24px;animation-delay:.3s}
  .wave span:nth-child(5){height:36px;animation-delay:.4s}
  .wave span:nth-child(6){height:16px;animation-delay:.5s}
  @keyframes waveMove { 0%,100%{transform:scaleY(0.4)} 50%{transform:scaleY(1)} }

  /* Once a conversation has started, pin a compact orb to the top so you can
     speak again without scrolling back up; the thread scrolls beneath it. */
  .braindump.chatting .bd-prompt { display: none; }
  .braindump.chatting .orb-stage {
    flex: none;
    position: sticky; top: 0; z-index: 6;
    flex-direction: row; justify-content: center; align-items: center;
    gap: 14px; width: 100%;
    padding: 12px 0; margin-bottom: 6px;
    background: white; border-bottom: 1px solid #e3ded4;
  }
  .braindump.chatting .orb-wrap { width: 54px; height: 54px; }
  .braindump.chatting .orb { width: 50px; height: 50px; font-size: 20px; }
  .braindump.chatting .orb-ring { display: none; }
  .braindump.chatting .wave { display: none; }
  .braindump.chatting .orb-stage .orb-hint { margin-top: 0; font-size: 14px; }
  .braindump.chatting .orb-stage .orb-hint-sub { display: none; }
  .braindump.chatting .type-toggle { margin: 0; }

  .bd-thread { width: 100%; display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }
  .chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
  .chip {
    font-size: 12px; font-weight: 600; padding: 9px 14px;
    border-radius: 99px; border: 1px solid #e3ded4;
    background: white; color: #635c55; cursor: pointer;
    transition: all 0.15s; text-align: left;
  }
  .chip:hover { background: #fdfbf7; }
  .chip.primary { background: #1f3049; color: #fdfbf7; border-color: #1f3049; }
  .chip.primary:hover { background: #16233a; }

  .bd-type { display: none; width: 100%; margin-top: 14px; }
  .bd-type.show { display: block; }

  /* Upload affordance */
  .upload-tile {
    border: 1.5px dashed #e3ded4; border-radius: 12px;
    padding: 14px; display: flex; align-items: center; gap: 10px;
    cursor: pointer; background: #fdfbf7; transition: all 0.15s;
  }
  .upload-tile:hover { background: #fdfbf7; }
  .upload-tile i { font-size: 20px; color: #635c55; }
  .upload-tile .ut-title { font-size: 13px; font-weight: 600; color: #2a2724; }
  .upload-tile .ut-sub { font-size: 11px; color: #635c55; margin-top: 1px; }

  /* Price / confirm-with-vendor block */
  .price-block { margin-top: 12px; background: #f7f4ed; border: 1px solid #e3ded4; border-radius: 12px; padding: 10px 12px; }

  .act {
    flex: 1; display: flex; flex-direction: column; align-items: center; gap: 5px;
    padding: 12px 8px; border-radius: 16px; border: none; cursor: pointer;
    font-size: 11px; font-weight: 700; letter-spacing: 0.02em; transition: transform 0.12s;
  }
  .act:hover { transform: translateY(-2px); }
  .act:disabled { opacity: 0.4; cursor: default; transform: none; }
  .act i { font-size: 24px; }
  .act.back  { background: #fdfbf7; color: #635c55; }
  .act.no    { background: #f8e6e7; color: #c0424c; }

  .act.yes   { background: #e6f0e9; color: #3f7a55; }
  .deck-empty { text-align: center; color: #635c55; font-size: 13px; padding: 48px 26px; line-height: 1.6; }

  /* Global loading circle: shown whenever any api() request is in flight (see _apiLoad). */
  /* No disc behind it — just the gate. The element shrink-to-fits the SVG, so the
     translate still centres on the mark itself. */
  .app-loader { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 4000;
    display: none; align-items: center; justify-content: center; pointer-events: none; }
  .app-loader.on { display: flex; }
  /* The loader draws the gate instead of spinning a ring. Each path gets a dash equal
     to its OWN length, so the short posts and the long W brace all complete together
     rather than the brace lagging to the last instant. (pathLength="1" is the tidier
     way to normalise this, but Chrome kept stroke-dasharray at a literal 1px and the
     gate rendered as a row of ticks.) */
  .gate-load { overflow: visible; flex: none; }
  .app-loader .gate-load { width: 27px; height: 25px; color: #d5cc51;
    filter: drop-shadow(0 1px 5px rgba(24,36,32,.45)); }   /* lifts it off the page without a disc */
  .gate-load path {
    stroke-dasharray: var(--l); stroke-dashoffset: var(--l);
    animation: gate-draw 1.6s ease-in-out infinite;
  }
  .gate-load path:nth-child(1), .gate-load path:nth-child(2) { --l: 26; }
  .gate-load path:nth-child(3), .gate-load path:nth-child(4) { --l: 9;  animation-delay: .30s; }
  .gate-load path:nth-child(5), .gate-load path:nth-child(6) { --l: 34; animation-delay: .10s; }
  .gate-load path:nth-child(7)                                 { --l: 62; animation-delay: .20s; }
  /* Built in the order you'd build a real gate: posts, rails, brace, then finials. */
  @keyframes gate-draw {
    0%   { stroke-dashoffset: var(--l); opacity: .35; }
    45%  { stroke-dashoffset: 0;        opacity: 1; }
    78%  { stroke-dashoffset: 0;        opacity: 1; }
    100% { stroke-dashoffset: 0;        opacity: 0; }
  }
  @media (prefers-reduced-motion: reduce) {
    .gate-load path { animation: none; stroke-dashoffset: 0; opacity: .85; }
  }

  @keyframes coachIn  { from { opacity:0 } to { opacity:1 } }
  @keyframes coachOut { from { opacity:1 } to { opacity:0 } }

  /* A soft ring drawn on the control we're pointing at, and a caption attached to it.
     Both are pointer-events:none — the thing underneath stays tappable, and tapping it
     is what dismisses the coach. */
  .coach-ring { position:fixed; z-index:118; pointer-events:none; border-radius:16px;
    border:2px solid #d5cc51; box-shadow:0 0 0 3px rgba(213,204,81,.22), 0 0 0 9999px rgba(24,28,38,.30);
    animation:coachRing 2s ease-in-out infinite; }
  @keyframes coachRing {
    0%,100% { box-shadow:0 0 0 3px rgba(213,204,81,.20), 0 0 0 9999px rgba(24,28,38,.30) }
    50%     { box-shadow:0 0 0 9px rgba(213,204,81,.06), 0 0 0 9999px rgba(24,28,38,.30) }
  }
  .coach-tap { position:fixed; z-index:119; pointer-events:none; width:34px; height:34px;
    margin:-17px 0 0 -17px; border-radius:50%; border:2px solid rgba(213,204,81,.9);
    animation:coachTap 2s ease-out infinite; }
  @keyframes coachTap {
    0%   { transform:scale(.35); opacity:0 }
    22%  { opacity:.95 }
    70%  { transform:scale(1.5); opacity:0 }
    100% { transform:scale(1.5); opacity:0 }
  }

  /* One-time pointer at the bottom nav, so the tabs get named once. */
  .nav-coach { position:fixed; left:12px; right:12px; z-index:120; display:flex; align-items:flex-start; gap:10px;
    background:#1f3049; color:#fdfbf7; border-radius:14px; padding:12px 14px;
    box-shadow:0 10px 30px rgba(24,36,32,.28); animation:coachIn .4s ease both; }
  .nav-coach.out { animation:coachOut .3s ease both; }
  .nav-coach i.lead { color:#d5cc51; font-size:17px; flex-shrink:0; margin-top:1px; }
  .nav-coach .nc-txt { flex:1; font-size:12.5px; line-height:1.5; }
  .nav-coach .nc-txt b { font-weight:700; }
  .nav-coach .nc-x { background:none; border:none; color:rgba(253,251,247,.6); font-size:13px;
    cursor:pointer; padding:2px 0 0 4px; flex-shrink:0; font-family:inherit; }
  .nav-coach::after { content:''; position:absolute; bottom:-6px; left:50%; margin-left:-6px;
    width:12px; height:12px; background:#1f3049; transform:rotate(45deg); }
  .nav-coach.below::after { bottom:auto; top:-6px; }

  /* ===== Vendors tab — 3-screen flow, styled to match the rest of the app (light theme,
     Cormorant Garamond titles, cream/white cards). Class names kept `vt-` so markup/JS
     don't change; the CSS vars carry app-appropriate values so inline var() refs still work. */
  #s-vendors, #s-vcat, #s-vitem {
    --vt-panel:#fdfbf7; --vt-tile:#fdfbf7; --vt-bone:#2a2724; --vt-gold:#34537f;
    --vt-gold-dim:#96600c; --vt-sage:#34537f; --vt-muted:#8a8378; --vt-hair:#e3ded4;
    --vt-display:'Cormorant Garamond', Georgia, serif;
    position:absolute; inset:0; padding:0; min-height:0; background:#fff; color:var(--vt-bone);
  }
  /* id specificity would beat `.screen{display:none}`, so gate the flex layout on .active
     — otherwise all three vendor screens paint at once and the detail stacks over everything. */
  #s-vendors.active, #s-vcat.active, #s-vitem.active { display:flex; flex-direction:column; }
  .vt-head { padding:18px 20px 8px; flex:0 0 auto; }
  .vt-eyebrow { display:flex; align-items:center; gap:10px; font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:#736c63; margin-bottom:8px; min-height:14px; }
  .vt-back { background:none; border:none; color:#635c55; font-size:12px; padding:0; cursor:pointer; display:flex; align-items:center; gap:5px; }
  .vt-h1 { font-family:var(--vt-display); font-size:26px; font-weight:600; letter-spacing:-.2px; margin:0 0 2px; line-height:1.08; color:var(--vt-bone); }
  .vt-sub { font-size:13px; color:#635c55; margin:0; }
  .vt-body { flex:1 1 auto; overflow-y:auto; padding:10px 20px 92px; scrollbar-width:none; }
  .vt-body::-webkit-scrollbar { display:none; }
  .vt-status { display:inline-flex; align-items:center; gap:6px; font-size:10px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; padding:4px 10px; border-radius:999px; background:#f7f4ed; color:#736c63; }
  .vt-status i { width:5px; height:5px; border-radius:50%; background:currentColor; display:block; }
  .vt-status.progress { background:#f9eeda; color:#96600c; }
  .vt-status.booked { background:#e6f0e9; color:#3f7a55; }
  .vt-status.none { background:#f7f4ed; color:#736c63; }
  /* screen 1: category grid */
  .vt-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:6px; }
  .vt-cat { position:relative; aspect-ratio:1/1.05; border-radius:16px; overflow:hidden; border:1px solid var(--vt-hair); background:var(--vt-panel); cursor:pointer; text-align:left; padding:0; color:var(--vt-bone); transition:border-color .2s, transform .2s, box-shadow .2s; box-shadow:0 2px 10px -6px rgba(24,36,32,.15); -webkit-user-select:none; user-select:none; }
  .vt-cat:hover, .vt-cat:focus-visible { border-color:#e3ded4; transform:translateY(-2px); box-shadow:0 10px 22px -12px rgba(24,36,32,.28); }
  .vt-cat svg, .vt-cat img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; -webkit-user-drag:none; }
  .vt-veil { position:absolute; inset:0; background:linear-gradient(to top,#fdfbf7 34%,rgba(253,252,251,.86) 52%,rgba(253,252,251,.15) 74%,transparent); }
  .vt-inner { position:absolute; inset:auto 0 0 0; padding:12px 13px; }
  .vt-name { font-family:var(--vt-display); font-size:21px; font-weight:600; line-height:1.05; margin-bottom:6px; color:#2a2724; }
  .vt-count { font-size:11px; color:var(--vt-muted); margin-bottom:8px; }
  .vt-cat.ghost { border-style:dashed; background:#fff; box-shadow:none; }
  .vt-cat.ghost .vt-veil { display:none; }
  .vt-cat.ghost .vt-inner { inset:0; display:flex; flex-direction:column; justify-content:center; }
  .vt-cat.ghost .vt-name { color:#736c63; }

  /* screen 2: saved masonry */
  .vt-mason { column-count:2; column-gap:12px; margin-top:6px; }
  .vt-sv { break-inside:avoid; margin-bottom:12px; border-radius:14px; overflow:hidden; border:1px solid var(--vt-hair); background:var(--vt-panel); cursor:pointer; display:block; width:100%; padding:0; text-align:left; color:var(--vt-bone); transition:border-color .2s, box-shadow .2s; box-shadow:0 2px 10px -7px rgba(24,36,32,.18); -webkit-user-select:none; user-select:none; }
  .vt-sv:hover, .vt-sv:focus-visible { border-color:#e3ded4; box-shadow:0 10px 20px -12px rgba(24,36,32,.26); }
  .vt-pic { position:relative; width:100%; background:#f7f4ed; }
  .vt-pic svg, .vt-pic img { display:block; width:100%; height:100%; object-fit:cover; -webkit-user-drag:none; }
  .vt-rank { position:absolute; top:8px; left:8px; width:21px; height:21px; border-radius:50%; background:rgba(255,255,255,.92); backdrop-filter:blur(6px); display:grid; place-items:center; font-size:10px; font-weight:700; color:#2a2724; box-shadow:0 1px 4px rgba(0,0,0,.15); }
  .vt-scr { position:absolute; top:8px; right:8px; font-size:10px; font-weight:700; color:#96600c; background:rgba(255,255,255,.92); backdrop-filter:blur(6px); padding:3px 7px; border-radius:999px; box-shadow:0 1px 4px rgba(0,0,0,.15); }
  .vt-cap { padding:10px 12px 12px; }
  .vt-cap b { display:block; font-family:var(--vt-display); font-size:17px; font-weight:600; line-height:1.12; margin-bottom:3px; color:#2a2724; }
  .vt-cap span { font-size:11px; color:#635c55; }
  .vt-flag { display:inline-block; margin-top:7px; font-size:9px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--vt-sage); }
  .vt-flag.wait { color:#96600c; }
  /* "Your vendor" hero — the booked pick, pulled to the top of the category and highlighted */
  .vt-hero { border:1.5px solid #afbe93; border-radius:16px; overflow:hidden; background:#fff; margin:2px 0 18px; box-shadow:0 8px 22px -12px rgba(58,96,16,.35); }
  .vt-hero-pic { position:relative; width:100%; aspect-ratio:320/150; overflow:hidden; background:#f7f4ed; }
  .vt-hero-pic svg, .vt-hero-pic img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
  .vt-hero-tag { position:absolute; top:10px; left:10px; display:inline-flex; align-items:center; gap:5px; font-size:10px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:#fff; background:#7a2e4d; padding:5px 11px; border-radius:999px; box-shadow:0 2px 8px rgba(58,96,16,.4); }
  .vt-hero-tag i { font-size:12px; }
  .vt-hero-cap { padding:12px 15px 14px; }
  .vt-hero-lbl { font-size:10px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:#34537f; margin-bottom:3px; }
  .vt-hero-cap b { display:block; font-family:var(--vt-display); font-size:22px; font-weight:600; line-height:1.1; color:#2a2724; margin-bottom:3px; }
  .vt-hero-cap span { font-size:12px; color:#635c55; }
  .vt-mason-label { font-size:10px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:#736c63; margin:2px 0 10px; }
  /* screen 3: vendor detail */
  .vt-carousel { position:relative; margin:2px 0 18px; height:250px; border-radius:16px; overflow:hidden; touch-action:pan-y; background:#f7f4ed; -webkit-user-select:none; user-select:none; }
  .vt-ctrack { display:flex; height:100%; transition:transform .34s cubic-bezier(.22,1,.36,1); }
  .vt-cframe { flex:0 0 100%; height:100%; position:relative; }
  .vt-cframe svg, .vt-cframe img { width:100%; height:100%; display:block; object-fit:cover; -webkit-user-drag:none; }
  .vt-cdots { position:absolute; bottom:10px; left:0; right:0; display:flex; justify-content:center; gap:5px; }
  .vt-cdots i { width:16px; height:2.5px; border-radius:2px; background:rgba(255,255,255,.6); }
  .vt-cdots i.on { background:#fff; }
  .vt-chint { position:absolute; bottom:30px; right:12px; font-size:9.5px; letter-spacing:.08em; text-transform:uppercase; color:#635c55; background:rgba(255,255,255,.9); backdrop-filter:blur(6px); padding:5px 9px; border-radius:999px; box-shadow:0 1px 5px rgba(0,0,0,.12); }
  .vt-sec { font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--vt-gold); margin:22px 0 10px; padding-bottom:8px; border-bottom:1px solid var(--vt-hair); }
  .vt-desc { font-size:13.5px; line-height:1.65; color:#423d38; margin:0; }
  .vt-rows { display:flex; flex-direction:column; }
  .vt-row { display:flex; justify-content:space-between; align-items:baseline; gap:16px; padding:11px 0; border-bottom:1px solid #f7f4ed; font-size:13px; }
  .vt-row .vt-k { color:var(--vt-muted); font-size:11px; letter-spacing:.04em; text-transform:uppercase; flex:0 0 auto; }
  .vt-row .vt-v { text-align:right; color:#2a2724; }
  .vt-row .vt-v em { display:block; font-style:normal; font-size:10.5px; color:var(--vt-muted); margin-top:3px; }
  .vt-gap { color:#96600c; }
  .vt-prompt { margin-top:22px; border:1px solid #e3ded4; border-radius:16px; padding:16px; background:#fdfbf7; }
  .vt-prompt h4 { font-family:var(--vt-display); font-size:20px; font-weight:600; margin:0 0 6px; color:#2a2724; }
  .vt-prompt p { margin:0 0 14px; font-size:12px; line-height:1.55; color:var(--vt-muted); }
  .vt-btn { width:100%; padding:13px; border-radius:14px; border:none; background:#1f3049; color:#fdfbf7; font-size:13px; font-weight:500; letter-spacing:.02em; cursor:pointer; }
  .vt-btn:hover { background:#16233a; }
  .vt-btn.ghost { background:transparent; color:#635c55; border:1px solid #e3ded4; margin-top:9px; }
  .vt-fine { margin:12px 0 0; font-size:10.5px; line-height:1.55; color:var(--vt-muted); }
  .vt-empty { font-size:13px; line-height:1.65; color:var(--vt-muted); padding:28px 0; }

  /* ===== Comprehensive analysis ===== */
  .cmp-head { padding: 16px 20px 8px; }
  .cmp-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .cmp-col { background: #fdfbf7; border: 1px solid #e3ded4; border-radius: 16px; padding: 14px; }
  .cmp-city { font-size: 15px; font-weight: 700; color: #2a2724; }
  .cmp-pill { font-size: 10px; font-weight: 700; padding: 3px 8px; border-radius: 99px; margin-top: 6px; display: inline-block; }
  .cmp-metric { border-top: 1px solid #e3ded4; padding: 8px 0 4px; }
  .cmp-metric:first-of-type { border-top: none; }
  .cmp-mk { font-size: 10px; color: #635c55; text-transform: uppercase; letter-spacing: 0.04em; }
  .cmp-mv { font-size: 13px; font-weight: 600; color: #2a2724; margin-top: 2px; line-height: 1.35; }
  .verdict { background: #1f3049; color: #fdfbf7; border-radius: 16px; padding: 14px 16px; margin-top: 12px; }
  .verdict .vt { font-size: 12px; font-weight: 700; color: #34537f; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 6px; }
  .verdict .vb { font-size: 13px; line-height: 1.55; }

  /* Editable budget rows */
  .be-row { display: flex; align-items: center; gap: 10px; padding: 9px 0; border-bottom: 1px solid #e3ded4; }
  .be-row:last-child { border-bottom: none; }
  .be-name { font-size: 13px; font-weight: 600; color: #2a2724; }
  .be-sub { font-size: 11px; color: #635c55; margin-top: 1px; }
  .be-amt { font-size: 13px; font-weight: 700; color: #2a2724; margin-left: auto; }
  .be-amt-edit { cursor: pointer; border-bottom: 1px dashed #cfc9bc; }
  .be-amt-edit:hover { color: #96600c; border-bottom-color: #d5cc51; }
  .be-amt-input { width: 86px; padding: 3px 6px; border: 1px solid #d5cc51; border-radius: 6px; font-size: 13px; font-family: inherit; text-align: right; margin-left: auto; }
  .be-edit { background: none; border: none; color:#736c63; cursor: pointer; font-size: 16px; padding: 2px; }
  .be-edit:hover { color: #635c55; }
  .paid-pill { font-size: 10px; font-weight: 600; padding: 3px 8px; border-radius: 99px; cursor: pointer; white-space: nowrap; border: 1px solid #cfc9bc; color:#736c63; }
  .paid-pill.on { background: #edf0e4; border-color: #afbe93; color: #34537f; }
  .be-amt-unknown { color: #96600c; font-weight: 600; }
  .be-row.be-canceled .be-name { text-decoration: line-through; color: #635c55; }
  .be-row.be-review { border-left: 3px solid #e0a340; padding-left: 8px; }
  .be-detail { padding: 0 0 8px 34px; border-bottom: 1px solid #e3ded4; }
  .be-inst, .be-pay { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #423d38; padding: 4px 0; }
  .be-inst-amt, .be-pay-amt { margin-left: auto; color: #635c55; white-space: nowrap; }
  .pay-status { font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 99px; background: #edf0e4; color: #34537f; white-space: nowrap; }
  .pay-status.partially_refunded { background: #fdf3df; color: #96600c; }
  .pay-status.refunded { background: #f1efeb; color: #635c55; }
  .be-refund { font-size: 11px; font-weight: 600; padding: 3px 8px; border-radius: 99px; border: 1px solid #cfc9bc; background: #fff; color: #635c55; cursor: pointer; white-space: nowrap; }
  .be-refund:hover { border-color: #96600c; color: #96600c; }
  .vd-money-row { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; padding: 5px 0; border-bottom: 1px solid #f1efeb; }
  .vd-money-row:last-child { border-bottom: none; }
  .vd-money-row .k { color: #635c55; } .vd-money-row .v { font-weight: 600; color: #2a2724; white-space: nowrap; }
  .vd-proposal { background: #fdfbf7; border: 1px solid #e3ded4; border-radius: 12px; padding: 12px; margin-top: 10px; font-size: 12px; color: #423d38; }
  .vd-proposal .row { display: flex; justify-content: space-between; gap: 10px; padding: 4px 0; }
  .vd-proposal .conflict { color: #c0424c; font-weight: 600; }
  .rcpt-line { border-top: 1px solid #e3ded4; padding-top: 8px; margin-top: 8px; }
  .rcpt-line:first-of-type { border-top: none; padding-top: 0; margin-top: 0; }
  .wts-link { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; font-weight: 600; color: #34537f; background: #edf0e4; border-radius: 99px; padding: 4px 10px; text-decoration: none; white-space: nowrap; }
  .wts-link:hover { background: #afbe93; }
  .mini-form { background: #fdfbf7; border-radius: 12px; padding: 12px; margin-top: 10px; display: none; }
  .mini-form.show { display: block; }
  .mini-form input, .mini-form select {
    width: 100%; padding: 10px 12px; font-size: 13px; margin-bottom: 8px;
    border: 1px solid #e3ded4; border-radius: 12px; background: white; color: #2a2724; outline: none;
    transition: border-color 0.15s;
  }
  .mini-form input:focus, .mini-form select:focus { border-color: #34537f; }
  .mf-row { display: flex; gap: 8px; }
  .mf-row > * { flex: 1; }

  /* Gmail connect */
  .gmail-card {
    border: 1px solid #e3ded4; border-radius: 16px; padding: 18px 16px;
    text-align: center; background: #fdfbf7;
  }
  .gmail-logo {
    width: 46px; height: 46px; border-radius: 12px; margin: 0 auto 10px;
    background: white; border: 1px solid #e3ded4;
    display: flex; align-items: center; justify-content: center; font-size: 24px; color: #c0424c;
  }
  .gmail-connected {
    display: flex; align-items: center; gap: 8px; font-size: 11px; font-weight: 600;
    color: #376b4b; background: #e6f0e9; padding: 6px 12px; border-radius: 99px;
    margin-bottom: 12px; width: fit-content;
  }

  /* Buttons */
  /* Primary action carries the sage accent — the one place the brand colour has to
     land, since it's what every screen's main CTA looks like. */
  .btn {
    display: block; width: 100%; padding: 12px 16px;
    background: #7a2e4d; color: #edf0e4;
    border: none; border-radius: 14px;
    font-size: 13px; font-weight: 500; letter-spacing: 0.02em;
    cursor: pointer; text-align: center;
    margin-top: 10px; transition: background 0.2s, opacity 0.2s;
  }
  .btn:hover { background: #5e2138; }
  .btn.green { background: #7a2e4d; }
  .btn.green:hover { background: #5e2138; }
  /* Opt-out for the few places that still want the dark ink button (e.g. on a sage fill). */
  .btn.ink { background: #1f3049; color: #fdfbf7; }
  .btn.ink:hover { background: #16233a; }
  .btn-ghost {
    display: block; width: 100%; padding: 12px 16px;
    background: none; color: #635c55;
    border: 1px solid #e3ded4; border-radius: 14px;
    font-size: 13px; font-weight: 500;
    cursor: pointer; text-align: center;
    margin-top: 8px; transition: all 0.2s;
  }
  .btn-ghost:hover { background: #fdfbf7; border-color: #cfc9bc; }
  .btn-sm { padding: 7px 12px; font-size: 12px; width: auto; display: inline-block; margin-top: 0; }

  /* The "Do it yourself" button was a .btn-sm: a sharp-cornered rectangle that also
     inherited the browser's default button font rather than the app's. Everything else
     that offers an action here is a pill in the app's own type. */
  .wts-diy { font-family: inherit; font-size: 11.5px; font-weight: 700; color: #635c55;
    background: #fff; border: 1px solid #e3ded4; border-radius: 99px; padding: 6px 13px;
    cursor: pointer; white-space: nowrap; transition: border-color .15s, color .15s; }
  .wts-diy:hover { border-color: #96600c; color: #96600c; }
  /* The primary action on a savings card: a real plan, not a search result. */
  .wts-plan { display: flex; align-items: center; gap: 8px; width: 100%; margin-top: 11px;
    font-family: inherit; font-size: 12.5px; font-weight: 600; color: #96600c;
    background: #f9eeda; border: 1px solid #f0dcb4; border-radius: 12px; padding: 10px 13px;
    cursor: pointer; text-align: left; transition: background .15s; }
  .wts-plan:hover { background: #f5e6c8; }
  .wts-plan > i:first-child { font-size: 15px; color: #d5cc51; flex-shrink: 0; }

  /* One "Add" that explains the difference, instead of three buttons that don't.
     "Add entry", "Add category" and "Add a vendor" sat in two different cards and
     nothing said which you wanted. */
  .add-opt { display: flex; align-items: flex-start; gap: 11px; padding: 11px 12px; border-radius: 12px;
    cursor: pointer; transition: background .12s; }
  .add-opt:hover { background: #f7f4ed; }
  .add-opt > i { width: 30px; height: 30px; border-radius: 9px; background: #f7f4ed; color: #96600c;
    display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
  .add-opt b { display: block; font-size: 13px; font-weight: 600; color: #2a2724; }
  .add-opt span { display: block; font-size: 11.5px; color: #635c55; line-height: 1.45; margin-top: 1px; }

  /* A tappable summary row — used for the spend ledger and "ask Wickette", both of
     which were previously a wall of content on a tab that's already dense. */
  .bud-row { display: flex; align-items: center; gap: 11px; padding: 13px 14px; background: #f7f4ed;
    border-radius: 12px; cursor: pointer; }
  .bud-row > i.lead { color: #96600c; font-size: 18px; flex-shrink: 0; }
  .bud-row .br-t { font-size: 13px; font-weight: 600; color: #2a2724; }
  .bud-row .br-s { font-size: 11.5px; color: #635c55; margin-top: 1px; }

  /* Launch / front door (greeting + next best action) */
  #s-launch { background: radial-gradient(125% 60% at 50% 0%, #f9eeda 0%, #fdfbf7 46%); }
  #s-launch .launch-wrap { padding: 13vh 24px 48px; text-align: center; }
  .launch-greeting { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 36px; line-height: 1.12; font-weight: 600; color: #2a2724; letter-spacing: -0.01em; margin-bottom: 8px; }
  .launch-sub { font-size: 14px; color:#736c63; margin-bottom: 30px; }
  .launch-eyebrow { font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: #34537f; text-align: left; margin-bottom: 12px; }
  .launch-items { display: flex; flex-direction: column; gap: 12px; margin-bottom: 26px; text-align: left; }
  .launch-item { display: flex; align-items: center; gap: 14px; background: #fff; border: 1px solid #f7f4ed; border-radius: 18px; padding: 16px 18px; cursor: pointer; box-shadow: 0 3px 14px rgba(24,36,32,0.06); transition: box-shadow 0.18s ease, border-color 0.18s ease; }
  .launch-item:hover { box-shadow: 0 9px 24px rgba(24,36,32,0.14); border-color: #f1efd8; }
  .launch-item .li-num { width: 32px; height: 32px; border-radius: 50%; background: linear-gradient(135deg, #d5cc51, #34537f); color: #fff; font-weight: 700; font-size: 14px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; box-shadow: 0 2px 8px rgba(79,115,85,0.42); }
  .launch-item .li-text { flex: 1; font-size: 15px; font-weight: 600; color: #2a2724; line-height: 1.3; }
  .launch-item .li-when { font-size: 11.5px; color:#736c63; margin-top: 2px; font-weight: 500; }
  .launch-item .li-go { color: #d5cc51; font-size: 18px; flex-shrink: 0; }
  .launch-cta { max-width: 320px; margin: 0 auto; }
  .launch-skip { margin-top: 16px; font-size: 13px; }
  .launch-skip a { color:#736c63; cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
  @keyframes launchIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
  #s-launch .launch-greeting, #s-launch .launch-sub, #s-launch .launch-eyebrow, #s-launch .launch-cta, #s-launch .launch-skip { animation: launchIn 0.55s ease both; }
  #s-launch .launch-sub { animation-delay: 0.08s; }
  #s-launch .launch-eyebrow { animation-delay: 0.16s; }
  #s-launch .launch-cta { animation-delay: 0.42s; }
  #s-launch .launch-skip { animation-delay: 0.5s; }
  .launch-item { animation: launchIn 0.5s ease both; }

  /* Section header */
  .screen-header { padding: 16px 20px 8px; }
  .screen-title { font-size: 24px; font-weight: 600; color: #2a2724; font-family: 'Cormorant Garamond', Georgia, serif; letter-spacing: -0.2px; }
  .screen-sub { font-size: 13px; color: #635c55; margin-top: 2px; }

  /* Site tab — the pastel/glass landing (Figma: site-tab-landing). Scoped to #s-site: every other
     tab keeps the app's opaque ivory surface. */
  #s-site { background: linear-gradient(105deg, #fce7f3 0%, #fff7ed 55%, #f3e8ff 100%); }
  #s-site .content { padding-top: 12px; }
  #s-colors { background: linear-gradient(90deg, #f7f7f7 0%, #f4f4f4 35%, #f1f1f1 65%, #fafafa 100%); }
  #s-site .glass,
  #s-colors .glass {
    background: rgba(255,255,255,0.7);
    border: 1px solid rgba(255,255,255,0.5);
    border-radius: 24px;
    box-shadow: 0 10px 28px rgba(66,47,49,0.06);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    margin-bottom: 16px;
  }
  #s-site .urlpill {
    display: flex; align-items: center; gap: 8px;
    margin-top: 12px; padding: 9px 12px;
    border-radius: 999px;
    background: rgba(255,255,255,0.6);
    border: 1px solid rgba(255,255,255,0.5);
    box-shadow: inset 0 1px 6px rgba(255,255,255,0.6);
    font-size: 13px; font-weight: 500; color: #615558; cursor: pointer;
  }
  #s-site .sbadge {
    width: 40px; height: 40px; border-radius: 20px; flex-shrink: 0;
    background: rgba(255,255,255,0.65);
    border: 1px solid rgba(255,255,255,0.5);
    box-shadow: inset 0 1px 4px rgba(255,255,255,0.6);
    display: flex; align-items: center; justify-content: center;
  }
  #s-site .srow {
    display: flex; align-items: center; gap: 16px;
    padding: 16px 0;
    border-bottom: 1px solid rgba(255,255,255,0.55);
    cursor: pointer;
  }
  #s-site .srow:last-child { border-bottom: none; }
  #s-site .btn-ghost { background: rgba(255,255,255,0.7); border-color: rgba(255,255,255,0.6); }
  /* Home content sits right under the countdown hero — no extra top gap. */
  #s-home .content { padding-top: 0; }

  /* Small pill actions on card headers. These were bare <button>s with no background
     rule, so they fell back to the browser's native chrome. */
  .btn-pill {
    background: #FFFFFF; border: 1px solid #e3ded4; border-radius: 20px;
    padding: 6px 13px; font-size: 11px; font-weight: 500; color: #423d38;
    cursor: pointer; transition: border-color .18s ease, color .18s ease;
    font-family: inherit; white-space: nowrap;
  }
  .btn-pill:hover { border-color: #34537f; color: #34537f; }

  /* Design levers (sliders) */
  .lever-row { padding: 10px 0; border-bottom: 1px solid #e3ded4; }
  .lever-row:last-child { border-bottom: none; }
  .lever-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
  .lever-name { font-size: 13px; font-weight: 600; color: #2a2724; flex: 1; }
  .lever-price { font-size: 12px; font-weight: 700; color: #635c55; }
  .lever-range { -webkit-appearance: none; appearance: none; width: 100%; height: 4px;
    border-radius: 99px; background: #e3ded4; outline: none; }
  .lever-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none;
    width: 18px; height: 18px; border-radius: 50%; background: #635c55; cursor: pointer;
    border: 2px solid #fdfbf7; box-shadow: 0 1px 3px rgba(0,0,0,0.2); }
  .lever-range::-moz-range-thumb { width: 18px; height: 18px; border-radius: 50%;
    background: #635c55; cursor: pointer; border: 2px solid #fdfbf7; }
  .lever-scale { display: flex; justify-content: space-between; font-size: 10px; color:#736c63; margin-top: 3px; }
  .lever-locked { display: flex; align-items: center; gap: 8px; padding: 10px 0; border-bottom: 1px solid #e3ded4; }

  /* Guest tier stats */
  .guest-tier-stat { flex:1; background:#fdfbf7; border-radius:12px; padding:10px 12px; display:flex; flex-direction:column; gap:2px; }
  .gts-label { font-size:10px; color:#635c55; font-weight:600; letter-spacing:0.04em; text-transform:uppercase; }
  .gts-count { font-size:22px; font-weight:600; color:#2a2724; line-height:1.1; }
  .guest-row { display:flex; align-items:center; gap:10px; padding:9px 0; border-bottom:1px solid #e3ded4; }
  .guest-row:last-child { border-bottom:none; padding-bottom:0; }
  .guest-row:first-child { padding-top:0; }
  .guest-name { font-size:13px; font-weight:500; color:#2a2724; flex:1; }
  .guest-plus { font-size:11px; color:#34537f; font-weight:600; }
  .guest-tier-badge { font-size:10px; font-weight:700; padding:2px 8px; border-radius:99px; }
  .tier-a { background:#edf0e4; color:#4c6635; }
  .tier-b { background:#f9eeda; color:#96600c; }
  .tier-c { background:#f9eeda; color:#635c55; }
  .guest-remove { background:none; border:none; color:#e3ded4; cursor:pointer; font-size:16px; padding:2px; line-height:1; }
  .guest-remove:hover { color:#c0424c; }

  /* Vibe chips */
  .vibe-chips { display: flex; flex-wrap: wrap; gap: 6px; }
  .vibe-chip { font-size: 11px; font-weight: 600; padding: 5px 10px; border-radius: 99px; background: #fdfbf7; color: #635c55; }

  /* ===== Bottom sheet / modal ===== */
  .sheet-backdrop {
    position: absolute; inset: 0; background: rgba(24,36,32,0.45);
    display: none; align-items: flex-end; z-index: 20; border-radius: 40px; overflow: hidden;
  }
  .sheet-backdrop.show { display: flex; }
  .sheet {
    background: white; width: 100%; max-height: 88%; overflow-y: auto;
    border-radius: 24px 24px 0 0; padding: 8px 20px 24px;
    transform: translateY(100%); transition: transform 0.28s cubic-bezier(.2,.8,.2,1);
  }
  .sheet-backdrop.show .sheet { transform: translateY(0); }
  .sheet-grab { width: 40px; height: 4px; border-radius: 99px; background: #e3ded4; margin: 8px auto 14px; }

  .sheet-title { font-size: 20px; font-weight: 600; color: #2a2724; font-family: 'Cormorant Garamond', Georgia, serif; }
  .sheet-sub { font-size: 12px; color: #635c55; margin-top: 3px; margin-bottom: 14px; }

  .incl-ico { width: 30px; height: 30px; border-radius: 8px; background: #fdfbf7; display: flex; align-items: center; justify-content: center; color: #635c55; font-size: 15px; flex-shrink: 0; }
  .incl-name { font-size: 13px; font-weight: 600; color: #2a2724; }
  .incl-vendor { font-size: 11px; color: #635c55; margin-top: 1px; }

  .cost-total { display: flex; justify-content: space-between; align-items: baseline; padding: 12px 0 4px; border-top: 2px solid #e3ded4; margin-top: 4px; }
  .cost-total .ct-k { font-size: 13px; font-weight: 600; color: #2a2724; }
  .cost-total .ct-v { font-size: 20px; font-weight: 800; color: #2a2724; }

  /* Comparison stepper */
  .cmp-step-label { font-size: 11px; font-weight: 700; color: #34537f; letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 6px; }
  .cmp-q { font-size: 18px; font-weight: 700; color: #2a2724; margin-bottom: 14px; line-height: 1.3; }
  .cmp-opt { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 14px 16px; border: 1px solid #e3ded4; border-radius: 14px; background: #fdfbf7; cursor: pointer; margin-bottom: 10px; transition: all 0.15s; }
  .cmp-opt:hover { background: #fdfbf7; border-color: #e3ded4; }
  .cmp-opt i.lead { font-size: 20px; color: #635c55; }
  .cmp-opt .co-name { font-size: 14px; font-weight: 600; color: #2a2724; }
  .cmp-opt .co-meta { font-size: 11px; color: #635c55; margin-top: 1px; }
  .cmp-opt .co-arrow { margin-left: auto; color:#736c63; font-size: 18px; }
  .suggest-banner { background: #1f3049; color: #fdfbf7; border-radius: 14px; padding: 12px 14px; font-size: 12px; line-height: 1.45; margin-bottom: 14px; display: flex; gap: 10px; align-items: flex-start; }
  .suggest-banner i { color: #34537f; font-size: 18px; flex-shrink: 0; margin-top: 1px; }
  .pick-row { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 1.5px solid #e3ded4; border-radius: 14px; background: #fdfbf7; cursor: pointer; margin-bottom: 8px; transition: all 0.15s; }
  .pick-row.sel { border-color: #34537f; background: #edf0e4; }
  .pick-check { width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid #e3ded4; flex-shrink: 0; display: flex; align-items: center; justify-content: center; color: white; font-size: 13px; transition: all 0.15s; }
  .pick-row .pick-check i { opacity: 0; }
  .pick-row.sel .pick-check { background: #7a2e4d; border-color: #34537f; }
  .pick-row.sel .pick-check i { opacity: 1; }
  .pick-name { font-size: 13px; font-weight: 600; color: #2a2724; }
  .pick-meta { font-size: 11px; color: #635c55; margin-top: 1px; }
  .pick-suggest-tag { font-size: 9px; font-weight: 700; color: #96600c; background: #f9eeda; padding: 2px 7px; border-radius: 99px; margin-left: auto; }
  .cmp-back-link { background: none; border: none; color: #635c55; font-weight: 600; font-size: 13px; cursor: pointer; padding: 4px 0; display: inline-flex; align-items: center; gap: 2px; margin-bottom: 10px; }

  /* Timeline Detail View */
  /* Checklist "Right now" focus hero — keeps an early-stage couple from drowning */
  .tl-focus { background: linear-gradient(180deg, #f9eeda, #FFFFFF); border: 1px solid #e3ded4; border-radius: 18px; padding: 18px 18px 16px; margin-bottom: 18px; }
  .tl-focus-eyebrow { font-size: 10px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: #34537f; margin-bottom: 6px; }
  .tl-focus-head { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 23px; font-weight: 600; color: #2a2724; line-height: 1.14; }
  .tl-focus-sub { font-size: 12.5px; color:#736c63; margin: 4px 0 14px; line-height: 1.45; }
  .tl-focus-tasks { display: flex; flex-direction: column; gap: 9px; margin-bottom: 14px; }
  .tl-focus-item { display: flex; align-items: center; gap: 12px; background: #fff; border: 1px solid #f7f4ed; border-radius: 14px; padding: 12px 14px; cursor: pointer; box-shadow: 0 2px 10px rgba(24,36,32,0.05); transition: box-shadow 0.15s, border-color 0.15s; }
  .tl-focus-item:hover { box-shadow: 0 6px 16px rgba(24,36,32,0.12); border-color: #f1efd8; }
  .tl-focus-item .tlf-num { width: 26px; height: 26px; border-radius: 50%; background: linear-gradient(135deg, #d5cc51, #34537f); color: #fff; font-weight: 700; font-size: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
  .tl-focus-item .tlf-text { font-size: 14px; font-weight: 600; color: #2a2724; }
  .tl-focus-item .tlf-when { font-size: 11px; color:#736c63; margin-top: 1px; }

  .timeline-phase { margin-bottom: 20px; }

  .timeline-tasks { display: flex; flex-direction: column; gap: 8px; }
  .timeline-task {
    background: white; border: 1px solid #e3ded4; border-radius: 10px; padding: 12px;
    display: flex; align-items: flex-start; gap: 10px; cursor: pointer; transition: all 0.15s;
  }
  .timeline-task:hover { background: #f7f4ed; border-color: #34537f; }
  .timeline-task-check {
    width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid #e3ded4;
    flex-shrink: 0; display: flex; align-items: center; justify-content: center;
    transition: all 0.15s;
  }
  .timeline-task.done .timeline-task-check {
    background: #7a2e4d; border-color: #34537f;
  }
  .timeline-task.done .timeline-task-check i { color: white; font-size: 12px; }
  .timeline-task.done .timeline-task-text { color:#736c63; text-decoration: line-through; }
  .timeline-task-content { flex: 1; }
  .timeline-task-text { font-size: 13px; color: #2a2724; font-weight: 500; line-height: 1.4; }
  .timeline-task-category { font-size: 10px; color: #34537f; font-weight: 600; margin-top: 3px; text-transform: uppercase; letter-spacing: 0.03em; }
  .timeline-task-guidance { font-size: 12px; color: #635c55; margin-top: 6px; line-height: 1.4; padding: 8px; background: #f7f4ed; border-radius: 6px; display: none; }
  .timeline-task.expanded .timeline-task-guidance { display: block; }
  .timeline-task-action {
    font-size: 11px; color: #34537f; margin-top: 6px; font-weight: 600; cursor: pointer;
  }

  /* ---- Journey redesign: hero ring + collapsed chapter cards ---- */
  .jr-topline { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; }
  .jr-topline .jr-days { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 30px; font-weight: 600; color: #2a2724; line-height: 1; }
  .jr-topline .jr-dayslabel { font-size: 11px; color:#736c63; font-weight: 600; margin-top: 3px; }
  .jr-topline .jr-count { margin-left: auto; text-align: right; font-size: 11.5px; color:#736c63; font-weight: 600; line-height: 1.35; }
  .jr-chapter { display: flex; align-items: center; gap: 12px; background: #f7f4ed; border: 1px solid #edf0e4; padding: 13px 14px; border-radius: 14px; margin-bottom: 8px; cursor: pointer; transition: background .15s, border-color .15s; }
  .jr-chapter:hover { background: #f7f4ed; border-color: #e3ded4; }
  .jr-chapter.done { background: #edf0e4; border-color: #edf0e4; }
  .jr-chapter-title { font-size: 14.5px; font-weight: 700; color: #2a2724; display: flex; align-items: center; gap: 8px; }
  .jr-chapter.done .jr-chapter-title { color: #4c6635; }
  .jr-chapter-sub { font-size: 11px; color:#736c63; margin-top: 2px; font-weight: 600; }
  .jr-now { font-size: 9px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; color: #fff; background: linear-gradient(135deg,#d5cc51,#34537f); padding: 2px 8px; border-radius: 99px; }
  .jr-chapter-marker { flex-shrink: 0; display: flex; }
  .jr-mini-done { width: 30px; height: 30px; border-radius: 50%; background: #74904f; display: flex; align-items: center; justify-content: center; }
  .jr-mini-done i { color: #fff; font-size: 16px; }
  .jr-chapter .arrow { transition: transform .2s; color: #e0a340; flex-shrink: 0; }
  .jr-chapter .arrow.open { transform: rotate(90deg); }
  .jr-done-toggle { display: flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 700; color: #74904f; background: #edf0e4; border: 1px solid #edf0e4; padding: 9px 12px; border-radius: 10px; cursor: pointer; }
  .jr-done-toggle i.ti-check { font-size: 14px; }
  .jr-done-toggle .ti-chevron-down { transition: transform .2s; }
  .jr-done-toggle.open .ti-chevron-down { transform: rotate(180deg); }
  .timeline-tasks.hide-done .timeline-task.done { display: none; }

  /* "Add your own to-do" — the couple's own items, sitting alongside the generated ones.
     One opener per phase (so the phase is implied) plus one in the hero (which asks when). */
  .tl-add { margin-top: 2px; }
  .tl-add-open {
    display: flex; align-items: center; justify-content: center; gap: 7px;
    font-size: 12.5px; font-weight: 700; color: #34537f;
    background: #fdfbf7; border: 1.5px dashed #cfc9bc; border-radius: 12px;
    padding: 11px 12px; cursor: pointer; transition: background .15s, border-color .15s;
  }
  .tl-add-open:hover { background: #f7f4ed; border-color: #34537f; }
  .tl-add-open i { font-size: 15px; }
  .tl-add-form { display: flex; flex-direction: column; gap: 8px; background: #fdfbf7; border: 1.5px solid #34537f; border-radius: 12px; padding: 10px; }
  .tl-add-row { display: flex; gap: 8px; align-items: center; }
  .tl-add-form input {
    flex: 1; min-width: 0; padding: 9px 11px; border: 1px solid #e3ded4; border-radius: 9px;
    font-size: 13.5px; font-family: inherit; background: #fff; color: #2a2724; outline: none; box-sizing: border-box;
  }
  .tl-add-form input:focus { border-color: #34537f; }
  .tl-add-form select {
    flex: 1; min-width: 0; padding: 8px 9px; border: 1px solid #e3ded4; border-radius: 9px;
    font-size: 12.5px; font-family: inherit; background: #fff; color: #635c55;
  }
  .tl-add-go { padding: 9px 18px; border: none; border-radius: 9px; background: #7a2e4d; color: #fff; font-size: 12.5px; font-weight: 700; cursor: pointer; flex-shrink: 0; }
  .tl-add-cancel { background: none; border: none; color:#736c63; font-size: 12px; font-weight: 600; cursor: pointer; padding: 6px 2px; flex-shrink: 0; }
  .tl-add-when { font-size: 11.5px; font-weight: 700; color:#736c63; flex-shrink: 0; }
  .tl-mine-tag { font-size: 9px; font-weight: 700; color: #4c6635; background: #edf0e4; padding: 2px 6px; border-radius: 99px; vertical-align: middle; }
  /* A to-do she just added, so it's obvious where it landed. */
  @keyframes todoLand { 0% { background: #f9eeda; border-color: #e0a340; } 100% { background: #fff; border-color: #e3ded4; } }
  .timeline-task.just-added { animation: todoLand 1.8s ease; }

  /* ---- "Set the vibe" intake ---- */
  .vibe-card { background: linear-gradient(180deg,#fdfbf7,#f9eeda); border: 1px solid #e3ded4; border-radius: 18px; padding: 18px; margin-bottom: 18px; }
  .vibe-eyebrow { font-size: 10px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: #34537f; margin-bottom: 6px; }
  .vibe-title { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 20px; font-weight: 600; color: #2a2724; line-height: 1.2; }
  .vibe-q { font-size: 12.5px; font-weight: 700; color: #2a2724; margin: 14px 0 7px; }
  .vibe-hint { font-size: 11px; font-weight: 500; color:#736c63; }
  .vibe-chips { display: flex; flex-wrap: wrap; gap: 7px; }
  .vibe-chip { font-size: 12.5px; font-weight: 600; color: #96600c; background: #fff; border: 1px solid #e3ded4; border-radius: 99px; padding: 8px 14px; cursor: pointer; transition: background .12s, border-color .12s, color .12s; }
  .vibe-chip:hover { border-color: #d5cc51; }
  .vibe-chip.on { background: linear-gradient(135deg,#d5cc51,#34537f); color: #fff; border-color: #34537f; }
  .vibe-save { width: 100%; margin-top: 16px; padding: 12px; border: none; border-radius: 12px; background: #1f3049; color: #fdfbf7; font-size: 13.5px; font-weight: 700; cursor: pointer; }
  .vibe-skip { text-align: center; margin-top: 10px; font-size: 12px; color: #e0a340; cursor: pointer; }
  .vibe-adjust { text-align: right; margin: -6px 2px 14px; }
  .vibe-adjust span { font-size: 11.5px; color: #34537f; cursor: pointer; font-weight: 600; }
  .vibe-payoff { display: flex; gap: 9px; align-items: flex-start; background: #edf0e4; border: 1px solid #edf0e4; border-radius: 12px; padding: 12px 14px; margin-bottom: 16px; font-size: 12.5px; color: #4c6635; font-weight: 600; line-height: 1.45; }

  .bplan-main { flex: 1; min-width: 0; }
  .bplan-name { font-size: 13.5px; font-weight: 700; color: #2a2724; display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
  .bplan-badge { font-size: 9px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; padding: 2px 7px; border-radius: 99px; display: inline-flex; align-items: center; gap: 3px; }
  .bplan-bar { height: 5px; background: #e3ded4; border-radius: 3px; margin-top: 6px; overflow: hidden; }
  .bplan-bar > div { height: 100%; border-radius: 3px; transition: width .4s; }
  .bplan-note { font-size: 11px; margin-top: 5px; font-weight: 600; line-height: 1.4; }
  .bplan-note a { color: inherit; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
  .bplan-amt { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 19px; font-weight: 600; color: #2a2724; cursor: pointer; white-space: nowrap; }
  .bplan-amt .ti { font-size: 10px; color: #34537f; }
  .bplan-amt-input { width: 92px; padding: 4px 7px; border: 1px solid #d5cc51; border-radius: 7px; font-size: 15px; font-family: inherit; text-align: right; }

  .bplan-foot { font-size: 11px; color:#736c63; margin-top: 12px; padding-top: 10px; border-top: 1px solid #f7f4ed; line-height: 1.5; }
  .bplan-invite { display: flex; gap: 8px; align-items: flex-start; background: #f9eeda; border: 1px solid #e3ded4; border-radius: 12px; padding: 11px 13px; margin-top: 12px; font-size: 12px; color: #96600c; font-weight: 600; line-height: 1.45; }
  .bplan-invite a { color: #34537f; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
  .bplan-invite .ti { color: #d5cc51; font-size: 15px; flex-shrink: 0; margin-top: 1px; }
  .bplan-celebrate { display: flex; gap: 8px; align-items: flex-start; background: #edf0e4; border: 1px solid #edf0e4; border-radius: 12px; padding: 10px 13px; margin-top: 12px; font-size: 12px; color: #4c6635; font-weight: 600; line-height: 1.45; }
  .bplan-celebrate .ti { color: #74904f; font-size: 15px; flex-shrink: 0; margin-top: 1px; }
  .bplan-log { display: inline-flex; align-items: center; gap: 3px; font-size: 10.5px; font-weight: 600; color:#736c63; cursor: pointer; margin-top: 6px; }
  .bplan-log:hover { color: #34537f; }
  .bplan-log-input { width: 140px; padding: 4px 7px; border: 1px solid #d5cc51; border-radius: 7px; font-size: 13px; font-family: inherit; margin-top: 6px; }

  /* --- Budget hero: are we on track (paid / still owed / left), Journey-warm --- */
  .bud-hero { background: linear-gradient(158deg, #fdfbf7 0%, #f7f4ed 100%); border-color: #e3ded4; }
  .bh-top { display: flex; align-items: flex-start; gap: 14px; }
  .bh-big { font-family: 'Cormorant Garamond', Georgia, serif; font-size: 38px; font-weight: 600; color: #2a2724; line-height: 1; }
  .bh-big.over { color: #c0424c; }
  .bh-biglabel { font-size: 11px; color:#736c63; font-weight: 600; margin-top: 5px; }
  .bh-stats { margin-left: auto; text-align: right; display: flex; flex-direction: column; gap: 4px; }
  .bh-stat { display: flex; align-items: center; justify-content: flex-end; gap: 9px; font-size: 11.5px; color:#736c63; font-weight: 600; white-space: nowrap; }
  .bh-stat b { color: #2a2724; font-weight: 700; font-size: 12.5px; }
  .bh-stat .dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
  .bh-stat.tap { cursor: pointer; }
  .bh-stat.tap b { border-bottom: 1px dashed #d5cc51; }
  .bh-bar { display: flex; height: 10px; border-radius: 99px; background: #e3ded4; overflow: hidden; margin: 15px 0 0; }
  .bh-bar > div { height: 100%; transition: width .45s ease; }
  .bh-note { font-size: 11.5px; font-weight: 600; line-height: 1.45; color:#736c63; margin-top: 9px; }
  .bh-note.warn { color: #c0424c; }
  .bh-note a { color: #34537f; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }

  /* --- One merged category row: the money AND the vendor, joined on the canonical id --- */
  .bcat-row { display: flex; align-items: center; gap: 11px; padding: 12px 0; border-top: 1px solid #f7f4ed; cursor: pointer; }
  .bcat-row:hover .bcat-name { color: #96600c; }
  .bcat-ico { width: 34px; height: 34px; border-radius: 10px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; align-self: flex-start; margin-top: 2px; }
  .bcat-ico i { font-size: 16px; }
  .bcat-v { font-size: 9px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; padding: 2px 7px; border-radius: 99px; display: inline-flex; align-items: center; gap: 3px; color:#736c63; background: #f7f4ed; max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .bcat-v.on { color: #376b4b; background: #e6f0e9; }
  .bcat-chev { color: #cfc9bc; font-size: 15px; flex-shrink: 0; }
  /* "How these numbers were set" — the split shows its work instead of asserting it */
  /* Sits ABOVE the category rows — the explanation should arrive before the numbers it explains */
  .bx-toggle { font-size: 11.5px; font-weight: 600; color: #34537f; cursor: pointer; display: flex; align-items: center; gap: 5px; margin: 10px 0 2px; }
  .bx-toggle i { transition: transform .2s; }
  .bx-body { background: #f7f4ed; border: 1px solid #edf0e4; border-radius: 12px; padding: 12px 13px; margin: 9px 0 4px; }
  .bx-line { font-size: 11.5px; color: #635c55; line-height: 1.5; margin-bottom: 7px; }
  .bx-line b { color: #2a2724; }
  .bx-warn { display: flex; gap: 7px; align-items: flex-start; font-size: 11px; color: #96600c; background: #f9eeda; border-radius: 9px; padding: 8px 10px; margin: 8px 0; line-height: 1.45; }
  .bx-warn i { font-size: 13px; flex-shrink: 0; margin-top: 1px; }
  .bx-warn a { color: #96600c; text-decoration: underline; cursor: pointer; }
  .bx-head { display: flex; font-size: 9px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color:#736c63; margin: 11px 0 3px; padding-top: 9px; border-top: 1px solid #efebe1; }
  .bx-head .nm { flex: 1; }
  .bx-head .v, .bx-head .t { width: 52px; text-align: right; }
  .bx-row { display: flex; align-items: center; font-size: 11.5px; color: #635c55; padding: 3px 0; }
  .bx-row .nm { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .bx-row .v { width: 52px; text-align: right; font-weight: 700; color: #2a2724; }
  .bx-row .t { width: 52px; text-align: right; color: #96600c; }
  .bx-row.up .v { color: #96600c; }
  .bx-row.down .v { color: #4c6635; }
  .bx-cmp { border-top: 1px solid #efebe1; border-bottom: 1px solid #efebe1; margin: 10px 0; padding: 9px 0; }
  .bx-chips { display: flex; flex-wrap: wrap; gap: 6px; }
  .bx-chip { font-size: 11px; font-weight: 700; color: #96600c; background: #f9eeda; border: 1px solid #e0a340; border-radius: 99px; padding: 4px 10px; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
  .bx-chip:hover { background: #e0a340; }
  .bx-chip.move { color: #96600c; background: transparent; border-color: #e0a340; border-style: dashed; }
  .bx-chip.move:hover { background: #f7f4ed; border-style: solid; }
  .bx-preview { display: flex; gap: 6px; align-items: flex-start; font-size: 10.5px; font-weight: 600; color: #4c6635; background: #edf0e4; border: 1px solid #edf0e4; border-radius: 8px; padding: 6px 9px; margin-bottom: 9px; line-height: 1.45; }
  .bx-preview i { font-size: 12px; flex-shrink: 0; margin-top: 1px; }
  .bx-cmp-input { width: 150px; padding: 4px 9px; border: 1px solid #d5cc51; border-radius: 99px; font-size: 11.5px; font-family: inherit; }
  .bx-cmp-out { background: #fff; border: 1px solid #edf0e4; border-radius: 10px; padding: 10px 11px; margin-top: 9px; }
  .bx-cmp-actions { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }
  .rm-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 600; color: #635c55; background: #f7f4ed; border: 1px solid #f9eeda; border-radius: 99px; padding: 4px 9px; margin: 0 5px 5px 0; cursor: pointer; }
  .rm-chip:hover { color: #96600c; border-color: #e8737e; background: #f8e6e7; }
  .rm-chip i { font-size: 11px; color:#736c63; }
  .bx-tag { font-size: 8.5px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; color:#736c63; background: #f9eeda; border-radius: 99px; padding: 1px 5px; margin-left: 5px; }
  .bcat-yours { font-size: 10px; font-weight: 600; color:#736c63; margin-top: 5px; }
  .bcat-yours a { color: #34537f; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; white-space: nowrap; }
  .bcat-more { font-size: 12px; font-weight: 600; color: #34537f; cursor: pointer; padding: 11px 0 2px; border-top: 1px solid #f7f4ed; display: flex; align-items: center; gap: 5px; }
  .bcat-empty { font-size: 12px; color: #635c55; padding: 10px 0; text-align: center; }
  .ledger-head { font-size: 10px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color:#736c63; margin: 12px 0 2px; }
  .ledger-head:first-child { margin-top: 2px; }

  /* Beta notices — one style for anything not fully wired, so testers don't spend
     their time reporting what we already know. */
  .beta-note { display: flex; gap: 9px; align-items: flex-start; background: #fdf6e7;
    border: 1px solid #f0e2c2; border-radius: 12px; padding: 11px 13px; margin: 0 0 14px;
    font-size: 12px; color: #8a6d1f; line-height: 1.5; }
  .beta-note .ti { font-size: 15px; flex-shrink: 0; margin-top: 1px; color: #c79a2b; }
  .beta-note b { color: #6f570f; }

  .team-row { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid #e3ded4; }
  .team-row:last-of-type { border-bottom: none; }
  .team-role { font-size: 10px; font-weight: 600; color: #635c55; background: #e3ded4; padding: 3px 8px; border-radius: 99px; margin-left: auto; white-space: nowrap; }
  .team-remove { background: none; border: none; color:#736c63; cursor: pointer; font-size: 16px; padding: 2px; }
  .team-remove:hover { color: #c0424c; }

  @media (prefers-reduced-motion: reduce) {
    .orb-ring { animation: none; opacity: 0; }
    .wave span { animation: none; }
    .sheet, .sheet-backdrop.show .sheet { transition: none; }
  }
}
.wk-home,.wk-onboarding{color:var(--color-text);line-height:1.5;font-size:15px}
.wk-home{padding:18px 20px 88px;max-width:640px;margin:auto}
.wk-onboarding{padding:30px 24px;max-width:500px;margin:auto}
.wk-home h1,.wk-home h2,.wk-onboarding h1{font-family:'Cormorant Garamond',Georgia,serif;font-weight:500;line-height:1.12;margin:10px 0 18px;text-wrap:balance}
.wk-home h1,.wk-onboarding h1{font-size:clamp(32px,5vw,44px)}
.wk-home p,.wk-onboarding p{color:var(--color-text-secondary)}
.wk-eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:.14em;color:var(--color-text-secondary)}
.wk-button{padding:12px 20px;border-radius:999px;border:1px solid var(--color-accent-green);background:var(--color-accent-green);color:var(--color-bg);font:inherit;font-size:14px;cursor:pointer;min-height:44px}
.wk-secondary{background:transparent;color:var(--color-text);border-color:var(--color-border-strong)}
.wk-button:disabled,.wk-stages button:disabled{opacity:.55;cursor:wait}
.wk-home button:focus-visible,.wk-onboarding :focus-visible{outline:3px solid var(--color-accent-green);outline-offset:4px}
.wk-onboarding h1:focus{outline:none}
.wk-onboarding label{display:block;margin:16px 0 6px;font-weight:500}
.wk-onboarding input,.wk-onboarding select{box-sizing:border-box;width:100%;border:1px solid var(--color-border-strong);border-radius:10px;background:var(--color-bg);color:var(--color-text);padding:12px;font:inherit;font-size:16px;min-height:46px}
.wk-onboarding .wk-error{color:var(--color-danger,#b23b40);min-height:24px}.wk-onboarding .wk-button{margin:6px 8px 6px 0}
.wk-stages{display:grid;gap:12px;margin-top:26px}.wk-stages button{padding:20px;border:1px solid var(--color-border-strong);border-radius:14px;background:var(--color-bg-surface);color:var(--color-text);font:inherit;text-align:left;cursor:pointer}
.wk-stages strong,.wk-stages span{display:block}.wk-stages span{font-size:13px;color:var(--color-text-secondary);margin-top:5px}
.wk-greeting-row,.wk-greeting-meta{display:flex;align-items:center;gap:12px}.wk-greeting-row{justify-content:space-between}
.wk-home .wk-greeting h1{font-size:28px;font-weight:600;margin:0}
.wk-greeting-actions{display:flex;gap:8px;flex:none}
.wk-icon-button{width:44px;height:44px;border-radius:50%;border:1px solid var(--color-border);background:var(--color-bg-surface);color:var(--color-text);font-size:17px;display:grid;place-items:center;cursor:pointer}
.wk-greeting-meta{margin-top:8px;font-size:13px}.wk-greeting-meta button{display:inline-flex;align-items:center;gap:6px;border:0;background:none;color:var(--color-text);font:inherit;padding:8px 0;min-height:44px;cursor:pointer}
.wk-greeting-meta .wk-pill{margin-left:auto;border:1px solid var(--color-border-strong);border-radius:999px;padding:6px 12px;min-height:0;color:var(--color-text-secondary)}
.wk-hero{position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;width:100%;height:236px;margin:14px 0 12px;padding:20px;border:0;border-radius:24px;background:#2b3a2f;color:#fff;font:inherit;text-align:center;cursor:pointer;box-shadow:0 12px 28px -10px rgba(66,47,49,.18)}
.wk-hero-photo{position:absolute;inset:0;background:linear-gradient(145deg,rgba(0,0,0,0) 25%,rgba(0,0,0,.7) 52.5%,rgba(0,0,0,.85) 75%),var(--hero-photo,linear-gradient(150deg,#4f7355,#243027)) center/cover no-repeat}
.wk-hero>span:not(.wk-hero-photo){position:relative}
.wk-hero-edit{align-self:flex-start;display:inline-flex;align-items:center;gap:5px;padding:7px 12px;border-radius:16px;background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.4);font-size:12px}
.wk-hero-count strong{display:block;font:500 68px/0.9 'Cormorant Garamond',Georgia,serif;letter-spacing:-.015em}
.wk-hero-count span{display:block;margin-top:8px;font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:rgba(255,255,255,.85)}
.wk-hero-sub{font-size:13px;color:rgba(255,255,255,.9)}
.wk-home-body{display:grid;gap:12px}
.wk-card{border:1px solid var(--color-border);border-radius:16px;background:var(--color-bg-surface);color:var(--color-text)}
.wk-next{padding:18px}.wk-home .wk-next h2{font-size:22px;margin:0 0 12px}.wk-next p{font-size:12px;margin:10px 0 0}
.wk-talk,.wk-links button,.wk-metrics button{display:flex;align-items:center;gap:13px;width:100%;font:inherit;color:var(--color-text);text-align:left;cursor:pointer}
.wk-talk{padding:14px 16px}.wk-talk strong,.wk-links strong{display:block;font-size:15px;font-weight:600}.wk-talk span span,.wk-links span span{display:block;font-size:12.5px;color:var(--color-text-secondary)}
.wk-talk-mic{width:44px;height:44px;flex:none;border-radius:8px;display:grid;place-items:center;font-size:18px;color:#fff;background:linear-gradient(120deg,#2e6b4a,#1a3d2e)}
.wk-chevron{margin-left:auto;flex:none;font-size:16px;color:var(--color-text-secondary)}
.wk-metrics{display:grid;grid-template-columns:1fr 1fr;padding:8px}.wk-metrics button{display:block;border:0;background:none;padding:12px}
.wk-metrics button+button{border-left:1px solid var(--color-border)}
.wk-metric-label{display:block;margin-bottom:8px;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-secondary)}
.wk-metrics strong{font:500 26px/1 'Cormorant Garamond',Georgia,serif}
.wk-metrics .wk-metric-wide{grid-column:1/-1;display:flex;border-left:0;border-top:1px solid var(--color-border);margin-top:4px;padding-top:14px}
.wk-next-step{display:block;font-size:14px;line-height:1.35}
.wk-links{display:grid;padding:0 16px}.wk-links button{border:0;border-top:1px solid var(--color-border);background:none;padding:14px 0}.wk-links button:first-child{border-top:0}
.wk-link-icon{font-size:19px;color:var(--color-accent-green);flex:none}
@media(min-width:860px){.wk-home{max-width:1000px}.wk-hero{flex-direction:row;align-items:center;justify-content:center;gap:34px;text-align:left;padding:30px 32px}.wk-hero-edit{position:absolute!important;top:20px;left:20px}.wk-hero-count strong{font-size:62px}.wk-hero-sub{font-size:14px}.wk-home-body{grid-template-columns:1fr 1fr;grid-template-areas:'next metrics' 'talk talk' 'links links'}.wk-next{grid-area:next}.wk-metrics{grid-area:metrics}.wk-talk{grid-area:talk}.wk-links{grid-area:links;grid-template-columns:1fr 1fr;column-gap:32px}.wk-links button:nth-child(2){border-top:0}}
@media(prefers-reduced-motion:no-preference){.wk-button,.wk-card,.wk-stages button{transition:background-color .15s ease,border-color .15s ease}.wk-talk:hover,.wk-links button:hover,.wk-metrics button:hover{background:var(--color-bg-raised)}.wk-stages button:hover{background:var(--color-bg-raised)}}
#s-home,#s-onboard .ob-form{background:var(--color-bg)}
.wk-home,.wk-onboarding{background:var(--color-bg)}

.wk-agreement{display:flex;align-items:flex-start;gap:10px;margin:20px 0}.wk-agreement input{width:20px;min-height:20px;flex:none;margin-top:3px}.wk-agreement label{margin:0;font-size:13px;line-height:1.5}.wk-onboarding a{color:var(--color-accent-green);text-decoration:underline;text-underline-offset:3px}.wk-password{display:flex;gap:8px}.wk-password input{min-width:0}.wk-password button{background:var(--color-bg-surface);color:var(--color-text);border:1px solid var(--color-border-strong);border-radius:10px;padding:0 14px;min-height:46px;cursor:pointer}.wk-consent-details{background:var(--color-bg-surface);border:1px solid var(--color-border);border-radius:14px;padding:18px;margin:20px 0;font-size:13px}.wk-consent-details p:last-child{margin-bottom:0}

.wk-consent-details p{margin:12px 0}
.bd-composer{padding:0;align-items:flex-end}
.bd-composer textarea{flex:1;min-width:0;max-height:132px;overflow-y:auto;resize:none;padding:9px 14px;border:1px solid #e3ded4;border-radius:18px;background:#fff;color:#2a2724;font:inherit;font-size:16px;line-height:1.35;outline:none}
.bd-composer textarea::placeholder{color:#736c63}
.bd-composer textarea:focus-visible{border-color:#1f3049}
.bubble.agent p{margin:0}.bubble.agent p+p,.bubble.agent p+ul,.bubble.agent p+ol,.bubble.agent ul+p,.bubble.agent ol+p{margin-top:8px}
.bubble.agent ul,.bubble.agent ol{margin:6px 0 0;padding-left:18px}.bubble.agent li+li{margin-top:4px}
.vendor-tabs{display:flex;gap:4px;margin:0 16px 4px;border-bottom:1px solid #e3ded4}
.vendor-tabs button{border:0;background:none;padding:10px 4px;margin-right:14px;font:inherit;font-size:14px;font-weight:600;color:#635c55;border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;display:flex;align-items:center;gap:6px;min-height:44px}
.vendor-tabs button[aria-current="page"]{color:#2a2724;border-bottom-color:#1f3049}
.tl-ask-link{border:0;background:none;padding:0;font:inherit;color:#1f3049;font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.site-step+.site-step{border-top:1px solid rgba(255,255,255,.55)}
.vt-status.booked{color:#2f5e40}
/* The Wickette palette from the designers' Figma file (the same values as landing.css), for the
   surfaces moved to it so far: the tab bar, the sidebar and Explore. Dark mode follows the
   legacy roles: the OS setting unless data-theme says otherwise. Olive is for marks and bars,
   never text; moss is the accent that holds AA as text. */
:root {
  --wk-ground: #F7F4EC; --wk-card: #FFFFFF; --wk-ink: #141B3C; --wk-body: #3A4060; --wk-muted: #62667A;
  --wk-line: #E4E0D3; --wk-grip: #D3CFC2; --wk-lime: #CFE83A; --wk-on-lime: #141B3C; --wk-olive: #9BB51E;
  --wk-moss: #5C6B12; --wk-wash: #EEF6C4; --wk-plum: #8E1F5A; --wk-plum-wash: #F4E8EE;
  --wk-serif: 'Cormorant Garamond', Georgia, serif;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme='light']) {
    --wk-ground: #161a22; --wk-card: #1f2634; --wk-ink: #f2eee6; --wk-body: #d9d4ca; --wk-muted: #b4ada2;
    --wk-line: #2c3140; --wk-grip: #3d4354; --wk-olive: #b9d23a; --wk-moss: #CFE83A; --wk-wash: #2b311a;
    --wk-plum: #e391b8; --wk-plum-wash: #3a2230;
  }
}
[data-theme='dark'] {
  --wk-ground: #161a22; --wk-card: #1f2634; --wk-ink: #f2eee6; --wk-body: #d9d4ca; --wk-muted: #b4ada2;
  --wk-line: #2c3140; --wk-grip: #3d4354; --wk-olive: #b9d23a; --wk-moss: #CFE83A; --wk-wash: #2b311a;
  --wk-plum: #e391b8; --wk-plum-wash: #3a2230;
}
/* The tab bar and the desktop sidebar, from the Figma "Tab bar" component: Plan, Explore, the
   Ask Wickette button in the middle, Vendors, Guests. The bar stays about 66px tall, which the
   screens' bottom padding already clears; the button rides above it. */
.nav {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 6; display: flex; align-items: stretch;
  padding: 6px 0 calc(4px + env(safe-area-inset-bottom)); background: var(--wk-card); border-top: 1px solid var(--wk-line);
}
.nav-item, .nav-ask {
  flex: 1 1 0; min-width: 0; position: relative; border: 0; background: none; font: inherit; cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.nav-item {
  display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 4px 0 11px; color: var(--wk-muted);
  transition: color .15s;
}
.nav-item i { font-size: 24px; line-height: 1; }
.nav-label { font-size: 12.5px; line-height: 16px; white-space: nowrap; }
.nav-item.active { color: var(--wk-ink); }
.nav-item.active .nav-label { font-weight: 600; }
.nav-item.active::after {
  content: ''; position: absolute; bottom: 2px; left: 50%; width: 5px; height: 5px; margin-left: -2.5px; border-radius: 50%;
  background: var(--wk-olive);
}
.nav-dot {
  position: absolute; top: 2px; left: 50%; margin-left: 7px; width: 9px; height: 9px; border-radius: 50%;
  background: var(--wk-plum); border: 2px solid var(--wk-card);
}
.nav-ask { padding: 0; }
.nav-ask-disc {
  position: absolute; top: -26px; left: 50%; width: 60px; height: 60px; margin-left: -30px; border-radius: 50%;
  display: grid; place-items: center; background: var(--wk-lime); color: var(--wk-on-lime);
  border: 4px solid var(--wk-ground); box-shadow: 0 6px 18px rgba(20, 27, 60, .14); transition: transform .12s ease;
}
.nav-ask:active .nav-ask-disc { transform: scale(.95); }
.nav-item:focus-visible { outline: 3px solid var(--wk-ink); outline-offset: -3px; border-radius: 12px; }
.nav-ask:focus-visible { outline: none; }
.nav-ask:focus-visible .nav-ask-disc { outline: 3px solid var(--wk-ink); outline-offset: 2px; }

.sidebar { display: none; }
.side-brand {
  display: flex; align-items: center; gap: 8px; padding: 6px 12px 20px; font-family: var(--wk-serif); font-size: 22px;
  font-weight: 600; color: var(--color-text);
}
.side-brand .gate-mark { color: var(--wk-olive); }
.side-nav { display: flex; flex-direction: column; gap: 2px; }
.side-item, .side-foot {
  display: flex; align-items: center; gap: 12px; width: 100%; padding: 11px 12px; border: 0; border-radius: 12px;
  background: none; font: inherit; font-size: 14px; font-weight: 500; text-align: left; color: var(--color-text-secondary);
  cursor: pointer; transition: background .15s, color .15s;
}
.side-item i, .side-foot i { font-size: 20px; }
.side-item:hover, .side-foot:hover { background: var(--color-bg-surface); color: var(--color-text); }
.side-item.active { background: var(--wk-lime); color: var(--wk-on-lime); }
.side-item:focus-visible, .side-foot:focus-visible { outline: 3px solid var(--color-text); outline-offset: 2px; }
.side-foot { margin-top: auto; }
.side-ask { margin: 0 0 14px; border: 1px solid var(--color-border); color: var(--color-text); }
.side-ask-disc {
  flex: none; width: 28px; height: 28px; margin: -4px 0; border-radius: 50%; display: grid; place-items: center;
  background: var(--wk-lime); color: var(--wk-on-lime);
}
.side-ask.active .side-ask-disc { background: var(--wk-card); }

@media (min-width: 860px) {
  .sidebar {
    display: flex; flex-direction: column; flex-shrink: 0; width: 240px; height: 100dvh; padding: 24px 16px;
    background: var(--color-bg); color: var(--color-text); border-right: 1px solid var(--color-border);
  }
  #bottom-nav { display: none !important; }
}
@media (prefers-reduced-motion: reduce) {
  .nav-item, .nav-ask-disc, .side-item, .side-foot { transition: none; }
}
/* Explore, from the designers' Figma frames (2026-10-02). Unlayered and scoped to #s-feed, on the
   palette in palette.css. A phone gets a dark photo stage with the card's words on a plate; the
   sheets, the categories page and the desktop grid are light. Text over photos sits on plates
   opaque enough to hold AA over a white photo: the name plate is at least 92% night, the glass
   controls at least 62% with white text. Spacing variables live on .fx-root too, so the breadcrumb and toast
   overrides there recompute what depends on them. */
#s-feed, #s-feed .fx-root {
  --fx-night: #15140f;
  --fx-plate: rgba(21, 20, 15, .93);
  --fx-glass: rgba(17, 17, 17, .62);
  --fx-ink-2: rgba(255, 255, 255, .86);
  --fx-hair: rgba(255, 255, 255, .62);
  --fx-nav: 68px;
  --fx-toast: calc(var(--fx-nav) + 32px);
  --fx-clear: calc(var(--fx-nav) + 32px);
  --fx-photo-reserve: min(42%, 340px);
}
#s-feed .fx-crumb { --fx-toast: calc(var(--fx-nav) + 76px); --fx-clear: calc(var(--fx-nav) + 80px); }
#s-feed .fx-root.fx-has-bar { --fx-clear: calc(var(--fx-toast) + 62px); }
#s-feed {
  position: absolute; inset: 0; padding: 0; min-height: 0; color: #fff;
  background: linear-gradient(180deg, #3b362f 0%, var(--fx-night) 70%);
}
#s-feed .fx-sr {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}
#s-feed button { font: inherit; }
#s-feed .fx-root { position: absolute; inset: 0; overflow: hidden; }

/* ---- the top: search field and saved button over the card ---- */
#s-feed .fx-top {
  position: absolute; top: 0; left: 0; right: 0; z-index: 30; display: flex; flex-direction: column; gap: 8px;
  padding: calc(12px + env(safe-area-inset-top)) 16px 0; pointer-events: none;
}
#s-feed .fx-top > * { pointer-events: auto; }
#s-feed .fx-bar { display: flex; align-items: center; gap: 12px; }
#s-feed .fx-field-btn { position: relative; flex: 1; min-width: 0; }
#s-feed .fx-searchfield {
  width: 100%; min-height: 44px; display: flex; align-items: center; gap: 10px; padding: 0 16px; border-radius: 999px;
  border: 1px solid var(--fx-hair); background: var(--fx-glass); color: #fff; font-size: 15px; text-align: left; cursor: pointer;
  -webkit-backdrop-filter: blur(14px) saturate(1.2); backdrop-filter: blur(14px) saturate(1.2);
}
#s-feed .fx-searchfield i { font-size: 19px; color: #fff; }
#s-feed .fx-searchfield span:not(.fx-sr) { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#s-feed .fx-scoped .fx-searchfield { padding-right: 48px; font-weight: 600; }
#s-feed .fx-clear {
  position: absolute; top: 2px; right: 2px; width: 40px; height: 40px; border-radius: 50%; border: 0; display: grid;
  place-items: center; background: transparent; color: #fff; font-size: 18px; cursor: pointer;
}
#s-feed .fx-saved {
  position: relative; flex: none; width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--fx-hair);
  background: var(--fx-glass); color: #fff; display: grid; place-items: center; font-size: 21px; cursor: pointer;
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
}
#s-feed .fx-badge {
  position: absolute; top: -6px; right: -6px; min-width: 20px; height: 20px; padding: 0 5px; border-radius: 10px;
  background: var(--wk-lime); color: var(--wk-on-lime); font-size: 11px; font-weight: 700; line-height: 20px; text-align: center;
}

#s-feed .fx-notice {
  display: flex; align-items: center; gap: 10px; padding: 8px 8px 8px 14px; border-radius: 16px; font-size: 13px; line-height: 1.4;
  background: rgba(43, 31, 18, .95); border: 1px solid rgba(224, 163, 64, .5); color: #fff;
}
#s-feed .fx-notice > i { color: #f0c27a; font-size: 18px; flex: none; }
#s-feed .fx-notice-text { flex: 1; min-width: 0; }
#s-feed .fx-notice-btn {
  flex: none; min-height: 40px; padding: 0 14px; border-radius: 999px; border: 0; background: var(--wk-lime);
  color: var(--wk-on-lime); font-size: 13px; font-weight: 600; cursor: pointer;
}

/* ---- the stage ---- */
#s-feed .fx-stage { position: absolute; inset: 0; overflow: hidden; outline: none; }
#s-feed .fx-stage:focus-visible { box-shadow: inset 0 0 0 3px var(--wk-lime); }
#s-feed .fx-deck { position: absolute; inset: 0; }
#s-feed .fx-card { position: absolute; inset: 0; overflow: hidden; background: var(--fx-night); }
#s-feed .fx-card-next { z-index: 1; }
#s-feed .fx-card-active { z-index: 2; will-change: transform; animation: fx-rise .36s cubic-bezier(.22, 1, .36, 1) backwards; }
#s-feed .fx-spring { transition: transform .26s cubic-bezier(.22, 1, .36, 1); }
@keyframes fx-rise { from { opacity: 0; transform: translate3d(0, 22px, 0); } to { opacity: 1; transform: none; } }

#s-feed .fx-media {
  position: absolute; inset: 0; touch-action: pinch-zoom; cursor: grab; -webkit-user-select: none; user-select: none;
  -webkit-touch-callout: none;
}
#s-feed .fx-media:active { cursor: grabbing; }
#s-feed .fx-backdrop {
  position: absolute; inset: -10%; width: 120%; height: 120%; object-fit: cover; pointer-events: none;
  filter: blur(30px) brightness(.5) saturate(1.1); transform: translateZ(0);
}
#s-feed .fx-carousel { position: absolute; inset: 0; }
#s-feed .fx-slides { position: absolute; left: 0; right: 0; top: 0; bottom: var(--fx-photo-reserve); }
#s-feed .fx-slide { position: absolute; inset: 0; }
#s-feed .fx-photo {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; object-position: center;
  -webkit-user-drag: none; filter: drop-shadow(0 18px 30px rgba(0, 0, 0, .35));
}
#s-feed .fx-art { position: absolute; inset: 0; }
#s-feed .fx-art svg { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }

#s-feed .fx-flags { position: absolute; z-index: 4; top: calc(68px + env(safe-area-inset-top)); left: 16px; right: 16px; pointer-events: none; }
#s-feed .fx-flags .fx-tags { flex-direction: column; align-items: flex-start; }
#s-feed .fx-tags { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; }
#s-feed .fx-tag {
  display: inline-flex; align-items: center; gap: 5px; min-height: 28px; padding: 0 12px; border-radius: 999px;
  font-size: 13px; font-weight: 500; background: var(--wk-lime); color: var(--wk-on-lime);
}
#s-feed .fx-tag i { font-size: 14px; }
#s-feed .fx-booked, #s-feed .fx-verified { background: var(--wk-wash); color: #3c4610; }
#s-feed .fx-warn { background: var(--wk-plum-wash); color: #74184a; }

/* The name plate: transparent at its top edge, then solid enough for AA over a white photo. */
#s-feed .fx-plate {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 3; padding: 56px 20px var(--fx-clear); pointer-events: none;
  background: linear-gradient(to bottom, rgba(21, 20, 15, 0) 0, var(--fx-plate) 52px, rgba(14, 13, 10, .97));
}
#s-feed .fx-plate a, #s-feed .fx-plate button { pointer-events: auto; }
#s-feed .fx-name {
  margin: 0 0 6px; font-family: var(--wk-serif); font-size: clamp(30px, 8.6vw, 36px); line-height: 1.05; font-weight: 500;
  letter-spacing: -.01em; color: #fff; text-wrap: balance; overflow-wrap: anywhere;
}
#s-feed .fx-meta { margin: 0 0 3px; font-size: 14px; line-height: 1.45; color: var(--fx-ink-2); }
#s-feed .fx-price { margin: 3px 0 0; font-size: 16px; font-weight: 500; color: var(--wk-lime); }
#s-feed .fx-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 14px; }
#s-feed .fx-cta, #s-feed .fx-ghost {
  min-height: 44px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 0 18px;
  border-radius: 999px; font-size: 15px; font-weight: 500; text-decoration: none; cursor: pointer;
  transition: transform .12s, background .15s, color .15s;
}
#s-feed .fx-cta { border: 1px solid var(--wk-lime); background: var(--wk-lime); color: var(--wk-on-lime); }
#s-feed .fx-ghost { border: 1px solid var(--fx-hair); background: transparent; color: #fff; }
#s-feed .fx-ghost.on { background: #fff; border-color: #fff; color: var(--wk-on-lime); }
#s-feed .fx-cta:active, #s-feed .fx-ghost:active { transform: scale(.96); }
#s-feed .fx-cta[aria-disabled="true"] { opacity: .7; cursor: wait; }
#s-feed .fx-caption { margin: 12px 0 0; font-size: 12px; text-align: center; color: rgba(255, 255, 255, .8); }

#s-feed .fx-burst { position: absolute; inset: 0; z-index: 20; display: grid; place-items: center; pointer-events: none; }
#s-feed .fx-burst i {
  font-size: 112px; color: var(--wk-lime); opacity: 0; filter: drop-shadow(0 10px 30px rgba(207, 232, 58, .4));
  animation: fx-pop .8s ease-out forwards;
}
@keyframes fx-pop {
  0% { opacity: 0; transform: scale(.4); } 35% { opacity: 1; transform: scale(1.1); }
  70% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(1.2); }
}

/* ---- the toast (no timer: it stays until the next save or dismiss) ---- */
#s-feed .fx-undo {
  position: absolute; z-index: 26; left: 16px; right: 16px; bottom: var(--fx-toast); display: flex; align-items: center; gap: 10px;
  min-height: 48px; padding: 4px 6px 4px 18px; border-radius: 999px; background: #141B3C; color: #fff; font-size: 15px;
  box-shadow: 0 10px 26px rgba(20, 27, 60, .32);
}
#s-feed .fx-undo-mark { flex: none; color: var(--wk-lime); }
#s-feed .fx-undo span { flex: 1; min-width: 0; }
#s-feed .fx-undo-btn {
  flex: none; min-height: 40px; padding: 0 14px; border-radius: 999px; border: 0; background: transparent;
  color: var(--wk-lime); font-size: 15px; font-weight: 600; cursor: pointer;
}

/* ---- buttons shared by the light and dark surfaces ---- */
#s-feed .fx-btn {
  min-height: 44px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 0 20px;
  border-radius: 999px; border: 1px solid var(--wk-lime); background: var(--wk-lime); color: var(--wk-on-lime);
  font-size: 15px; font-weight: 500; cursor: pointer; text-decoration: none;
}
#s-feed .fx-btn.ghost { background: transparent; color: #fff; border-color: var(--fx-hair); }
#s-feed .fx-btn:disabled, #s-feed .fx-btn[aria-disabled="true"] { opacity: .65; cursor: wait; }
#s-feed .fx-textbtn {
  min-height: 44px; display: inline-flex; align-items: center; gap: 6px; padding: 0 4px; border: 0; background: none;
  color: inherit; font-size: 15px; font-weight: 500; cursor: pointer;
}
#s-feed .fx-textbtn i { font-size: 17px; }
#s-feed .fx-wide { width: 100%; }
#s-feed :is(.fx-searchfield, .fx-clear, .fx-saved, .fx-cta, .fx-ghost, .fx-btn, .fx-textbtn, .fx-notice-btn, .fx-undo-btn):focus-visible {
  outline: 3px solid var(--wk-lime); outline-offset: 2px;
}

/* ---- empty, loading, location and failure states on the stage ---- */
#s-feed .fx-empty {
  position: absolute; inset: 0; z-index: 5; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 18px; text-align: center; padding: 116px 24px var(--fx-clear); overflow-y: auto; color: var(--fx-ink-2);
}
#s-feed .fx-msg { width: 100%; max-width: 23rem; display: flex; flex-direction: column; align-items: center; gap: 10px; }
#s-feed .fx-msg-icon { font-size: 34px; color: var(--wk-lime); }
#s-feed .fx-msg-title {
  margin: 0; font-family: var(--wk-serif); font-size: 28px; line-height: 1.15; font-weight: 500; color: #fff; text-wrap: balance;
}
#s-feed .fx-msg-body { margin: 0; font-size: 15px; line-height: 1.55; }
#s-feed .fx-msg-small { margin: 0; font-size: 13px; color: var(--fx-ink-2); }
#s-feed .fx-msg-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 8px; }
#s-feed .fx-back { color: #fff; }
#s-feed .fx-where { text-align: left; align-items: stretch; }
#s-feed .fx-where .fx-msg-icon, #s-feed .fx-where .fx-msg-title, #s-feed .fx-where .fx-msg-body { text-align: center; align-self: center; }
#s-feed .fx-field-label { margin-top: 6px; font-size: 14px; font-weight: 600; color: #fff; }
#s-feed .fx-field {
  width: 100%; min-height: 48px; padding: 0 16px; border-radius: 14px; border: 1px solid var(--fx-hair);
  background: rgba(255, 255, 255, .08); color: #fff; font: inherit; font-size: 16px; outline: none;
}
#s-feed .fx-field::placeholder { color: rgba(255, 255, 255, .7); }
#s-feed .fx-field:focus-visible { border-color: var(--wk-lime); box-shadow: 0 0 0 2px rgba(207, 232, 58, .45); }
#s-feed .fx-err { margin: 0; font-size: 13px; color: #f6b3c9; }
#s-feed .fx-where .fx-msg-actions { justify-content: stretch; flex-direction: column; }

#s-feed .fx-loading { display: flex; flex-direction: column; align-items: center; gap: 22px; width: 100%; }
#s-feed .fx-skel {
  position: relative; overflow: hidden; width: min(260px, 70%); aspect-ratio: 4 / 5; border-radius: 22px;
  background: rgba(255, 255, 255, .05); border: 1px solid rgba(255, 255, 255, .08); display: flex; flex-direction: column;
  justify-content: flex-end; gap: 8px; padding: 18px;
}
#s-feed .fx-skel-photo { position: absolute; inset: 0 0 34% 0; background: rgba(255, 255, 255, .05); }
#s-feed .fx-skel-line { height: 10px; width: 72%; border-radius: 5px; background: rgba(255, 255, 255, .12); }
#s-feed .fx-skel-line.short { width: 44%; }
#s-feed .fx-skel::after {
  content: ''; position: absolute; inset: 0; transform: translateX(-100%);
  background: linear-gradient(100deg, transparent 20%, rgba(255, 255, 255, .08) 50%, transparent 80%);
  animation: fx-shimmer 1.8s ease-in-out infinite;
}
@keyframes fx-shimmer { to { transform: translateX(100%); } }
#s-feed .fx-loading-text { display: flex; flex-direction: column; align-items: center; gap: 10px; color: var(--wk-lime); }
#s-feed .fx-loading-text p { margin: 0; font-size: 15px; color: #fff; }
#s-feed .fx-loading-text .fx-loading-slow { max-width: 20rem; font-size: 13px; line-height: 1.5; color: var(--fx-ink-2); }

/* ---- light surfaces: the paused notice, the categories page, every sheet ---- */
#s-feed :is(.fx-paused, .fx-cats, .fx-dialog) { background: var(--wk-ground); color: var(--wk-ink); }
#s-feed :is(.fx-paused, .fx-cats, .fx-dialog) :is(.fx-btn.ghost) { background: var(--wk-card); color: var(--wk-ink); border-color: var(--wk-grip); }
#s-feed :is(.fx-paused, .fx-cats, .fx-dialog) :is(.fx-btn, .fx-textbtn, .fx-chipbtn, .fx-listbtn, .fx-x, .fx-tbtn, .fx-ask, .fx-go, a):focus-visible {
  outline: 3px solid var(--wk-ink); outline-offset: 2px;
}
#s-feed .fx-paused .fx-msg-title { color: var(--wk-ink); }
#s-feed .fx-paused .fx-msg-body { color: var(--wk-body); }
#s-feed .fx-paused .fx-msg-small { color: var(--wk-muted); }
#s-feed .fx-paused .fx-msg-icon { color: var(--wk-moss); }
#s-feed .fx-label { margin: 18px 0 8px; font-size: 13px; font-weight: 500; color: var(--wk-muted); }
#s-feed .fx-chiprow { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; }
#s-feed .fx-chipbtn {
  min-height: 36px; display: inline-flex; align-items: center; gap: 5px; padding: 0 14px; border-radius: 999px;
  border: 1px solid var(--wk-line); background: var(--wk-card); color: var(--wk-ink); font-size: 14px; cursor: pointer;
}
#s-feed .fx-chipbtn.on { background: var(--wk-ink); border-color: var(--wk-ink); color: var(--wk-lime); }
#s-feed .fx-chipbtn.booked i { color: var(--wk-moss); font-size: 15px; }
#s-feed .fx-grip { display: block; width: 36px; height: 4px; margin: 0 auto 14px; border-radius: 2px; background: var(--wk-grip); }

/* the categories page */
#s-feed .fx-cats {
  position: absolute; inset: 0; z-index: 5; overflow-y: auto; padding: calc(28px + env(safe-area-inset-top)) 20px var(--fx-clear);
}
#s-feed .fx-cats-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 18px; }
#s-feed .fx-cats-title { margin: 0; font-family: var(--wk-serif); font-size: 36px; line-height: 1.05; font-weight: 500; }
#s-feed .fx-cats-sub { margin: 4px 0 0; font-size: 14px; color: var(--wk-body); }
#s-feed .fx-cats-links { display: flex; flex-direction: column; align-items: flex-end; }
#s-feed .fx-cats-links .fx-textbtn { min-height: 36px; font-size: 15px; color: var(--wk-ink); }
#s-feed .fx-cats .fx-label { margin-top: 26px; font-size: 14px; font-weight: 400; }
#s-feed .fx-suggest { list-style: none; display: grid; gap: 14px; margin: 0; padding: 0; }
#s-feed .fx-suggest-card { padding: 16px; border-radius: 16px; border: 1px solid var(--wk-line); background: var(--wk-card); }
#s-feed .fx-suggest-card h4 { margin: 0; font-size: 16px; font-weight: 600; }
#s-feed .fx-suggest-card p { margin: 6px 0 0; font-size: 14px; color: var(--wk-muted); }
#s-feed .fx-suggest-card .fx-btn { min-height: 40px; margin-top: 12px; padding: 0 18px; }

/* ---- dialogs: bottom sheets on a phone, centred on desktop ---- */
#s-feed .fx-dialog {
  width: 100%; max-width: 100%; max-height: 90dvh; margin: auto 0 0; padding: 0; border: 0; border-radius: 22px 22px 0 0;
  overflow-y: auto; overscroll-behavior: contain; box-shadow: 0 -12px 40px rgba(0, 0, 0, .28);
}
#s-feed .fx-dialog::backdrop { background: rgba(10, 12, 20, .58); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
#s-feed .fx-dialog[open] { animation: fx-sheet-up .32s cubic-bezier(.22, 1, .36, 1); }
@keyframes fx-sheet-up { from { transform: translateY(40px); opacity: 0; } to { transform: none; opacity: 1; } }
@keyframes fx-sheet-down { from { transform: translateY(-40px); opacity: 0; } to { transform: none; opacity: 1; } }
#s-feed .fx-sheet-in { padding: 10px 20px 28px; }
#s-feed .fx-sheet-head { position: relative; padding-right: 50px; }
#s-feed .fx-sheet-title {
  margin: 12px 0 4px; font-family: var(--wk-serif); font-size: 32px; line-height: 1.08; font-weight: 500; outline: none;
  overflow-wrap: anywhere;
}
#s-feed .fx-sheet-meta { margin: 0; font-size: 14px; line-height: 1.5; color: var(--wk-muted); }
#s-feed .fx-x {
  position: absolute; top: -4px; right: -6px; width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--wk-line);
  background: var(--wk-card); color: var(--wk-ink); display: grid; place-items: center; font-size: 18px; cursor: pointer;
}
#s-feed .fx-strip {
  display: flex; gap: 10px; overflow-x: auto; margin: 16px -20px 0; padding: 0 20px 4px; scroll-snap-type: x proximity;
  scroll-padding-inline: 20px; outline: none;
}
#s-feed .fx-strip:focus-visible { box-shadow: inset 0 0 0 3px var(--wk-ink); }
#s-feed .fx-strip figure { position: relative; margin: 0; flex: none; scroll-snap-align: start; border-radius: 14px; overflow: hidden; }
#s-feed .fx-strip img { display: block; height: 196px; width: auto; min-width: 140px; max-width: 78vw; object-fit: cover; background: var(--wk-line); }
#s-feed .fx-strip figcaption {
  position: absolute; left: 0; right: 0; bottom: 0; padding: 22px 10px 8px; font-size: 11.5px; color: #fff;
  background: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .72));
}
#s-feed .fx-strip figcaption a { color: #fff; }
#s-feed .fx-strip-note { margin: 8px 0 0; font-size: 12.5px; color: var(--wk-muted); }
#s-feed .fx-dialog a { color: var(--wk-ink); text-underline-offset: 3px; }
#s-feed .fx-sec { margin-top: 26px; }
#s-feed .fx-sec-title { margin: 0 0 8px; font-family: var(--wk-serif); font-size: 26px; line-height: 1.15; font-weight: 500; }
#s-feed .fx-sec-sub { margin: -4px 0 12px; font-size: 13px; color: var(--wk-muted); }
#s-feed .fx-sheet-note { margin: 0 0 14px; font-size: 15px; line-height: 1.55; color: var(--wk-body); }
#s-feed .fx-table { margin: 0; border-radius: 16px; border: 1px solid var(--wk-line); background: var(--wk-card); padding: 2px 16px; }
#s-feed .fx-table > div { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; padding: 11px 0; }
#s-feed .fx-table > div + div { border-top: 1px solid var(--wk-line); }
#s-feed .fx-table dt { flex: none; font-size: 14px; color: var(--wk-muted); }
#s-feed .fx-table dd { margin: 0; min-width: 0; font-size: 14px; text-align: right; overflow-wrap: anywhere; }
#s-feed .fx-ask {
  padding: 0; border: 0; background: none; color: var(--wk-plum); font-size: 14px; text-decoration: underline;
  text-underline-offset: 3px; cursor: pointer;
}
#s-feed .fx-factors { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
#s-feed .fx-factors li { display: grid; grid-template-columns: 1fr auto; gap: 6px 12px; font-size: 14px; }
#s-feed .fx-factor-grade { color: var(--wk-moss); font-weight: 500; }
#s-feed .fx-factor-bar { grid-column: 1 / -1; height: 3px; border-radius: 2px; background: var(--wk-line); overflow: hidden; }
#s-feed .fx-factor-bar i { display: block; height: 100%; border-radius: 2px; background: var(--wk-olive); }
#s-feed :is(.fx-grade-fair, .fx-grade-weak) .fx-factor-grade { color: var(--wk-plum); }
#s-feed :is(.fx-grade-fair, .fx-grade-weak) .fx-factor-bar i { background: var(--wk-plum); }
#s-feed .fx-sheet-reason { margin: 16px 0 0; font-family: var(--wk-serif); font-size: 19px; line-height: 1.45; color: var(--wk-ink); }
#s-feed .fx-ctas { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 26px; }
#s-feed .fx-dialog .fx-btn.ghost.on { background: var(--wk-wash); border-color: var(--wk-olive); }
#s-feed .fx-steps { display: flex; flex-wrap: wrap; gap: 4px 18px; margin-top: 16px; padding-top: 6px; border-top: 1px solid var(--wk-line); }
#s-feed .fx-vendor-line { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; margin-top: 6px; }
#s-feed .fx-dialog .fx-textbtn { color: var(--wk-ink); text-decoration: underline; text-decoration-color: var(--wk-grip); text-underline-offset: 4px; }
#s-feed .fx-steps .fx-textbtn { text-decoration: none; }
#s-feed .fx-in { display: inline-flex; align-items: center; gap: 6px; margin: 0; font-size: 14px; font-weight: 600; color: var(--wk-moss); }
#s-feed .fx-dialog .fx-err { color: var(--wk-plum); margin-top: 10px; }
#s-feed .fx-fine { margin: 12px 0 0; font-size: 12.5px; line-height: 1.55; color: var(--wk-muted); }
#s-feed .fx-dialog .fx-tag { min-height: 26px; padding: 0 11px; font-size: 12px; }
#s-feed .fx-dialog .fx-booked, #s-feed .fx-dialog .fx-verified { color: var(--wk-moss); }
#s-feed .fx-dialog .fx-warn { color: var(--wk-plum); }
#s-feed .fx-hgroup { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 4px; }
#s-feed .fx-hgroup .fx-sec-title { margin: 0; font-size: 22px; }
#s-feed .fx-hlist { list-style: none; margin: 0; padding: 0; }
#s-feed .fx-hlist li {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 52px;
  border-top: 1px solid var(--wk-line); font-size: 15px;
}
#s-feed .fx-tbtn {
  flex: none; display: inline-flex; align-items: center; gap: 6px; min-height: 38px; padding: 0 14px; border-radius: 999px;
  border: 1px solid var(--wk-grip); background: var(--wk-card); color: var(--wk-ink); font-size: 14px; font-weight: 500; cursor: pointer;
}
#s-feed .fx-tbtn i { font-size: 15px; }
#s-feed .fx-tbtn.on { background: var(--wk-ink); border-color: var(--wk-ink); color: var(--wk-lime); }

/* the search sheet drops from the top */
#s-feed .fx-topsheet { margin: 0 0 auto; border-radius: 0 0 22px 22px; box-shadow: 0 12px 40px rgba(0, 0, 0, .28); }
#s-feed .fx-topsheet[open] { animation-name: fx-sheet-down; }
#s-feed .fx-topsheet .fx-sheet-in { padding: calc(14px + env(safe-area-inset-top)) 20px 10px; }
#s-feed .fx-topsheet .fx-grip { margin: 14px auto 0; }
#s-feed .fx-search-row {
  display: flex; align-items: center; gap: 10px; min-height: 52px; padding: 0 6px 0 16px; border-radius: 16px;
  border: 1px solid var(--wk-line); background: var(--wk-card);
}
#s-feed .fx-search-row:focus-within { border-color: var(--wk-ink); box-shadow: 0 0 0 2px var(--wk-wash); }
#s-feed .fx-search-row > i { font-size: 19px; color: var(--wk-muted); }
#s-feed .fx-search-row input {
  flex: 1; min-width: 0; min-height: 44px; border: 0; background: transparent; color: var(--wk-ink); font: inherit; font-size: 16px; outline: none;
}
#s-feed .fx-search-row input::placeholder { color: var(--wk-muted); }
#s-feed .fx-go {
  flex: none; width: 40px; height: 40px; border-radius: 50%; border: 0; display: grid; place-items: center;
  background: var(--wk-lime); color: var(--wk-on-lime); font-size: 19px; cursor: pointer;
}
#s-feed .fx-go[aria-disabled="true"] i { animation: fx-spin 1s linear infinite; }
@keyframes fx-spin { to { transform: rotate(360deg); } }
#s-feed .fx-topsheet .fx-err:empty { display: none; }
#s-feed .fx-topsheet .fx-err { margin-top: 8px; }
#s-feed .fx-list { list-style: none; margin: 0; padding: 2px 16px; border-radius: 16px; border: 1px solid var(--wk-line); background: var(--wk-card); }
#s-feed .fx-list li + li { border-top: 1px solid var(--wk-line); }
#s-feed .fx-listbtn {
  width: 100%; min-height: 46px; padding: 0; border: 0; background: none; color: var(--wk-ink); font-size: 15px; text-align: left; cursor: pointer;
}
#s-feed .fx-sheet-foot { display: flex; justify-content: space-between; gap: 12px; margin-top: 10px; }
#s-feed .fx-sheet-foot .fx-textbtn { color: var(--wk-ink); text-decoration: none; }

/* the first-visit coach */
#s-feed .fx-coach { max-width: min(340px, calc(100% - 40px)); margin: auto; border-radius: 22px; box-shadow: 0 24px 60px rgba(0, 0, 0, .35); }
#s-feed .fx-coach .fx-sheet-in { padding: 22px 20px 20px; }
#s-feed .fx-coach-title { margin: 0 0 16px; font-family: var(--wk-serif); font-size: 26px; line-height: 1.15; font-weight: 500; outline: none; }
#s-feed .fx-coach-list { list-style: none; display: grid; gap: 12px; margin: 0; padding: 0; }
#s-feed .fx-coach-list li { display: flex; align-items: center; gap: 12px; font-size: 15px; color: var(--wk-body); }
#s-feed .fx-coach-list strong { font-weight: 600; color: var(--wk-ink); }
#s-feed .fx-coach-ico {
  flex: none; width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; background: var(--wk-wash);
  color: var(--wk-moss); font-size: 13px; font-weight: 700;
}
#s-feed .fx-coach-ico i { font-size: 16px; }
#s-feed .fx-coach-or { margin: 14px 0 16px; font-size: 13.5px; color: var(--wk-muted); }
#s-feed .fx-coach .fx-btn { min-height: 48px; }

/* ---- desktop: a light page with an even grid ---- */
@media (min-width: 860px) {
  #s-feed { max-width: none; height: 100dvh; overflow-y: auto; background: var(--wk-ground); color: var(--wk-ink); }
  #s-feed .fx-root {
    position: relative; inset: auto; overflow: visible; max-width: 1240px; min-height: 100%; margin: 0 auto; padding: 0 28px 72px;
  }
  #s-feed .fx-top {
    position: sticky; top: 0; z-index: 20; padding: 20px 0 14px; gap: 10px; pointer-events: auto; background: var(--wk-ground);
    border-bottom: 1px solid var(--wk-line);
  }
  #s-feed .fx-title {
    margin: 0; flex: 1; min-width: 0; font-family: var(--wk-serif); font-size: 32px; line-height: 1.1; font-weight: 500;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  #s-feed .fx-bar-btns { flex: none; display: flex; gap: 8px; }
  #s-feed .fx-pill {
    min-height: 44px; display: inline-flex; align-items: center; gap: 6px; padding: 0 16px; border-radius: 999px;
    border: 1px solid var(--wk-line); background: var(--wk-card); color: var(--wk-ink); font-size: 14px; font-weight: 500;
    white-space: nowrap; cursor: pointer;
  }
  #s-feed .fx-pill i { font-size: 17px; }
  #s-feed .fx-pill:hover { border-color: var(--wk-grip); }
  #s-feed .fx-pill[aria-expanded="true"] { background: var(--wk-ink); border-color: var(--wk-ink); color: var(--wk-lime); }
  #s-feed :is(.fx-pill, .fx-btn, .fx-textbtn, .fx-notice-btn, .fx-tbtn, .fx-chipbtn, .fx-undo-btn):focus-visible {
    outline: 3px solid var(--wk-ink); outline-offset: 2px;
  }
  #s-feed .fx-notice { background: var(--wk-plum-wash); border-color: var(--wk-line); color: var(--wk-ink); }
  #s-feed .fx-notice > i { color: var(--wk-plum); }
  #s-feed .fx-err { color: var(--wk-plum); }

  #s-feed .fx-gridwrap { padding-top: 22px; }
  #s-feed .fx-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 22px; }
  #s-feed .fx-tile {
    position: relative; display: flex; flex-direction: column; overflow: hidden; border-radius: 18px; outline: none;
    background: var(--wk-card); border: 1px solid var(--wk-line); transition: box-shadow .2s ease, transform .2s ease;
  }
  #s-feed .fx-tile:hover { box-shadow: 0 16px 36px rgba(20, 27, 60, .12); transform: translateY(-2px); }
  #s-feed .fx-tile:focus-visible { outline: 3px solid var(--wk-ink); outline-offset: 3px; }
  #s-feed .fx-tile-photo { position: relative; aspect-ratio: 4 / 5; overflow: hidden; background: var(--wk-line); }
  #s-feed .fx-tile-photo img, #s-feed .fx-tile-photo svg {
    position: absolute; inset: 0; width: 100%; height: 100%; display: block; object-fit: cover; object-position: center 40%;
  }
  #s-feed .fx-tile-photo .fx-tags { position: absolute; top: 12px; left: 12px; right: 12px; }
  #s-feed .fx-tile-body { display: flex; flex-direction: column; gap: 6px; flex: 1; padding: 14px 16px 16px; }
  #s-feed .fx-tile-name { margin: 0; font-family: var(--wk-serif); font-size: 24px; line-height: 1.15; font-weight: 500; }
  #s-feed .fx-tile-open {
    padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; outline: none;
  }
  #s-feed .fx-tile-open::after { content: ''; position: absolute; inset: 0; z-index: 1; border-radius: 18px; }
  #s-feed .fx-tile-open:focus-visible::after { outline: 3px solid var(--wk-ink); outline-offset: -3px; }
  #s-feed .fx-tile-meta { margin: 0; font-size: 13.5px; line-height: 1.45; color: var(--wk-muted); }
  #s-feed .fx-tile-price { margin: 0; font-size: 14.5px; font-weight: 600; color: var(--wk-moss); }
  #s-feed .fx-credit { margin: 0; font-size: 12px; color: var(--wk-muted); }
  #s-feed .fx-tile-actions { position: relative; z-index: 2; display: flex; gap: 8px; margin-top: auto; padding-top: 10px; }
  #s-feed .fx-sentinel { height: 1px; }
  #s-feed .fx-grid-foot { display: flex; justify-content: center; padding: 30px 0 8px; }
  #s-feed .fx-grid-status { display: flex; align-items: center; gap: 10px; margin: 0; font-size: 14px; color: var(--wk-muted); }
  #s-feed .fx-grid-status .gate-load { color: var(--wk-moss); }

  #s-feed .fx-empty { position: static; min-height: 62vh; padding: 48px 24px; color: var(--wk-body); }
  #s-feed .fx-paused { position: absolute; inset: 0; min-height: 0; }
  #s-feed .fx-msg-title { color: var(--wk-ink); font-size: 30px; }
  #s-feed .fx-msg-small { color: var(--wk-muted); }
  #s-feed .fx-msg-icon, #s-feed .fx-loading-text { color: var(--wk-moss); }
  #s-feed .fx-loading-text p { color: var(--wk-ink); }
  #s-feed .fx-loading-text .fx-loading-slow { color: var(--wk-muted); }
  #s-feed .fx-skel { background: var(--wk-card); border-color: var(--wk-line); }
  #s-feed .fx-skel-photo, #s-feed .fx-skel-line { background: var(--wk-line); }
  #s-feed .fx-skel::after { background: linear-gradient(100deg, transparent 20%, rgba(255, 255, 255, .55) 50%, transparent 80%); }
  #s-feed .fx-btn.ghost { background: var(--wk-card); color: var(--wk-ink); border-color: var(--wk-grip); }
  #s-feed .fx-field-label { color: var(--wk-ink); }
  #s-feed .fx-field { background: var(--wk-card); color: var(--wk-ink); border-color: var(--wk-grip); }
  #s-feed .fx-field::placeholder { color: var(--wk-muted); }
  #s-feed .fx-field:focus-visible { border-color: var(--wk-ink); box-shadow: 0 0 0 2px var(--wk-wash); }

  #s-feed .fx-undo {
    position: fixed; left: calc(240px + (100vw - 240px) / 2); right: auto; bottom: 24px; transform: translateX(-50%);
    width: max-content; max-width: min(560px, calc(100vw - 280px));
  }
  #s-feed .fx-cats { position: static; max-width: 760px; padding: 36px 0 48px; overflow: visible; }
  #s-feed .fx-suggest { grid-template-columns: 1fr 1fr; }

  #s-feed .fx-dialog { max-width: 640px; max-height: 86dvh; margin: auto; border-radius: 22px; box-shadow: 0 24px 60px rgba(0, 0, 0, .3); }
  #s-feed .fx-dialog .fx-grip { display: none; }
  #s-feed .fx-sheet-in { padding: 28px 30px 32px; }
  #s-feed .fx-strip { margin: 18px -30px 0; padding: 0 30px 4px; scroll-padding-inline: 30px; }
  #s-feed .fx-topsheet { margin: 64px auto auto; }
  #s-feed .fx-topsheet .fx-sheet-in { padding: 24px 24px 20px; }
}

@media (prefers-reduced-motion: reduce) {
  #s-feed .fx-card-active, #s-feed .fx-dialog[open], #s-feed .fx-skel::after, #s-feed .fx-go[aria-disabled="true"] i { animation: none; }
  #s-feed .fx-spring, #s-feed .fx-tile, #s-feed .fx-cta, #s-feed .fx-ghost { transition: none; }
  #s-feed .fx-tile:hover { transform: none; }
  #s-feed .fx-burst { display: none; }
}
