:root{
    --black:#050505;
    --black-soft:#141414;
    --gold:#D49B3A;              /* brand fill / borders / decorative only */
    --gold-hover:#B87A25;        /* 3.16:1 on cream — non-text UI (focus rings, field borders) */
    --gold-ink:#8A5A0F;          /* WCAG-AA accessible gold for TEXT/links/prices on light (5.2:1 cream, 5.9:1 white) */
    --gold-light:#E8BE72;        /* text only on dark nav (10.6:1) */
    --gold-soft:#F3E0BB;
    --white:#FFFFFF;
    --ivory:#F8F7F4;
    --cream:#F3EEE5;
    --charcoal:#333333;
    --gray:#616161;              /* was #6E6E6E — now 5.46:1 on cream (AA) */
    --beige:#C3B295;
    --danger:#C0392B;
    --success:#2C7340;           /* was #3A8A4E — now 5.09:1 cream / 5.78:1 white (AA) */
    /* cohesive warm brand background used site-wide */
    --bg:#F5F0E7;
    /* solid opaque surface for fixed/sticky panels — nothing may bleed through */
    --surface-solid:#FCF9F3;
    /* The nav's opaque stand-in for --nav-glass-bg, used by the
       prefers-reduced-transparency block at the end of this file. It lives here
       rather than beside --nav-glass-bg because that token is scoped to
       .nav-theme-dark, while the rule consuming this one matches .nav-liquid /
       .nav-mobile with no theme class -- defined there it would never resolve
       and the inline fallback would silently do all the work, which is exactly
       the state this replaces. Same colour as that fallback. */
    --nav-glass-solid:#16161A;
    /* space reserved by the floating fixed nav (nav height + top gap + notch).
       Static fallback; main.js measures the real nav and keeps this exact. */
    --nav-space:calc(112px + env(safe-area-inset-top, 0px));
    /* height of the fixed mobile bottom action bar (0 on desktop) */
    --bottombar-space:0px;
  }
  @media(max-width:768px){
    :root{ --bottombar-space:calc(70px + env(safe-area-inset-bottom, 0px)); }
  }
  @media(max-width:560px){
    :root{ --nav-space:calc(100px + env(safe-area-inset-top, 0px)); }
  }
  *{box-sizing:border-box; margin:0; padding:0;}
  /* every in-page anchor target lands BELOW the floating nav, never under it */
  [id]{ scroll-margin-top:calc(var(--nav-space) + 12px); }
  html{scroll-behavior:smooth; background:var(--bg);}
  body{
    background:var(--bg);
    color:var(--charcoal);
    font-family:'Inter',sans-serif;
    overflow-x:hidden;
    position:relative;
    margin:0;
    padding:0;
    /* no top padding here — the hero/page-hero background must touch the very
       top edge of the page with zero gap. Clearance for the floating nav is
       handled per-section (see .hero/.page-hero/.error-page padding below),
       so only the TEXT content is pushed down, never the background photo. */
  }

  h1,h2,h3,h4{font-family:'Cormorant Garamond',serif; font-weight:700; letter-spacing:.01em;}

  /* TRACKING IS SIZE-SPECIFIC -- one value cannot serve the whole scale.
     The +.01em above is right for h3/h4 at body-ish sizes, where a little air
     helps legibility. It is wrong for the display headings below: as Cormorant
     grows past ~2.5rem the letters read too far apart, so tracking has to go
     negative, and further negative the larger the type gets. Sizes here mirror
     the clamp() maximums on each selector -- if you change a clamp, revisit the
     value next to it. */
  .ask-chef-card h2{ letter-spacing:-.008em; }               /* max 2.6rem */
  .section-head h2,
  .final-cta h2,
  .page-hero h1{ letter-spacing:-.014em; }                   /* max 3.1-3.6rem */
  .hero-glass h1{ letter-spacing:-.02em; }                   /* max 4.8rem */
  .error-page .code{ letter-spacing:-.03em; }                /* max 8rem   */
  a{ outline-offset:3px; }
  img{ max-width:100%; }
  .eyebrow{
    font-family:'Poppins',sans-serif;
    font-size:.72rem;
    letter-spacing:.28em;
    text-transform:uppercase;
    color:var(--gold-ink);
    font-weight:600;
  }

  /* ---------- ACCESSIBILITY ---------- */
  .skip-link{
    position:absolute; left:-999px; top:auto; background:var(--black); color:var(--white);
    padding:12px 20px; z-index:999; border-radius:8px; text-decoration:none; font-size:.85rem;
  }
  .skip-link:focus{ left:16px; top:16px; }
  :focus-visible{ outline:2px solid var(--gold-ink); outline-offset:3px; }

  /* ---------- READABILITY OVERRIDES (text on glass) ---------- */
  .glass .wi-desc, .glass .ps-desc, .glass .pkg-guests{ color:#4A4540; }
  .glass .pkg-price span{ color:#57514B; }
  .glass-dark, .glass-dark .ec-title, .glass-dark .si-name, .glass-dark h1, .glass-dark h2{ text-shadow:0 1px 12px rgba(0,0,0,.35); }
  .glass-dark .ec-desc{ color:rgba(255,255,255,.82); }
  .glass-dark .trust-item .label{ color:rgba(255,255,255,.82); }

  /* ---------- LIQUID BACKDROP ---------- */
  .liquid-canvas{
    position:fixed; inset:0; z-index:-2; overflow:hidden; background:var(--bg);
  }
  /* No filter:blur() here — the gaussian softness is baked into the gradient
     stops instead. A 70px blur on four 500-700px layers was the single
     heaviest GPU cost on the page; multi-stop radial gradients rasterize once
     and composite for free, and the drift animation stays transform-only. */
  .blob{
    position:absolute; border-radius:50%; opacity:.55;
    will-change:transform;
  }
  .blob.b1{ width:640px; height:640px; top:-160px; left:-120px; background:radial-gradient(circle, rgba(212,155,58,.5) 0%, rgba(212,155,58,.3) 38%, rgba(212,155,58,.12) 58%, transparent 78%); animation:drift1 26s ease-in-out infinite; }
  .blob.b2{ width:560px; height:560px; top:20%; right:-160px; background:radial-gradient(circle, rgba(212,155,58,.36) 0%, rgba(212,155,58,.22) 38%, rgba(212,155,58,.09) 58%, transparent 78%); animation:drift2 32s ease-in-out infinite; }
  .blob.b3{ width:520px; height:520px; bottom:0; left:10%; background:radial-gradient(circle, rgba(195,178,149,.4) 0%, rgba(195,178,149,.24) 38%, rgba(195,178,149,.1) 58%, transparent 78%); animation:drift3 30s ease-in-out infinite; }
  .blob.b4{ width:700px; height:700px; bottom:-220px; right:-100px; background:radial-gradient(circle, rgba(5,5,5,.11) 0%, rgba(5,5,5,.07) 38%, rgba(5,5,5,.03) 58%, transparent 78%); animation:drift1 36s ease-in-out infinite reverse; }
  @keyframes drift1{ 0%,100%{ transform:translate(0,0) scale(1);} 50%{ transform:translate(60px,50px) scale(1.08);} }
  @keyframes drift2{ 0%,100%{ transform:translate(0,0) scale(1);} 50%{ transform:translate(-50px,60px) scale(.95);} }
  @keyframes drift3{ 0%,100%{ transform:translate(0,0) scale(1);} 50%{ transform:translate(40px,-40px) scale(1.06);} }

  @media (prefers-reduced-motion: reduce){
    .blob, .reveal, .hero-glass h1, .hero-glass p, .hero-btns, .trust-bar{ animation:none !important; opacity:1 !important; transform:none !important; }
    html{ scroll-behavior:auto; }
  }

  /* ---------- GLASS PRIMITIVES ---------- */
  .glass{
    position:relative;
    background:linear-gradient(135deg, rgba(255,255,255,.42), rgba(255,255,255,.14));
    backdrop-filter:blur(24px) saturate(180%);
    -webkit-backdrop-filter:blur(24px) saturate(180%);
    border:1px solid rgba(255,255,255,.6);
    box-shadow:0 8px 32px rgba(20,15,5,.12), inset 0 1px 0 rgba(255,255,255,.7);
    color:var(--charcoal);
  }
  .glass::before{
    content:''; position:absolute; top:0; left:8%; right:8%; height:1px;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,.9), transparent);
  }
  .glass-dark{
    position:relative;
    background:linear-gradient(135deg, rgba(18,16,12,.34), rgba(8,7,5,.24));
    backdrop-filter:blur(24px) saturate(150%);
    -webkit-backdrop-filter:blur(24px) saturate(150%);
    border:1px solid rgba(255,255,255,.18);
    box-shadow:0 8px 32px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.2);
    color:#FFFFFF;
  }
  .glass-dark::before{
    content:''; position:absolute; top:0; left:8%; right:8%; height:1px;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,.4), transparent);
  }
  /* ================= APPLE-STYLE LIQUID GLASS NAV ================= */
  /* Apple system font stack, scoped to the nav only per spec ("For Menu Bar"). */
  .nav-liquid, .nav-mobile{
    font-family:-apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display", system-ui, "Inter", sans-serif;
    -webkit-font-smoothing:antialiased;
    text-rendering:optimizeLegibility;
  }

  /* Adaptive palette — swapped by JS (applyNavTheme in main.js) based on the
     actual luminance of whatever is rendered behind the nav at scroll time.
     Per spec: exact #FFFFFF on dark backgrounds, exact #1C1C1E on light ones.
     The glass material itself (background/blur/border) stays constant —
     only text/icon color and hover/active tint adapt. */
  .nav-liquid.nav-theme-dark, .nav-mobile.nav-theme-dark{
    --nav-fg:#FFFFFF;
    --nav-fg-dim:rgba(255,255,255,.92);   /* .78 measured 4.21:1 -- under AA */
    --nav-border-strong:rgba(255,255,255,.85);
    --nav-active-bg:rgba(255,255,255,.20);
    --nav-hover-bg:rgba(255,255,255,.12);
    --nav-text-shadow:0 1px 8px rgba(0,0,0,.35);
    /* darker, smokier vibrancy tint when floating over dark hero/photo content */
    /* .62, not .42: at .42 this composites over a light backdrop to a mid
       grey and white nav links fall to 2.76:1. The adaptive nav theming in
       main.js usually hides that, but WCAG conformance must not depend on a
       luminance sampler running (or running in time). */
    --nav-glass-bg:rgba(18,18,20,.62);
    --nav-glass-border:rgba(255,255,255,.16);
  }
  .nav-liquid.nav-theme-light, .nav-mobile.nav-theme-light{
    --nav-fg:#1C1C1E;
    --nav-fg-dim:rgba(28,28,30,.68);
    --nav-border-strong:rgba(255,246,230,.9);
    --nav-active-bg:rgba(212,155,58,.16);
    --nav-hover-bg:rgba(212,155,58,.1);
    --nav-text-shadow:0 1px 2px rgba(255,255,255,.4);
    /* warm cream liquid glass — matches the footer panel for a cohesive flow */
    /* .90, not .72: over a dark hero this composited down far enough that
       the gold-ink tagline hit ~3.1:1. Mirror of the dark-theme fix. */
    --nav-glass-bg:rgba(250,244,233,.90);
    --nav-glass-border:rgba(212,155,58,.34);
  }

  /* Liquid-glass material — exact spec:
     background rgba(255,255,255,.12), blur(20px) saturate(180%),
     border 1px solid rgba(255,255,255,.18), radius 28px, no shadow.
     A hairline top highlight + soft diagonal sheen are layered on top so the
     surface reads as glass rather than a flat translucent rectangle. */
  .nav-liquid, .nav-mobile{
    position:relative; overflow:hidden;
    background:var(--nav-glass-bg, rgba(255,255,255,.12));
    backdrop-filter:blur(26px) saturate(200%);
    -webkit-backdrop-filter:blur(26px) saturate(200%);
    border:1px solid var(--nav-glass-border, rgba(255,255,255,.18));
    /* soft warm float shadow — matches the footer panel's depth */
    box-shadow:0 16px 44px rgba(120,90,40,.14), inset 0 1px 0 rgba(255,255,255,.55);
    color:var(--nav-fg);
    /* only theme colors ever change at runtime — never transition box geometry */
    transition:color .35s ease, background-color .45s ease, border-color .45s ease;
  }
  .nav-liquid, .nav-liquid h1, .nav-liquid h2,
  .nav-mobile, .nav-mobile h1, .nav-mobile h2{ text-shadow:var(--nav-text-shadow); }
  /* bright top edge highlight — the "glass rim catching light" */
  .nav-liquid::before, .nav-mobile::before{
    content:''; position:absolute; top:0; left:6%; right:6%; height:1px; z-index:1;
    background:linear-gradient(90deg, transparent, var(--nav-border-strong), transparent);
  }
  /* diagonal specular sheen sweeping across the glass */
  .nav-liquid::after{
    content:''; position:absolute; top:-70%; left:-15%; width:55%; height:230%; z-index:1;
    background:radial-gradient(ellipse at center, rgba(255,255,255,.4), transparent 65%);
    pointer-events:none; filter:blur(10px); transform:rotate(-14deg); mix-blend-mode:overlay;
  }
  /* ...but NOT on the mobile menu, which also carries .nav-liquid. That panel
     is a scroll container (max-height + overflow-y:auto), and an absolutely
     positioned box at top:-70%/height:230% counts toward its scrollable
     overflow -- it added ~270px of scroll that led to nothing, so the menu
     appeared scrollable while every link was already on screen. The menu's
     glass is near-opaque anyway, so the sheen was barely visible there. */
  .nav-mobile::after{ content:none; }
  /* subtle frosted noise texture so the glass never looks like a flat rectangle */
  .nav-noise{
    position:absolute; inset:0; z-index:0; pointer-events:none; opacity:.05; mix-blend-mode:overlay;
    background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='90' height='90'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  }
  .nav-liquid > *, .nav-mobile > *{ position:relative; z-index:2; }
  .glass-gold{
    position:relative;
    /* near-opaque: at .72/.58 a dark backdrop shows through and the black
       label drops to 2.98:1. Opaque gold gives the label 5.1:1 minimum. */
    background:linear-gradient(135deg, rgba(212,155,58,.97), rgba(184,122,37,.94));
    backdrop-filter:blur(18px) saturate(180%);
    -webkit-backdrop-filter:blur(18px) saturate(180%);
    border:1px solid rgba(255,235,190,.6);
    box-shadow:0 8px 28px rgba(184,122,37,.35), inset 0 1px 0 rgba(255,255,255,.5);
  }

  /* ---------- BUTTONS ---------- */
  .btn{
    font-family:'Poppins',sans-serif;
    font-weight:600;
    font-size:.92rem;
    letter-spacing:.01em;
    padding:15px 32px;
    border-radius:100px;
    border:none;
    cursor:pointer;
    display:inline-flex;
    align-items:center;
    gap:10px;
    position:relative;
    overflow:hidden;
    transition:transform .4s cubic-bezier(.22,1,.36,1), box-shadow .4s ease;
    text-decoration:none;
  }
  .btn[disabled]{ opacity:.6; cursor:not-allowed; }
  .btn-primary{ color:var(--black); }
  .btn-primary:hover{ transform:translateY(-3px); box-shadow:0 16px 34px rgba(184,122,37,.45); }
  /* shine sweep runs on transform (compositor) — never animate left/top */
  .btn-primary::after{
    content:''; position:absolute; top:0; left:0; width:60%; height:100%;
    background:linear-gradient(115deg, transparent, rgba(255,255,255,.55), transparent);
    transform:translateX(-200%); transition:transform .7s ease;
  }
  .btn-primary:hover::after{ transform:translateX(280%); }
  .btn-outline{
    background:linear-gradient(135deg, rgba(255,255,255,.14), rgba(255,255,255,.04));
    backdrop-filter:blur(14px);
    -webkit-backdrop-filter:blur(14px);
    color:var(--gold-light);
    border:1px solid rgba(212,155,58,.5);
  }
  .btn-outline:hover{
    background:rgba(212,155,58,.18);
    border-color:var(--gold);
    transform:translateY(-3px);
  }
  .btn-outline-dark{
    background:rgba(5,5,5,.03);
    color:var(--gold-ink);
    border:1px solid rgba(212,155,58,.5);
  }
  .btn-outline-dark:hover{ background:rgba(212,155,58,.12); transform:translateY(-3px); }
  .btn-sm{ padding:10px 20px; font-size:.8rem; }

  /* ---------- NAV — locked, fixed, non-jumping liquid-glass pill ----------
     Pure CSS fixed positioning: no scroll-driven resize/opacity/class toggles,
     so there is nothing for a scroll listener to change (no jump, no flicker,
     no resize). GPU-friendly: only backdrop-filter/transform are animated. */
  /* Sticky per spec: nav is the first element in the document flow (the
     skip-link above it is position:absolute and takes no flow space), so it
     is already at its "stuck" offset on load — it never scrolls with the
     page, only the content below it does. */
#nav{
  position:fixed;
  top:20px;
  left:50%;
  transform:translateX(-50%);

  width:min(95%,1600px);

  z-index:99999;

  display:flex;
  align-items:center;
  justify-content:space-between;

  padding:12px 20px;

  border-radius:999px;
}


  .logo-link{ display:flex; align-items:center; text-decoration:none; }
  .logo-chip{ display:flex; align-items:center; }
  .logo-img{ height:56px; width:auto; display:block; filter:drop-shadow(0 2px 6px rgba(0,0,0,.25)); }
  /* logo + "PREMIUM CATERING" tagline stacked (nav only) — centered under the
     logo so the pair stays aligned at every logo size / breakpoint */
  #nav .logo-chip, .nav-mobile .logo-chip{ flex-direction:column; align-items:center; gap:3px; }
  .logo-tagline{
    font-family:'Poppins',sans-serif; font-size:.58rem; font-weight:600; letter-spacing:.34em;
    text-transform:uppercase; color:var(--gold-ink); line-height:1;
    text-align:center; text-indent:.34em; /* offset trailing letter-spacing so it optically centers */
    white-space:nowrap;
  }
  /* --gold-light is a display gold; at this size it measured 3.26:1 on the
     nav glass. Small caps text needs the AA figure, not the pretty one. */
  .nav-theme-dark .logo-tagline{ color:#F7EBD2; }
  /* light theme floats over dark heroes too -- gold-ink needs to go darker */
  .nav-theme-light .logo-tagline{ color:#6E4409; }
  @media(max-width:560px){ .logo-tagline{ font-size:.52rem; letter-spacing:.28em; text-indent:.28em; } }
  /* respect the iPhone notch/Dynamic Island without altering desktop offset */
  @media(max-width:768px){
    nav{ top:calc(20px + env(safe-area-inset-top, 0px)); }
  }
  @media(max-width:560px){
    .logo-img{ height:44px; }
    /* nav is shorter on small phones (smaller logo) — match the pull-up */
    .hero, .page-hero, .error-page{ margin-top:-0; }
  }

  /* ---- nav links: icon + label, adaptive color, animated active pill ---- */
  .nav-links{ display:flex; align-items:center; gap:24px; list-style:none; flex-wrap:nowrap; position:relative; }
  .nav-active-pill{
    position:absolute; z-index:1; border-radius:20px;
    background:var(--nav-active-bg);
    box-shadow:inset 0 1px 1px rgba(255,255,255,.5), 0 2px 10px rgba(0,0,0,.08);
    opacity:0; transition:transform .38s cubic-bezier(.32,.72,0,1), width .38s cubic-bezier(.32,.72,0,1), opacity .3s ease;
    pointer-events:none;
  }
  .nav-active-pill.ready{ opacity:1; }
  .nav-link{
    position:relative; z-index:2; display:flex; align-items:center; gap:8px;
    color:var(--nav-fg-dim);
    text-decoration:none;
    font-size:.96rem;
    font-weight:650;
    letter-spacing:-.01em;
    white-space:nowrap;
    padding:12px 14px;
    border-radius:28px;
    transition:color .3s ease, background .3s cubic-bezier(.32,.72,0,1), transform .3s cubic-bezier(.32,.72,0,1);
  }
  .nav-link .nav-ico{ width:22px; height:22px; display:flex; flex-shrink:0; }
  .nav-link .nav-ico svg{ width:100%; height:100%; }
  .nav-link:hover{ color:var(--nav-fg); background:var(--nav-hover-bg); transform:scale(1.02); }
  .nav-link:focus-visible{ outline:2px solid var(--gold); outline-offset:2px; }
  /* every interactive control on the dark nav gets a high-contrast light-gold focus ring */
  .nav-theme-dark a:focus-visible, .nav-theme-dark button:focus-visible{ outline:2px solid var(--gold-light); outline-offset:2px; }
  .nav-link.active{ color:var(--nav-fg); }
  /* icon-only nav: hide the label visually but keep it as the link's accessible name (WCAG 2.4.4/4.1.2) */
  @media(max-width:1300px){ .nav-link .nav-label{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; } .nav-link{ padding:12px; } .nav-links{ gap:10px; } }

  .nav-cta{ display:flex; align-items:center; gap:14px; }
  .nav-cta .btn{padding:11px 22px; font-size:.82rem; white-space:nowrap;}
  .nav-cta-arrow{ display:inline-flex; align-items:center; justify-content:center; width:17px; height:17px; }
  .nav-cta-arrow svg{ width:100%; height:100%; }
  .nav-cta-btn .nav-cta-arrow{ transition:transform .3s ease; }
  .nav-cta-btn:hover .nav-cta-arrow{ transform:translateX(3px); }
  .nav-toggle{
    display:none; background:none; border:none; cursor:pointer; padding:8px;
    flex-direction:column; gap:5px; align-items:center; justify-content:center;
  }
  .nav-toggle span{ width:22px; height:2px; background:var(--nav-fg); display:block; transition:transform .3s ease, opacity .3s ease, background .4s ease; }
  .nav-toggle[aria-expanded="true"] span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
  .nav-toggle[aria-expanded="true"] span:nth-child(2){ opacity:0; }
  .nav-toggle[aria-expanded="true"] span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }
  .nav-mobile{
    display:none;
    position:fixed; top:var(--nav-space); left:50%; transform:translateX(-50%);
    width:min(92%,1180px); z-index:9998;
    max-height:calc(100vh - var(--nav-space) - 16px); overflow-y:auto;
    border-radius:28px; padding:14px;
    padding-bottom:calc(14px + env(safe-area-inset-bottom, 0px));
    flex-direction:column;
    opacity:0; pointer-events:none; transition:opacity .25s ease;
  }
  .nav-mobile.open{ display:flex; opacity:1; pointer-events:auto; }
  /* the open panel floats over page content — force a near-opaque surface so
     body text never bleeds through the links (readability over flair) */
  .nav-mobile.nav-theme-dark{ --nav-glass-bg:rgba(26,21,13,.97); }
  .nav-mobile.nav-theme-light{ --nav-glass-bg:rgba(252,247,238,.98); }
  /* dimmed page behind the open menu; tap to close */
  .nav-backdrop{
    position:fixed; inset:0; z-index:9997; background:rgba(15,10,4,.45);
    opacity:0; pointer-events:none; transition:opacity .25s ease; border:none; padding:0; cursor:pointer;
  }
  .nav-backdrop.show{ opacity:1; pointer-events:auto; }
  .nav-mobile-links{ display:flex; flex-direction:column; }
  .nav-mobile-link{
    display:flex; align-items:center; gap:12px;
    color:var(--nav-fg-dim); text-decoration:none; padding:14px 16px; border-radius:14px;
    font-size:.98rem; font-weight:500; min-height:48px;
    transition:color .3s ease, background .3s ease;
  }
  .nav-mobile-link .nav-ico{ width:20px; height:20px; display:flex; flex-shrink:0; }
  .nav-mobile-link .nav-ico svg{ width:100%; height:100%; }
  .nav-mobile-chev{ margin-left:auto; width:18px; height:18px; display:flex; color:var(--nav-fg-dim); opacity:.6; }
  .nav-mobile-chev svg{ width:100%; height:100%; }
  .nav-mobile-link.active{ color:var(--gold-ink); background:rgba(212,155,58,.16); font-weight:600; }
  .nav-theme-dark .nav-mobile-link.active{ color:var(--gold-light); }
  .nav-mobile-link.active .nav-mobile-chev{ color:var(--gold-light); opacity:1; }
  .nav-mobile-link:hover{ background:var(--nav-hover-bg); color:var(--nav-fg); }
  .nav-mobile-cta{ margin:12px 6px 4px; justify-content:center; min-height:50px; width:auto; }
  @media(max-width:1050px){
    .nav-links{display:none;}
    .nav-toggle{ display:flex; min-width:44px; min-height:44px; }
  }
  /* small phones: the top bar is just logo + hamburger — the fixed bottom CTA
     bar (see .mobile-cta) carries the "Build a Plate" action instead */
  @media(max-width:768px){
    .nav-cta-btn{ display:none; }
  }

  /* ---------- HERO ---------- */
  .hero{
    position:relative;
    /* the sticky nav still reserves its own box height in the flow (that's
       how position:sticky works) — pull the hero up underneath it so the
       photo keeps touching the very top of the page with zero gap, while
       the nav still visually floats above via its own z-index. */
    margin-top:0;
    min-height:100vh;
    display:flex;
    align-items:center;
    justify-content:center;
    /* JPEG declaration first, image-set second: a browser that does not know
       image-set() drops the whole declaration, and without the plain one first
       the hero would render with no photograph at all. */
    background-image:
      linear-gradient(180deg, rgba(5,5,5,.86) 0%, rgba(5,5,5,.66) 35%, rgba(5,5,5,.82) 78%, var(--black) 100%),
      url('../images/hero-bg.jpg');
    /* noinspection CssInvalidFunction */
    background-image:
      linear-gradient(180deg, rgba(5,5,5,.86) 0%, rgba(5,5,5,.66) 35%, rgba(5,5,5,.82) 78%, var(--black) 100%),
      image-set(url('../images/hero-bg.webp') type('image/webp'),
                url('../images/hero-bg.jpg') type('image/jpeg'));
    background-size:cover, cover;
    background-position:center, center 30%;
    background-repeat:no-repeat;
    overflow:hidden;
    padding:110px 6% 80px;
  }
  .hero-arch{
    position:absolute; top:9%; left:50%; transform:translateX(-50%);
    width:320px; height:320px; opacity:.5;
  }
  .hero-arch svg{ width:100%; height:100%; }
  .hero-glass{
    position:relative; z-index:2; max-width:900px; text-align:center;
    margin-top:60px; padding:56px 48px; border-radius:32px;
    overflow:hidden;
    /* slightly brighter, more defined glass edge than the generic .glass-dark */
    border-color:rgba(255,255,255,.28);
    box-shadow:0 8px 32px rgba(0,0,0,.4), inset 0 1px 0 rgba(255,255,255,.32);
  }
  /* soft specular glow catching the top-right corner of the glass — the
     "shine at the edges" that reads as real liquid glass rather than a flat
     translucent box. */
  .hero-glass::after{
    content:''; position:absolute; top:-45%; right:-18%; width:55%; height:170%; z-index:1;
    background:radial-gradient(ellipse at center, rgba(255,255,255,.4), transparent 65%);
    pointer-events:none; filter:blur(12px); transform:rotate(-16deg); mix-blend-mode:overlay;
  }
  .hero-glass > *{ position:relative; z-index:2; }
  .hero-glass .eyebrow{ color:var(--gold-light); margin-bottom:22px; display:inline-block; }
  .hero-glass h1{
    color:var(--white);
    font-size:clamp(2.4rem, 5.6vw, 4.8rem);
    line-height:1.08;
    margin-bottom:24px;
    opacity:0; transform:translateY(24px);
    animation:riseIn 1s cubic-bezier(.22,1,.36,1) .2s forwards;
  }
  .hero-glass h1 em{ font-style:italic; color:var(--gold-light); }
  .hero-glass p{
    color:rgba(255,255,255,.78);
    font-size:1.14rem;
    line-height:1.65;
    max-width:600px;
    margin:0 auto 38px;
    opacity:0; transform:translateY(24px);
    animation:riseIn 1s cubic-bezier(.22,1,.36,1) .45s forwards;
  }
  .hero-btns{
    display:flex; gap:16px; justify-content:center; flex-wrap:wrap;
    opacity:0; transform:translateY(24px);
    animation:riseIn 1s cubic-bezier(.22,1,.36,1) .65s forwards;
  }
  @keyframes riseIn{ to{opacity:1; transform:translateY(0);} }

  .trust-bar{
    position:relative; z-index:2;
    margin-top:56px;
    display:flex; flex-wrap:wrap; justify-content:center;
    gap:14px;
    opacity:0; animation:riseIn 1s cubic-bezier(.22,1,.36,1) .9s forwards;
  }
  /* every badge the same footprint (equal width + height) regardless of its
     text length, so the row reads as one tidy set rather than mismatched pills */
  .trust-item{
    flex:0 0 148px; box-sizing:border-box;
    padding:14px 12px; text-align:center; color:var(--white);
    border-radius:16px;
  }
  a.trust-item{ display:block; text-decoration:none; }
  .trust-item .num{ font-family:'Cormorant Garamond',serif; font-weight:700; font-size:1.35rem; color:var(--gold-light); display:block; white-space:nowrap; line-height:1.2; }
  .trust-item .label{ font-size:.68rem; letter-spacing:.06em; color:rgba(255,255,255,.6); text-transform:uppercase; margin-top:3px; white-space:nowrap; }
  /* phones: two equal columns that fill the available width (last badge centered) */
  @media(max-width:560px){
    .trust-bar{ gap:10px; margin-top:40px; }
    .trust-item{ flex:0 0 calc(50% - 5px); padding:13px 6px; }
    .trust-item .num{ font-size:1.15rem; }
    .trust-item .label{ font-size:.6rem; letter-spacing:.05em; }
  }

  /* ---------- PAGE HERO (interior pages) ---------- */
  .page-hero{
    position:relative;
    margin-top:0;
    min-height:56vh;
    display:flex; align-items:center; justify-content:center; text-align:center;
    /* plain JPEG first, image-set second -- see .hero above for why */
    background-image:
      linear-gradient(180deg, rgba(5,5,5,.88) 0%, rgba(5,5,5,.72) 45%, rgba(5,5,5,.9) 100%),
      url('../images/hero-bg.jpg');
    /* noinspection CssInvalidFunction */
    background-image:
      linear-gradient(180deg, rgba(5,5,5,.88) 0%, rgba(5,5,5,.72) 45%, rgba(5,5,5,.9) 100%),
      image-set(url('../images/hero-bg.webp') type('image/webp'),
                url('../images/hero-bg.jpg') type('image/jpeg'));
    background-size:cover; background-position:center 30%; background-repeat:no-repeat;
    padding:calc(var(--nav-space) + 40px) 6% 70px;
  }
  .page-hero-inner{ position:relative; z-index:2; max-width:760px; }
  .page-hero .eyebrow{ color:var(--gold-light); margin-bottom:18px; display:inline-block; }
  .page-hero h1{ color:var(--white); font-size:clamp(2.2rem,4.6vw,3.6rem); line-height:1.12; margin-bottom:16px; }
  .page-hero p{ color:rgba(255,255,255,.78); font-size:1.08rem; line-height:1.6; max-width:600px; margin:0 auto; }
  .breadcrumb{ margin-top:22px; font-size:.82rem; color:rgba(255,255,255,.55); }
  .breadcrumb a{ color:rgba(255,255,255,.75); text-decoration:none; }
  .breadcrumb a:hover{ color:var(--gold-light); }

  /* ---------- SECTION GENERIC ---------- */
  section{ padding:130px 6%; position:relative; }
  section.tight{ padding:90px 6%; }
  .section-head{ text-align:center; max-width:680px; margin:0 auto 70px; }
  .section-head.left{ text-align:left; margin:0 0 50px; }
  .section-head .eyebrow{ display:block; margin-bottom:16px; }
  .section-head h2{ font-size:clamp(2rem,3.6vw,3.1rem); color:var(--black); line-height:1.15; }
  .section-head.on-dark h2, .section-head.on-dark .eyebrow{ color:var(--white); }
  .section-head.on-dark .eyebrow{ color:var(--gold-light); }
  .section-head p{ margin-top:18px; color:var(--gray); font-size:1.05rem; line-height:1.65; }

  /* ---------- SECTION SEAM (small ornament marking the transition into each home band) ---------- */
  .section-seam{
    display:flex; align-items:center; justify-content:center; gap:14px;
    max-width:200px; margin:0 auto 40px;
  }
  .section-seam::before, .section-seam::after{ content:''; flex:1; height:1px; background:linear-gradient(90deg, transparent, rgba(212,155,58,.5)); }
  .section-seam::after{ background:linear-gradient(90deg, rgba(212,155,58,.5), transparent); }
  .section-seam span{
    flex-shrink:0; width:7px; height:7px; transform:rotate(45deg);
    background:var(--gold); box-shadow:0 0 0 4px rgba(212,155,58,.14);
  }
  @media(max-width:560px){ .section-seam{ max-width:140px; margin-bottom:26px; } }
  .section-head p a{ color:var(--gold-ink); font-weight:600; text-decoration-color:rgba(212,155,58,.5); }
  .section-head p a:hover{ color:var(--gold-ink); }
  .section-head.on-dark p{ color:rgba(255,255,255,.6); }
  .section-head.on-dark p a{ color:var(--gold-light); }

  .reveal{ opacity:0; transform:translateY(36px); transition:opacity .9s cubic-bezier(.22,1,.36,1), transform .9s cubic-bezier(.22,1,.36,1); }
  .reveal.in{ opacity:1; transform:translateY(0); }

  /* ---------- EVENT TYPES ---------- */
  .event-grid{
    display:grid; grid-template-columns:repeat(auto-fit,minmax(270px,1fr));
    gap:22px; max-width:1240px; margin:0 auto;
  }
  .event-card{
    padding:28px; border-radius:24px;
    aspect-ratio:4/5;
    display:flex; flex-direction:column; justify-content:flex-end;
    cursor:pointer;
    transition:transform .5s cubic-bezier(.22,1,.36,1), box-shadow .5s ease, border-color .5s ease;
  }
  .event-card:hover, .event-card:focus-within{ transform:translateY(-10px) scale(1.01); border-color:rgba(212,155,58,.55); }
  .event-card .ec-title{ font-family:'Cormorant Garamond',serif; font-weight:700; color:var(--white); font-size:1.4rem; position:relative; z-index:2; margin-bottom:8px;}
  .event-card .ec-desc{ color:rgba(255,255,255,.66); font-size:.88rem; position:relative; z-index:2; line-height:1.5; max-height:0; overflow:hidden; transition:max-height .5s ease, margin .5s ease; margin-top:0;}
  .event-card:hover .ec-desc, .event-card:focus-within .ec-desc{ max-height:80px; margin-top:6px;}
  .event-card .ec-icon{
    width:46px; height:46px; border-radius:14px;
    display:flex; align-items:center; justify-content:center; color:var(--gold-light);
    margin-bottom:16px; font-size:1.2rem; position:relative; z-index:2;
    background:rgba(212,155,58,.16); border:1px solid rgba(212,155,58,.4);
  }

  /* ---------- PACKAGES ---------- */
  .pkg-grid{
    display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
    gap:22px; max-width:1180px; margin:0 auto;
  }

  /* The 7 catering packages fill a row of 4 and leave an orphan row of 3, which
     would otherwise sit left-aligned. Once the grid resolves to 4 columns, lay it
     out as 8 half-columns instead: a card spanning 2 of them is (W - 66px) / 4
     wide -- exactly its 4-column width, so nothing about the cards changes -- and
     starting the orphan row one half-column in centres it under the row above.
     Narrower widths keep the auto-fit rule above. Scoped to the packages tab so
     the homepage grid is untouched. */
  @media(min-width:1257px){
    /* minmax(0,1fr), not 1fr: a bare 1fr floors each column at its content's
       min width, which lets a long dish line widen its own column and throw the
       row out of alignment. */
    #tab-packages .pkg-grid{ grid-template-columns:repeat(8,minmax(0,1fr)); }
    #tab-packages .pkg-grid > .pkg-card{ grid-column:span 2; }
    /* start AND span together -- setting only the start line would leave the end
       at auto and collapse this card to a single half-column. */
    #tab-packages .pkg-grid > .pkg-card:nth-child(5){ grid-column:2 / span 2; }
  }

  .pkg-card{
    border-radius:24px;
    padding:40px 32px;
    transition:transform .45s cubic-bezier(.22,1,.36,1), box-shadow .45s ease;
    display:flex; flex-direction:column;
    scroll-margin-top:calc(var(--nav-space) + 12px);
  }
  .pkg-card:hover{ transform:translateY(-8px); }
  /* "Most Popular" card: same light glass as the others, set apart by a thicker gold border */
  .pkg-card.featured{ border:2px solid var(--gold); }
  .pkg-badge{
    align-self:flex-start; font-family:'Poppins',sans-serif; font-size:.68rem; font-weight:600;
    letter-spacing:.08em; text-transform:uppercase; color:var(--black); background:var(--gold-light);
    padding:5px 12px; border-radius:100px; margin-bottom:14px;
  }
  .pkg-name{ font-family:'Cormorant Garamond',serif; font-weight:700; font-size:1.55rem; color:var(--black); margin-bottom:6px; }
  .pkg-guests{ font-size:.8rem; color:var(--gray); letter-spacing:.04em; text-transform:uppercase; margin-bottom:22px; }
  .pkg-list{ list-style:none; margin-bottom:28px; flex-grow:1; }
  .pkg-list li{
    font-size:.92rem; color:var(--charcoal); padding:9px 0; border-bottom:1px dashed rgba(195,178,149,.35);
    display:flex; align-items:center; gap:10px;
  }
  .pkg-list li::before{ content:'✦'; color:var(--gold); font-size:.7rem; }
  .pkg-price{ font-family:'Cormorant Garamond',serif; font-weight:700; font-size:1.75rem; color:var(--black); margin-bottom:22px;}
  .pkg-price span{ font-family:'Inter',sans-serif; font-size:.8rem; color:var(--gray); font-weight:400;}
  .pkg-card .btn{ width:100%; justify-content:center; }
  /* §12: a 22%/8% gold wash sitting on a 42%/14% white card is light glass on
   light glass -- the two materials collapse into one and the primary action
   stops reading as a control. The card stays glass; the BUTTON becomes a
   solid material on top of it. That is the hierarchy the rule is protecting. */
  .pkg-card:not(.featured) .btn-primary{ background:linear-gradient(135deg, var(--gold), var(--gold-hover)); backdrop-filter:none; color:var(--black); border:1px solid rgba(138,90,15,.45); }
  .pkg-card:not(.featured) .btn-primary:hover{ background:rgba(212,155,58,.32); }
  /* Home packages (#packages): every "Request This Package" button shares the
     same look; the featured card is flagged by a centred "Most Popular" ribbon
     instead of a distinct button. Scoped to #packages so packages.html is untouched. */
  #packages .pkg-card.featured{ position:relative; }
  #packages .pkg-card.featured .pkg-badge{ position:absolute; top:-13px; left:50%; transform:translateX(-50%); margin:0; box-shadow:0 4px 14px rgba(184,122,37,.28); }
  #packages .pkg-card.featured .btn-primary{ background:linear-gradient(135deg, var(--gold), var(--gold-hover)); backdrop-filter:none; color:var(--black); border:1px solid rgba(138,90,15,.45); }   /* see above */
  #packages .pkg-card.featured .btn-primary:hover{ background:rgba(212,155,58,.32); }

  /* ---------- PACKAGE COMPARISON TABLE ---------- */
  .compare-wrap{ overflow-x:auto; max-width:1180px; margin:0 auto; border-radius:24px; }
  table.compare{ width:100%; border-collapse:collapse; min-width:720px; }
  table.compare th, table.compare td{ padding:16px 18px; text-align:left; font-size:.88rem; border-bottom:1px solid rgba(195,178,149,.3); }
  table.compare thead th{ font-family:'Cormorant Garamond',serif; font-size:1.1rem; color:var(--black); }
  table.compare tbody th{ font-weight:600; color:var(--charcoal); }
  table.compare td{ color:var(--gray); text-align:center; }
  table.compare .yes{ color:var(--success); font-weight:700; }
  table.compare .no{ color:var(--gray); opacity:.4; }

  /* ---------- HOME SECTION BANDS ----------
     Every home section shares one light, even wash so the page reads as a
     single continuous surface rather than alternating color blocks — the
     .section-seam ornaments and tightened padding carry the section-to-
     section separation instead. Full-bleed like .stations-wrap. */
  /* overflow:clip (not hidden): decorative glow orbs hang past the section
     edges, and a hidden-overflow box can still be scrolled programmatically
     (anchor jumps would shift content sideways) — clip forbids that */
  /* noinspection CssInvalidPropertyValue */
  /* NO negative side margin. <main> has zero horizontal padding, so there is
     nothing to break out of: `margin:0 -6%` made this section 12% WIDER than
     the viewport, which body{overflow-x:hidden} then quietly clipped. On a
     phone that clipping is what pushed the hero sideways and cut its text off.
     margin 0 + the same inner padding keeps the content exactly where it was. */
  /* noinspection CssInvalidPropertyValue */
  .band{ position:relative; margin:0; padding:92px 0; overflow:clip; }
  .band > *{ position:relative; z-index:1; }
  .band-ivory{
    background:
      radial-gradient(900px 420px at 85% 0%, rgba(255,255,255,.65), transparent 60%),
      linear-gradient(180deg, #FAF6EE 0%, #F8F3E9 100%);
  }
  /* phones: content in full-bleed bands keeps 14px clear of both screen edges */
  @media(max-width:560px){ .band{ padding:56px 14px 60px; } }

  /* ---------- LIVE STATIONS (light liquid glass) ---------- */
  /* noinspection CssInvalidPropertyValue */
  .stations-wrap{
    position:relative; margin:0; padding:110px 0 118px; overflow:clip;   /* see .band */
    scroll-margin-top:var(--nav-space);
    background:
      radial-gradient(1100px 480px at 18% 20%, rgba(212,155,58,.12), transparent 60%),
      radial-gradient(900px 480px at 92% 80%, rgba(184,122,37,.08), transparent 60%),
      var(--bg);
  }
  .stations-wrap::before{
    content:''; position:absolute; top:-12%; right:-8%; width:46%; height:60%; z-index:0;
    background:radial-gradient(circle, rgba(212,155,58,.16), transparent 70%);
    filter:blur(50px); pointer-events:none;
  }
  /* homepage stations only: same light wash as the bands around it, tighter
     gap between sections — .stations-wrap (base) stays untouched for the
     About page, which still wants the deeper gold wash + full padding */
  #stations{
    padding:92px 6% 98px;
    background:
      radial-gradient(900px 420px at 85% 0%, rgba(255,255,255,.65), transparent 60%),
      linear-gradient(180deg, #FAF6EE 0%, #F8F3E9 100%);
  }
  #stations::before{ display:none; }
  @media(max-width:560px){ #stations{ padding:56px calc(6% + 14px) 60px; } }
  .stations-wrap > *{ position:relative; z-index:1; }
  .station-grid{
    display:flex; flex-wrap:wrap; justify-content:center;
    gap:18px; max-width:1240px; margin:0 auto;
  }
  .station-item{
    position:relative; overflow:hidden;
    flex:0 1 212px; min-width:180px;
    padding:34px 20px 30px; border-radius:22px; text-align:center;
    background:linear-gradient(150deg, rgba(255,255,255,.78), rgba(255,255,255,.42));
    backdrop-filter:blur(22px) saturate(160%); -webkit-backdrop-filter:blur(22px) saturate(160%);
    border:1px solid rgba(255,255,255,.9);
    box-shadow:0 12px 30px rgba(90,62,20,.10), inset 0 1px 0 rgba(255,255,255,.95);
    transition:transform .35s cubic-bezier(.2,.7,.2,1), border-color .35s ease, box-shadow .35s ease;
  }
  .station-item::before{
    content:''; position:absolute; top:0; left:14%; right:14%; height:1px; z-index:2;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,.98), transparent);
  }
  .station-item::after{
    content:''; position:absolute; top:15px; right:15px; width:8px; height:8px; border-radius:50%;
    background:#2fbf6b; box-shadow:0 0 0 0 rgba(47,191,107,.5); animation:siPulse 2s infinite;
  }
  @keyframes siPulse{
    0%{ box-shadow:0 0 0 0 rgba(47,191,107,.5); }
    70%{ box-shadow:0 0 0 10px rgba(47,191,107,0); }
    100%{ box-shadow:0 0 0 0 rgba(47,191,107,0); }
  }
  .station-item:hover{
    transform:translateY(-8px); border-color:rgba(212,155,58,.55);
    box-shadow:0 20px 44px rgba(90,62,20,.16), 0 0 0 1px rgba(212,155,58,.35), inset 0 1px 0 rgba(255,255,255,.98);
  }
  .station-item .si-icon{
    display:flex; align-items:center; justify-content:center; margin:0 auto 16px;
    width:66px; height:66px; border-radius:50%; font-size:2rem; line-height:1;
    background:radial-gradient(circle at 32% 28%, rgba(255,226,170,.85), rgba(212,155,58,.32) 60%, rgba(212,155,58,.12));
    border:1px solid rgba(212,155,58,.5);
    box-shadow:0 6px 16px rgba(212,155,58,.30), inset 0 2px 6px rgba(255,255,255,.7);
    transition:transform .35s cubic-bezier(.2,.7,.2,1);
  }
  /* illustrated dish icon fills the gold badge as a circle */
  .station-item .si-icon{ overflow:hidden; }
  .station-item .si-icon img{ width:100%; height:100%; object-fit:cover; border-radius:50%; display:block; }
  .station-item:hover .si-icon{ transform:scale(1.1) rotate(-4deg); }
  .station-item .si-name{
    font-family:'Cormorant Garamond',serif; font-weight:700; color:var(--black);
    font-size:1.16rem; letter-spacing:.01em;
  }
  /* phones: cards become slim horizontal glass pills (icon left, name right)
     — half the height of the stacked tiles, so the section stops swallowing
     the whole screen and matches the site's pill language (nav, buttons) */
  @media(max-width:560px){
    /* same 14px edge clearance as the other mobile bands */
    .stations-wrap{ padding:76px 14px 80px; }
    .station-grid{ gap:10px; }
    .station-item{
      flex:0 1 calc(50% - 5px); min-width:calc(50% - 5px);
      display:flex; align-items:center; justify-content:space-between; gap:8px;
      text-align:center; padding:7px 12px 7px 8px; border-radius:999px; min-height:54px;
    }
    .station-item::after{ top:6px; right:12px; width:6px; height:6px; }
    .station-item .si-icon{ width:40px; height:40px; margin:0; flex-shrink:0; }
    /* justified row: icon pinned to the left edge, name centered in the rest */
    .station-item .si-name{ flex:1; font-size:.9rem; line-height:1.15; }
  }
  @media(max-width:359px){
    .station-item .si-name{ font-size:.84rem; }
    .station-item .si-icon{ width:36px; height:36px; }
  }
  @media (prefers-reduced-motion: reduce){
    .station-item::after{ animation:none; }
    .station-item, .station-item .si-icon{ transition:none; }
    .station-item:hover{ transform:none; }
    .station-item:hover .si-icon{ transform:none; }
  }

  /* ---------- WHY CHOOSE US ---------- */
  .why-grid{
    display:flex; flex-wrap:wrap; justify-content:center;
    gap:18px; max-width:1200px; margin:0 auto;
  }
  .why-item{ flex:1 1 240px; max-width:300px; padding:34px 20px; text-align:center; border-radius:22px; transition:transform .4s ease; }
  @media(max-width:560px){ .why-item{ max-width:100%; } }
  .why-item:hover{ transform:translateY(-6px); }
  .why-item .wi-icon{
    width:56px; height:56px; margin:0 auto 18px; border-radius:16px;
    display:flex; align-items:center; justify-content:center;
    font-size:1.4rem; color:var(--gold-ink);
    background:linear-gradient(135deg, rgba(212,155,58,.22), rgba(212,155,58,.06));
    border:1px solid rgba(212,155,58,.3);
  }
  .why-item .wi-title{ font-family:'Cormorant Garamond',serif; font-weight:700; font-size:1.1rem; color:var(--black); margin-bottom:6px; }
  .why-item .wi-desc{ font-size:.85rem; color:var(--gray); line-height:1.5; }


  /* ---------- PROCESS ---------- */
  .process-wrap{ max-width:900px; margin:0 auto; position:relative; }
  .process-step{ display:flex; gap:24px; padding:14px 0; align-items:flex-start; }
  .process-step .ps-glass{
    display:flex; gap:24px; align-items:flex-start; padding:22px 26px; border-radius:20px; width:100%;
    /* same frosted-white glass recipe as the Live Station cards */
    position:relative; overflow:hidden;
    background:linear-gradient(150deg, rgba(255,255,255,.78), rgba(255,255,255,.42));
    backdrop-filter:blur(22px) saturate(160%); -webkit-backdrop-filter:blur(22px) saturate(160%);
    border:1px solid rgba(255,255,255,.9);
    box-shadow:0 12px 30px rgba(90,62,20,.10), inset 0 1px 0 rgba(255,255,255,.95);
  }
  .process-step .ps-glass::before{
    content:''; position:absolute; top:0; left:14%; right:14%; height:1px; z-index:2;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,.98), transparent);
  }
  .process-step .ps-num{
    width:56px; height:56px; flex-shrink:0; border-radius:16px;
    display:flex; align-items:center; justify-content:center;
    font-family:'Cormorant Garamond',serif; font-weight:700; color:var(--gold-ink); font-size:1.1rem;
    background:linear-gradient(135deg, rgba(212,155,58,.25), rgba(212,155,58,.06));
    border:1px solid rgba(212,155,58,.35);
  }
  .process-step .ps-title{ font-family:'Cormorant Garamond',serif; font-weight:700; color:var(--black); font-size:1.22rem; margin-bottom:6px; }
  .process-step .ps-desc{ color:var(--gray); font-size:.9rem; line-height:1.5; max-width:500px; }

  /* ---------- TESTIMONIAL ---------- */
  .testimonial-wrap{ max-width:780px; margin:0 auto; text-align:center; padding:56px 48px; border-radius:28px; }
  .testimonial-wrap .quote{
    font-family:'Cormorant Garamond',serif; font-weight:600; font-style:italic; font-size:1.5rem;
    color:var(--black); line-height:1.5; margin-bottom:24px;
  }
  .stars{ color:var(--gold-ink); font-size:1.1rem; margin-bottom:18px; letter-spacing:2px; }
  .testimonial-wrap .author{ font-family:'Poppins',sans-serif; font-weight:600; color:var(--charcoal); font-size:.95rem; }
  .testimonial-wrap .author span{ display:block; font-weight:400; color:var(--gray); font-size:.8rem; margin-top:2px; }
  .testimonial-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:22px; max-width:1180px; margin:0 auto; }
  .testimonial-grid .testimonial-wrap{ max-width:none; padding:36px 32px; text-align:left; }
  .testimonial-grid .stars{ margin-bottom:14px; }
  .testimonial-grid .quote{ font-size:1.15rem; margin-bottom:18px; }

  /* ---------- HOME REVIEW CARDS (4 short reviews under the featured quote) */
  .review-grid{
    display:flex; flex-wrap:wrap; justify-content:center;
    gap:18px; max-width:1180px; margin:44px auto 0;
  }
  .review-item{
    flex:1 1 250px; max-width:300px;
    padding:26px 22px; border-radius:24px; text-align:center;
    display:flex; flex-direction:column;
  }
  .review-item .stars{ font-size:.92rem; margin-bottom:10px; }
  .review-item .rv-author{ font-family:'Poppins',sans-serif; font-weight:600; color:var(--charcoal); font-size:.92rem; }
  .review-item .rv-author span{ display:block; font-weight:400; color:var(--gray); font-size:.76rem; margin-top:2px; }
  .review-item .rv-quote{
    font-family:'Cormorant Garamond',serif; font-style:italic; color:var(--charcoal);
    font-size:1.06rem; line-height:1.5; margin-top:14px; text-align:justify;
  }
  .review-item .rv-toggle{ display:none; }
  /* phones: each review becomes a How-It-Works-style glass card; "Read more" expands */
  @media(max-width:560px){
    .review-grid{ gap:14px; margin-top:28px; }
    .review-item{
      flex:1 1 100%; max-width:none;
      flex-direction:row; flex-wrap:wrap; align-items:center; text-align:justify;
      gap:2px 10px; padding:22px 26px; border-radius:20px; overflow:hidden;
      /* same frosted-white glass recipe as the How It Works cards */
      background:linear-gradient(150deg, rgba(255,255,255,.78), rgba(255,255,255,.42));
      backdrop-filter:blur(22px) saturate(160%); -webkit-backdrop-filter:blur(22px) saturate(160%);
      border:1px solid rgba(255,255,255,.9);
      box-shadow:0 12px 30px rgba(90,62,20,.10), inset 0 1px 0 rgba(255,255,255,.95);
    }
    .review-item::before{
      left:14%; right:14%; z-index:2;
      background:linear-gradient(90deg, transparent, rgba(255,255,255,.98), transparent);
    }
    .review-item .stars{ font-size:.8rem; margin:0; order:1; }
    .review-item .rv-author{ order:2; flex-basis:100%; font-size:.9rem; }
    .review-item .rv-quote{
      order:3; flex-basis:100%; margin:0;
      max-height:0; opacity:0; overflow:hidden;
      transition:max-height .4s ease-out, opacity .4s ease-out, margin .4s ease-out;
    }
    .review-item .rv-toggle{
      display:inline-block; order:4; margin-left:auto;
      background:none; border:none; cursor:pointer; padding:6px 0 0 12px;
      font-family:'Poppins',sans-serif; font-size:.78rem; font-weight:600; color:var(--gold-ink);
    }
    .review-item.open .rv-quote{ max-height:320px; opacity:1; margin-top:10px; }
  }
  @media (prefers-reduced-motion: reduce){
    .review-item .rv-quote{ transition:none; }
  }

  /* ---------- FINAL CTA ---------- */
  .final-cta{ margin:0; padding:120px 6%; text-align:center; position:relative; overflow:hidden; }   /* see .band */
  .final-cta-glass{ max-width:700px; margin:0 auto; padding:60px 48px; border-radius:32px; }
  .final-cta h2{ color:var(--white); font-size:clamp(1.9rem,4vw,3.2rem); margin-bottom:18px;}
  .final-cta p{ color:rgba(255,255,255,.62); max-width:520px; margin:0 auto 34px; font-size:1.05rem; }

  /* ---------- FOOTER : light warm Liquid Glass ---------- */
  footer{ padding:40px 3vw 46px; font-size:.94rem; position:relative; }
  .footer-panel{
    position:relative; max-width:1500px; margin:0 auto; overflow:hidden;
    padding:56px 56px 24px; border-radius:34px; isolation:isolate; color:var(--charcoal);
    /* fallback for no backdrop-filter -> warm cream base */
    background:linear-gradient(150deg, rgba(255,255,255,.92), rgba(245,239,229,.86));
    -webkit-backdrop-filter:blur(28px) saturate(150%);
    backdrop-filter:blur(28px) saturate(150%);
    border:1px solid rgba(212,155,58,.32);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.85), 0 22px 60px rgba(120,90,40,.13);
  }
  /* very faint warm food blur for glass depth + light wash to keep it readable */
  .footer-panel::before{
    content:""; position:absolute; inset:0; z-index:-2;
    background:url('../images/hero-bg.jpg') center/cover no-repeat;
    /* noinspection CssInvalidFunction */
    background-image:image-set(url('../images/hero-bg.webp') type('image/webp'),
                               url('../images/hero-bg.jpg') type('image/jpeg'));
    filter:blur(12px) saturate(115%); transform:scale(1.15); opacity:.1;
  }
  .footer-panel::after{
    content:""; position:absolute; inset:0; z-index:-1;
    background:
      radial-gradient(130% 90% at 88% -12%, rgba(232,190,114,.16), transparent 55%),
      linear-gradient(150deg, rgba(255,255,255,.6), rgba(243,238,229,.5));
  }
  .footer-shine{
    position:absolute; top:0; left:0; right:0; height:2px; z-index:1; pointer-events:none;
    background:linear-gradient(90deg, transparent, rgba(255,255,255,.95), transparent);
  }

  .footer-grid{ display:grid; grid-template-columns:1.35fr .85fr .95fr 1.25fr; gap:0; margin-bottom:34px; }
  .footer-grid > *{ padding:2px 38px; }
  .footer-grid > .footer-brand{ padding-left:0; }
  .footer-grid > .footer-col{ border-left:1px solid rgba(212,155,58,.22); }

  /* column heading (plain title on desktop, accordion button on mobile) */
  .footer-heading{
    display:flex; align-items:center; gap:9px; width:100%; text-align:left; cursor:default;
    margin:0; padding:0; font-family:'Poppins',sans-serif;
    color:var(--gold-ink); font-size:.82rem; font-weight:700; letter-spacing:.09em; text-transform:uppercase;
  }
  .footer-h{ display:none; }
  .footer-h-ico{ display:none; width:18px; height:18px; color:var(--gold-ink); }
  .footer-h-ico svg{ width:100%; height:100%; }
  .footer-h-chev{ display:none; margin-left:auto; width:18px; height:18px; color:var(--gold-ink); transition:transform .25s ease; }
  .footer-h-chev svg{ width:100%; height:100%; }
  .footer-hr{ display:block; position:relative; width:54px; height:14px; margin:11px 0 18px; }
  .footer-hr::before{ content:""; position:absolute; top:50%; left:0; width:54px; height:1px; background:linear-gradient(90deg, rgba(212,155,58,.7), rgba(212,155,58,.05)); }
  .footer-hr::after{ content:"\2666"; position:absolute; left:19px; top:50%; transform:translateY(-50%); color:var(--gold); font-size:.6rem; }

  .footer-grid ul{ list-style:none; }
  .footer-grid li{ margin-bottom:12px; }
  .footer-grid a{ color:var(--charcoal); text-decoration:none; transition:color .25s ease, transform .25s ease; }
  .footer-col-body li a{ display:inline-block; }
  .footer-col-body li a:hover{ color:var(--gold-ink); transform:translateX(3px); }

  /* brand column */
  .footer-brand .logo-chip{ margin-bottom:18px; }
  .footer-logo{ height:58px; width:auto; }
  .footer-desc{ color:var(--charcoal); line-height:1.7; max-width:300px; margin-bottom:22px; font-size:.96rem; }
  .footer-badges{ display:flex; flex-wrap:wrap; gap:14px; }
  .footer-badge{ text-align:center; width:80px; }
  a.footer-badge{ text-decoration:none; color:inherit; transition:transform .18s ease; }
  a.footer-badge:hover{ transform:translateY(-2px); }
  a.footer-badge:hover .footer-badge-ico{ border-color:var(--gold); }
  .footer-badge-ico{
    display:flex; align-items:center; justify-content:center; width:54px; height:54px; margin:0 auto 8px;
    border-radius:18px; color:var(--gold-ink);
    background:linear-gradient(160deg, rgba(212,155,58,.14), rgba(212,155,58,.04));
    border:1px solid rgba(212,155,58,.35);
  }
  .footer-badge-ico svg{ width:25px; height:25px; }
  .footer-badge-label{ font-size:.74rem; font-weight:600; color:var(--charcoal); line-height:1.25; display:block; }

  /* contact items (.footer-col-body .footer-cinfo beats the li a inline-block rule) */
  .footer-col-body .footer-cinfo{ display:flex; align-items:flex-start; gap:11px; line-height:1.5; color:var(--charcoal); }
  .footer-col-body .footer-cinfo:hover{ transform:none; }
  .footer-ico{ display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; width:18px; height:18px; color:var(--gold-ink); margin-top:1px; }
  .footer-ico svg{ width:18px; height:18px; display:block; }

  /* Contact Us CTA (a.footer-cta beats .footer-grid a specificity).
     Geometry is DELIBERATELY IDENTICAL to a.footer-rest-cta below -- same
     display, gap, padding, radius, icon chip and arrow box -- so the two stack
     as one matched pair rather than a pill above a card. Only the colour differs.
     Change one and you must change the other.
     The gold is NOT declared here: the element carries the shared .glass-gold
     class, the same one on the hero's "Build Your Own Plate" and the nav's
     "Build a Plate", so the fill, border and shadow all come from that single
     declaration and composite over the footer exactly as they do for the mobile
     CTA bar. A hand-picked hex looked right in isolation and read a shade too
     saturated next to the real thing. */
  a.footer-cta{
    margin-top:22px; display:flex; align-items:center; gap:10px;
    padding:10px 10px 10px 12px; border-radius:18px; text-decoration:none;
    font-family:'Poppins',sans-serif; color:#3A2708; letter-spacing:.01em;
    transition:transform .3s cubic-bezier(.2,.7,.2,1), box-shadow .3s ease, filter .3s ease;
  }
  /* `a.footer-cta:hover` (0,1,1 + pseudo) beats .glass-gold's box-shadow */
  a.footer-cta:hover{
    transform:translateY(-2px); filter:brightness(1.04); color:#3A2708;
    box-shadow:0 14px 34px rgba(184,122,37,.45), inset 0 1px 0 rgba(255,255,255,.6);
  }
  .footer-cta-ico{
    display:inline-flex; align-items:center; justify-content:center; flex-shrink:0;
    width:34px; height:34px; border-radius:11px; color:#3A2708;
    background:rgba(255,255,255,.4); border:1px solid rgba(255,255,255,.5);
  }
  .footer-cta-ico svg{ width:19px; height:19px; }
  .footer-cta-txt{ display:flex; flex-direction:column; gap:1px; min-width:0; flex:1 1 auto; }
  .footer-cta-t{ font-weight:700; font-size:.86rem; line-height:1.25; color:#2B1D06; white-space:nowrap; }
  .footer-cta-d{ font-size:.72rem; line-height:1.3; color:#2B1D06; }   /* was rgba(58,39,8,.7) -> 3.61:1 */
  .footer-cta-arrow{
    display:inline-flex; align-items:center; justify-content:center; flex-shrink:0;
    width:20px; height:20px; color:#3A2708;
  }
  .footer-cta-arrow svg{ width:16px; height:16px; }
  a.footer-cta:hover .footer-cta-arrow{ transform:translateX(3px); transition:transform .18s ease; }

  /* "Order Food Online" CTA -> the restaurant site.
     DARK, where .footer-cta is gold. Two gold pills stacked in one column read
     as two equally-weighted primary actions and blunt the catering CTA this site
     is built to win; dark-on-ivory is the higher-contrast thing in the footer
     while still obviously reading as the second choice. The gold hairline and
     gold arrow keep it inside the palette. */
  /* Metrics are tuned to the 253px footer column, which is the narrowest place
     this button appears on desktop: icon + gaps + arrow leave ~160px for the
     label, and "Order Food Online" at .86rem needs ~140px. Widen the chrome and
     the label wraps to two lines. */
  a.footer-rest-cta{
    margin-top:12px; display:flex; align-items:center; gap:10px;
    padding:10px 10px 10px 12px; border-radius:18px; text-decoration:none;
    color:#FBF6EC; background:linear-gradient(140deg, #2E2A25, #443C31);
    border:1px solid rgba(212,155,58,.5);
    box-shadow:0 8px 20px rgba(46,42,37,.24);
    transition:transform .3s cubic-bezier(.2,.7,.2,1), box-shadow .3s ease, border-color .3s ease;
  }
  a.footer-rest-cta:hover{
    color:#FBF6EC; transform:translateY(-2px); border-color:var(--gold);
    box-shadow:0 14px 28px rgba(46,42,37,.32);
  }
  .footer-rest-ico{
    display:inline-flex; align-items:center; justify-content:center; flex-shrink:0;
    width:34px; height:34px; border-radius:11px; color:var(--gold);
    background:rgba(212,155,58,.16); border:1px solid rgba(212,155,58,.34);
  }
  .footer-rest-ico svg{ width:19px; height:19px; }
  .footer-rest-txt{ display:flex; flex-direction:column; gap:1px; min-width:0; flex:1 1 auto; }
  .footer-rest-t{
    font-family:'Poppins',sans-serif; font-weight:700; font-size:.86rem;
    letter-spacing:0; line-height:1.25; color:#FBF6EC; white-space:nowrap;
  }
  .footer-rest-d{ font-size:.72rem; line-height:1.3; color:rgba(251,246,236,.68); }
  .footer-rest-arrow{
    display:inline-flex; align-items:center; justify-content:center; flex-shrink:0;
    width:20px; height:20px; color:var(--gold);
  }
  .footer-rest-arrow svg{ width:16px; height:16px; }
  a.footer-rest-cta:hover .footer-rest-arrow{ transform:translateX(3px); transition:transform .18s ease; }

  /* bottom bar: copyright | social | legal */
  .footer-bottom{
    display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:16px;
    border-top:1px solid rgba(212,155,58,.22); padding-top:22px; margin-top:6px;
    color:var(--gray); font-size:.83rem;
  }
  .footer-social{ display:flex; gap:11px; }
  .footer-soc{
    display:inline-flex; align-items:center; justify-content:center; width:42px; height:42px; border-radius:50%;
    color:var(--gold-ink); background:rgba(255,255,255,.6); border:1px solid rgba(212,155,58,.35);
    transition:background .2s ease, color .2s ease, transform .2s ease, border-color .2s ease;
  }
  .footer-soc:hover{ background:var(--gold); color:#fff; border-color:var(--gold); transform:translateY(-2px); }
  .footer-soc svg{ width:19px; height:19px; }
  .footer-legal a{ color:var(--gray); text-decoration:none; transition:color .25s ease; }
  .footer-legal a:hover{ color:var(--gold-ink); }
  .footer-legal i{ color:var(--gray); font-style:normal; margin:0 5px; }   /* was .5 alpha gold -> 1.45:1 */

  /* --- tablet: 2 columns, brand full width --- */
  @media(max-width:900px) and (min-width:821px){
    .footer-panel{ padding:48px 40px 22px; }
    .footer-grid{ grid-template-columns:1fr 1fr; row-gap:36px; }
    .footer-grid > *{ padding:2px 0; }
    .footer-grid > .footer-col{ border-left:none; }
    .footer-grid > .footer-col:nth-child(even){ padding-left:34px; border-left:1px solid rgba(212,155,58,.2); }
  }

  /* --- mobile: single column, COMPANY/SERVICES/CONTACT accordions --- */
  @media(max-width:820px){
    footer{ padding:26px 18px 34px; }
    .footer-panel{ padding:34px 24px 22px; border-radius:26px; }
    .footer-grid{ grid-template-columns:1fr; row-gap:6px; margin-bottom:24px; }
    .footer-grid > *{ padding:0; }
    .footer-grid > .footer-col{ border-left:none; border-top:1px solid rgba(212,155,58,.2); }
    .footer-brand{ padding-bottom:22px; }
    .footer-desc{ max-width:none; }
    .footer-heading{ display:none; }
    .footer-h{
      display:flex; align-items:center; gap:9px; width:100%; text-align:left; cursor:pointer;
      background:none; border:none; padding:16px 2px; font-family:'Poppins',sans-serif;
      color:var(--gold-ink); font-size:.82rem; font-weight:700; letter-spacing:.09em; text-transform:uppercase;
    }
    .footer-h-ico, .footer-h-chev{ display:inline-flex; }
    .footer-hr{ display:none; }
    .footer-col-body{ display:none; padding:0 2px 16px; }
    .footer-col.footer-open > .footer-col-body{ display:block; animation:pFade .25s ease; }
    .footer-col.footer-open .footer-h-chev{ transform:rotate(180deg); }
    /* contact items become bordered cards on mobile */
    .footer-contact-list li{ margin-bottom:10px; }
    .footer-cinfo{
      padding:12px 14px; border-radius:12px; align-items:center;
      border:1px solid rgba(212,155,58,.28); background:rgba(255,255,255,.55);
    }
    a.footer-cta, a.footer-rest-cta{ width:100%; }
    .footer-bottom{ flex-direction:column; text-align:center; gap:18px; padding-top:22px; }
    .footer-legal{ line-height:2; order:3; }
    .footer-social{ order:2; }
    .footer-copy{ order:1; }
  }
  @media (prefers-reduced-motion: reduce){
    a.footer-cta, a.footer-rest-cta, .footer-col-body li a, .footer-soc, .footer-h-chev{ transition:none; }
    a.footer-cta:hover, a.footer-cta:hover .footer-cta-arrow,
    a.footer-rest-cta:hover, a.footer-rest-cta:hover .footer-rest-arrow{ transform:none; }
    .footer-col.footer-open > .footer-col-body{ animation:none; }
  }

  /* ================= NEW: FORMS ================= */
  .form-wrap{ max-width:760px; margin:0 auto; padding:48px 44px; border-radius:28px; }
  .form-grid{ display:grid; grid-template-columns:1fr 1fr; gap:20px; }
  .form-field{ display:flex; flex-direction:column; gap:8px; margin-bottom:20px; }
  .form-field.full{ grid-column:1 / -1; }
  .form-field label{ font-family:'Poppins',sans-serif; font-size:.78rem; font-weight:600; letter-spacing:.03em; color:var(--charcoal); }
  .form-field .req{ color:var(--danger); }
  .form-field input, .form-field select, .form-field textarea{
    font-family:'Inter',sans-serif; font-size:.94rem; padding:13px 16px; border-radius:12px;
    border:1px solid #8F8160; background:rgba(255,255,255,.7); color:var(--charcoal);
    transition:border-color .25s ease, box-shadow .25s ease;
  }
  .form-field input:focus, .form-field select:focus, .form-field textarea:focus{
    outline:2px solid var(--gold-ink); outline-offset:2px; border-color:var(--gold); box-shadow:0 0 0 3px rgba(212,155,58,.18);
  }
  .form-field textarea{ resize:vertical; min-height:110px; font-family:'Inter',sans-serif; }
  .form-field.invalid input, .form-field.invalid select, .form-field.invalid textarea{ border-color:var(--danger); box-shadow:0 0 0 3px rgba(192,57,43,.12); }
  .field-error{ font-size:.76rem; color:var(--danger); min-height:1em; display:none; }
  .form-field.invalid .field-error{ display:block; }
  .form-honeypot{ position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden; }
  .form-status{
    display:none; margin-bottom:22px; padding:16px 18px; border-radius:14px; font-size:.9rem; line-height:1.5;
  }
  .form-status.show{ display:block; }
  .form-status.success{ background:rgba(58,138,78,.12); border:1px solid rgba(58,138,78,.35); color:#256137; }
  .form-status.error{ background:rgba(192,57,43,.1); border:1px solid rgba(192,57,43,.32); color:#8a2a20; }
  .form-submit-row{ display:flex; align-items:center; gap:16px; flex-wrap:wrap; }
  .form-hint{ font-size:.78rem; color:var(--gray); }

  /* The quote form is the whole point of this page, and on a phone it was the
     one thing that did not fit: .form-grid held two columns at every width and
     .form-wrap kept 44px of padding on each side, which pushed the fields
     ~145px past a 375px viewport and made the page scroll sideways. One column,
     tighter padding, and a 16px input font (anything smaller makes iOS Safari
     zoom on focus, which then strands the user mid-form). */
  @media(max-width:560px){
    .form-wrap{ padding:26px 16px; border-radius:20px; }
    /* minmax(0,1fr), not 1fr: a grid item defaults to min-width:auto, so a long
       placeholder or a wide <select> stretches the track past its container.
       That alone kept ~55px of sideways scroll after the column collapse. */
    .form-grid{ grid-template-columns:minmax(0,1fr); gap:0; }
    .form-field{ margin-bottom:16px; min-width:0; }
    .form-field input, .form-field select, .form-field textarea{ font-size:16px; width:100%; min-width:0; max-width:100%; }
    .form-submit-row{ flex-direction:column; align-items:stretch; gap:10px; }
    .form-submit-row .btn{ width:100%; min-height:48px; }
    .form-hint{ text-align:center; }
  }
  .spinner{
    width:16px; height:16px; border-radius:50%; border:2px solid rgba(0,0,0,.25); border-top-color:var(--black);
    animation:spin .7s linear infinite; display:none;
  }
  .btn.loading .spinner{ display:inline-block; }
  .btn.loading .btn-label{ opacity:.75; }
  @keyframes spin{ to{ transform:rotate(360deg); } }

  .contact-info-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:18px; max-width:1180px; margin:0 auto 60px; }
  .contact-info-card{ padding:30px 26px; border-radius:20px; text-align:center; }
  .contact-info-card .ci-icon{ font-size:1.6rem; margin-bottom:12px; }
  .contact-info-card h3{ font-size:1.15rem; margin-bottom:8px; color:var(--black); }
  .contact-info-card p{ color:var(--gray); font-size:.88rem; line-height:1.55; }
  .contact-info-card a{ color:var(--gold-ink); text-decoration:none; font-weight:600; }
  .contact-info-card a:hover{ text-decoration:underline; }

  /* Phone/email/address are the whole point of these cards, so make them read
     as tappable and give them a real touch target (WCAG 2.5.8 wants 24px; 44px
     is Apple's comfortable minimum and costs nothing here). */
  .contact-info-card .ci-link{
    display:inline-flex; align-items:center; justify-content:center;
    min-height:44px; padding:2px 6px; border-radius:10px;
    transition:background-color .18s ease, color .18s ease;
  }
  .contact-info-card .ci-link:focus-visible{ outline:2px solid var(--gold-ink); outline-offset:2px; }
  @media(hover:hover){ .contact-info-card .ci-link:hover{ background:rgba(233,135,17,.08); } }
  .contact-info-card .ci-link:active{ background:rgba(233,135,17,.14); }

  /* The address is two lines inside one link, so it cannot centre as a flex
     row the way the single-line phone does. */
  .contact-info-card .ci-link[href*="google.com/maps"]{ display:inline-block; text-align:center; line-height:1.5; padding:8px 6px; }

  /* rajwadithalifremont@gmail.com is 28 characters and used to punch out of a
     220px card. Break it at any character rather than letting it overflow, and
     step the size down so it usually still fits on one line. */
  .contact-info-card .ci-email{
    font-size:.8rem; overflow-wrap:anywhere; word-break:break-word; max-width:100%;
  }

  /* Service Area and Response Time have no link to carry the eye, so their
     headline sentence gets the emphasis the gold link gives the other cards --
     otherwise both lines read as one grey run-on. */
  .contact-info-card .ci-lead{
    display:block; color:var(--charcoal); font-weight:600; margin-bottom:4px;
  }

  @media(max-width:560px){
    /* Two up instead of one: five full-width cards made the page a long scroll
       before the form, which is the thing people actually came to use. */
    .contact-info-grid{ grid-template-columns:repeat(2,1fr); gap:12px; margin-bottom:40px; }
    .contact-info-card{ padding:20px 12px; border-radius:16px; }
    .contact-info-card .ci-icon{ font-size:1.4rem; margin-bottom:8px; }
    .contact-info-card h3{ font-size:.98rem; margin-bottom:6px; }
    .contact-info-card p{ font-size:.8rem; line-height:1.5; }
    .contact-info-card .ci-email{ font-size:.72rem; }
    /* Response Time is the odd fifth card -- let it span so the grid ends flush
       instead of leaving a gap beside it. */
    .contact-info-card:last-child{ grid-column:1 / -1; }
  }
  @media(max-width:359px){
    .contact-info-grid{ grid-template-columns:1fr; }
    .contact-info-card:last-child{ grid-column:auto; }
  }

  /* The footer address is now a Maps link; match the other footer links. */
  a.footer-addr{ text-decoration:none; }
  a.footer-addr:hover span:last-child{ text-decoration:underline; }

  /* ================= NEW: MENU PAGE ================= */
  .menu-filters{ display:flex; flex-wrap:wrap; gap:10px; justify-content:center; margin:0 auto 50px; max-width:1000px; }
  .menu-filter-btn{
    font-family:'Poppins',sans-serif; font-size:.8rem; font-weight:600; padding:10px 20px; border-radius:100px;
    border:1px solid rgba(195,178,149,.45); background:rgba(255,255,255,.5); color:var(--charcoal); cursor:pointer;
    transition:background-color .25s ease, border-color .25s ease, color .25s ease; min-height:44px;
  }
  .menu-filter-btn:hover{ border-color:var(--gold); }
  .menu-filter-btn.active{ background:var(--black); color:var(--gold-light); border-color:var(--black); }
  /* optional wrapper (menu page + plate builder): sticks the chip strip just
     below the nav on a SOLID surface, with a right-edge fade hinting more chips */
  .filters-bar{ position:relative; }
  .filters-bar .menu-filters{ margin-bottom:0; }
  @media(max-width:768px){
    /* one horizontal scrolling row of chips instead of a half-screen wall
       -- shared by the menu-page category filters and the service-styles
       jump-nav so both stay reachable with a thumb instead of stacking into
       a tall wall of pills that pushes the real content further down */
    .menu-filters, .service-list-nav{
      flex-wrap:nowrap; justify-content:flex-start; overflow-x:auto; gap:8px;
      padding:10px 2px; margin-bottom:30px; max-width:none;
      -webkit-overflow-scrolling:touch; scroll-snap-type:x proximity;
      /* noinspection CssUnknownProperty */
      scrollbar-width:none;
    }
    .menu-filters::-webkit-scrollbar, .service-list-nav::-webkit-scrollbar{ display:none; }
    .menu-filter-btn, .service-list-nav a{ flex-shrink:0; scroll-snap-align:center; padding:10px 16px; white-space:nowrap; }
    .filters-bar{
      position:sticky; top:var(--nav-space); z-index:60;
      background:var(--bg); margin-bottom:26px;
      box-shadow:0 10px 16px -14px rgba(60,45,15,.45);
    }
    .filters-bar::after{
      content:''; position:absolute; top:0; right:0; bottom:0; width:34px; pointer-events:none;
      background:linear-gradient(90deg, rgba(245,240,231,0), var(--bg) 80%);
    }
    .filters-bar .menu-filters, .filters-bar .service-list-nav{ padding-right:36px; }
  }
  .menu-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:18px; max-width:1180px; margin:0 auto; }
  .menu-item{ padding:24px 26px; border-radius:18px; display:flex; justify-content:space-between; gap:16px; align-items:flex-start; transition:transform .3s ease; }
  .menu-item:hover{ transform:translateY(-4px); }
  .menu-item.hide{ display:none; }
  .menu-item-name{ font-family:'Cormorant Garamond',serif; font-weight:700; font-size:1.15rem; color:var(--black); margin-bottom:4px; }
  .menu-item-desc{ font-size:.84rem; color:var(--gray); line-height:1.5; }
  .menu-tags{ margin-top:8px; display:flex; gap:6px; flex-wrap:wrap; }
  .menu-tag{ font-size:.65rem; font-weight:700; letter-spacing:.04em; text-transform:uppercase; padding:3px 9px; border-radius:100px; }
  .menu-tag.jain{ background:rgba(212,155,58,.16); color:var(--gold-ink); border:1px solid rgba(212,155,58,.35); }
  .menu-tag.vegan{ background:rgba(58,138,78,.14); color:var(--success); border:1px solid rgba(58,138,78,.32); }
  .menu-tag.spicy{ background:rgba(192,57,43,.12); color:var(--danger); border:1px solid rgba(192,57,43,.28); }
  .menu-item-icon{ font-size:1.4rem; flex-shrink:0; }

  /* ---- Category-block menu layout (icon + name chips grouped by course) ---- */
  .menu-cat-block{ max-width:1180px; margin:0 auto 64px; }
  .menu-cat-block.hide{ display:none; }
  .menu-cat-title{
    font-size:1.5rem; color:var(--black); margin-bottom:22px; padding-bottom:12px;
    border-bottom:1px solid rgba(195,178,149,.4);
  }
  .menu-cat-note{ margin-top:18px; font-size:.85rem; color:var(--gray); }
  .menu-cat-note a{ color:var(--gold-ink); text-decoration:underline; font-weight:600; }
  .menu-cat-note a:hover{ text-decoration:underline; }
  /* Sub-category (e.g. Indo Chinese, Sandwiches, Biryani) nested in a course */
  .menu-subcat{ margin-top:34px; }
  .menu-subcat-title{
    font-size:1.15rem; font-weight:600; color:var(--gold-ink);
    margin-bottom:16px; padding-bottom:8px; letter-spacing:.01em;
    border-bottom:1px dashed rgba(212,155,58,.45);
  }
  .menu-subcat .menu-cat-note{ margin-top:14px; }
  .dish-grid{
    display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
    gap:12px;
  }
  .dish-chip{
    display:flex; align-items:center; gap:12px; padding:14px 16px; border-radius:14px;
    transition:transform .25s ease, box-shadow .25s ease;
  }
  .dish-chip:hover{ transform:translateY(-3px); }
  .dish-chip .dish-icon{
    display:flex; align-items:center; justify-content:center; flex-shrink:0;
    width:42px; height:42px; border-radius:50%; font-size:1.35rem; line-height:1;
    background:linear-gradient(160deg, rgba(212,155,58,.20), rgba(212,155,58,.06));
    border:1px solid rgba(212,155,58,.3); box-shadow:0 2px 6px rgba(88,64,20,.08) inset;
  }
  .dish-chip .dish-name{ font-size:.86rem; font-weight:600; color:var(--charcoal); line-height:1.3; }
  @media(max-width:560px){
    .dish-grid{ grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); }
    .dish-chip .dish-icon{ width:36px; height:36px; font-size:1.15rem; }
  }

  /* ================= NEW: FAQ ACCORDION ================= */
  .faq-list{ max-width:820px; margin:0 auto; display:flex; flex-direction:column; gap:14px; }
  .faq-item{ border-radius:18px; overflow:hidden; }
  .faq-question{
    width:100%; text-align:left; background:none; border:none; cursor:pointer;
    padding:22px 26px; display:flex; justify-content:space-between; align-items:center; gap:16px;
    font-family:'Cormorant Garamond',serif; font-weight:700; font-size:1.1rem; color:var(--black);
  }
  .faq-question .faq-plus{
    flex-shrink:0; width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center;
    background:rgba(212,155,58,.16); color:var(--gold-ink); font-size:1.1rem; transition:transform .3s ease;
  }
  .faq-question[aria-expanded="true"] .faq-plus{ transform:rotate(45deg); }
  .faq-answer{ max-height:0; overflow:hidden; transition:max-height .35s ease, padding .35s ease; padding:0 26px; }
  .faq-question[aria-expanded="true"] + .faq-answer{ max-height:400px; padding:0 26px 22px; }
  .faq-answer p{ color:var(--gray); font-size:.92rem; line-height:1.6; }

  /* ================= NEW: GALLERY + LIGHTBOX ================= */
  .gallery-filters{ display:flex; flex-wrap:wrap; gap:10px; justify-content:center; margin:0 auto 44px; }
  .gallery-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:16px; max-width:1240px; margin:0 auto; }
  .gallery-tile{
    position:relative; border-radius:18px; overflow:hidden; aspect-ratio:4/3; cursor:pointer; border:none; padding:0;
    display:flex; align-items:flex-end; justify-content:flex-start;
  }
  .gallery-tile img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; transition:transform .5s ease; }
  .gallery-tile:hover img{ transform:scale(1.06); }
  .gallery-tile .gt-overlay{
    position:relative; z-index:2; padding:16px; width:100%;
    background:linear-gradient(0deg, rgba(0,0,0,.65), transparent);
    color:var(--white); font-family:'Cormorant Garamond',serif; font-weight:600; font-size:1.02rem; text-align:left;
  }
  .lightbox{
    /* above the fixed #nav (z-index:999999 !important) -- at 1000 the navbar
       floated over a full-screen photo viewer at full brightness. Same fix as
       .p-sheet-backdrop and .cchoice; the nav is blurred to match. */
    position:fixed; inset:0; z-index:1000000; background:rgba(5,5,5,.92);
    display:none; align-items:center; justify-content:center; padding:5vh 4vw;
  }
  .lightbox.open{ display:flex; }
  body.lightbox-open #nav{
    filter:blur(5px) saturate(.85); opacity:.6; pointer-events:none;
    transition:filter .25s ease, opacity .25s ease;
  }
  @media (prefers-reduced-motion: reduce){ body.lightbox-open #nav{ transition:none; } }
  .lightbox img{ max-width:100%; max-height:82vh; border-radius:14px; box-shadow:0 20px 60px rgba(0,0,0,.5); }
  .lightbox-caption{ position:absolute; bottom:6vh; left:0; right:0; text-align:center; color:rgba(255,255,255,.8); font-size:.9rem; }
  .lightbox-close, .lightbox-prev, .lightbox-next{
    position:absolute; background:rgba(255,255,255,.1); border:1px solid rgba(255,255,255,.25); color:var(--white);
    width:46px; height:46px; border-radius:50%; cursor:pointer; display:flex; align-items:center; justify-content:center;
    font-size:1.2rem; transition:background .25s ease;
  }
  .lightbox-close:hover, .lightbox-prev:hover, .lightbox-next:hover{ background:rgba(255,255,255,.22); }
  .lightbox-close{ top:24px; right:24px; }
  .lightbox-prev{ left:24px; top:50%; transform:translateY(-50%); }
  .lightbox-next{ right:24px; top:50%; transform:translateY(-50%); }
  @media(max-width:700px){ .lightbox-prev,.lightbox-next{ width:38px; height:38px; } }

  /* ================= NEW: ABOUT PAGE ================= */
  .about-grid{ display:grid; grid-template-columns:1.1fr .9fr; gap:60px; align-items:center; max-width:1180px; margin:0 auto; }
  .about-grid img{ border-radius:24px; width:100%; display:block; box-shadow:0 20px 50px rgba(0,0,0,.15); }
  .about-copy p{ color:var(--gray); line-height:1.75; margin-bottom:16px; font-size:1rem; }
  .about-grid-solo{ display:block; max-width:820px; }
  .about-copy-centered{ text-align:center; }
  .about-story-title{ font-size:clamp(1.5rem,4.6vw,2.1rem); color:var(--black); line-height:1.2; margin:14px 0 20px; }
  .about-copy-centered p{ text-align:justify; }
  .about-copy-centered .btn{ display:inline-flex; }
  .stat-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:18px; max-width:1000px; margin:60px auto 0; }
  .stat-card{ padding:28px 20px; border-radius:20px; text-align:center; }
  .stat-card .stat-num{ font-family:'Cormorant Garamond',serif; font-weight:700; font-size:2.1rem; color:var(--gold-ink); display:block; }
  .stat-card .stat-label{ font-size:.78rem; color:var(--gray); text-transform:uppercase; letter-spacing:.05em; margin-top:6px; }
  /* phones: keep justified body copy (client preference), but give it a
     little extra breathing room from the screen edges beyond the section's
     own padding -- a tight column reads noticeably better justified than a
     wide one. A tight 2x2 stat grid (instead of the 1-per-row stack
     auto-fit collapses to at this width) and a full-width CTA keep the
     section feeling as considered as desktop. */
  @media(max-width:560px){
    .about-copy-centered{ margin-left:12px; margin-right:12px; }
    .about-copy-centered p{ text-align:justify; line-height:1.7; }
    .about-story-title{ margin:12px 0 16px; }
    .about-copy-centered .btn{ width:100%; justify-content:center; }
    .stat-grid{ grid-template-columns:1fr 1fr; gap:12px; margin-top:40px; }
    .stat-card{ padding:20px 14px; }
    .stat-card .stat-num{ font-size:1.7rem; }
  }
  .team-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:22px; max-width:1000px; margin:0 auto; }
  /* at ~560-600px the grid just barely fits 2 columns, stranding the 3rd
     (odd) team card alone and left-aligned in its own row instead of
     centered -- force a single column through that whole phone range so
     every card, including the last, always reads centered */
  @media(max-width:560px){ .team-grid{ grid-template-columns:1fr; } }
  .team-card{ padding:30px 24px; border-radius:20px; text-align:center; }
  .team-avatar{
    width:76px; height:76px; border-radius:50%; margin:0 auto 16px;
    background:linear-gradient(135deg, rgba(212,155,58,.32), rgba(212,155,58,.1));
    display:flex; align-items:center; justify-content:center; font-size:1.6rem; color:var(--gold-ink);
    border:1px solid rgba(212,155,58,.35);
  }
  .team-card h3{ font-size:1.1rem; color:var(--black); margin-bottom:2px; }
  .team-card .role{ font-size:.78rem; color:var(--gold-ink); text-transform:uppercase; letter-spacing:.04em; margin-bottom:10px; }
  .team-card p{ font-size:.85rem; color:var(--gray); line-height:1.5; }
  @media(max-width:860px){ .about-grid{ grid-template-columns:1fr; } .about-grid img{ max-width:460px; margin:0 auto; } }

  /* ================= NEW: 404 ================= */
  .error-page{ margin-top:0; min-height:80vh; display:flex; align-items:center; justify-content:center; text-align:center; padding:calc(var(--nav-space) + 40px) 6% 80px; }
  .error-page .code{ font-family:'Cormorant Garamond',serif; font-size:clamp(4rem,12vw,8rem); font-weight:700; color:var(--gold-ink); line-height:1; }
  .error-page h1{ font-size:clamp(1.6rem,3vw,2.4rem); color:var(--black); margin:14px 0 16px; }
  .error-page p{ color:var(--gray); margin-bottom:32px; max-width:440px; }

  /* ================= NEW: BLOG / GENERIC UTILITY ================= */
  .badge-row{ display:flex; gap:10px; flex-wrap:wrap; justify-content:center; margin-bottom:30px; }
  .content-narrow{ max-width:760px; margin:0 auto; }
  .content-narrow h2{ font-size:1.6rem; color:var(--black); margin:34px 0 14px; }
  .content-narrow p{ color:var(--gray); line-height:1.75; margin-bottom:16px; }
  /* ================= NEW: SERVICE STYLES PAGE ================= */
  .service-intro{ max-width:820px; margin:0 auto 70px; text-align:center; }
  .service-intro p{ color:var(--gray); line-height:1.75; font-size:1.05rem; margin-top:16px; }
  .service-list-nav{
    display:flex; flex-wrap:wrap; gap:10px; justify-content:center; max-width:1000px; margin:0 auto 70px;
  }
  .service-list-nav a{
    font-family:'Poppins',sans-serif; font-size:.78rem; font-weight:600; padding:9px 18px; border-radius:100px;
    border:1px solid rgba(195,178,149,.45); background:rgba(255,255,255,.5); color:var(--charcoal);
    text-decoration:none; transition:background-color .25s ease, border-color .25s ease;
  }
  .service-list-nav a:hover{ border-color:var(--gold); background:rgba(212,155,58,.14); }
  /* re-assert the horizontal-scroll mobile treatment (declared earlier,
     alongside .menu-filters) -- it must come after the base .service-list-nav
     rule above so equal-specificity cascade order doesn't let flex-wrap:wrap
     win back on phones */
  @media(max-width:768px){
    .service-list-nav{ flex-wrap:nowrap; justify-content:flex-start; margin-bottom:30px; max-width:none; }
  }
  .service-block{
    max-width:940px; margin:0 auto 34px; padding:36px 40px; border-radius:26px; scroll-margin-top:calc(var(--nav-space) + 12px);
  }
  .service-block-head{ display:flex; align-items:flex-start; gap:18px; margin-bottom:16px; }
  .service-icon{
    flex-shrink:0; width:52px; height:52px; border-radius:16px; display:flex; align-items:center; justify-content:center;
    font-size:1.4rem; color:var(--gold-ink);
    background:linear-gradient(135deg, rgba(212,155,58,.22), rgba(212,155,58,.06));
    border:1px solid rgba(212,155,58,.3);
  }
  .service-title{ font-size:1.5rem; color:var(--black); margin-bottom:6px; }
  .service-minimum{
    display:inline-block; font-family:'Poppins',sans-serif; font-size:.7rem; font-weight:600; letter-spacing:.03em;
    color:var(--gold-ink); background:rgba(212,155,58,.14); border:1px solid rgba(212,155,58,.3);
    padding:4px 12px; border-radius:100px;
  }
  .service-block p{ color:var(--gray); line-height:1.7; font-size:.94rem; margin-bottom:14px; }
  /* text links inside service copy — exclude .btn so the WhatsApp CTA keeps its
     button styling (black label, no underline) and matches the other CTAs */
  .service-block a:not(.btn){ color:var(--gold-ink); font-weight:600; text-decoration:underline; text-decoration-color:rgba(212,155,58,.5); text-underline-offset:2px; }
  .service-block a:not(.btn):hover{ text-decoration-color:var(--gold-ink); }
  .service-details{ list-style:none; margin-top:18px; }
  .service-details li{
    font-size:.9rem; color:var(--charcoal); padding:9px 0; border-bottom:1px dashed rgba(195,178,149,.32);
    display:flex; align-items:flex-start; gap:10px; line-height:1.5;
  }
  .service-details li::before{ content:'✦'; color:var(--gold); font-size:.7rem; margin-top:4px; flex-shrink:0; }
  .service-details .sub-list{ list-style:none; margin:8px 0 0 22px; width:100%; }
  .service-details .sub-list li{ border-bottom:none; padding:4px 0; font-size:.86rem; }
  .service-details .sub-list li::before{ content:'–'; }
  .service-note{ margin-top:18px; font-size:.82rem; font-style:italic; color:var(--gray); line-height:1.5; }
  .service-cta{ margin-top:22px; }
  .service-cta-btn svg{ width:20px; height:20px; flex-shrink:0; }

  /* ================= NEW: PACKAGES PAGE TABS ================= */
  .page-tab-panel.hide{ display:none; }

  /* ---- Catering Trays ---- */
  .tray-grid{
    display:grid; grid-template-columns:repeat(auto-fit,minmax(250px,1fr));
    gap:20px; max-width:1180px; margin:0 auto 60px;
  }
  .tray-card{ padding:30px 28px; border-radius:22px; scroll-margin-top:calc(var(--nav-space) + 12px); }
  .tray-size{ font-size:1.4rem; color:var(--black); margin-bottom:4px; }
  .tray-serves{ font-size:.78rem; color:var(--gold-ink); text-transform:uppercase; letter-spacing:.05em; font-weight:600; margin-bottom:20px; }
  .price-list{ list-style:none; }
  .price-list li{
    display:flex; justify-content:space-between; align-items:baseline; gap:10px;
    font-size:.88rem; color:var(--charcoal); padding:8px 0; border-bottom:1px dashed rgba(195,178,149,.32);
  }
  .price-list li:last-child{ border-bottom:none; }
  .price-list .price-name{ color:var(--charcoal); }
  .price-list .price-amt{ color:var(--gold-ink); font-weight:700; font-family:'Poppins',sans-serif; white-space:nowrap; }
  .tray-extras-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:20px; max-width:1180px; margin:0 auto; }
  .tray-extras-card{ padding:30px 28px; border-radius:22px; }
  .tray-extras-card h3{ font-size:1.2rem; color:var(--black); margin-bottom:16px; }

  /* ---- Catering Packages ---- */
  .pkg-note-banner{
    max-width:820px; margin:0 auto 50px; padding:18px 26px; border-radius:16px; text-align:center;
    font-size:.9rem; color:var(--charcoal);
  }

  /* ---- Package Policy / Premium Upgrade Matrix ---- */
  .pkg-policy-block, .pkg-upgrade-matrix{
    max-width:1180px; margin:44px auto 0; padding:34px 32px; border-radius:22px;
    border-top:2px solid rgba(212,155,58,.55);
  }
  .pkg-policy-block h3, .pkg-upgrade-matrix h3{
    font-family:'Cormorant Garamond',serif; font-weight:700; font-size:1.5rem;
    color:var(--black); margin-bottom:18px;
  }
  .pkg-policy-block ul{ list-style:none; }
  .pkg-policy-block li{
    position:relative; font-size:.92rem; color:var(--charcoal); line-height:1.6;
    padding:9px 0 9px 24px; border-bottom:1px dashed rgba(195,178,149,.35);
  }
  .pkg-policy-block li:last-child{ border-bottom:none; }
  .pkg-policy-block li::before{
    content:'\2022'; position:absolute; left:6px; top:9px;
    color:var(--gold-ink); font-weight:700;
  }

  .upgrade-table{ width:100%; border-collapse:collapse; }
  .upgrade-table th{
    text-align:left; font-family:'Poppins',sans-serif; font-size:.7rem; font-weight:600;
    letter-spacing:.08em; text-transform:uppercase; color:var(--gold-ink);
    padding:0 14px 12px 0; border-bottom:1px solid rgba(195,178,149,.5);
  }
  .upgrade-table td{
    font-size:.9rem; color:var(--charcoal); line-height:1.55; vertical-align:top;
    padding:13px 14px 13px 0; border-bottom:1px dashed rgba(195,178,149,.35);
  }
  .upgrade-table tr:last-child td{ border-bottom:none; }
  .upgrade-table td:first-child{ font-weight:600; color:var(--black); white-space:nowrap; }
  .upgrade-table td:last-child{
    padding-right:0; text-align:right; white-space:nowrap;
    font-family:'Poppins',sans-serif; font-weight:700; color:var(--gold-ink);
  }

  .pkg-disclaimer{
    max-width:1180px; margin:22px auto 50px; padding:0 4px;
    font-size:.78rem; line-height:1.6; color:var(--gray); text-align:center;
  }

/* Narrow screens: the 3-column matrix can't hold long item lists, so each row
   collapses into its own labelled card (same idea as the .pm-cat rows). */
@media(max-width:768px){
  .pkg-policy-block, .pkg-upgrade-matrix{ padding:26px 20px; margin-top:32px; }
  .upgrade-table thead{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
  .upgrade-table tr{
    display:block; padding:14px 0; border-bottom:1px dashed rgba(195,178,149,.35);
  }
  .upgrade-table tr:last-child{ border-bottom:none; }
  .upgrade-table td{
    display:flex; gap:12px; align-items:baseline; justify-content:space-between;
    padding:3px 0; border-bottom:none; text-align:left; white-space:normal;
  }
  .upgrade-table td::before{
    content:attr(data-label); flex-shrink:0;
    font-family:'Poppins',sans-serif; font-size:.66rem; font-weight:600;
    letter-spacing:.07em; text-transform:uppercase; color:var(--gray);
  }
  .upgrade-table td:first-child{ white-space:normal; }
  .upgrade-table td:last-child{ text-align:right; }
}

  /* ---- Build Your Own Plate ---- */
  .builder-intro{ max-width:780px; margin:0 auto 40px; text-align:center; }
  .builder-intro p{ color:var(--gray); line-height:1.7; margin-top:14px; }
  .builder-toolbar{ display:flex; flex-wrap:wrap; gap:14px; align-items:center; justify-content:center; margin-bottom:40px; }
  .builder-search{
    font-family:'Inter',sans-serif; font-size:.88rem; padding:11px 18px; border-radius:100px; min-width:220px;
    border:1px solid #8F8160; background:rgba(255,255,255,.7); color:var(--charcoal);
  }
  .builder-search:focus{ outline:2px solid var(--gold-ink); outline-offset:2px; border-color:var(--gold); box-shadow:0 0 0 3px rgba(212,155,58,.18); }
  .builder-wrap{ display:grid; grid-template-columns:1.35fr .95fr; gap:28px; max-width:1240px; margin:0 auto; align-items:start; }
  .builder-source{ min-width:0; }
  .builder-cat-block{ margin-bottom:44px; }
  .builder-cat-block.hide{ display:none; }
  .builder-chip{
    cursor:pointer; user-select:none; transition:transform .2s ease, box-shadow .2s ease, border-color .2s ease;
    display:flex; align-items:center; justify-content:space-between; gap:14px;
    padding:16px 20px; border-radius:18px; background:var(--white); box-shadow:0 2px 10px rgba(60,45,15,.08);
  }
  .builder-chip:hover{ transform:translateY(-3px); box-shadow:0 10px 22px rgba(60,45,15,.14); }
  .builder-chip:active{ cursor:grabbing; }
  .builder-chip.added{ border-color:var(--gold); box-shadow:0 0 0 2px rgba(212,155,58,.35) inset; }
  .builder-chip .menu-left{ display:flex; align-items:center; gap:14px; min-width:0; }
  .builder-chip .dish-photo-wrap{ flex-shrink:0; display:flex; width:36px; height:36px; }
  .builder-chip .dish-photo{
    width:36px; height:36px; border-radius:50%; object-fit:cover; flex-shrink:0;
    box-shadow:0 2px 6px rgba(60,45,15,.18); border:1px solid rgba(212,155,58,.25); background:var(--cream);
  }
  .builder-chip .dish-name{ font-weight:600; font-size:18px; line-height:1.25; color:var(--charcoal); }
  .builder-chip .dish-add{
    margin-left:0; font-size:1.05rem; color:var(--gold-ink); flex-shrink:0; font-weight:700;
    display:flex; align-items:center; justify-content:center;
  }
  .builder-chip.added .dish-add{ color:var(--success); }
  .builder-chip.filtered-out{ display:none; }
  @media(max-width:900px){
    .builder-chip .dish-photo-wrap, .builder-chip .dish-photo{ width:34px; height:34px; }
  }
  @media(max-width:560px){
    .builder-chip{ padding:14px 16px; gap:12px; }
    .builder-chip .menu-left{ gap:12px; }
    .builder-chip .dish-photo-wrap, .builder-chip .dish-photo{ width:32px; height:32px; }
    .builder-chip .dish-name{ font-size:16px; }
  }
  .builder-plate{
    position:sticky; top:calc(var(--nav-space) + 10px); padding:28px 26px; border-radius:24px; border:2px dashed rgba(212,155,58,.55);
    min-height:220px; display:flex; flex-direction:column;
  }
  .builder-plate.drag-over{ border-color:var(--gold); background:rgba(212,155,58,.08); }
  .builder-plate h3{ font-size:1.25rem; color:var(--black); margin-bottom:4px; }
  .builder-plate-count{ font-size:.78rem; color:var(--gray); margin-bottom:18px; }
  .builder-plate-empty{ color:var(--gray); font-size:.88rem; text-align:center; margin:auto 0; padding:20px 0; }
  .builder-details{
    border-top:1px dashed rgba(195,178,149,.5); margin-bottom:18px; padding-top:18px;
  }
  .builder-details-head{
    font-family:'Poppins',sans-serif; font-size:.82rem; font-weight:600; color:var(--charcoal);
    margin-bottom:14px;
  }
  .builder-details-optional{ font-weight:400; color:var(--gray); font-size:.76rem; }
  .builder-details-grid{ display:grid; grid-template-columns:1fr; gap:12px; }
  .builder-details-grid .form-field{ margin-bottom:0; gap:5px; }
  .builder-details-grid .form-field label{ font-size:.72rem; }
  .builder-details-grid .form-field input, .builder-details-grid .form-field select{
    padding:9px 12px; font-size:.85rem;
  }
  .builder-plate-list{ list-style:none; margin-bottom:20px; }
  .builder-plate-list li{
    display:flex; align-items:center; gap:10px;
    padding:8px 12px; border-radius:12px; background:rgba(212,155,58,.08); margin-bottom:8px;
    font-size:.86rem; color:var(--charcoal); font-weight:600;
  }
  .builder-plate-list .plate-item-icon{
    display:flex; align-items:center; justify-content:center; flex-shrink:0;
    width:28px; height:28px; border-radius:50%; font-size:.95rem; line-height:1;
    background:rgba(255,255,255,.55); border:1px solid rgba(212,155,58,.3);
  }
  .builder-plate-list .plate-item-name{ flex:1; }
  .builder-plate-list button{
    background:none; border:none; cursor:pointer; color:var(--gray); font-size:1rem; line-height:1; padding:2px 6px;
    border-radius:50%; transition:color .2s ease, background .2s ease;
  }
  .builder-plate-list button:hover{ color:var(--danger); background:rgba(192,57,43,.1); }
  .builder-plate-actions{ display:flex; flex-direction:column; gap:10px; margin-top:auto; }
  .builder-plate-actions .btn{ width:100%; justify-content:center; }
  .builder-plate-actions .btn-clear{
    background:none; border:1px solid rgba(195,178,149,.5); color:var(--gray); font-size:.82rem; padding:11px 20px;
  }
  .builder-plate-actions .btn-clear:hover{ border-color:var(--danger); color:var(--danger); }
  @media(max-width:900px){
    .builder-wrap{ grid-template-columns:1fr; }
    .builder-plate{ position:relative; top:0; }
  }

  /* group labels inside the plate list, e.g. "Curries", "Dal" -- read like a package's item list */
  .plate-group-label{
    background:none; padding:10px 2px 4px; margin-bottom:2px; font-size:.7rem; font-weight:700;
    text-transform:uppercase; letter-spacing:.06em; color:var(--gold-ink);
  }
  .plate-group-label:first-child{ padding-top:0; }

  /* ---- Complete Your Thali (suggestions) ---- */
  .builder-suggest{ border-top:1px dashed rgba(195,178,149,.5); margin-bottom:18px; padding-top:18px; }
  .builder-suggest.hide{ display:none; }
  .builder-suggest-head{
    font-family:'Poppins',sans-serif; font-size:.82rem; font-weight:600; color:var(--charcoal); margin-bottom:14px;
  }
  .builder-suggest-list{ display:flex; flex-direction:column; gap:10px; }
  .builder-suggest-chip{
    display:flex; align-items:center; gap:12px; width:100%; text-align:left; cursor:pointer;
    padding:10px 12px; border-radius:14px; border:1px dashed rgba(212,155,58,.45); background:rgba(212,155,58,.06);
    font-family:'Inter',sans-serif; transition:background .2s ease, border-color .2s ease, transform .2s ease;
  }
  .builder-suggest-chip:hover{ background:rgba(212,155,58,.14); border-color:var(--gold); transform:translateY(-2px); }
  .builder-suggest-chip img{
    width:28px; height:28px; border-radius:50%; object-fit:cover; flex-shrink:0;
    border:1px solid rgba(212,155,58,.3); background:var(--cream);
  }
  .builder-suggest-text{ flex:1; font-size:.82rem; color:var(--charcoal); line-height:1.4; }
  .builder-suggest-text strong{ font-size:.68rem; text-transform:uppercase; letter-spacing:.04em; color:var(--gold-ink); }
  .builder-suggest-plus{ font-size:1.05rem; font-weight:700; color:var(--gold-ink); flex-shrink:0; }

  /* ---- cross-sell: tray add-ons + full-package upsell below the builder ---- */
  .builder-crosssell{
    max-width:1240px; margin:32px auto 0; padding:30px 28px; border-radius:24px;
  }
  .crosssell-banner{
    display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:18px;
    padding:18px 22px; margin-bottom:26px; border-radius:16px; background:rgba(212,155,58,.1);
    border:1px solid rgba(212,155,58,.3);
  }
  .crosssell-banner.hide{ display:none; }
  .crosssell-banner p{ flex:1; min-width:240px; font-size:.88rem; color:var(--charcoal); line-height:1.6; margin:0; }
  .crosssell-banner .btn{ flex-shrink:0; }
  .crosssell-addons-head{ font-size:1.1rem; font-weight:700; color:var(--black); margin-bottom:6px; }
  .crosssell-addons-sub{ font-size:.84rem; color:var(--gray); margin-bottom:18px; }
  .crosssell-addons-grid{
    display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:12px; margin-bottom:20px;
  }
  .crosssell-addon-card{
    display:flex; align-items:center; justify-content:space-between; gap:10px;
    padding:14px 18px; border-radius:14px; background:var(--white); box-shadow:0 2px 10px rgba(60,45,15,.08);
    font-size:.86rem; font-weight:600; color:var(--charcoal);
  }
  .crosssell-addon-price{ color:var(--gold-ink); font-weight:700; font-family:'Poppins',sans-serif; white-space:nowrap; }

  .back-to-top{
    position:fixed; bottom:28px; right:28px; z-index:80; width:48px; height:48px; border-radius:50%;
    display:flex; align-items:center; justify-content:center; color:var(--white); font-size:1.1rem;
    opacity:0; pointer-events:none; transition:opacity .3s ease, transform .3s ease; cursor:pointer; border:none;
  }
  .back-to-top.show{ opacity:1; pointer-events:auto; }

/* ========================= */
/* FIXED APPLE LIQUID NAVBAR */
/* ========================= */

#nav{
  position:fixed !important;
  top:calc(20px + env(safe-area-inset-top, 0px)) !important;
  left:50% !important;
  transform:translateX(-50%) !important;

  width:min(95%,1600px) !important;

  z-index:999999 !important;
}

main{
  position:relative;
}

.hero{
  margin-top:0 !important;
  padding-top:calc(var(--nav-space) + 20px) !important;
}
/* ========================= */
/* AI CATERING PLANNER       */
/* Mobile-first; desktop >=1100px gets a 2-column layout with sticky plan aside */
/* ========================= */

.planner{ max-width:1180px; margin:0 auto; }
.planner.hide{ display:none; }
.planner-main{ min-width:0; max-width:660px; margin:0 auto; }
.planner-flow{ display:block; }
.p-plan-fade{ animation:pFade .35s ease; }
@keyframes pFade{ from{ opacity:0; transform:translateY(10px);} to{ opacity:1; transform:none;} }

/* welcome */
.p-welcome{ padding:clamp(32px,5vw,46px) clamp(22px,4.5vw,46px); border-radius:24px; text-align:center; }
.p-welcome h2{ font-size:clamp(1.5rem,5vw,2.1rem); color:var(--black); margin:10px 0 12px; }
.p-welcome p{ color:var(--charcoal); line-height:1.65; max-width:460px; margin:0 auto 22px; }
/* "how it works" preview: all 5 questions on a single line. Five equal,
   no-wrap columns keep the numbered circles aligned in one row across every
   device; each label centers beneath its circle and wraps within its own
   column, and font/circle sizes step down on narrow screens so it never
   crowds. */
.p-welcome-steps{
  list-style:none; display:flex; flex-wrap:nowrap; align-items:flex-start; justify-content:center; gap:8px;
  max-width:520px; margin:0 auto 24px; padding:20px 2px;
  border-top:1px dashed rgba(195,178,149,.55); border-bottom:1px dashed rgba(195,178,149,.55);
}
.p-welcome-steps li{
  flex:1 1 0; min-width:0;
  display:flex; flex-direction:column; align-items:center; gap:8px; text-align:center;
  font-size:.78rem; font-weight:600; color:var(--charcoal); line-height:1.25;
}
.p-wstep-num{
  width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-family:'Poppins',sans-serif; font-size:.78rem; font-weight:700; color:var(--gold-ink);
  background:rgba(212,155,58,.12); border:1px solid rgba(212,155,58,.4);
}
.p-welcome-ctas{ display:flex; flex-direction:column; gap:10px; max-width:380px; margin:0 auto; }
.p-welcome-ctas .p-cta-main{ margin-bottom:0; }
.p-welcome .p-welcome-note{ font-size:.75rem; color:var(--gray); max-width:none; margin:16px 0 0; }
.p-cta{ width:100%; justify-content:center; min-height:52px; font-size:1rem; }
.p-cta-main{ margin-bottom:12px; }
.p-btn-ghost{
  width:100%; justify-content:center; min-height:48px; background:none;
  border:1px solid rgba(195,178,149,.55); color:var(--charcoal); font-size:.9rem;
}
.p-btn-ghost:hover{ border-color:var(--gold); color:var(--gold-ink); }
.p-resume{
  border:1px dashed rgba(212,155,58,.55); background:rgba(212,155,58,.08);
  border-radius:16px; padding:16px; margin-bottom:20px; text-align:left;
}
.p-resume-txt{ font-size:.92rem; color:var(--charcoal); margin-bottom:12px; line-height:1.5; }
.p-resume-btns{ display:flex; flex-direction:column; gap:8px; }

/* question steps */
.p-step-head{ text-align:center; margin-bottom:22px; position:relative; }
.p-step-label{ display:block; font-size:.72rem; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--gold-ink); margin-bottom:8px; }
.p-q-title{ font-size:clamp(1.35rem,4.5vw,1.8rem); color:var(--black); }
.p-back{
  position:absolute; left:0; top:0; background:none; border:none; cursor:pointer;
  color:var(--gray); font-size:.85rem; padding:8px 10px 8px 0; min-height:44px;
}
.p-back:hover{ color:var(--gold-ink); }
.p-card-grid{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }
.p-card{
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px;
  min-height:96px; padding:16px 10px; border-radius:18px; cursor:pointer;
  background:var(--white); border:1.5px solid rgba(195,178,149,.4);
  box-shadow:0 2px 10px rgba(60,45,15,.07); transition:border-color .2s ease, transform .2s ease;
  font-family:'Poppins',sans-serif;
}
.p-card:hover{ transform:translateY(-2px); }
.p-card.selected, .p-card:focus-visible{ border-color:var(--gold); box-shadow:0 0 0 2px rgba(212,155,58,.3) inset; }
.p-card-icon{ font-size:1.7rem; line-height:1; }
.p-card-label{ font-size:.88rem; font-weight:600; color:var(--charcoal); text-align:center; line-height:1.3; }
.p-chip-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:22px; }
.p-guest-chip{
  min-height:56px; border-radius:16px; font-family:'Poppins',sans-serif; font-size:1.05rem; font-weight:600;
  background:var(--white); border:1.5px solid rgba(195,178,149,.4); color:var(--charcoal); cursor:pointer;
  transition:border-color .2s ease;
}
.p-guest-chip.selected, .p-guest-chip:focus-visible{ border-color:var(--gold); box-shadow:0 0 0 2px rgba(212,155,58,.3) inset; color:var(--gold-ink); }
.p-exact label{ display:block; font-size:.8rem; color:var(--gray); margin-bottom:8px; }
.p-exact-row{ display:flex; gap:10px; }
.p-exact-row input{
  flex:1; min-width:0; padding:13px 16px; border-radius:14px; font-size:1rem;
  border:1px solid #8F8160; background:rgba(255,255,255,.8); color:var(--charcoal);
}
.p-exact-row input:focus{ outline:2px solid var(--gold-ink); outline-offset:2px; border-color:var(--gold); box-shadow:0 0 0 3px rgba(212,155,58,.18); }
.p-exact-row .btn{ min-height:50px; }
.p-style-list{ display:flex; flex-direction:column; gap:12px; }
/* small print under a question (e.g. "kitchen confirms exact preparation") */
.p-step-note{ margin-top:14px; text-align:center; font-size:.76rem; color:var(--gray); line-height:1.5; }
.p-style-card{
  text-align:left; padding:16px 18px; border-radius:18px; cursor:pointer;
  background:var(--white); border:1.5px solid rgba(195,178,149,.4);
  box-shadow:0 2px 10px rgba(60,45,15,.07); transition:border-color .2s ease; min-height:64px;
}
.p-style-card.selected, .p-style-card:focus-visible{ border-color:var(--gold); box-shadow:0 0 0 2px rgba(212,155,58,.3) inset; }
.p-style-label{ display:block; font-family:'Poppins',sans-serif; font-weight:600; font-size:.98rem; color:var(--charcoal); margin-bottom:3px; }
.p-style-desc{ display:block; font-size:.8rem; color:var(--gray); line-height:1.45; }

/* ---- Q3 package cards: tap the card to turn it over, Select to choose ---- */
.p-pkg-flip{ perspective:1200px; cursor:pointer; }
/* Both faces share one grid cell, so the card is as tall as its taller face and
   nothing needs a hardcoded height. */
.p-pkg-flip-inner{
  display:grid; transform-style:preserve-3d;
  transition:transform .55s cubic-bezier(.22,1,.36,1);
}
/* rotateX, not rotateY: the card turns over bottom-to-top rather than sideways */
.p-pkg-flip.flipped .p-pkg-flip-inner{ transform:rotateX(180deg); }
.p-pkg-face{
  grid-area:1/1; display:flex; flex-direction:column; text-align:left;
  padding:13px 16px; border-radius:18px; min-height:0;
  background:var(--white); border:1.5px solid rgba(195,178,149,.4);
  box-shadow:0 2px 10px rgba(60,45,15,.07); transition:border-color .2s ease;
  backface-visibility:hidden; -webkit-backface-visibility:hidden;
}
.p-pkg-flip:hover .p-pkg-face{ border-color:rgba(212,155,58,.6); }
.p-pkg-flip.selected .p-pkg-face{ border-color:var(--gold); box-shadow:0 0 0 2px rgba(212,155,58,.3) inset; }
.p-pkg-back{ transform:rotateX(180deg); }
/* name left, price pinned top-right */
.p-pkg-head{ display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }
.p-pkg-head .p-style-label{ flex:1; margin-bottom:0; }
.p-flip-items{ display:block; font-size:.8rem; color:var(--charcoal); line-height:1.5; margin-top:5px; }
/* Select and the flip hint share one row, so the front loses a whole line */
.p-flip-foot{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:auto; padding-top:10px; }
.p-select-btn{ padding:7px 20px; min-height:36px; font-size:.8rem; flex-shrink:0; }
.p-flip-hint{
  font-size:.74rem; background:none; border:none; padding:0; cursor:pointer; text-align:right;
}
.p-pkg-back .p-flip-hint{ align-self:flex-start; margin-top:auto; padding-top:8px; text-align:left; }
/* top-right price: amount over a small "/ person" so it stays one tight block */
.p-style-price{
  flex-shrink:0; text-align:right; font-style:normal; font-family:'Poppins',sans-serif;
  font-weight:700; font-size:1rem; line-height:1.15; color:var(--gold-ink);
}
.p-style-price em{ display:block; font-style:normal; font-weight:500; font-size:.68rem; color:var(--gray); }
@media(prefers-reduced-motion:reduce){
  .p-pkg-flip-inner{ transition:none; }
}
/* Select is the primary action here -- keep it a 44px touch target on phones */
@media(max-width:768px){
  .p-select-btn{ min-height:44px; padding:10px 24px; }
}

/* plan stage */
.p-context h3{ font-size:1.5rem; color:var(--black); margin-bottom:10px; }
.p-context-chips{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-bottom:20px; }
.p-ctx-chip{
  font-size:.78rem; font-weight:600; color:var(--charcoal); padding:7px 13px;
  border-radius:100px; background:rgba(212,155,58,.12); border:1px solid rgba(212,155,58,.3);
}
/* each chip edits its own answer, so it's a real button with a pencil affordance */
.p-ctx-chip-btn{
  display:inline-flex; align-items:center; gap:6px; min-height:36px;
  font-family:'Inter',sans-serif; cursor:pointer;
  transition:background .2s ease, border-color .2s ease;
}
.p-ctx-chip-btn:hover, .p-ctx-chip-btn:focus-visible{
  background:rgba(212,155,58,.24); border-color:var(--gold);
}
.p-ctx-pen{ font-size:.72rem; color:var(--gold-ink); line-height:1; }
/* An answer that hasn't been given yet ("Add event type"). Dashed and muted so
   it reads as a prompt to act rather than a filled-in value. */
.p-ctx-chip-empty{
  background:transparent; border-style:dashed; border-color:rgba(212,155,58,.55);
  color:var(--gold-ink); font-weight:700;
}
.p-ctx-chip-empty:hover, .p-ctx-chip-empty:focus-visible{
  background:rgba(212,155,58,.14); border-style:solid;
}
@media(max-width:768px){
  .p-ctx-chip-btn{ min-height:44px; }
}
.p-pkg{ padding:22px 20px; border-radius:20px; margin-bottom:24px; }
.p-pkg-top{ display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
.p-pkg-eyebrow{ font-size:.7rem; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:var(--gold-ink); }
.p-pkg-score{
  font-size:.74rem; font-weight:700; color:var(--gold-ink);
  padding:4px 10px; border-radius:100px; background:rgba(212,155,58,.14); border:1px solid rgba(212,155,58,.35);
}
.p-pkg-name{ font-family:'Cormorant Garamond',serif; font-size:1.7rem; font-weight:700; color:var(--black); }
.p-pkg-badge{ font-size:.66rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--black); background:var(--gold); border-radius:100px; padding:3px 10px; vertical-align:middle; }
.p-pkg-price{ font-family:'Poppins',sans-serif; font-weight:700; color:var(--gold-ink); font-size:1.1rem; margin:2px 0 12px; }
.p-pkg-price span{ font-size:.78rem; font-weight:500; color:var(--gray); }
.p-pkg-price-was{ font-weight:500; font-size:.92rem; color:var(--gray); text-decoration:line-through; margin-right:5px; }
.p-pkg-why{ list-style:none; margin-bottom:14px; }
.p-pkg-why li{ font-size:.85rem; color:var(--charcoal); line-height:1.55; padding-left:20px; position:relative; margin-bottom:6px; }
.p-pkg-why li::before{ content:"\2726"; position:absolute; left:0; color:var(--gold); font-size:.7rem; top:3px; }
.p-pkg-alt{
  display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap;
  font-size:.82rem; color:var(--gray); border-top:1px dashed rgba(195,178,149,.5); padding-top:12px; margin-bottom:8px;
}
.p-link{ background:none; border:none; cursor:pointer; color:var(--gold-ink); font-weight:600; font-size:.82rem; text-decoration:none; padding:6px 0; }
.p-link:hover{ text-decoration:underline; }
.p-pkg-details{ display:inline-block; }
.p-menu h4, .p-adjust h4{ font-size:1.05rem; color:var(--black); margin-bottom:14px; }
.p-menu{ margin-bottom:26px; }
.p-menu-group{ margin-bottom:16px; }
/* On Build Your Own these groups ("Always Included", the chosen live stations)
   follow the course cards directly, with no gap of their own to separate them. */
.p-manual .p-menu-group{ margin-top:22px; }
.p-menu-group-label{ font-size:.7rem; font-weight:700; text-transform:uppercase; letter-spacing:.08em; color:var(--gold-ink); margin-bottom:8px; }
/* editable AI-menu course: same add/remove/upgrade rules as manual mode */
.p-menu-editable{ padding:12px 14px 12px; border-radius:16px; border:1.5px solid rgba(195,178,149,.35); background:rgba(255,255,255,.45); margin-bottom:12px; }
.p-menu-editable .p-manual-add{ margin-top:2px; }
.p-menu-editable.has-error{ border-color:var(--danger); box-shadow:0 0 0 2px rgba(192,57,43,.14); }
.p-menu-group-meter{
  font-size:.66rem; font-weight:700; letter-spacing:.03em; color:var(--gold-ink);
  background:rgba(212,155,58,.12); padding:3px 9px; border-radius:100px; margin-left:6px; vertical-align:middle; text-transform:none;
}
.p-menu-editable.has-error .p-menu-group-meter{ color:#fff; background:var(--danger); }
.p-dish-row{
  display:flex; align-items:center; gap:12px; padding:10px 14px; margin-bottom:8px;
  border-radius:14px; background:var(--white); box-shadow:0 2px 8px rgba(60,45,15,.07);
}
.p-dish-icon{ width:34px; height:34px; border-radius:50%; object-fit:cover; flex-shrink:0; border:1px solid rgba(212,155,58,.25); background:var(--cream); }
.p-dish-name{ flex:1; min-width:0; font-size:.9rem; font-weight:600; color:var(--charcoal); line-height:1.35; }
.p-dish-sub{ font-style:normal; font-weight:500; font-size:.76rem; color:var(--gray); }
.p-swap-btn{
  flex-shrink:0; min-height:44px; padding:8px 16px; border-radius:100px; cursor:pointer;
  font-size:.78rem; font-weight:700; color:var(--gold-ink); background:rgba(212,155,58,.1);
  border:1px solid rgba(212,155,58,.35); transition:background .2s ease;
}
.p-swap-btn:hover{ background:rgba(212,155,58,.2); }
.p-included{ font-size:.85rem; color:var(--charcoal); padding:10px 14px; background:rgba(212,155,58,.07); border-radius:14px; }
.p-ai-note{
  font-size:.83rem; color:var(--charcoal); line-height:1.55; padding:11px 14px; margin-top:10px;
  border-left:3px solid var(--gold); background:rgba(212,155,58,.07); border-radius:0 12px 12px 0;
}
.p-adjust{ margin-bottom:26px; }
.p-adjust-chips{ display:flex; flex-wrap:wrap; gap:9px; }
.p-adj-chip{
  min-height:44px; padding:10px 16px; border-radius:100px; cursor:pointer; font-size:.84rem; font-weight:600;
  background:var(--white); color:var(--charcoal); border:1.5px solid rgba(195,178,149,.45); transition:border-color .2s ease;
}
.p-adj-chip.selected{ border-color:var(--gold); background:rgba(212,155,58,.14); color:var(--gold-ink); }
.p-addon{ padding:20px; border-radius:20px; margin-bottom:24px; }
.p-addon-name{ font-family:'Poppins',sans-serif; font-weight:700; font-size:1.05rem; color:var(--black); margin:6px 0; }
.p-addon-why{ font-size:.85rem; color:var(--gray); line-height:1.6; margin-bottom:8px; }
.p-addon-price{ font-size:.82rem; font-weight:700; color:var(--gold-ink); margin-bottom:14px; }
.p-addon-btns{ display:flex; gap:10px; flex-wrap:wrap; }
.p-addon-btns .btn{ flex:1; min-width:130px; justify-content:center; min-height:48px; }
.p-ask{ margin-bottom:24px; border:1px dashed rgba(195,178,149,.5); border-radius:16px; padding:0 16px; }
.p-ask summary{ cursor:pointer; font-family:'Poppins',sans-serif; font-weight:600; font-size:.9rem; color:var(--charcoal); padding:15px 0; min-height:44px; }
.p-ask-hint{ font-size:.78rem; color:var(--gray); margin-bottom:10px; line-height:1.5; }
.p-ask-row{ display:flex; gap:8px; margin-bottom:14px; }
.p-ask-row input{
  flex:1; min-width:0; padding:12px 14px; border-radius:12px; font-size:.9rem;
  border:1px solid #8F8160; background:rgba(255,255,255,.85);
}
.p-ask-row input:focus{ outline:2px solid var(--gold-ink); outline-offset:2px; border-color:var(--gold); }
.p-secondary-row{ display:flex; flex-direction:column; gap:10px; margin-bottom:10px; }

/* ============ Unified planner: AI <-> Build-Your-Own toggle ============ */
.pm-mode-toggle{
  display:flex; gap:6px; max-width:520px; margin:0 auto 26px; padding:6px;
  background:rgba(212,155,58,.09); border:1px solid rgba(195,178,149,.4); border-radius:100px;
}
.pm-toggle-btn{
  flex:1; display:inline-flex; align-items:center; justify-content:center; gap:8px;
  min-height:48px; padding:10px 14px; border-radius:100px; cursor:pointer;
  font-family:'Poppins',sans-serif; font-weight:600; font-size:.92rem;
  color:var(--gray); background:transparent; border:none; transition:color .2s ease, background .2s ease, box-shadow .2s ease;
}
.pm-toggle-btn:hover{ color:var(--gold-ink); }
.pm-toggle-btn.active{ color:var(--black); background:var(--white); box-shadow:0 2px 10px rgba(60,45,15,.12); }
.pm-toggle-ic{ font-size:1.05rem; line-height:1; }

/* ---- Manual builder: capped category rows with + pickers ---- */
.p-manual-head{
  display:flex; align-items:flex-start; justify-content:space-between; gap:14px;
  padding:18px 20px; margin-bottom:18px; border-radius:20px;
  background:rgba(212,155,58,.07); border:1px solid rgba(195,178,149,.4);
}
.p-manual-cats{ display:flex; flex-direction:column; gap:14px; }
.p-manual-cat{
  padding:14px 16px; border-radius:18px; background:var(--white);
  border:1.5px solid rgba(195,178,149,.4); box-shadow:0 2px 10px rgba(60,45,15,.06);
}
.p-manual-cat.is-full{ border-color:rgba(212,155,58,.5); }
/* quote attempted with this course still empty */
.p-manual-cat.has-error{ border-color:#c0392b; box-shadow:0 0 0 2px rgba(192,57,43,.16); }
.p-manual-cat.has-error .p-manual-cat-meter{ color:#fff; background:#c0392b; }
.p-cat-req{
  font-size:.62rem; font-weight:700; letter-spacing:.05em; text-transform:uppercase;
  color:#c0392b; background:rgba(192,57,43,.12); padding:3px 8px; border-radius:100px; margin-left:8px;
}
.p-manual-cat-top{ display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:10px; }
.p-manual-cat-label{ font-family:'Poppins',sans-serif; font-weight:600; font-size:.92rem; color:var(--charcoal); }
.p-manual-cat-meter{
  font-size:.72rem; font-weight:700; letter-spacing:.05em; color:var(--gold-ink);
  background:rgba(212,155,58,.12); padding:4px 10px; border-radius:100px;
}
.p-manual-picks{ margin-bottom:10px; }
.p-manual-add{
  width:100%; min-height:46px; display:inline-flex; align-items:center; justify-content:center; gap:8px;
  border-radius:12px; cursor:pointer; font-family:'Poppins',sans-serif; font-weight:600; font-size:.86rem;
  color:var(--gold-ink); background:rgba(212,155,58,.08); border:1.5px dashed rgba(212,155,58,.45); transition:background .2s ease;
}
.p-manual-add:hover{ background:rgba(212,155,58,.16); }
.p-manual-plus{ font-size:1.15rem; line-height:1; font-weight:700; }

/* ---- Cross-sell "add to your order" chips (marketplace-style) ---- */
.p-xsell{ margin:8px 0 24px; }
.p-xsell-head{ font-family:'Poppins',sans-serif; font-weight:600; font-size:.95rem; color:var(--black); margin-bottom:12px; display:flex; align-items:center; gap:8px; }
.p-xsell-tag{ font-size:.66rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--gold-ink); background:rgba(212,155,58,.13); padding:3px 9px; border-radius:100px; }
/* The row scrolls horizontally. align-items:stretch keeps every card the same
   height however long its copy is -- previously a three-line dish name made one
   card tower over its neighbours and the row looked broken. */
.p-xsell-list{
  display:flex; align-items:stretch; gap:12px; overflow-x:auto;
  padding:2px 2px 8px; scroll-snap-type:x mandatory; -webkit-overflow-scrolling:touch;
  scrollbar-width:thin;
}
.p-xsell-chip{
  flex:0 0 auto; width:212px; scroll-snap-align:start; text-align:left; cursor:pointer;
  display:flex; flex-direction:column; gap:7px; padding:14px 15px 13px; border-radius:18px;
  background:var(--white); border:1.5px solid rgba(195,178,149,.42);
  box-shadow:0 2px 10px rgba(60,45,15,.07);
  transition:border-color .2s ease, transform .2s ease, box-shadow .2s ease;
}
@media(hover:hover){
  .p-xsell-chip:hover{ border-color:var(--gold); transform:translateY(-3px); box-shadow:0 10px 22px rgba(60,45,15,.13); }
  .p-xsell-chip:hover .p-xsell-cta{ background:var(--gold-ink); color:#fff; }
  .p-xsell-chip:hover .p-xsell-thumb img{ transform:scale(1.06); }
}
.p-xsell-chip:active{ transform:translateY(-1px); }
.p-xsell-chip:focus-visible{ outline:2px solid var(--gold-ink); outline-offset:3px; }

/* thumbnail + badge share the top row */
.p-xsell-top{ display:flex; align-items:flex-start; justify-content:space-between; gap:8px; }
.p-xsell-thumb{
  flex:0 0 auto; width:52px; height:52px; border-radius:13px; overflow:hidden;
  background:rgba(212,155,58,.1); display:flex; align-items:center; justify-content:center;
}
.p-xsell-thumb img{ width:100%; height:100%; object-fit:cover; display:block; transition:transform .25s ease; }
.p-xsell-thumb.is-empty img{ display:none; }
.p-xsell-thumb-mono{
  font-family:'Cormorant Garamond',serif; font-size:1.5rem; font-weight:600; color:var(--gold-ink);
}
.p-xsell-badge{
  font-size:.6rem; font-weight:700; letter-spacing:.07em; text-transform:uppercase;
  color:var(--gold-ink); background:rgba(212,155,58,.15); border-radius:100px;
  padding:4px 8px; white-space:nowrap; margin-top:2px;
}

/* Both blocks are clamped so one long name cannot set the height of the row.
   "Fresh Juice (Apple / Grapes / Pineapple / Watermelon)" was running to three
   lines and pushing the price out of alignment with every other card. */
.p-xsell-name{
  font-family:'Poppins',sans-serif; font-weight:600; font-size:.88rem; color:var(--charcoal);
  line-height:1.32; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
  overflow:hidden;
}
.p-xsell-why{
  font-size:.75rem; color:var(--gray); line-height:1.45; flex:1 0 auto; min-height:2.9em;
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
}
/* price and the Add pill sit on one baseline, pinned to the bottom of the card */
.p-xsell-foot{
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  margin-top:2px; padding-top:10px; border-top:1px solid rgba(195,178,149,.32);
}
.p-xsell-price{ font-size:.78rem; font-weight:700; color:var(--gold-ink); line-height:1.2; }
/* The affordance the row was missing: the whole card was already clickable but
   nothing on it said so, so the cards read as static information tiles. */
.p-xsell-cta{
  flex:0 0 auto; font-family:'Poppins',sans-serif; font-size:.72rem; font-weight:700;
  color:var(--gold-ink); background:rgba(212,155,58,.16); border-radius:100px;
  padding:7px 13px; line-height:1; white-space:nowrap;
  transition:background-color .2s ease, color .2s ease;
}
@media(max-width:560px){
  /* Slightly narrower so the next card peeks in and the row reads as scrollable. */
  .p-xsell-chip{ width:198px; padding:13px 13px 12px; }
  .p-xsell-thumb{ width:46px; height:46px; border-radius:11px; }
  .p-xsell-cta{ padding:8px 14px; font-size:.73rem; }
}
@media (prefers-reduced-motion: reduce){
  .p-xsell-chip, .p-xsell-cta, .p-xsell-thumb img{ transition:none; }
  .p-xsell-chip:hover, .p-xsell-chip:active{ transform:none; }
  .p-xsell-chip:hover .p-xsell-thumb img{ transform:none; }
}

/* ---- Sheet extras: picker price tag + upgrade confirm ---- */
.p-sheet-plus{ font-style:normal; font-weight:700; font-size:.76rem; color:var(--gold-ink); }
.p-sheet-confirm{ display:flex; flex-direction:column; gap:10px; }
.p-sheet-confirm .btn{ width:100%; justify-content:center; min-height:50px; }

/* plan summary (aside / sheet content) */
.planner-aside{ display:none; }
.p-sum-title{ font-size:1.2rem; color:var(--black); margin-bottom:14px; }
.p-sum-list{ list-style:none; margin-bottom:16px; }
.p-sum-list li{
  display:flex; justify-content:space-between; gap:12px; font-size:.85rem; padding:7px 0;
  border-bottom:1px dashed rgba(195,178,149,.35); color:var(--gray);
}
.p-sum-list li strong{ color:var(--charcoal); text-align:right; }
.p-est{ margin-bottom:16px; }
/* estimate breakdown is collapsed until "See breakdown" is tapped */
.p-est-breakdown.hide{ display:none; }
.p-est-row{ display:flex; justify-content:space-between; gap:10px; font-size:.85rem; color:var(--gray); padding:5px 0; }
.p-est-total{ font-family:'Poppins',sans-serif; font-weight:700; color:var(--black); font-size:1rem; border-top:1px solid rgba(195,178,149,.5); margin-top:6px; padding-top:10px; }
.p-est-total span:last-child{ color:var(--gold-ink); }
.p-est-note{ font-size:.74rem; color:var(--gray); line-height:1.5; margin-top:8px; }
.p-budget{ margin-bottom:16px; }
.p-budget-head{ display:flex; justify-content:space-between; font-size:.8rem; color:var(--charcoal); margin-bottom:8px; gap:10px; flex-wrap:wrap; }
.p-within{ color:var(--success); font-weight:700; }
.p-over{ color:var(--danger); font-weight:700; }
.p-budget-bar{ height:8px; border-radius:100px; background:rgba(195,178,149,.3); overflow:hidden; }
.p-budget-bar span{ display:block; height:100%; border-radius:100px; background:var(--success); transition:width .4s ease; }
.p-budget-bar .p-over-bar{ background:var(--danger); }
.p-budget-fix{ margin:12px 0 4px; }
.p-sum-foot{ text-align:center; font-size:.76rem; color:var(--gray); margin-top:14px; line-height:1.8; }

/* live plate intelligence panel (Live Menu Check) */
.p-smart{ margin:2px 0 18px; padding-top:12px; border-top:1px solid rgba(195,178,149,.5); }
.p-smart-head{ display:flex; justify-content:space-between; align-items:baseline; gap:10px; margin-bottom:6px; }
.p-smart-title{ font-family:'Poppins',sans-serif; font-weight:700; font-size:.86rem; color:var(--black); }
.p-smart-total{ font-size:.8rem; font-weight:700; color:var(--gold-ink); white-space:nowrap; }
.p-smart-total em{ font-style:normal; font-weight:500; color:var(--gray); font-size:.7rem; }
.p-smart-note{ font-size:.74rem; color:var(--gray); line-height:1.5; margin-bottom:6px; }
.p-smart-item{
  font-size:.8rem; line-height:1.5; padding:9px 12px; margin:8px 0;
  border-radius:0 10px 10px 0; border-left:3px solid var(--gold);
  background:rgba(212,155,58,.07); color:var(--charcoal);
}
.p-smart-warn{ border-left-color:var(--danger); background:rgba(192,57,43,.06); }
.p-smart-soft{ border-left-color:#b9770e; background:rgba(185,119,14,.08); }
.p-smart-pair{ border-left-color:var(--success); background:rgba(30,132,73,.06); }
.p-smart-add{ font-size:.78rem; padding:2px 0 0; }
.p-smart-sub{ font-size:.7rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--gray); margin:12px 0 2px;
  display:flex; align-items:center; justify-content:space-between; gap:8px; }
/* "show me another" -- the suggestions rotate on their own, this is the manual nudge */
.p-smart-cycle{
  border:none; background:none; cursor:pointer; color:var(--gold-ink);
  font-size:1rem; line-height:1; padding:6px; margin:-6px -6px -6px 0;
  min-width:32px; min-height:32px; border-radius:100px; transition:background .2s ease;
}
.p-smart-cycle:hover{ background:rgba(212,155,58,.14); }
/* premium-matrix picks say so: the surcharge is the upsell, not a surprise */
.p-smart-tag{
  font-size:.6rem; font-weight:700; letter-spacing:.06em; text-transform:uppercase;
  color:var(--gold-ink); background:rgba(212,155,58,.16);
  padding:2px 6px; border-radius:100px; vertical-align:middle; white-space:nowrap;
}
.p-smart-pick{ display:flex; align-items:center; gap:10px; padding:7px 0; border-bottom:1px dashed rgba(195,178,149,.4); }
.p-smart-pick:last-child{ border-bottom:none; }
.p-smart-pick-txt{ flex:1; font-size:.84rem; font-weight:600; color:var(--charcoal); line-height:1.3; }
.p-smart-pick-txt em{ display:block; font-style:normal; font-weight:500; font-size:.72rem; color:var(--gray); }

/* pinned-total aside: [total] [scrollable insights] [CTA] */
/* SOLID surface + pinned below the floating nav — the total and "See
   breakdown" must never slide under the nav or let text show through */
.p-aside-top{
  position:sticky; top:var(--nav-space); z-index:3; padding:14px 0 10px;
  background:var(--surface-solid);
  border-bottom:1px solid rgba(195,178,149,.45);
}
/* inside the bottom sheet / desktop aside the panel scrolls in its OWN
   container that already clears the nav — stick to that container's top */
.p-sheet .p-aside-top, .planner-aside .p-aside-top{ top:0; }
/* keep the total/per-guest line clear of the sheet's round close button */
.p-sheet .p-aside-top{ padding-right:52px; }
.planner-aside .p-aside-top{ padding:18px 24px 12px; border-radius:22px 22px 0 0; }
.p-total-eyebrow{ font-size:.68rem; font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:var(--gray); margin-bottom:2px; }
.p-total-row{ display:flex; align-items:baseline; gap:9px; flex-wrap:wrap; }
.p-total-num{ font-family:'Poppins',sans-serif; font-weight:700; font-size:1.65rem; color:var(--black); line-height:1.1; display:inline-block; }
.p-total-per{ font-size:.76rem; color:var(--gray); font-weight:600; }
.p-breakdown-toggle{ font-size:.78rem; padding:4px 0 0; }
.p-total-delta{ opacity:0; font-size:.72rem; font-weight:700; padding:2px 9px; border-radius:100px; transition:opacity .35s ease; }
.p-total-delta.show{ opacity:1; }
.p-delta-up{ background:rgba(212,155,58,.18); color:#8a5a00; }
.p-delta-down{ background:rgba(30,132,73,.14); color:var(--success); }
@keyframes pTotalPulse{ 0%{transform:scale(1);} 40%{transform:scale(1.07);} 100%{transform:scale(1);} }
.p-total-pulse{ animation:pTotalPulse .5s ease; }
@media(prefers-reduced-motion:reduce){ .p-total-pulse{ animation:none; } }

.p-aside-scroll{ flex:1; padding:14px 0 6px; }
.planner-aside .p-aside-scroll{ padding:16px 24px 8px; }

.p-aside-cta{
  position:sticky; bottom:0; z-index:3; padding:12px 0 4px;
  background:var(--surface-solid);
  border-top:1px solid rgba(195,178,149,.45);
}
.planner-aside .p-aside-cta{ padding:14px 24px 16px; border-radius:0 0 22px 22px; }
.p-aside-cta .p-cta{ width:100%; }
.p-cta-note{ font-size:.72rem; color:var(--gray); text-align:center; margin-top:8px; }
.p-aside-cta .p-sum-foot{ margin-top:8px; }
/* footer links (Call / Start Over) are real 44px tap targets */
.p-sum-foot .p-link{ display:inline-flex; align-items:center; min-height:44px; padding:0 6px; }

.p-evt-details{ margin:14px 0 4px; }
.p-evt-details summary{ font-size:.8rem; font-weight:700; color:var(--charcoal); cursor:pointer; padding:8px 0; }
.p-evt-details[open] summary{ margin-bottom:4px; }

/* menu health strip */
.p-health{ display:grid; grid-template-columns:1fr 1fr; gap:7px; margin:4px 0 10px; }
.p-health-chip{ font-size:.72rem; font-weight:700; padding:7px 10px; border-radius:10px; display:flex; align-items:center; gap:6px; line-height:1.25; }
.p-health-chip.ok{ background:rgba(30,132,73,.09); color:var(--success); }
.p-health-chip.warn{ background:rgba(192,57,43,.09); color:var(--danger); }
/* worth knowing, but not a mistake -- a red chip for "no dal yet" overstates it */
.p-health-chip.info{ background:rgba(185,119,14,.1); color:#8a5a00; }
/* not enough menu to judge: never claim a one-dish plate is balanced */
.p-health-chip.idle{ background:rgba(140,140,140,.1); color:var(--gray); }
.p-smart-good{ border-left-color:var(--success); background:rgba(30,132,73,.06); }

/* pill add buttons -- real touch targets, not text links */
.p-smart-add{
  border:1px solid rgba(212,155,58,.55); border-radius:100px; padding:6px 14px; min-height:32px;
  background:rgba(212,155,58,.1); color:var(--gold-ink); font-weight:700; font-size:.76rem;
  cursor:pointer; white-space:nowrap; flex-shrink:0; transition:background .2s ease;
}
.p-smart-add:hover{ background:rgba(212,155,58,.22); }
.p-smart-item .p-smart-add{ margin-top:6px; display:inline-block; }

/* inline dish flags + course meta */
.p-dish-flag{ font-size:.64rem; font-weight:700; color:#8a5a00; background:rgba(212,155,58,.16); padding:3px 8px; border-radius:100px; white-space:nowrap; flex-shrink:0; }
.p-group-meta{ font-style:normal; font-weight:600; color:var(--gray); font-size:.72rem; text-transform:none; letter-spacing:0; margin-left:6px; }

/* compact best-value line */
.p-value-line{
  display:flex; align-items:center; gap:9px; font-size:.84rem; color:var(--charcoal);
  padding:10px 14px; margin-bottom:18px; border:1px solid rgba(212,155,58,.35);
  border-radius:14px; background:rgba(212,155,58,.05);
}
.p-value-line .p-value-go{ margin-left:auto; white-space:nowrap; font-size:.8rem; }

/* per-dish tray sizing controls */
.p-tray-row{ flex-wrap:wrap; }
.p-size-wrap{ display:flex; align-items:center; gap:7px; flex-shrink:0; }
.p-tier-select{
  font-family:inherit; font-size:.74rem; font-weight:600; color:var(--charcoal);
  padding:6px 8px; border-radius:10px; border:1px solid rgba(195,178,149,.6);
  background:rgba(255,255,255,.7); cursor:pointer; max-width:150px; min-height:44px;
}
@media(max-width:640px){
  /* room for "Quarter Tray · $20.00" at the 16px mobile input size */
  .p-tier-select{ flex:1; min-width:0; max-width:200px; }
}
.p-tier-select:focus-visible{ outline:2px solid var(--gold-ink); outline-offset:1px; }
.p-unit-ctrl{ display:flex; align-items:center; gap:4px; }
.p-unit-ctrl strong{ font-size:.76rem; color:var(--charcoal); min-width:24px; text-align:center; }
.p-unit-ctrl .p-count-btn{ width:26px; height:26px; }
.p-autosize-btn{ width:100%; justify-content:center; }
@media(max-width:640px){
  /* basis excludes the 44px indent margin, or the row overflows the screen */
  .p-size-wrap{ flex-basis:calc(100% - 44px); order:5; margin:6px 0 0 44px; }
}

/* sticky-bar total + warning dot */
.p-sticky-info strong em{ font-style:normal; font-size:.68rem; font-weight:600; color:rgba(255,255,255,.7); }
.p-sticky-dot{ width:9px; height:9px; border-radius:50%; background:#e24b4a; display:inline-block; margin-left:7px; }

/* fixed bottom plan bar — SOLID opaque layer above the page (recommendation
   cards must never bleed through), compact: [total | Request My Quote] on the
   first line, everything secondary on one small line below */
.planner-sticky{
  position:fixed; left:12px; right:12px; bottom:12px; z-index:900;
  display:flex; flex-direction:column; gap:2px;
  padding:10px 14px calc(10px + env(safe-area-inset-bottom, 0px)); border-radius:20px;
  background:#1D170D;
  backdrop-filter:none; -webkit-backdrop-filter:none;
  border:1px solid rgba(232,190,114,.4);
  box-shadow:0 -8px 26px rgba(20,15,5,.35), 0 14px 34px rgba(20,15,5,.4);
}
.planner-sticky.hide{ display:none; }
.p-sticky-row{ display:flex; align-items:center; justify-content:space-between; gap:12px; }
/* the total block doubles as the "view full plan" trigger (opens the sheet) */
.p-sticky-info{
  display:flex; flex-direction:column; justify-content:center; min-width:0; flex:1;
  background:none; border:none; cursor:pointer; text-align:left; padding:2px 0; min-height:48px;
  font-family:inherit;
}
.p-sticky-info strong{ color:var(--gold-light); font-family:'Poppins',sans-serif; font-size:1rem; }
.p-sticky-info span{ color:rgba(255,255,255,.78); font-size:.76rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.p-sticky-info:focus-visible{ outline:2px solid var(--gold); outline-offset:2px; border-radius:8px; }
.p-sticky-btn{ flex-shrink:0; min-height:48px; padding:12px 20px; font-size:.84rem; }
.p-sticky-note{ text-align:center; font-size:.7rem; color:rgba(255,255,255,.62); padding-top:2px; }
body.planner-sticky-on .back-to-top{ bottom:calc(var(--bottombar-space) + 96px); }
/* the plan bar replaces the generic bottom CTA bar — never two bottom bars */
body.planner-sticky-on .mobile-cta{ display:none; }
/* let the last recommendation cards scroll fully clear of the fixed bar */
@media(max-width:1099px){
  body.planner-sticky-on .planner{ padding-bottom:calc(128px + env(safe-area-inset-bottom, 0px)); }
}

/* bottom sheet */
/* STACKING. #nav is `z-index:999999 !important`, so at the old z-index of 1000
   the backdrop dimmed the whole page EXCEPT the navbar, which floated over the
   overlay at full brightness as if it were part of the sheet. These sit above
   the nav for the same reason the contact-choice modal does (z-index:1000000
   there); .p-toast has to clear the sheet too or an "Added Shahi Paneer"
   confirmation would appear behind the sheet that triggered it.
   Order: backdrop < sheet < toast. */
/* The backdrop itself is dim only, no backdrop-filter: fading the opacity of a
   backdrop-filtered layer re-filters the whole viewport on every frame of the
   fade. The nav is blurred by its own rule below instead -- one small element
   under `filter` costs a fraction of a viewport-wide `backdrop-filter`, and the
   nav is the only thing above the sheet that needed it. */
.p-sheet-backdrop{
  position:fixed; inset:0; z-index:1000000; background:rgba(20,15,5,.5);
  opacity:0; pointer-events:none; transition:opacity .25s ease;
}
.p-sheet-backdrop.show{ opacity:1; pointer-events:auto; }
body.p-sheet-open #nav{
  filter:blur(5px) saturate(.85); opacity:.6; pointer-events:none;
  transition:filter .25s ease, opacity .25s ease;
}
.p-sheet{
  position:fixed; left:0; right:0; z-index:1000001; border-radius:26px 26px 0 0;
  /* KEYBOARD-AWARE. A phone's on-screen keyboard does NOT shrink the layout
     viewport, so `bottom:0` + `vh` puts the sheet under the keyboard the moment
     the search field is focused -- the shorter the sheet, the more completely it
     disappears. planner-ui.js tracks window.visualViewport and publishes the
     keyboard height as --kb-inset and the visible height as --vvh; both fall
     back to the old values when the API is absent or no keyboard is up, so
     desktop behaviour is unchanged. */
  /* Both are published from planner-ui.js at runtime, never declared in this
     file, so a static analyser cannot see where they come from. Suppressed
     here specifically rather than switching the inspection off project-wide --
     it is the one that caught --nav-glass-solid pointing at nothing. */
  /* noinspection CssUnresolvedCustomProperty */
  bottom:var(--kb-inset, 0px);
  /* noinspection CssUnresolvedCustomProperty */
  max-height:min(86vh, calc(var(--vvh, 100vh) - var(--nav-space) - 10px));
  transition:transform .3s ease, bottom .18s ease, max-height .18s ease;
  overflow-y:auto; -webkit-overflow-scrolling:touch;
  /* no top/bottom padding: content would scroll through those slivers past
     the pinned total (top) and pinned CTA (bottom) */
  padding:0 20px;
  transform:translateY(105%); visibility:hidden;   /* transition set above */
  /* solid surface — the page keeps scrolling visually behind the sheet */
  background:var(--surface-solid);
  backdrop-filter:none; -webkit-backdrop-filter:none;
}
/* sheets without a pinned CTA still end with breathing room + safe area */
.p-sheet-body > :last-child{ margin-bottom:calc(24px + env(safe-area-inset-bottom, 0px)); }
/* the plan sheet's pinned CTA carries the safe-area padding itself */
.p-sheet .p-aside-cta{ margin-bottom:0; padding-bottom:calc(14px + env(safe-area-inset-bottom, 0px)); }
.p-sheet.show{ transform:translateY(0); visibility:visible; }
/* Searchable dish lists get a FIXED height, set in px by measureAndPinSheet() in
   planner-ui.js -- see the comment there. Without it the sheet is content-sized
   and resized on every keystroke as the search filtered rows out. The list
   scrolls inside the frozen panel instead. `height` is what the JS sets; this
   rule only stops the height transition from animating the pin into place. */
.p-sheet--fixed{ transition:transform .3s ease, bottom .18s ease; }
.p-sheet-grab{ width:44px; height:5px; border-radius:100px; background:rgba(195,178,149,.6); margin:10px auto 12px; }
.p-sheet-close{
  /* z-index:6, not 3: the pinned total (.p-aside-top) and pinned CTA are both
     z-index:3 and come later in the DOM, so at 3 the total card painted on top
     of this button and swallowed it */
  position:absolute; top:14px; right:16px; width:40px; height:40px; border-radius:50%; z-index:6;
  display:flex; align-items:center; justify-content:center; line-height:1;
  /* a clearly tappable surface -- the old near-transparent fill read as a
     rendering glitch where it met the sheet's rounded corner */
  background:var(--white); border:1px solid rgba(195,178,149,.55);
  box-shadow:0 2px 8px rgba(60,45,15,.12);
  cursor:pointer; font-size:1.45rem; color:var(--charcoal); transition:background .2s ease, border-color .2s ease;
}
/* sheets with a pinned total scroll under it, so an absolute close button would
   slide up and get half-clipped at the sheet's top edge -- stick it instead so
   it stays whole and reachable. margin-left:auto right-aligns the 40px block;
   margin-bottom:-40px keeps it out of the flow so the body starts exactly where
   it did. Plain list sheets keep the absolute button: a permanently floating x
   over dish rows reads as a per-row remove control. */
.p-sheet--pinned .p-sheet-close{ position:sticky; top:14px; right:auto; margin:0 -4px -40px auto; }
.p-sheet-close:hover, .p-sheet-close:focus-visible{ background:var(--cream); border-color:var(--gold); }
.p-sheet-title{ font-size:1.2rem; color:var(--black); margin-bottom:6px; padding-right:44px; }
.p-sheet-sub{ font-size:.85rem; color:var(--gray); margin-bottom:16px; line-height:1.5; }
/* dish search inside a sheet. The field IS the control -- an outer bordered
   wrapper around a `.p-sheet input` (which brings its own border and fill)
   rendered as a box inside a box. Sticky so it stays reachable while a long
   course list scrolls under it; the sheet-coloured background and the top
   sliver stop rows showing through as they pass beneath. */
.p-sheet-search{ position:sticky; top:0; z-index:3; padding:2px 0 8px;
  background:var(--surface-solid); }
/* beats `.p-sheet input` on specificity -- otherwise the shared field styling
   wins and the padding that makes room for the icon and clear button is lost */
.p-sheet .p-dish-search{
  width:100%; min-height:52px; margin:0; padding:12px 44px 12px 42px;
  border-radius:14px; border:1.5px solid rgba(195,178,149,.4); background:var(--white);
  font-family:inherit; font-weight:600; color:var(--charcoal);
  /* 16px EXACTLY, not .95rem. iOS Safari auto-zooms the whole page when a
     focused field is under 16px, which shoves the sheet off-screen and is half
     of why this search "went behind the keyboard". Do not shrink this. */
  font-size:16px;
  -webkit-appearance:none; appearance:none;
  transition:border-color .2s ease, box-shadow .2s ease;
}
.p-sheet .p-dish-search:focus{
  outline:none; border-color:var(--gold-hover); box-shadow:0 0 0 3px rgba(212,155,58,.18);
}
.p-dish-search::placeholder{ font-weight:500; color:var(--gray); }
.p-sheet-search-ico{
  position:absolute; left:15px; top:calc(50% - 3px); transform:translateY(-50%);
  width:16px; height:16px; color:var(--gold-ink); opacity:.75; pointer-events:none;
}
.p-search-clear{
  position:absolute; right:11px; top:calc(50% - 3px); transform:translateY(-50%);
  width:26px; height:26px; padding:0; border:0; border-radius:50%; cursor:pointer;
  display:grid; place-items:center; font-size:1.05rem; line-height:1;
  background:rgba(195,178,149,.25); color:var(--charcoal); transition:background .2s ease;
}
.p-search-clear:hover, .p-search-clear:focus-visible{ background:rgba(212,155,58,.38); }
/* `display:grid` above would otherwise beat the [hidden] attribute's own
   display:none, leaving a clear button on an empty field */
.p-search-clear[hidden]{ display:none; }
/* live result count -- tells the guest the list narrowed, so an unexpectedly
   short list reads as "3 matches" rather than "the menu is missing dishes" */
.p-search-count{
  margin:0 0 10px 3px; font-size:.7rem; font-weight:700; letter-spacing:.08em;
  text-transform:uppercase; color:var(--gold-ink);
}
/* shown only when the results are a spelling guess, so a corrected search
   never silently passes off a different dish as what was asked for */
.p-search-hint{
  margin:-4px 0 10px; padding:8px 12px; border-radius:12px;
  background:rgba(212,155,58,.10); border:1px solid rgba(212,155,58,.28);
  font-size:.8rem; line-height:1.45; color:var(--charcoal);
}
.p-sheet-dish[hidden]{ display:none; }
.p-sheet-opts{ display:flex; flex-direction:column; gap:10px; margin-bottom:10px; }
.p-sheet-opt{
  display:flex; align-items:center; gap:12px; text-align:left; min-height:52px; padding:12px 16px;
  border-radius:14px; cursor:pointer; font-size:.92rem; font-weight:600; color:var(--charcoal);
  background:var(--white); border:1.5px solid rgba(195,178,149,.4); transition:border-color .2s ease;
}
.p-sheet-opt:hover, .p-sheet-opt:focus-visible{ border-color:var(--gold); }
.p-sheet .form-field{ margin-bottom:14px; }
.p-field-label{ display:block; font-size:.78rem; font-weight:600; color:var(--charcoal); margin-bottom:8px; }
/* Quote-sheet event date/time row + per-guest count controls */
.p-datetime-row{ display:flex; gap:12px; }
.p-datetime-row .form-field{ flex:1 1 0; min-width:0; }
/* iOS Safari sizes date/time inputs from their native control, and that
   intrinsic width wins over the flex parent -- the date field kept its full
   width, pushed the time field out of the sheet and the two overlapped. Drop
   the native sizing and pin both to their column. */
.p-datetime-row input[type="date"], .p-datetime-row input[type="time"]{
  -webkit-appearance:none; appearance:none;
  width:100%; min-width:0; max-width:100%; min-height:48px;
}
/* Phones: stack them. Two native date/time controls side by side leave each
   one too narrow to read once the sheet padding is taken out, whatever the
   flex rules say. */
@media(max-width:480px){
  .p-datetime-row{ display:block; }
  .p-datetime-row .form-field{ width:100%; }
}
.p-count-group{ margin-bottom:14px; }
.p-count-group .p-field-label{ margin-bottom:6px; }
.p-count-row{ display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px dashed rgba(195,178,149,.32); }
.p-count-row:last-child{ border-bottom:none; }
.p-count-label{ flex:1; min-width:0; font-size:.9rem; color:var(--charcoal); font-weight:600; }
.p-count-all{ display:inline-flex; align-items:center; gap:6px; font-size:.82rem; color:var(--gray); white-space:nowrap; cursor:pointer; }
.p-count-all input{ width:auto !important; padding:0 !important; margin:0; }
.p-count-num{ width:60px !important; flex:0 0 60px; padding:8px 8px !important; text-align:center; }
.p-count-num:disabled{ opacity:.45; }
/* Quote-sent confirmation view */
.p-quote-done{ text-align:center; }
.p-quote-done-ico{ width:56px; height:56px; border-radius:50%; background:rgba(212,155,58,.16); color:var(--gold-ink); font-size:1.8rem; display:flex; align-items:center; justify-content:center; margin:0 auto 14px; }
.p-quote-done-ico.p-fail{ background:rgba(178,64,42,.14); color:#b3402a; }
.p-quote-done-ico.p-spin{ animation:p-spin .9s linear infinite; }
@keyframes p-spin{ to{ transform:rotate(360deg); } }
.p-quote-done .p-cta{ margin-top:6px; }
.p-quote-done-close{ display:block; margin:14px auto 0; background:none; border:none; color:var(--gray); font-size:.85rem; cursor:pointer; text-decoration:underline; }
/* Numbered "paste, then send" steps on the confirmation view */
.p-send-steps{ text-align:left; margin:14px auto 16px; padding-left:1.35em; max-width:24em; color:var(--charcoal); font-size:.92rem; line-height:1.55; }
.p-send-steps li{ margin-bottom:6px; }
.p-send-steps li::marker{ color:var(--gold-ink); font-weight:600; }
.p-send-alt{ color:var(--gray); }
.p-attach-btn{ margin-bottom:10px; font-size:.9rem; }
/* Secondary "reopen chat / save image / save PDF" row under the confirmation */
.p-quote-links{ margin-top:14px; }
.p-quote-links a{ color:var(--gray); text-decoration:underline; white-space:nowrap; }
.p-quote-links a:hover, .p-quote-links a:focus-visible{ color:var(--gold-ink); }
.p-sheet input, .p-sheet select{
  width:100%; padding:12px 14px; border-radius:12px; font-size:.95rem;
  border:1px solid #8F8160; background:rgba(255,255,255,.9); color:var(--charcoal);
}
.p-sheet input:focus, .p-sheet select:focus{ outline:2px solid var(--gold-ink); outline-offset:2px; border-color:var(--gold); box-shadow:0 0 0 3px rgba(212,155,58,.18); }

/* notifications (toasts): a glass card with a type icon + accent, so a glance
   tells you what happened. success = herb green, info = gold, limit = terracotta */
.p-toast{
  position:fixed; left:50%; transform:translate(-50%, 16px); bottom:calc(122px + env(safe-area-inset-bottom, 0px));
  /* above .p-sheet (1000001): toasts are fired BY sheet actions, so at the old
     1100 an "Added ..." confirmation was painted behind the sheet that caused it */
  z-index:1000002; width:max-content; max-width:min(92vw, 440px);
  display:flex; align-items:flex-start; gap:12px;
  padding:14px 18px 14px 15px; border-radius:16px;
  background:rgba(255,255,255,.95);
  -webkit-backdrop-filter:blur(14px) saturate(170%); backdrop-filter:blur(14px) saturate(170%);
  border:1px solid rgba(195,178,149,.5); border-left:4px solid var(--gold);
  box-shadow:0 14px 38px rgba(60,45,15,.24);
  color:var(--charcoal); font-size:.92rem; line-height:1.5; text-align:left;
  opacity:0; pointer-events:none; transition:opacity .28s ease, transform .28s cubic-bezier(.2,.8,.25,1);
}
.p-toast.show{ opacity:1; transform:translate(-50%, 0); }
.p-toast-ico{
  flex-shrink:0; width:26px; height:26px; margin-top:1px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  font-size:.92rem; font-weight:700; line-height:1; color:#fff; background:var(--gold);
}
.p-toast-msg{ flex:1; min-width:0; font-weight:500; }
.p-toast-msg strong{ font-weight:700; color:var(--black); }
.p-toast.is-success{ border-left-color:#4f7a4a; }
.p-toast.is-success .p-toast-ico{ background:#4f7a4a; }
.p-toast.is-info{ border-left-color:var(--gold); }
.p-toast.is-info .p-toast-ico{ background:var(--gold); }
.p-toast.is-limit{ border-left-color:#c0662e; }
.p-toast.is-limit .p-toast-ico{ background:#c0662e; }
@media (max-width:520px){
  .p-toast{ max-width:calc(100vw - 26px); font-size:.9rem; padding:13px 15px 13px 13px; }
}

/* browse mode */
.planner-browse.hide{ display:none; }

/* desktop: 2-column with sticky plan aside */
@media(min-width:1100px){
  .planner{ display:grid; grid-template-columns:minmax(0,1fr) 360px; gap:32px; align-items:start; }
  .planner-main{ margin:0; max-width:none; }
  /* welcome + question steps have no aside: keep the flow a single centered
     column instead of reserving an empty 360px track on the right */
  .planner.p-solo{ display:block; }
  .planner.p-solo .planner-main{ max-width:680px; margin:0 auto; }
  .planner-aside{
    display:flex; flex-direction:column; position:sticky; top:var(--nav-space);
    padding:0; border-radius:22px;
    /* own scroll area so the pinned total (top) and CTA (bottom) are always visible */
    max-height:calc(100vh - var(--nav-space) - 20px); overflow-y:auto; overscroll-behavior:contain;
  }
  .planner-aside.hide{ display:none; }
  .planner-sticky{ display:none !important; }
  body.planner-sticky-on .back-to-top{ bottom:28px; }
  .p-card-grid{ grid-template-columns:repeat(3,1fr); }
  .p-sheet{ left:50%; right:auto; transform:translate(-50%,105%); width:min(560px, 92vw); border-radius:26px; bottom:24px; }
  .p-sheet.show{ transform:translate(-50%,0); }
  .p-secondary-row{ flex-direction:row; }
  .p-secondary-row .btn{ flex:1; }
}
@media(max-width:359px){
  .p-card-grid, .p-chip-grid{ grid-template-columns:1fr 1fr; }
}
@media(max-width:479px){
  .p-welcome-steps{ gap:5px; max-width:none; padding-left:0; padding-right:0; }
  .p-welcome-steps li{ font-size:.66rem; gap:6px; }
  .p-welcome-steps .p-wstep-num{ width:24px; height:24px; font-size:.7rem; }
}
@media(max-width:339px){
  .p-welcome-steps li{ font-size:.6rem; }
}
@media (prefers-reduced-motion: reduce){
  .p-plan-fade{ animation:none; }
  .p-sheet, .p-sheet--fixed, .p-sheet-backdrop, .p-toast, .p-budget-bar span{ transition:none; }
  body.p-sheet-open #nav{ transition:none; }
}

/* AI planner: tray-mode controls */
.p-tray-controls{ border-top:1px dashed rgba(195,178,149,.5); padding-top:14px; margin-bottom:10px; }
.p-tray-count{
  display:flex; align-items:center; gap:14px; margin-top:14px;
  font-size:.85rem; color:var(--charcoal); font-weight:600;
}
.p-tray-count span{ flex:1; }
.p-tray-count strong{ font-family:'Poppins',sans-serif; font-size:1.05rem; min-width:24px; text-align:center; }
.p-count-btn{
  width:44px; height:44px; border-radius:50%; cursor:pointer; font-size:1.2rem; line-height:1;
  background:rgba(212,155,58,.1); color:var(--gold-ink); border:1.5px solid rgba(212,155,58,.4);
  transition:background .2s ease;
}
.p-count-btn:hover{ background:rgba(212,155,58,.2); }
.p-dish-row.p-tray-off{ opacity:.55; background:rgba(255,255,255,.55); box-shadow:none; }
.p-dish-row.p-tray-off .p-swap-btn{ background:var(--white); }

/* AI planner: tray dish rows (swap / remove / add) */
.p-x-btn{
  width:44px; height:44px; border-radius:50%; border:none; background:none; cursor:pointer;
  color:var(--gray); font-size:1.15rem; line-height:1; flex-shrink:0;
  transition:color .2s ease, background .2s ease;
}
.p-x-btn:hover{ color:var(--danger); background:rgba(192,57,43,.1); }
.p-dish-name .p-dish-sub{ display:block; margin-top:2px; }

/* AI planner: value / money tip card */
.p-value{ padding:16px 18px; border-radius:18px; margin-bottom:22px; border:1px solid rgba(212,155,58,.4); }
.p-value-head{ display:flex; align-items:center; gap:8px; font-family:'Poppins',sans-serif; font-weight:700; font-size:.9rem; color:var(--black); margin-bottom:8px; }
.p-value-ico{ font-size:1.05rem; }
.p-value-note{ font-size:.85rem; color:var(--charcoal); line-height:1.55; margin-bottom:12px; }
.p-value-switch{ width:100%; justify-content:center; min-height:48px; }
.p-value-confirm{ font-size:.82rem; font-weight:600; color:var(--success); }

/* Catering Trays tab: category cards -> tap for detailed pricing.
   Mobile = clean collapsible cards; desktop = full expanded list. */
.pm-list{ max-width:960px; margin:0 auto; }
.pm-cat{ margin-bottom:14px; }
.pm-cat-head{
  width:100%; display:flex; align-items:center; gap:12px; text-align:left; cursor:pointer;
  background:var(--white); border:1px solid rgba(195,178,149,.45); border-radius:18px;
  padding:18px 20px; box-shadow:0 2px 12px rgba(60,45,15,.06); font-family:inherit;
  transition:border-color .2s ease, box-shadow .2s ease;
}
.pm-cat-head:hover{ border-color:var(--gold); box-shadow:0 6px 18px rgba(60,45,15,.1); }
.pm-cat-title{ font-family:'Cormorant Garamond',serif; font-size:1.35rem; font-weight:700; color:var(--black); line-height:1.15; }
.pm-cat-meta{ margin-left:auto; font-size:.82rem; font-weight:600; color:var(--gold-ink); white-space:nowrap; }
.pm-cat-chev{ color:var(--gold-ink); font-size:.85rem; flex-shrink:0; transition:transform .25s ease; }
.pm-cat[data-open="true"] .pm-cat-chev{ transform:rotate(180deg); }
.pm-cat-body{ display:none; padding:8px 6px 2px; }
.pm-cat[data-open="true"] .pm-cat-body{ display:block; animation:pFade .3s ease; }

.pm-rows{ display:flex; flex-direction:column; }
.pm-row{
  display:flex; align-items:baseline; justify-content:space-between; gap:14px; flex-wrap:wrap;
  padding:12px 6px; border-bottom:1px dashed rgba(195,178,149,.32);
}
.pm-row:last-child{ border-bottom:none; }
.pm-name{ font-weight:600; color:var(--charcoal); font-size:.95rem; }
.pm-cells{ display:flex; gap:10px; justify-content:flex-end; }
.pm-cell{
  display:inline-flex; flex-direction:column; align-items:center; min-width:54px;
  font-family:'Poppins',sans-serif; font-weight:700; color:var(--gold-ink); font-size:.88rem; line-height:1.2;
}
.pm-cell em{ font-style:normal; font-weight:500; font-size:.6rem; letter-spacing:.03em; text-transform:uppercase; color:var(--gray); margin-bottom:2px; }
.pm-glass{ flex-direction:row; gap:5px; align-items:baseline; min-width:auto; }
.pm-glass em{ font-size:.7rem; text-transform:none; margin-bottom:0; }
.pm-onreq{ font-size:.82rem; color:var(--gray); font-style:italic; }
.pm-subhead{
  font-family:'Poppins',sans-serif; font-size:.72rem; font-weight:700; text-transform:uppercase;
  letter-spacing:.08em; color:var(--gold-ink); padding:18px 4px 8px; margin-top:4px;
  border-bottom:1px solid rgba(212,155,58,.28);
}
.pm-rows > .pm-subhead:first-child{ padding-top:2px; }
@media(max-width:560px){
  .pm-cat-title{ font-size:1.2rem; }
  .pm-name{ flex-basis:100%; margin-bottom:8px; }
  .pm-cells{ width:100%; justify-content:space-between; gap:6px; }
  .pm-cell{ min-width:0; flex:1; }
}
/* Desktop: sections always open, header reads as a plain section title */
@media(min-width:900px){
  .pm-cat{ margin-bottom:30px; }
  .pm-cat-head{
    background:none; border:none; border-radius:0; box-shadow:none; cursor:default;
    border-bottom:2px solid rgba(212,155,58,.4); padding:0 4px 10px;
  }
  .pm-cat-head:hover{ border-color:rgba(212,155,58,.4); box-shadow:none; }
  .pm-cat-title{ font-size:1.5rem; }
  .pm-cat-chev{ display:none; }
  .pm-cat-body{ display:block !important; padding:6px 4px 0; }
}

/* AI planner page: trust / assurance strip (replaces the redundant final CTA) */
.assure-wrap{ padding:30px 6% 56px; }
.assure-wrap .section-seam{ margin:0 auto 40px; }   /* home-page-style section divider */
.assure-strip{ max-width:1180px; margin:0 auto; padding:48px 40px; border-radius:28px; }
.assure-head{ text-align:center; max-width:680px; margin:0 auto 34px; }
.assure-head h2{ font-size:clamp(1.5rem,4vw,2.1rem); color:var(--black); margin:10px 0 12px; }
.assure-head p{ color:var(--gray); line-height:1.7; }
.assure-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:20px; }
.assure-item{
  text-align:center; padding:26px 18px; border-radius:20px; background:var(--white);
  box-shadow:0 3px 16px rgba(60,45,15,.07); border:1px solid rgba(195,178,149,.35);
  transition:transform .2s ease, box-shadow .2s ease;
}
.assure-item:hover{ transform:translateY(-4px); box-shadow:0 12px 28px rgba(60,45,15,.12); }
.assure-ico{
  display:inline-flex; align-items:center; justify-content:center; width:54px; height:54px;
  border-radius:50%; font-size:1.55rem; margin-bottom:14px;
  background:rgba(212,155,58,.14); border:1px solid rgba(212,155,58,.3);
}
.assure-item h3{ font-family:'Poppins',sans-serif; font-size:.98rem; font-weight:600; color:var(--black); margin-bottom:8px; }
.assure-item p{ font-size:.85rem; color:var(--gray); line-height:1.55; }
@media(max-width:900px){ .assure-grid{ grid-template-columns:1fr 1fr; } }
@media(max-width:520px){
  .assure-strip{ padding:32px 22px; }
  .assure-grid{ grid-template-columns:1fr; gap:14px; }
  .assure-item{ display:flex; align-items:flex-start; gap:14px; text-align:left; padding:18px; }
  .assure-ico{ margin-bottom:0; flex-shrink:0; width:46px; height:46px; font-size:1.3rem; }
}

/* About page "Our Values": same assure-strip, three items instead of four */
.our-values .assure-grid{ grid-template-columns:repeat(3,1fr); max-width:900px; margin:0 auto; }
@media(max-width:900px){ .our-values .assure-grid{ grid-template-columns:1fr; max-width:520px; } }

/* tighten the gap below the dish grid so the ask-chef / assure cards follow
   in an even rhythm instead of after the generic 130px section padding */
.menu-list{ padding-bottom:24px; }

/* ---------- MENU: "ask our chef on WhatsApp" CTA ---------- */
.ask-chef{ padding:40px 6% 30px; }
.ask-chef .section-seam{ margin:0 auto 40px; }   /* home-page-style section divider */
/* match the assure strip below: same 1180px width, radius & min-height so the
   two cards read as a balanced, evenly-sized pair */
.ask-chef-card{
  max-width:1180px; margin:0 auto; min-height:487px; border-radius:28px; padding:48px 40px;
  text-align:center; display:flex; flex-direction:column; align-items:center; justify-content:center;
}
/* below the desktop grid the assure strip grows tall (2- then 1-column), so
   let this card size to its own content instead of leaving big empty space */
@media(max-width:900px){ .ask-chef-card{ min-height:0; } }
.ask-chef-card .eyebrow{ display:block; margin-bottom:12px; }
.ask-chef-card h2{ font-size:clamp(1.7rem,3.6vw,2.6rem); color:var(--black); line-height:1.15; margin-bottom:14px; max-width:760px; }
.ask-chef-card p{ color:var(--gray); font-size:1.04rem; line-height:1.6; max-width:600px; margin:0 auto 30px; }
.ask-chef-btn svg{ width:20px; height:20px; flex-shrink:0; }
@media(max-width:520px){
  .ask-chef{ padding:32px calc(6% + 14px) 20px; }
  .ask-chef-card{ min-height:0; padding:36px 24px; }
  .ask-chef-btn{ width:100%; justify-content:center; }
}

/* ---- "Areas We Serve" ----
   The heading is a normal .section-head above the card (see areas_served_section
   in build_common.py); the card holds only the city list and the note. The
   padding-top gives the .section-seam room to read as the divider between this
   band and the differentiators band above it. */
.areas-served{ padding:70px 6% 40px; }
.areas-served .section-head{ margin-bottom:40px; }
.areas-card{ max-width:1180px; margin:0 auto; padding:34px; border-radius:24px;
  background:rgba(255,255,255,.55); border:1.5px solid rgba(195,178,149,.38); text-align:center; }
/* City chips are JUSTIFIED, not centred: `flex:1 1 auto` lets each full row grow
   to sit flush against both edges of the card, which reads as a deliberate block
   of coverage rather than a ragged pile of tags.
   The max-width is what makes that safe. Without it the last row -- however many
   cities happen to be left over -- would stretch its two or three chips across
   the whole card. Capped, the remainder stays chip-sized and `justify-content`
   centres it under the justified rows above. */
.areas-list{ display:flex; flex-wrap:wrap; justify-content:center; gap:8px; list-style:none;
  padding:0; margin:0 0 20px; }
.areas-list li{
  flex:1 1 auto; max-width:190px; text-align:center;
  font-family:'Poppins',sans-serif; font-size:.8rem; font-weight:600; color:var(--charcoal);
  background:rgba(212,155,58,.12); border:1px solid rgba(212,155,58,.24);
  border-radius:100px; padding:7px 14px; line-height:1;
}
.areas-note{ font-size:.86rem; color:var(--gray); margin:0; }
.areas-note a{ color:var(--gold-ink); font-weight:600; }
@media(max-width:560px){
  .areas-served{ padding:44px calc(6% + 14px) 32px; }
  .areas-served .section-head{ margin-bottom:28px; }
  .areas-card{ padding:26px 18px; border-radius:20px; }
  .areas-list{ gap:6px; }
  /* Lower the cap rather than forcing a column count. A min-width of ~44% would
     pin the list to two chips a row and make 21 cities eleven rows tall; a 150px
     cap lets two or three fit, still justified, with the tail row centred. */
  .areas-list li{ font-size:.75rem; padding:6px 11px; max-width:150px; }
}

/* ---- Differentiators ("What Makes Us Different") ----
   Numbered rows, not a fourth icon-tile grid. By the time a visitor reaches this
   band they have already scrolled past the station tiles and the Why Choose Us
   tiles; a third set of circles-with-emoji reads as filler, and these claims are
   specific enough to deserve a sentence each. */
.diff-grid{
  display:grid; grid-template-columns:repeat(auto-fit, minmax(320px, 1fr));
  gap:18px; max-width:1180px; margin:0 auto;
}

/* Justified intros for the two bands that asked for it: "Six Things Most
   Caterers Can't Tell You" and "Serving the San Francisco Bay Area".
   .section-head is a centred 680px column, so text-align-last:center holds the
   final line in the middle -- without it a justified paragraph ends flush left
   and the block stops reading as centred at all. Same no-!important reasoning
   as .diff-d above: the a11y "Left align" switch must still win. */
#differentiators .section-head p,
.areas-served .section-head p{
  text-align:justify;
  text-align-last:center;
  -webkit-hyphens:auto; hyphens:auto;
}
.diff-item{
  display:flex; align-items:flex-start; gap:18px;
  padding:26px 24px; border-radius:22px; transition:transform .4s ease;
}
.diff-item:hover{ transform:translateY(-4px); }
.diff-num{
  flex:0 0 auto; font-family:'Cinzel',serif; font-weight:700; font-size:1.05rem;
  line-height:1; letter-spacing:.02em; color:var(--gold-ink);
  padding:11px 0 0; min-width:2.2ch;
}
.diff-copy{ min-width:0; }
.diff-t{
  font-family:'Cormorant Garamond',serif; font-weight:700;
  font-size:clamp(1.06rem,1.6vw,1.22rem); line-height:1.25;
  color:var(--black); margin:0 0 7px;
}
/* Justified body copy. These sit in a 3-column grid, so the measure is narrow
   (~350px) -- exactly where justification opens "rivers" of white space between
   words. hyphens:auto is what keeps it tight: it lets the browser break words
   at the line end instead of stretching the spaces to breaking point. It needs
   lang="en" on <html>, which head() already sets.
   Deliberately NOT !important: the accessibility panel's "Left align" option
   (html[data-a11y-align="1"], further down this file) has to be able to undo
   this -- justified text is one of the harder things to read with dyslexia. */
.diff-d{ font-size:.9rem; color:var(--gray); line-height:1.6; margin:0;
         text-align:justify; -webkit-hyphens:auto; hyphens:auto; }
.glass .diff-d{ color:#4A4540; }
@media(max-width:560px){
  .diff-grid{ grid-template-columns:1fr; gap:14px; }
  .diff-item{ padding:22px 18px; gap:14px; border-radius:18px; }
  .diff-num{ padding-top:9px; }
}
@media (prefers-reduced-motion: reduce){
  .diff-item, .diff-item:hover{ transition:none; transform:none; }
}

/* ---- "Order from our restaurant" band (menu.html only) ----
   A DARK band, deliberately. It is the same offer as the footer's "Order Food
   Online" button and uses the same charcoal-and-gold treatment, so a visitor
   meets one consistent thing twice rather than two unrelated widgets. Dark also
   lets it carry real weight in the page rhythm without taking the gold that
   every catering CTA on this site uses -- it is noticeable, but it never reads
   as the primary action on a page whose job is winning quotes. */
.rest-cta{ padding:70px 6% 20px; }
.rest-cta-card{
  position:relative; overflow:hidden;
  max-width:1180px; margin:0 auto; padding:32px 34px; border-radius:26px;
  display:flex; align-items:center; gap:26px;
  color:#FBF6EC;
  background:linear-gradient(135deg, #2A2620 0%, #3B3328 55%, #4A3D2C 100%);
  border:1px solid rgba(212,155,58,.42);
  box-shadow:0 18px 44px rgba(46,42,37,.28);
}
/* warm glow behind the icon, so the flat dark panel has some depth without
   costing an image request */
.rest-cta-glow{
  position:absolute; top:-60%; left:-6%; width:420px; height:420px; border-radius:50%;
  background:radial-gradient(circle, rgba(212,155,58,.20), rgba(212,155,58,0) 68%);
  pointer-events:none;
}
.rest-cta-ico{
  position:relative; flex:0 0 auto; width:60px; height:60px; border-radius:18px;
  display:grid; place-items:center; color:var(--gold);
  background:rgba(212,155,58,.16); border:1px solid rgba(212,155,58,.38);
}
.rest-cta-ico svg{ width:30px; height:30px; }
.rest-cta-copy{ position:relative; flex:1 1 auto; min-width:0; }
.rest-cta-eyebrow{ display:block; color:var(--gold-light); margin-bottom:8px; }   /* --gold is decorative-only: 4.29:1 here */
.rest-cta-title{
  font-family:'Cormorant Garamond',serif; font-weight:700;
  font-size:clamp(1.35rem,2.4vw,1.85rem); color:#FBF6EC;
  line-height:1.2; margin:0 0 8px;
}
.rest-cta-sub{ font-size:.93rem; color:rgba(251,246,236,.72); line-height:1.6; margin:0; max-width:620px; }
/* the button is gold-on-dark here: inside a dark panel it is the only thing to
   click, so it is not competing with anything */
.rest-cta-btn{
  position:relative; flex:0 0 auto; white-space:nowrap; text-decoration:none;
  display:inline-flex; align-items:center; gap:10px;
  padding:15px 26px; border-radius:100px;
  font-family:'Poppins',sans-serif; font-weight:600; font-size:.92rem; color:#3A2708;
  background:linear-gradient(135deg, #E2AC4A, #C08A2A);
  border:1px solid rgba(255,235,190,.55);
  box-shadow:0 10px 26px rgba(0,0,0,.28), inset 0 1px 0 rgba(255,255,255,.45);
  transition:transform .3s cubic-bezier(.2,.7,.2,1), box-shadow .3s ease, filter .3s ease;
}
.rest-cta-btn:hover{ color:#3A2708; transform:translateY(-2px); filter:brightness(1.05);
  box-shadow:0 16px 34px rgba(0,0,0,.34), inset 0 1px 0 rgba(255,255,255,.55); }
.rest-cta-arrow{ display:inline-flex; width:16px; height:16px; }
.rest-cta-arrow svg{ width:100%; height:100%; }
@media(hover:hover){
  .rest-cta-btn:hover .rest-cta-arrow{ transform:translateX(3px); transition:transform .18s ease; }
}
@media(max-width:760px){
  /* stack, and let the button go full width so it stays an easy thumb target */
  .rest-cta{ padding:44px calc(6% + 14px) 14px; }
  .rest-cta-card{ flex-direction:column; align-items:flex-start; gap:18px; padding:26px 20px; border-radius:22px; }
  .rest-cta-glow{ width:280px; height:280px; top:-40%; }
  .rest-cta-btn{ width:100%; justify-content:center; min-height:50px; }
}
@media (prefers-reduced-motion: reduce){
  .rest-cta-btn, .rest-cta-btn:hover{ transition:none; transform:none; }
  .rest-cta-btn:hover .rest-cta-arrow{ transform:none; }
}

/* Menu page: dish photo cards with tap-to-reveal price (reuses builder dish icons) */
.menu-dish-grid{
  display:grid; grid-template-columns:repeat(auto-fill, minmax(260px, 1fr)); gap:14px;
  align-items:start; max-width:1180px; margin:0 auto;
}
/* ---- Flip card: tap a dish to turn it over to its price. The card keeps the
   exact same footprint, so the grid never reflows (smoother than a dropdown).
   Phones fall back to a simple expand-in-place below. ---- */
.menu-dish{
  padding:14px 14px; border-radius:18px; background:var(--white);
  box-shadow:0 2px 12px rgba(60,45,15,.07); border:1px solid rgba(195,178,149,.3);
  transition:transform .2s ease, box-shadow .2s ease, border-color .2s ease;
  cursor:pointer; perspective:1400px;
}
.menu-dish:hover{ transform:translateY(-3px); box-shadow:0 10px 24px rgba(60,45,15,.13); }
.menu-dish.flipped{ border-color:var(--gold); }
.menu-dish-inner{
  position:relative; transform-style:preserve-3d;
  transition:transform .55s cubic-bezier(.4,.15,.15,1);
}
.menu-dish.flipped .menu-dish-inner{ transform:rotateX(180deg); }
.menu-dish-face{ -webkit-backface-visibility:hidden; backface-visibility:hidden; }
.menu-dish-front{ position:relative; z-index:2; }   /* in flow: defines card height */
.menu-dish-back{
  position:absolute; inset:0; transform:rotateX(180deg);
  display:flex; align-items:center; justify-content:center; gap:8px;
}
/* fixed-height top row so every card is the same size regardless of how many
   lines the dish name would otherwise wrap to */
.menu-dish-top{ display:flex; align-items:center; gap:10px; min-height:44px; }
.menu-dish .dish-photo-wrap{ flex-shrink:0; display:flex; width:42px; height:42px; }
.menu-dish .dish-photo{
  width:42px; height:42px; border-radius:50%; object-fit:cover; flex-shrink:0;
  box-shadow:0 2px 6px rgba(60,45,15,.18); border:1px solid rgba(212,155,58,.25); background:var(--cream);
}
/* clamp long names to 2 lines so tall outliers (Sarson Ka Saag + Makki Ki
   Roti, Fresh Juice …) match the rest instead of pushing their card taller */
.menu-dish .dish-name{
  flex:1; min-width:0; font-weight:600; font-size:.88rem; line-height:1.25; color:var(--charcoal);
  display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; line-clamp:2;
  overflow:hidden; overflow-wrap:break-word;
}
.md-price-btn{
  flex-shrink:0; display:inline-flex; align-items:center; gap:6px; cursor:pointer;
  min-height:44px; padding:7px 11px; border-radius:100px; font-family:'Poppins',sans-serif;
  font-size:.75rem; font-weight:700; letter-spacing:.02em; color:var(--gold-ink);
  background:rgba(212,155,58,.12); border:1px solid rgba(212,155,58,.4);
  transition:background .2s ease, border-color .2s ease;
}
.md-price-btn:hover{ background:rgba(212,155,58,.22); }
.menu-dish.flipped .md-price-btn{ background:var(--gold); color:var(--black); border-color:var(--gold); }
.md-cells{ display:flex; flex-wrap:nowrap; gap:6px; justify-content:center; width:100%; }
.md-cell{
  display:inline-flex; flex-direction:column; align-items:center; min-width:0; flex:1 1 0;
  padding:6px 4px; border-radius:11px; background:rgba(212,155,58,.08);
  font-family:'Poppins',sans-serif; font-weight:700; color:var(--gold-ink); font-size:.86rem; line-height:1.15;
}
.md-cell em{ font-style:normal; font-weight:500; font-size:.58rem; letter-spacing:.03em; text-transform:uppercase; color:var(--gray); margin-bottom:2px; }
.md-glass{ flex:0 1 auto; flex-direction:row; gap:5px; align-items:baseline; padding:8px 14px; }
.md-glass em{ font-size:.72rem; text-transform:none; margin-bottom:0; }
.md-onreq{ font-size:.82rem; font-style:italic; color:var(--gray); text-align:center; }
@media(max-width:560px){
  .menu-dish-grid{ grid-template-columns:1fr; }
  /* phones: no 3D flip -- reveal the price by expanding in place below */
  .menu-dish{ perspective:none; }
  .menu-dish-inner{ transform:none !important; transform-style:flat; }
  .menu-dish-face{ -webkit-backface-visibility:visible; backface-visibility:visible; }
  .menu-dish-back{
    position:static; transform:none; display:none; flex-wrap:wrap;
    margin-top:12px; padding-top:12px; border-top:1px dashed rgba(212,155,58,.35);
    animation:pFade .28s ease;
  }
  .menu-dish.flipped .menu-dish-back{ display:flex; }
  .md-cells{ flex-wrap:wrap; }
  .md-cell{ min-width:56px; padding:8px 6px; font-size:.9rem; }
}
@media (prefers-reduced-motion: reduce){
  .menu-dish, .menu-dish-inner, .md-price-btn, .menu-dish-back{ transition:none; animation:none; }
}

/* ========================= */
/* MOBILE BOTTOM CTA BAR     */
/* One thumb-reachable primary action on every screen (<=768px only).       */
/* On the planner it is REPLACED by .planner-sticky — never two bottom bars */
/* (see body.planner-sticky-on .mobile-cta{display:none}).                  */
/* ========================= */
.mobile-cta{ display:none; }
@media(max-width:768px){
  .mobile-cta{
    position:fixed; left:0; right:0; bottom:0; z-index:890;
    display:flex; align-items:center; gap:10px;
    padding:10px 14px calc(10px + env(safe-area-inset-bottom, 0px));
    background:var(--surface-solid);
    /* §12: no hard rule under floating chrome. The content fades into the
       bar through a short gradient (::before) instead of hitting a 1px
       line, so the bar reads as floating above the page rather than
       welded to it. */
    box-shadow:0 -8px 24px rgba(60,45,15,.16);
  }
  .mobile-cta-main{ flex:1; justify-content:center; min-height:48px; padding:12px 16px; font-size:.9rem; }
  .mobile-cta-call{
    flex-shrink:0; display:inline-flex; align-items:center; justify-content:center; gap:7px;
    min-height:48px; min-width:44px; padding:12px 16px; border-radius:100px; text-decoration:none;
    font-family:'Poppins',sans-serif; font-weight:600; font-size:.85rem; color:var(--gold-ink);
    border:1px solid rgba(212,155,58,.55); background:rgba(212,155,58,.1);
  }
  .mobile-cta-call svg{ width:17px; height:17px; }
  /* reserve the bar's height so it never covers the footer or last content */
  body{ padding-bottom:var(--bottombar-space); }
  .back-to-top{ bottom:calc(var(--bottombar-space) + 12px); right:18px; }
}

/* ---------- MOBILE READABILITY ---------- */
@media(max-width:768px){
  /* iOS zooms any focused field under 16px — keep every input at 16px */
  input:not([type="checkbox"]):not([type="radio"]), select, textarea{ font-size:16px !important; }
  /* primary reading copy stays at a comfortable >=16px */
  .p-welcome p, .p-style-desc, .builder-intro p, .section-head p,
  .page-hero p, .hero-glass p{ font-size:1rem; line-height:1.65; }
}

/* ---------- 120FPS BUDGET ---------- */
/* Every animation on this site runs on transform/opacity (compositor).
   What remains expensive is backdrop-filter: its cost scales with blur
   radius and it re-filters whenever anything moves behind the glass. */
/* Long lists: skip layout/paint for off-screen blocks entirely */
.menu-cat-block, .pm-cat, .service-block{
  content-visibility:auto;
  /* noinspection CssInvalidPropertyValue */
  contain-intrinsic-size:auto 480px;
}
/* overlays that animate in/out are promoted before their first frame */
.p-sheet{ will-change:transform; }
.p-sheet-backdrop, .nav-mobile, .nav-backdrop, .p-toast{ will-change:opacity; }
@media(max-width:768px){
  /* while the blobs drift, every glass surface re-blurs every frame even
     when the user does nothing — freeze the ambient wash on phones */
  .liquid-canvas .blob{ animation:none; }
  /* halve the blur kernels for mobile GPUs; over this site's soft cream
     background the difference is invisible, the cost is not */
  .nav-liquid, .nav-mobile{ backdrop-filter:blur(16px) saturate(180%); -webkit-backdrop-filter:blur(16px) saturate(180%); }
  .glass{ backdrop-filter:blur(10px) saturate(160%); -webkit-backdrop-filter:blur(10px) saturate(160%); }
  .glass-dark{ backdrop-filter:blur(10px) saturate(140%); -webkit-backdrop-filter:blur(10px) saturate(140%); }
  .glass-gold{ backdrop-filter:blur(8px) saturate(160%); -webkit-backdrop-filter:blur(8px) saturate(160%); }
  .footer-panel{ backdrop-filter:blur(14px) saturate(140%); -webkit-backdrop-filter:blur(14px) saturate(140%); }
  .btn-outline{ backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); }
}

/* ---------- SMOOTH PAGE-TO-PAGE NAVIGATION ---------- */
/* supporting browsers crossfade between pages instead of flashing white */
/* noinspection CssInvalidAtRule */
@view-transition{ navigation:auto; }
/* internal navigation (html.warm, set in <head> before first paint):
   entrance animations already played — show content immediately instead of
   re-running hero rise-ins and scroll reveals on every page change */
html.warm .reveal{ opacity:1; transform:none; transition:none; }
html.warm .hero-glass h1, html.warm .hero-glass p,
html.warm .hero-btns, html.warm .trust-bar{ animation:none; opacity:1; transform:none; }

/* ---------- REDUCED MOTION: no blur/scale/slide theatrics ---------- */
@media (prefers-reduced-motion: reduce){
  /* noinspection CssInvalidAtRule */
  @view-transition{ navigation:none; }
}
@media (prefers-reduced-motion: reduce){
  .nav-liquid, .nav-mobile, .nav-backdrop, .btn, .menu-filter-btn,
  .p-card, .p-style-card, .event-card, .pkg-card, .builder-chip{ transition:none !important; }
  .btn:hover, .p-card:hover, .event-card:hover, .pkg-card:hover,
  .builder-chip:hover, .nav-link:hover{ transform:none !important; }
  .nav-liquid::after, .nav-mobile::after{ display:none; }
  .menu-filters, .service-list-nav{ scroll-behavior:auto; }
}

/* ---- "Back" control on sub-pages ---- */
.page-back{
  display:inline-flex; align-items:center; gap:8px;
  min-height:44px; padding:8px 16px 8px 12px; margin-bottom:22px;
  border:1px solid rgba(200,141,36,.32); border-radius:100px;
  background:rgba(255,255,255,.55);
  font-family:'Poppins',sans-serif; font-size:.82rem; font-weight:600;
  color:var(--gold-ink); text-decoration:none; line-height:1;
  transition:background-color .18s ease, border-color .18s ease, transform .18s ease;
}
.page-back .page-back-ico{ display:inline-flex; width:16px; height:16px; }
.page-back .page-back-ico svg{ width:100%; height:100%; }
.page-back:focus-visible{ outline:2px solid var(--gold-ink); outline-offset:3px; }
@media(hover:hover){
  .page-back:hover{ background:rgba(233,135,17,.1); border-color:rgba(200,141,36,.6); text-decoration:none; }
  /* the arrow points left, so the nudge goes left too */
  .page-back:hover .page-back-ico{ transform:translateX(-2px); transition:transform .18s ease; }
}
.page-back:active{ transform:translateY(1px); }
@media(max-width:560px){
  .page-back{ margin-bottom:18px; font-size:.78rem; padding:8px 14px 8px 10px; }
}
@media (prefers-reduced-motion: reduce){
  .page-back, .page-back .page-back-ico{ transition:none; }
  .page-back:active{ transform:none; }
}

/* ---- Accessibility Statement / legal prose ---- */
.legal-prose{ max-width:760px; margin:0 auto; }
.legal-prose > p{ color:var(--charcoal); font-size:1rem; line-height:1.75; margin-bottom:18px; }
.legal-prose h2{ font-family:'Cormorant Garamond',serif; font-size:1.6rem; color:var(--black); margin:36px 0 12px; }
.legal-prose ul{ margin:0 0 20px; padding-left:22px; }
.legal-prose li{ color:var(--charcoal); font-size:1rem; line-height:1.7; margin-bottom:8px; }
.legal-prose a{ color:var(--gold-ink); font-weight:600; }
.legal-updated{ margin-top:32px; font-size:.85rem; color:var(--gray); font-style:italic; }

/* ---------- ALLERGEN: menu-page notice card + dedicated page ---------- */
/* "May Contain Allergens" notice on the menu page (styled after the printed
   Panda Express-style order card), plus the shared allergen chip list reused
   on the dedicated allergens page. */
.menu-allergen{ padding:0 6% 8px; }
.allergen-card{
  max-width:1180px; margin:0 auto; padding:38px 40px; border-radius:24px; text-align:center;
}
.allergen-card .eyebrow{ color:var(--gold-ink); }
.allergen-card h2{
  font-family:'Cormorant Garamond',serif; font-size:2.1rem; color:var(--black);
  margin:8px 0 12px; line-height:1.15;
}
.allergen-card .allergen-lead{ color:var(--charcoal); line-height:1.7; max-width:600px; margin:0 auto 22px; }
.allergen-tags{
  list-style:none; display:flex; flex-wrap:nowrap; justify-content:safe center; gap:9px;
  max-width:none; margin:0 auto 22px; padding:0; overflow-x:auto; scrollbar-width:none;
}
.allergen-tags::-webkit-scrollbar{ display:none; }
.allergen-tags li{
  font-size:.84rem; font-weight:600; color:var(--charcoal); white-space:nowrap;
  padding:7px 15px; border-radius:999px;
  background:rgba(212,155,58,.1); border:1px solid rgba(212,155,58,.34);
}
.allergen-note{ font-size:.9rem; color:var(--gray); max-width:560px; margin:0 auto 26px; line-height:1.6; }
.allergen-note strong{ color:var(--charcoal); }
.allergen-card .btn{ display:inline-flex; align-items:center; gap:8px; }
.allergen-card .btn svg{ width:18px; height:18px; }
@media(max-width:560px){
  .allergen-card{ padding:30px 22px; }
  .allergen-card h2{ font-size:1.7rem; }
  .allergen-tags li{ font-size:.78rem; padding:6px 12px; }
}

/* ---------- Planner nav (no CTA button) ---------- */
/* The AI menu planner page drops the "Build a Plate" nav CTA (self-referential),
   which would leave the links stranded right-of-centre with a gap where the
   button was. Centre them in the bar so the header still reads as balanced.
   flex-start keeps the logo pinned left (otherwise, with the links pulled out
   of flow, space-between would recentre the logo and collide with them).
   Scoped to the desktop range where the links are actually visible (>1050px). */
@media(min-width:1051px){
  #nav.nav-no-cta{ justify-content:flex-start; }
  #nav.nav-no-cta .nav-links{
    position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); margin:0;
  }
}

/* packages.html is three tabs in one page, and the "Build a Plate" CTAs point
   at just one of them. The tabs script sets body.planner-tab while the AI Menu
   Planner tab is open -- only then do the CTAs disappear; on Catering Trays and
   Catering Packages they stay. Specificity beats the media-query rules that
   show these, so it holds at every width. */
body.planner-tab .nav-cta-btn,
body.planner-tab .nav-mobile-cta,
body.planner-tab .mobile-cta{ display:none; }

/* ---------- CONTACT-US choice modal (footer CTA) ---------- */
body.cchoice-lock{ overflow:hidden; }
.cchoice[hidden]{ display:none; }
.cchoice{
  /* must sit above the fixed #nav (z-index:999999 !important) so the backdrop
     dims + blurs the header too, instead of the nav floating on top of it */
  position:fixed; inset:0; z-index:1000000;
  display:flex; align-items:center; justify-content:center; padding:20px;
}
.cchoice-backdrop{
  position:absolute; inset:0; background:rgba(20,16,12,.66);
  -webkit-backdrop-filter:blur(6px) saturate(120%); backdrop-filter:blur(6px) saturate(120%);
}
.cchoice-dialog{
  position:relative; z-index:1; width:100%; max-width:460px; text-align:center;
  background:var(--cream); border:1px solid rgba(195,178,149,.5); border-radius:24px;
  padding:34px 30px 28px; box-shadow:0 24px 70px rgba(0,0,0,.4);
  animation:cchoiceIn .28s cubic-bezier(.22,1,.36,1);
}
@keyframes cchoiceIn{ from{opacity:0; transform:translateY(14px) scale(.98);} to{opacity:1; transform:none;} }
.cchoice-x{
  position:absolute; top:12px; right:14px; width:34px; height:34px;
  border:none; background:none; font-size:1.7rem; line-height:1; color:var(--gray);
  cursor:pointer; border-radius:50%; transition:background .16s ease, color .16s ease;
}
.cchoice-x:hover{ background:rgba(0,0,0,.06); color:var(--charcoal); }
.cchoice-dialog .eyebrow{ color:var(--gold-ink); }
.cchoice-dialog h2{
  font-family:'Cormorant Garamond',serif; font-size:1.75rem; color:var(--black);
  margin:6px 0 8px; line-height:1.2;
}
.cchoice-lead{ color:var(--charcoal); font-size:.95rem; line-height:1.6; margin:0 auto 22px; max-width:340px; }
.cchoice-opts{ display:flex; flex-direction:column; gap:10px; margin-bottom:18px; text-align:left; }
.cchoice-opt{
  display:flex; flex-direction:column; gap:2px; text-decoration:none;
  padding:13px 18px; border-radius:14px;
  background:rgba(212,155,58,.08); border:1px solid rgba(212,155,58,.32);
  transition:transform .16s ease, border-color .16s ease, background .16s ease;
}
.cchoice-opt:hover{ transform:translateY(-2px); border-color:var(--gold); background:rgba(212,155,58,.14); }
.cchoice-opt-t{ font-weight:700; color:var(--charcoal); font-size:1rem; }
.cchoice-opt-d{ font-size:.82rem; color:var(--gray); }
.cchoice-no{
  display:inline-block; color:var(--gray); font-size:.9rem; font-weight:600;
  text-decoration:none; padding:6px 4px;
}
.cchoice-no:hover{ color:var(--gold-ink); text-decoration:underline; }
@media(max-width:480px){
  .cchoice-dialog{ padding:28px 20px 24px; }
  .cchoice-dialog h2{ font-size:1.5rem; }
}

/* ============================================================= */
/* ACCESSIBILITY PREFERENCES PANEL                               */
/* ============================================================= */
/* Every control below is driven by a data-attribute or class that
   the panel writes onto <html>, and that head() re-applies before
   first paint. Selectors are therefore all rooted at html[...] so
   they win without needing !important on the common cases. */

/* ---------- launcher ---------- */
/* Bottom-LEFT on purpose: .back-to-top owns bottom-right (28/28), and on
   mobile .mobile-cta owns the full bottom strip -- so the button lifts by
   --bottombar-space to sit above it rather than under the Build a Plate CTA. */
.a11y-btn{
  position:fixed; left:20px; z-index:900;
  bottom:calc(20px + var(--bottombar-space));
  width:48px; height:48px; border-radius:50%; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  background:var(--black-soft); border:1px solid rgba(212,155,58,.55);
  box-shadow:0 6px 22px rgba(20,15,5,.28);
  transition:transform .25s ease, box-shadow .25s ease;
}
.a11y-btn svg{ width:24px; height:24px; fill:none; stroke:var(--gold-light);
  stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.a11y-btn:hover{ transform:translateY(-2px); box-shadow:0 10px 28px rgba(20,15,5,.36); }
.a11y-btn:focus-visible{ outline:3px solid var(--gold-hover); outline-offset:3px; }
/* the launcher would sit on top of the panel's own backdrop on mobile */
body.a11y-open .a11y-btn{ opacity:0; pointer-events:none; }
/* a reader who picks "Hide" gets the launcher back on the next page load only */
html.a11y-hidden .a11y-btn{ display:none; }

/* ---------- panel ---------- */
.a11y-panel{
  position:fixed; z-index:1000002; left:16px; bottom:16px;
  width:min(370px, calc(100vw - 32px)); max-height:min(76vh, 640px);
  display:flex; flex-direction:column; overflow:hidden;
  background:var(--surface-solid); color:var(--charcoal);
  /* fixed base so the panel is a stable control surface: every size inside is
     em against THIS, so "Bigger text" never grows the panel off the screen */
  font-size:16px;
  border:1px solid rgba(212,155,58,.4); border-radius:22px;
  box-shadow:0 24px 60px rgba(20,15,5,.35);
}
.a11y-panel[hidden]{ display:none; }
.a11y-backdrop{
  position:fixed; inset:0; z-index:1000001; background:rgba(20,15,5,.5);
}
.a11y-backdrop[hidden]{ display:none; }

.a11y-head{
  display:flex; align-items:center; gap:10px; flex:0 0 auto;
  padding:16px 16px 14px; background:var(--black); color:var(--white);
}
.a11y-head h2{ font-family:'Poppins',sans-serif; font-size:1em; font-weight:600;
  letter-spacing:.02em; margin:0; flex:1 1 auto; color:var(--white); }
.a11y-head-ico{ display:flex; width:32px; height:32px; border-radius:50%;
  align-items:center; justify-content:center; background:var(--white); flex:0 0 auto; }
.a11y-head-ico svg{ width:19px; height:19px; fill:none; stroke:var(--black);
  stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.a11y-x{ background:none; border:none; cursor:pointer; color:var(--white);
  font-size:1.5em; line-height:1; padding:2px 6px; border-radius:8px; }
.a11y-x:focus-visible{ outline:3px solid var(--gold-light); outline-offset:2px; }

.a11y-body{ flex:1 1 auto; overflow-y:auto; -webkit-overflow-scrolling:touch;
  padding:14px; display:flex; flex-direction:column; gap:14px; background:var(--white); }
.a11y-group{ background:var(--ivory); border-radius:16px; padding:12px; }
.a11y-group h3{ font-family:'Poppins',sans-serif; font-size:.74em; font-weight:600;
  letter-spacing:.16em; text-transform:uppercase; color:var(--gray); margin:0 0 10px 4px; }

/* ---------- rows ---------- */
.a11y-row{
  width:100%; display:flex; align-items:center; gap:12px; text-align:left;
  padding:10px 12px; margin-bottom:8px; border-radius:14px;
  background:var(--white); border:2px solid transparent; font:inherit;
  color:var(--charcoal); cursor:pointer;
}
.a11y-row:last-child{ margin-bottom:0; }
.a11y-ico{ display:flex; width:34px; height:34px; border-radius:50%; flex:0 0 auto;
  align-items:center; justify-content:center; background:var(--cream); }
.a11y-ico svg{ width:19px; height:19px; fill:none; stroke:var(--charcoal);
  stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
.a11y-ico svg .a11y-fill{ fill:var(--charcoal); stroke:none; }
.a11y-label{ flex:1 1 auto; font-size:.94em; font-weight:500; }
.a11y-toggle[aria-checked="true"],
.a11y-struct-open[aria-expanded="true"]{ border-color:var(--charcoal); }
.a11y-row:focus-visible{ outline:3px solid var(--gold-hover); outline-offset:2px; }
/* screen-reader-only step names -- the segments are visual, the names are not */
.a11y-sr{ position:absolute; width:1px; height:1px; overflow:hidden;
  clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }

/* ---------- stepper: the row is the button, the segments are a readout ---------- */
.a11y-steps{ display:flex; gap:3px; flex:0 0 auto; pointer-events:none; }
.a11y-steps span{ width:26px; height:20px; background:#D8D8D8; }
.a11y-steps span:first-child{ border-radius:10px 4px 4px 10px; }
.a11y-steps span:last-child{ border-radius:4px 10px 10px 4px; }
.a11y-steps span.a11y-on{ background:var(--charcoal); }
.a11y-step-row:not([data-a11y-level="0"]){ border-color:var(--charcoal); }

/* ---------- page structure list ---------- */
.a11y-structure{ padding:4px 4px 2px; }
.a11y-structure[hidden]{ display:none; }
.a11y-structure ul{ list-style:none; margin:0; padding:0; }
.a11y-structure a{
  display:block; padding:7px 10px; border-radius:9px; font-size:.88em;
  color:var(--charcoal); text-decoration:none; border-left:3px solid transparent;
}
.a11y-structure a:hover{ background:var(--cream); color:var(--gold-ink); }
.a11y-structure a:focus-visible{ outline:3px solid var(--gold-hover); outline-offset:-2px; }
.a11y-structure .a11y-h3{ padding-left:26px; font-size:.82em; color:var(--gray); }
.a11y-structure .a11y-h2{ padding-left:16px; }
.a11y-structure .a11y-empty{ padding:8px 10px; font-size:.86em; color:var(--gray); }

/* ---------- footer ---------- */
.a11y-foot{ flex:0 0 auto; display:flex; gap:10px; justify-content:center;
  padding:12px; background:var(--ivory); border-top:1px solid rgba(0,0,0,.08); }
.a11y-foot-btn{
  font:inherit; font-size:.88em; font-weight:500; cursor:pointer;
  padding:8px 18px; border-radius:999px; background:var(--white);
  border:1px solid rgba(0,0,0,.18); color:var(--charcoal);
}
.a11y-foot-btn:hover{ border-color:var(--charcoal); }
.a11y-foot-btn:focus-visible{ outline:3px solid var(--gold-hover); outline-offset:2px; }

/* ---------- mobile: bottom sheet ---------- */
@media(max-width:560px){
  .a11y-panel{
    left:0; right:0; bottom:0; width:auto; max-height:82vh;
    border-radius:22px 22px 0 0; border-left:none; border-right:none; border-bottom:none;
    padding-bottom:env(safe-area-inset-bottom, 0px);
  }
}

/* ============================================================= */
/* WHAT THE PREFERENCES ACTUALLY DO                              */
/* ============================================================= */

/* ---------- bigger text ----------
   font-size on <html> so every rem-based size in the sheet scales together;
   the panel itself is pinned back to 16px so its own controls never grow
   out of the viewport at the largest step. */
html[data-a11y-text="1"]{ font-size:112.5%; }
html[data-a11y-text="2"]{ font-size:125%; }
html[data-a11y-text="3"]{ font-size:140%; }
html[data-a11y-text] .a11y-btn{ font-size:16px; }

/* ENLARGED TEXT MUST NOT RESHAPE THE NAV.
   A px media query cannot see that the root font-size grew (em in a media
   query resolves against the BROWSER default, not html{font-size}), so the
   nav has to be told -- but it should give up as little as possible, as late
   as possible.

   Degrade in ONE step, and only when the bar genuinely runs out of room:
     levels 1-2  nothing changes but the text size. Icons stay, padding stays,
                 tracking stays. The bar simply gets taller.
     level 3     drop the leading icons -- and only the icons. Padding and
                 letter-spacing are left alone, because squeezing the labels to
                 buy space makes them harder to read, which is the opposite of
                 what the reader just asked for.
   Measured at 1100-1512px nav widths: levels 1-2 fit with icons; level 3 does
   not, and fits comfortably once the icons go. */
@media(min-width:1051px){
  html[data-a11y-text="3"] .nav-link .nav-ico{ display:none; }
  html[data-a11y-text="3"] .nav-link{ gap:0; }

  /* Icons were doing the visual separating. With them gone the labels read as
     one run of words, so a hairline takes over that job -- currentColor, so it
     follows the nav's light/dark theme without a second rule. */
  html[data-a11y-text="3"] #navLinks > li{ position:relative; }
  html[data-a11y-text="3"] #navLinks > li + li::before{
    content:''; position:absolute; left:-4px; top:50%; transform:translateY(-50%);
    width:1px; height:17px; pointer-events:none;
    background:currentColor; opacity:.22;
  }
  html[data-a11y-text="3"] .nav-links{ gap:8px; }
}

/* THE LOGO IS ARTWORK, NOT UI TEXT.
   "Premium Catering" is set as type but it is part of the logo lockup, so it
   is pinned in px and does not follow "Bigger text" -- scaling it stretches
   the mark away from the wordmark above it. (.logo-img is already a fixed
   56px, so the image never scaled; only this line did.) */
html[data-a11y-text] #nav .logo-tagline,
html[data-a11y-text] .nav-mobile .logo-tagline{ font-size:9.28px; }
@media(max-width:560px){
  html[data-a11y-text] #nav .logo-tagline,
  html[data-a11y-text] .nav-mobile .logo-tagline{ font-size:8.32px; }
}

/* ---------- line height ---------- */
html[data-a11y-line="1"] body :is(p,li,dd,dt,figcaption,blockquote,td,th,label){ line-height:1.85 !important; }
html[data-a11y-line="2"] body :is(p,li,dd,dt,figcaption,blockquote,td,th,label){ line-height:2.2 !important; }
html[data-a11y-line] body :is(h1,h2,h3,h4){ line-height:1.35 !important; }
html[data-a11y-line] .a11y-panel :is(p,li,label,span){ line-height:1.5 !important; }

/* ---------- text align ---------- */
html[data-a11y-align="1"] main :is(p,li,h1,h2,h3,h4,dd,dt,figcaption,blockquote){
  text-align:left !important;
}

/* ---------- readable font ----------
   Cormorant Garamond is a display serif -- lovely, and the first thing to go
   when someone asks for a readable face. Everything falls back to the system
   UI sans, which is already installed and needs no extra download. */
html.a11y-font body,
html.a11y-font :is(h1,h2,h3,h4,.eyebrow,button,input,select,textarea){
  font-family:system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif !important;
  letter-spacing:normal !important;
}
html.a11y-font :is(h1,h2,h3,h4){ font-weight:700 !important; }

/* ---------- contrast ----------
   Re-points the palette custom properties rather than hard-setting colours, so
   anything already built on var(--charcoal)/var(--gray)/var(--gold-ink) tightens
   automatically. Step 2 additionally flattens the glass panels to solid white,
   because backdrop-filter over photography is where contrast actually dies. */
html[data-a11y-contrast="1"]{
  --charcoal:#1A1A1A; --gray:#4A4A4A; --gold-ink:#6E4409;
  --bg:#FBF8F2; --surface-solid:#FFFFFF;
}
html[data-a11y-contrast="2"]{
  --charcoal:#000000; --gray:#1F1F1F; --gold-ink:#5A3607; --gold-light:#FFD98A;
  --bg:#FFFFFF; --surface-solid:#FFFFFF; --ivory:#FFFFFF; --cream:#F2F2F2;
}
/* Scoped to main, and NOT to the light-on-dark regions below. A blanket
   "make all text black" is the classic way a contrast mode makes a page worse:
   the hero carries its own dark scrim in background-image, so black type there
   lands on near-black and the step destroys exactly what it promises. */
html[data-a11y-contrast="2"] main :is(p,li,dd,dt,td,th,label,figcaption){ color:#000 !important; }

/* Light-on-dark regions stay light. Going from the resting rgba(255,255,255,.78)
   to fully opaque white is itself the contrast increase here. */
/* DARK ISLANDS INSIDE main.
   The blanket "make body text black" above is only correct on the light page
   surface. Every region that paints its own dark background is an exception,
   and each one missed shows up as black-on-black -- the exact opposite of what
   the reader asked for. Add to this list whenever a new dark panel appears. */
/* .error-page is NOT on this list: it paints no background of its own and
   sits on the page surface, so forcing white there is white-on-white. Only
   regions that actually paint a dark backdrop belong here -- verified, not
   assumed from the name. */
html[data-a11y-contrast] :is(.hero,.page-hero,.rest-cta-card,.footer-rest-cta,.glass-dark,.trust-item)
  :is(p,li,span,h1,h2,h3,h4,strong,em,div){
  color:#FFFFFF !important;
}
html[data-a11y-contrast] :is(.hero,.page-hero,.rest-cta-card) .eyebrow,
html[data-a11y-contrast] .rest-cta-eyebrow{
  color:#FFD98A !important;
}

/* The nav chrome flips light/dark as it floats, so its text CANNOT be forced to
   one colour -- an earlier blanket `#nav :is(a,span,button){color:#FFF}` made
   the labels invisible the moment the bar went light, and repainted the gold
   CTA's label white (2.46:1 on gold). Follow the theme instead, and leave any
   .btn alone: a button carries its own solid material and its own label colour. */
html[data-a11y-contrast] #nav.nav-theme-dark :is(.nav-label,.nav-link,.logo-tagline),
html[data-a11y-contrast] .nav-mobile.nav-theme-dark :is(.nav-label,.nav-mobile-link){
  color:#FFFFFF !important;
}
html[data-a11y-contrast] #nav.nav-theme-light :is(.nav-label,.nav-link,.logo-tagline),
html[data-a11y-contrast] .nav-mobile.nav-theme-light :is(.nav-label,.nav-mobile-link){
  color:#141414 !important;
}
/* the active pill already marks the current page; a dimmer gold label just
   costs contrast (measured 3.12:1 at level 1, 3.88:1 at level 2) */
html[data-a11y-contrast] #nav.nav-theme-dark .nav-links a.active .nav-label{ color:#FFFFFF !important; }
html[data-a11y-contrast] #nav.nav-theme-light .nav-links a.active .nav-label{ color:#141414 !important; }
html[data-a11y-contrast="2"] main :is(section,article,.card,footer)
  { backdrop-filter:none !important; -webkit-backdrop-filter:none !important; }
html[data-a11y-contrast="2"] a:not([class]){ text-decoration:underline !important; }
html[data-a11y-contrast="2"] .liquid-canvas{ display:none !important; }
/* the panel is the control surface -- it must not restyle itself out of legibility */
html[data-a11y-contrast] .a11y-panel{ border-color:#000; }

/* ---------- grayscale ----------
   Safe on the ROOT element specifically: a filter normally makes an element a
   containing block for fixed descendants, which would tear #nav and this very
   panel off the viewport -- but the spec exempts the document root. Do NOT
   move this to body. */
html.a11y-gray{ filter:grayscale(1); }

/* ---------- hide images ---------- */
html.a11y-noimg :is(img,picture,video,iframe,.liquid-canvas,.blob){ display:none !important; }
html.a11y-noimg [style*="background-image"]{ background-image:none !important; }
html.a11y-noimg :is(.hero,.page-hero,.error-page)::before,
html.a11y-noimg :is(.hero,.page-hero,.error-page)::after{ background-image:none !important; }

/* The [style*="background-image"] selector above only catches INLINE styles.
   The hero photography is set from this stylesheet, so it survived "Hide
   images" entirely -- the single largest image on the site stayed put. Replace
   the photo with the dark wash it was already carrying, so the white hero type
   keeps the backdrop it needs instead of landing on bare page colour. */
html.a11y-noimg :is(.hero,.page-hero){
  background-image:linear-gradient(rgba(5,5,5,.94), rgba(5,5,5,.88)) !important;
}
html.a11y-noimg .footer-panel::before{ background-image:none !important; }

/* THE LOGO IS NOT A PICTURE, IT IS THE WAY HOME.
   "Hide images" is for decoration and photography -- the things that make a
   page noisy. The masthead and footer logos are wayfinding: they answer "whose
   site is this?" -- and the masthead one is also the link home, so hiding it
   leaves a nameless page with an invisible home button. Same reasoning as
   keeping the panel's own control icons below. */
html.a11y-noimg :is(.logo-img,.footer-logo){ display:block !important; }
html.a11y-noimg :is(.logo-chip,.footer-brand) picture{ display:inline !important; }
/* the panel's own icons are UI, not content -- hiding them empties the controls */
html.a11y-noimg .a11y-panel svg,
html.a11y-noimg .a11y-btn svg{ display:block !important; }

/* ---------- pause animations ----------
   Mirrors the prefers-reduced-motion block near the top of this file, and for
   the SAME reason it must force opacity:1 on .reveal: those blocks start at
   opacity:0 and are only revealed by an IntersectionObserver class, so merely
   killing transitions would leave everything below the fold permanently blank. */
html.a11y-motion *,
html.a11y-motion *::before,
html.a11y-motion *::after{
  animation-duration:.001ms !important; animation-iteration-count:1 !important;
  transition-duration:.001ms !important; scroll-behavior:auto !important;
}
html.a11y-motion .blob,
html.a11y-motion .reveal,
html.a11y-motion :is(.hero-glass h1,.hero-glass p,.hero-btns,.trust-bar){
  animation:none !important; opacity:1 !important; transform:none !important;
}
html.a11y-motion{ scroll-behavior:auto !important; }

/* ---------- highlight links ---------- */
html.a11y-links main :is(a,button:not(.a11y-row):not(.a11y-foot-btn)){
  outline:2px solid var(--gold-hover) !important; outline-offset:2px;
  text-decoration:underline !important; text-underline-offset:3px;
}
html.a11y-links main a:focus-visible{ outline:3px solid var(--charcoal) !important; }

/* ============================================================= */
/* TRANSLUCENCY: OS-LEVEL ACCESSIBILITY PREFERENCES              */
/* ============================================================= */
/* The whole point of a glass surface is that the backdrop shows through --
   which means the contrast of anything on it is a RANGE, not a value. Where
   the reader has told the OS they can't deal with that, stop negotiating and
   go solid. These are the two signals the panel's own Contrast control cannot
   see, because they are set at the system level, not on this page. */

@media (prefers-reduced-transparency: reduce){
  .glass, .glass-dark, .glass-gold, .nav-liquid, .nav-mobile,
  .footer-panel, .hero-glass, .station-item, .pkg-card, .process-step,
  .ps-glass, .review-item, .trust-item, .planner-sticky, .section-head{
    backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
  }
  .glass, .station-item, .pkg-card, .process-step, .ps-glass, .review-item,
  .footer-panel, .section-head{ background:var(--surface-solid) !important; }
  .glass-dark, .hero-glass, .trust-item{ background:#141210 !important; }
  .glass-gold{ background:var(--gold) !important; }
  .nav-liquid, .nav-mobile{ background:var(--nav-glass-solid, #16161A) !important; }
  .nav-theme-light .nav-liquid, .nav-liquid.nav-theme-light,
  .nav-theme-light.nav-mobile{ background:#FAF4E9 !important; }
  /* the decorative wash behind everything is pure translucency -- drop it */
  .liquid-canvas{ display:none !important; }
}

/* noinspection CssInvalidMediaFeature,CssInvalidPropertyValue */
@media (prefers-contrast: more){
  .glass, .glass-dark, .glass-gold, .nav-liquid, .nav-mobile, .footer-panel,
  .station-item, .pkg-card, .process-step, .ps-glass, .review-item{
    backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
    border-color:currentColor;
  }
  .glass, .station-item, .pkg-card, .process-step, .ps-glass, .review-item,
  .footer-panel{ background:#FFFFFF !important; color:#000 !important; }
  .glass-dark, .hero-glass{ background:#0B0B0B !important; }
  .glass-gold{ background:#B87A25 !important; color:#FFFFFF !important; }
  .nav-liquid, .nav-mobile{ background:#0B0B0B !important; }
  a:not([class]){ text-decoration:underline; }
  .liquid-canvas{ display:none !important; }
}

/* ============================================================= */
/* §12 FOLLOW-UPS: EDGE EFFECTS + MATERIALIZE                    */
/* ============================================================= */

/* ---- scroll edge effect under the floating mobile action bar ----
   Replaces the 1px gold rule. The fade only exists where floating chrome
   actually overlaps content, which is the condition §12 attaches to it. */
@media(max-width:768px){
  .mobile-cta::before{
    content:''; position:absolute; left:0; right:0; bottom:100%; height:18px;
    pointer-events:none;
    background:linear-gradient(to top, var(--surface-solid), rgba(252,249,243,0));
  }
}

/* ---- materialize: blur + scale together, never a plain opacity fade ----
   §12: a glass surface should arrive like a real material condensing into
   place. Animating opacity alone reads as a decal fading up; animating the
   blur radius and scale together reads as glass. */
@keyframes a11y-materialize{
  from{ opacity:0; transform:translateY(8px) scale(.965); backdrop-filter:blur(0px) saturate(100%); }
  to  { opacity:1; transform:none;                        backdrop-filter:blur(30px) saturate(180%); }
}
@keyframes nav-materialize{
  from{ opacity:0; transform:translateX(-50%) translateY(-10px) scale(.97); }
  to  { opacity:1; transform:translateX(-50%) translateY(0) scale(1); }
}
/* `backwards`, not `both`: with a forwards fill the resting appearance is
   whatever the animation last committed, so a throttled or interrupted run
   leaves the surface stuck at its FROM state (no blur, scaled down). With
   backwards the final state comes from the cascade, and the animation only
   supplies the approach. */
.nav-mobile.open{ animation:nav-materialize .34s cubic-bezier(.22,1,.36,1) backwards; }

/* Reduced motion and the panel's own "Pause animations" both cancel it -- a
   material arriving is still motion. */
@media (prefers-reduced-motion: reduce){
  .nav-mobile.open, .a11y-panel:not([hidden]){ animation:none !important; }
}
html.a11y-motion .nav-mobile.open,
html.a11y-motion .a11y-panel:not([hidden]){ animation:none !important; }


/* ============================================================= */
/* ACCESSIBILITY WIDGET — LIQUID GLASS, REDESIGNED               */
/* ============================================================= */
/* Three constraints, in this order:
     1. READABILITY wins. This is the control someone opens BECAUSE the page
        is hard to read, so the glass runs heavy and every control on it is a
        SOLID material (§12: never stack a light translucent surface on
        another). Measured, not eyeballed -- see the contrast audit.
     2. FLOW. It is warm cream and gold like the rest of the site, not a black
        system sheet dropped on top. Dark chrome uses the same warm brown the
        restaurant band uses, never neutral black.
     3. REACH. Launcher and the Hide/Reset row both sit in the bottom third;
        on a phone the sheet rises from the bottom edge with a grab handle. */

/* ---------- launcher ---------- */
.a11y-btn{
  background:linear-gradient(150deg, rgba(46,40,32,.86), rgba(26,22,18,.78));
  -webkit-backdrop-filter:blur(18px) saturate(180%);
  backdrop-filter:blur(18px) saturate(180%);
  border:1px solid rgba(212,155,58,.55);
  box-shadow:inset 0 1px 0 rgba(255,235,190,.4), 0 8px 26px rgba(30,22,8,.34);
}
.a11y-btn:hover{ box-shadow:inset 0 1px 0 rgba(255,235,190,.5), 0 12px 32px rgba(30,22,8,.42); }
/* §1: feedback on pointer-DOWN, not on release */
.a11y-btn:active{ transform:scale(.94); transition:transform .1s ease-out; }

/* ---------- panel ---------- */
.a11y-panel{
  background:linear-gradient(150deg, rgba(253,250,245,.95), rgba(245,239,229,.91));
  -webkit-backdrop-filter:blur(30px) saturate(180%);
  backdrop-filter:blur(30px) saturate(180%);
  border:1px solid rgba(212,155,58,.38);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.92), 0 26px 64px rgba(30,22,8,.34);
  isolation:isolate;
  /* §7: the sheet belongs to the launcher it came from, so it grows out of
     that corner rather than inflating from its own middle */
  transform-origin:bottom left;
}
.a11y-panel::before{                       /* light catching the top edge */
  content:''; position:absolute; top:0; left:8%; right:8%; height:1px; z-index:3;
  background:linear-gradient(90deg, transparent, rgba(255,240,205,.9), transparent);
}
.a11y-panel::after{ content:none; }        /* no sheen: this is a scroll parent */
/* chrome is not prose -- dragging the header should never select the title */
.a11y-panel, .a11y-btn{ -webkit-user-select:none; user-select:none; }

/* ---------- header: warm dark glass, not black ---------- */
.a11y-head{
  background:linear-gradient(150deg, rgba(48,42,34,.94), rgba(28,24,19,.9));
  -webkit-backdrop-filter:blur(18px) saturate(160%);
  backdrop-filter:blur(18px) saturate(160%);
  padding:15px 16px 14px;
}
.a11y-head h2{
  font-size:1em; font-weight:600; letter-spacing:-.005em;   /* §15: tighten as it grows */
  color:#FFF9EC;
}
.a11y-head-ico{ background:#FDF8EE; }
.a11y-head-ico svg{ stroke:#241F19; }
.a11y-x{ border-radius:10px; }
.a11y-x:hover{ background:rgba(255,255,255,.14); }
.a11y-x:active{ transform:scale(.9); transition:transform .1s ease-out; }

/* ---------- body ---------- */
.a11y-body{ background:transparent; padding:13px; gap:13px; }
.a11y-group{
  background:rgba(255,255,255,.46);
  border:1px solid rgba(212,155,58,.16);
  border-radius:18px; padding:11px;
}
.a11y-group h3{
  font-size:.7em; letter-spacing:.18em; color:var(--gold-ink);   /* §15: small text, open tracking */
  margin:0 0 9px 5px;
}

/* ---------- rows: a solid material ON the glass ---------- */
.a11y-row{
  background:#FFFCF7;
  border:1.5px solid rgba(212,155,58,.2);
  border-radius:15px; padding:9px 12px; margin-bottom:7px;
  min-height:46px;                                   /* comfortably past 44px */
  box-shadow:0 1px 2px rgba(60,45,15,.05);
  transition:border-color .18s ease, background .18s ease, transform .1s ease-out;
}
.a11y-row:hover{ background:#FFFFFF; border-color:rgba(212,155,58,.45); }
.a11y-row:active{ transform:scale(.985); }           /* §1 */
.a11y-label{ font-size:.94em; font-weight:500; letter-spacing:0; }  /* §15: body tracking ~0 */
.a11y-ico{ background:#F6EFE1; width:33px; height:33px; }
.a11y-ico svg{ stroke:#3A2F20; }
.a11y-ico svg .a11y-fill{ fill:#3A2F20; }
.a11y-toggle[aria-checked="true"]{
  background:#FFF6E4; border-color:var(--gold-ink);
}
.a11y-toggle[aria-checked="true"] .a11y-ico{ background:var(--gold-ink); }
.a11y-toggle[aria-checked="true"] .a11y-ico svg{ stroke:#FFF8EA; }
.a11y-toggle[aria-checked="true"] .a11y-ico svg .a11y-fill{ fill:#FFF8EA; }
.a11y-step-row:not([data-a11y-level="0"]){ border-color:var(--gold-ink); background:#FFF6E4; }

/* ---------- stepper readout ---------- */
.a11y-steps span{ background:#E4DACA; }
.a11y-steps span.a11y-on{ background:var(--gold-ink); }   /* on-brand AND 5.2:1 on cream */

/* ---------- footer: the reachable row ---------- */
.a11y-foot{
  background:rgba(250,245,236,.8); border-top:1px solid rgba(212,155,58,.26);
  padding:11px;
}
.a11y-foot-btn{
  background:#FFFCF7; border:1.5px solid rgba(212,155,58,.4);
  font-size:.88em; padding:9px 20px; min-height:42px;
}
.a11y-foot-btn:hover{ background:#FFF; border-color:var(--gold-ink); }
.a11y-foot-btn:active{ transform:scale(.97); transition:transform .1s ease-out; }

.a11y-structure a:hover{ background:#F6EFE1; }

/* ---------- phone: a real bottom sheet, within thumb reach ---------- */
@media(max-width:560px){
  .a11y-panel{ transform-origin:bottom center; }
  /* familiar grab handle -- says "sheet", and marks where to start a drag */
  .a11y-head::before{
    content:''; position:absolute; top:7px; left:50%; transform:translateX(-50%);
    width:38px; height:4px; border-radius:2px; background:rgba(255,248,234,.4);
  }
  .a11y-head{ padding-top:19px; }
  /* keep the sheet clear of the very bottom so the CTA bar stays tappable */
  .a11y-panel{ max-height:min(78vh, 640px); }
}

.a11y-backdrop{ -webkit-backdrop-filter:blur(2px); backdrop-filter:blur(2px); }

/* ---------- §14: the three signals that outrank the aesthetic ---------- */
@media (prefers-reduced-transparency: reduce){
  .a11y-panel, .a11y-head, .a11y-btn, .a11y-backdrop{
    backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
  }
  .a11y-panel{ background:var(--surface-solid) !important; }
  .a11y-head{ background:#241F19 !important; }
  .a11y-btn{ background:#241F19 !important; }
  .a11y-group{ background:var(--ivory) !important; }
  .a11y-foot{ background:var(--ivory) !important; }
}
/* noinspection CssInvalidMediaFeature,CssInvalidPropertyValue */
@media (prefers-contrast: more){
  .a11y-panel, .a11y-head, .a11y-btn{
    backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
  }
  .a11y-panel{ background:#FFFFFF !important; border-color:#000 !important; }
  .a11y-head{ background:#000 !important; }
  .a11y-btn{ background:#000 !important; border-color:#FFF !important; }
  .a11y-group{ background:#FFFFFF !important; border-color:#000 !important; }
  .a11y-row, .a11y-foot-btn{ background:#FFF !important; border-color:#000 !important; }
  .a11y-steps span.a11y-on{ background:#000 !important; }
}
html[data-a11y-contrast="2"] .a11y-panel,
html[data-a11y-contrast="2"] .a11y-head,
html[data-a11y-contrast="2"] .a11y-btn{
  backdrop-filter:none !important; -webkit-backdrop-filter:none !important;
}
html[data-a11y-contrast="2"] .a11y-panel{ background:#FFFFFF !important; }
html[data-a11y-contrast="2"] .a11y-group{ background:#FFFFFF !important; }
html[data-a11y-contrast="2"] .a11y-head{ background:#000 !important; }

/* ---- exit mirrors entry (§7): same path, same origin, reversed easing ---- */
@keyframes a11y-dematerialize{
  from{ opacity:1; transform:none; }
  to  { opacity:0; transform:translateY(8px) scale(.965); }
}
.a11y-panel.a11y-closing{
  animation:a11y-dematerialize .2s cubic-bezier(.4,0,.9,.6) forwards;
  pointer-events:none;                    /* never accept a click on the way out */
}
@media (prefers-reduced-motion: reduce){
  .a11y-panel.a11y-closing{ animation:none !important; }
}
html.a11y-motion .a11y-panel.a11y-closing{ animation:none !important; }
