/* ===========================================================
   Orderzy Design System Preview. Shared styles for preview/*.html
   Standalone: no Bootstrap, no framework. Pure CSS + Google Fonts.
   This file is the de-facto draft of what `orderzy-modern.css` would
   look like after the Step 1 token migration from Section 10.
   =========================================================== */

/* ---------- Self-hosted fonts ----------
   Fix for Windows 7 desktops that shipped with a pre-KB-2729094 Segoe UI
   cut without the rupee glyph (U+20B9). base.html still loads the same
   families from Google Fonts (parallel path, CDN-cached for everyone else);
   these @font-face blocks give the browser a same-origin fallback that
   works offline, behind corporate DNS, and on legacy Win7 rigs. `local()`
   is listed first so if the OS already has Inter installed, that gets used
   (zero payload); otherwise the vendored TTF loads. `font-display: swap`
   ensures text renders in the system fallback while the file arrives, so
   there's no invisible-text flash. Files are the same TTFs reportlab uses
   for the PDF bill (see orders/fonts.py) - one source of truth per weight.
   ------------------------------ */
@font-face {
  font-family: 'Inter';
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: local('Inter Regular'), local('Inter'),
       url("/static/fonts/Inter-Regular.4145168e5230.ttf") format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  src: local('Inter Medium'),
       url("/static/fonts/Inter-Medium.a6f54808ec0a.ttf") format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: local('Inter Bold'),
       url("/static/fonts/Inter-Bold.c7b5fabc34e7.ttf") format('truetype');
}
@font-face {
  font-family: 'Inter';
  font-weight: 400;
  font-style: italic;
  font-display: swap;
  src: local('Inter Italic'),
       url("/static/fonts/Inter-Italic.2247b87d078d.ttf") format('truetype');
}
@font-face {
  font-family: 'DM Serif Display';
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: local('DM Serif Display'),
       url("/static/fonts/DM-Serif-Display-Regular.2312ec57b28b.ttf") format('truetype');
}
@font-face {
  font-family: 'DM Serif Display';
  font-weight: 400;
  font-style: italic;
  font-display: swap;
  src: local('DM Serif Display Italic'),
       url("/static/fonts/DM-Serif-Display-Italic.2cfd6017cc5c.ttf") format('truetype');
}

/* ---------- Tokens ----------
   Post-Luxe-unification (2026-08-14): the former Luxe token block (previously
   scoped to `body.theme-luxe`) merged into :root. Every surface now renders on
   the single unified token set. Historical values from both eras noted inline
   where they differed. Wordmark orange is preserved as the Orderzy brand anchor.
   ------------------------------ */
:root {
  /* Brand (Orderzy wordmark + brand anchor; never per-outlet-tinted) */
  --orderzy-brand:        #f28500;
  --orderzy-brand-deep:   #b86600;
  --orderzy-brand-hover:  #965200;
  --orderzy-brand-soft:   #fef1e0;
  --orderzy-brand-ink:    #7a4500;

  /* Surface */
  --orderzy-canvas:       #fdfbf7;   /* was #faf8f4 pre-unification */
  --orderzy-surface:      #ffffff;
  --orderzy-surface-alt:  #f6f0e6;   /* was #f3efe8 */
  /* L18: --orderzy-surface-sand aliases --orderzy-border. Existing consumers
     stay stable; future code should prefer --orderzy-border directly. */
  --orderzy-surface-sand: var(--orderzy-border);

  /* Text */
  --orderzy-ink:          #1a1815;   /* was #1f1d1a */
  --orderzy-ink-soft:     #6b6760;   /* was #5e5d59 */
  --orderzy-ink-muted:    #9a948b;   /* was #87867f */
  --orderzy-ink-invert:   #fdfbf7;   /* was #faf9f5 */

  /* Borders */
  --orderzy-border:        #ede5d7;  /* was #ebe5da */
  --orderzy-border-soft:   rgba(26,24,21,0.08);
  --orderzy-border-strong: #d4cdc0;

  /* Semantic */
  --orderzy-success:      #4a6b3a;   /* was #1f9d55, Luxe muted */
  --orderzy-success-soft: #e3f5ea;
  --orderzy-warning:      #a17a3a;   /* was #c9820a */
  --orderzy-warning-soft: #faf0dc;
  --orderzy-danger:       #8b3a3a;   /* was #b53333 */
  --orderzy-danger-soft:  #fae5e3;

  /* Per-brand accent (set by <style>:root { --accent: ... }</style> in base.html
     when brand.accent_hex is set; otherwise falls through to Orderzy orange so
     no-accent brands still feel like Orderzy restaurants). */
  --accent:          var(--orderzy-brand-deep);
  --accent-hover:    color-mix(in srgb, var(--accent) 88%, #000);
  --accent-contrast: #fdfbf7;
  --badge-veg:       #4a6b3a;
  --badge-nonveg:    #8b3a3a;

  /* Shadows (Luxe: barely-there) */
  --orderzy-shadow-card:    0 2px 8px rgba(0,0,0,0.04);
  --orderzy-shadow-lift:    0 8px 24px rgba(0,0,0,0.06);
  --orderzy-shadow-whisper: 0 16px 48px rgba(0,0,0,0.08);
  --shadow-soft:   0 2px 8px rgba(0,0,0,0.04);
  --shadow-medium: 0 8px 24px rgba(0,0,0,0.06);
  --shadow-strong: 0 16px 48px rgba(0,0,0,0.08);

  /* Radii: production aliases + STYLEGUIDE names */
  --r-xs: 4px;
  --r-sm: 4px;      /* was 8px */
  --r-md: 8px;      /* was 12px */
  --r-lg: 12px;     /* was 20px */
  --r-pill: 9999px;
  --radius-sm:   4px;
  --radius-md:   8px;
  --radius-lg:   12px;
  --radius-pill: 9999px;

  /* Borders (composite shorthands) */
  --border-thin:     1px solid var(--orderzy-border);
  --border-emphasis: 1px solid var(--accent);

  /* P4.C09 (2026-08-15): canonical breakpoint tokens.
     CSS custom properties CANNOT be used inside `@media (max-width: …)`
     conditions (the spec resolves `var()` only in a declaration context),
     so the tokens below function as documentation + consistency anchors
     for anyone editing the file. When adding a new media query, prefer
     the four canonical widths below unless the design genuinely needs a
     one-off breakpoint; if it does, add a comment explaining why. Current
     one-off widths that the site still ships with, and what they map to:

       360, 400, 420, 480, 540, 560         → mobile   (canonical 520)
       620, 640, 720                        → tablet   (canonical 768)
       767                                  → tablet-minus-one; treat as 768
       840, 880                             → desktop  (canonical 1024)

     Migrating each one-off to its canonical bucket is a follow-up: the
     regressions from re-flowing every layout are wider than a single-phase
     cleanup can safely land, so leave existing rules alone and start
     fresh rules on the canonical set.
  */
  --bp-mobile:  520px;
  --bp-tablet:  768px;
  --bp-desktop: 1024px;
  --bp-wide:    1440px;

  /* Type */
  --font-heading: "DM Serif Display", Georgia, serif;
  --font-body:    "Inter", system-ui, -apple-system, sans-serif;
  --font-display: "DM Serif Display", Georgia, serif;
  --font-mono:    "Inter", ui-monospace, monospace;

  /* Type scale: fluid clamp() on the 5 biggest tokens so type scales
     smoothly from phone (540px) → desktop (1200px) instead of jumping at
     the 768px breakpoint. */
  --text-display: clamp(56px, calc(56px + (100vw - 540px) * 24 / 660), 80px);
  --text-h1:      clamp(40px, calc(40px + (100vw - 540px) * 16 / 660), 56px);
  --text-h2:      clamp(32px, calc(32px + (100vw - 540px) * 8  / 660), 40px);
  --text-h3:      clamp(24px, calc(24px + (100vw - 540px) * 4  / 660), 28px);
  --text-h4:      clamp(20px, calc(20px + (100vw - 540px) * 2  / 660), 22px);
  --text-body:    17px;
  --text-small:   15px;
  --text-caption: 13px;
  --text-label:   13px;    /* ALL-CAPS, pair with --tracking-wide */
  --text-price:   22px;    /* tabular-nums */

  /* Line-height */
  --leading-tight:   1.15;
  --leading-snug:    1.3;
  --leading-normal:  1.5;
  --leading-relaxed: 1.7;
  --leading-loose:   1.85;

  /* Letter-spacing */
  --tracking-tight:  -0.02em;
  --tracking-normal: 0;
  --tracking-wide:   0.12em;
  --tracking-wider:  0.18em;

  /* Spacing */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 16px;
  --space-4: 24px;
  --space-5: 32px;
  --space-6: 48px;
  --space-7: 64px;
  --space-8: 96px;
  --space-9: 128px;
  --space-section: 128px;   /* between menu courses */
  --space-page-x:  64px;    /* desktop page margin; 24px mobile (see @media) */

  /* Motion */
  --ease:            cubic-bezier(0.4, 0, 0.2, 1);
  --ease-default:    cubic-bezier(0.4, 0, 0.2, 1);
  --ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);   /* signature */
  --ease-decelerate: cubic-bezier(0, 0, 0.2, 1);      /* entering view */
  --ease-accelerate: cubic-bezier(0.4, 0, 1, 1);      /* leaving view */
  --dur-fast:      180ms;   /* was 120ms */
  --dur-med:       320ms;   /* was 200ms */
  --duration-fast: 180ms;
  --duration-base: 320ms;
  --duration-slow: 600ms;

  /* Focus ring (WCAG 2.4.7): reads per-brand accent */
  --focus-ring: var(--accent);
}

/* Mobile type-scale + page-margin adjustments. The 5 biggest type tokens
   (--text-display, --text-h1..h4) use clamp() in :root above; this media
   query handles the remaining non-fluid sizes plus spacing tightens:
   128px between courses reads as too-much-air on a phone. */
@media (max-width: 768px) {
  :root {
    --text-body:    16px;
    --text-price:   20px;
    --space-page-x: 24px;
    --space-section: 64px;
    --space-5:      24px;
  }
}

/* RA-0 M5: respect prefers-reduced-motion. Suppresses long animations and
   transitions for users who set OS-level reduced motion. The carousel
   autoplay is also gated separately in JS at restaurant__detail.html. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* M22: skip-to-content link. Hidden until focused, then surfaces top-left. */
.skip-link {
  position: absolute;
  top: -100px;
  left: 8px;
  z-index: 1000;
  padding: 10px 16px;
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
  font-family: var(--font-body);
  font-weight: 600;
  border-radius: var(--r-sm);
  text-decoration: none;
  transition: top var(--dur-fast) var(--ease);
}
.skip-link:focus {
  top: 8px;
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}

/* ---------- Link reset for UI patterns ----------
   Browsers underline every <a> by default. That's the right behavior for
   inline body-prose links, but wrong for nav items, buttons, chips, cards,
   and other UI surfaces where the link is just the click target. We list
   every UI-link class here so per-class rules don't keep forgetting it.
   Body-prose links keep their underline via .mk-ar-prose / .mk-prose:hover
   rules further down. */
.btn,
.adm-btn,
.adm-chip,
.adm-table__row-link,
.auth-field__link,
.btn-cancel,
.cart-add-more,
.cart-bar__cta,
.contact-edit-link,
.cust-nav__item,
.filter-chip,
.mb-cat,
.mini-cart,
.mk-bl-card__media,
.mk-cl-nearby__chip,
.mo-btn-sm,
.mo-filter,
.oz-nav__cart,
.oz-nav__link,
.oz-nav__link--muted,
.oz-nav__link--restaurant,
.oz-nav__user,
.oz-wordmark,
.pos-back-btn,
.r-btn,
.rest-card {
  text-decoration: none;
}

/* Reset: Bootstrap handles box-sizing and base styles.
   We only enforce Orderzy-specific body defaults. */
body {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.55;
  color: var(--orderzy-ink);
  background: var(--orderzy-canvas);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
#main-content { flex: 1 0 auto; }
.oz-footer { flex-shrink: 0; }

h1, h2, h3, h4, h5 {
  font-family: var(--font-heading);
  color: var(--orderzy-ink);
  margin: 0;
  letter-spacing: -0.01em;
}
.num, .price, .total { font-feature-settings: "tnum"; font-variant-numeric: tabular-nums; }

/* ---------- Layout helpers ---------- */
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.stack-lg > * + * { margin-top: 24px; }
.stack-md > * + * { margin-top: 16px; }
.stack-sm > * + * { margin-top: 8px; }

/* ---------- Navbar ---------- */
.oz-nav {
  position: sticky;
  top: 0;
  z-index: 50;
  background: rgba(250,248,244,0.92);
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  border-bottom: 1px solid var(--orderzy-border-soft);
}
.oz-nav__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 72px;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.oz-wordmark {
  font-family: "Playfair Display", "DM Serif Display", Georgia, serif;
  font-weight: 800;
  font-size: 26px;
  letter-spacing: 0;
  color: var(--orderzy-brand);
  line-height: 1;
}
.oz-nav__links {
  display: flex;
  align-items: center;
  gap: 28px;
}
.oz-nav__link {
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 15px;
  color: var(--orderzy-ink);
  transition: color var(--dur-fast) var(--ease);
}
.oz-nav__link:hover { color: var(--orderzy-brand); }
.oz-nav__link--restaurant {
  color: var(--orderzy-ink);
  padding: 8px 14px;
  border-radius: var(--r-sm);
  border: 1px solid var(--orderzy-border-strong);
  transition: all var(--dur-fast) var(--ease);
}
.oz-nav__link--restaurant:hover {
  background: var(--orderzy-brand-soft);
  border-color: var(--orderzy-brand);
  color: var(--orderzy-brand-ink);
}
.oz-nav__cart {
  position: relative;
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: var(--r-pill);
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink);
  transition: all var(--dur-fast) var(--ease);
}
.oz-nav__cart:hover { border-color: var(--orderzy-ink); }
.oz-nav__cart-badge {
  position: absolute;
  top: -4px;
  right: -4px;
  min-width: 18px;
  height: 18px;
  /* Brighter orange (brand) for the cart badge so it reads clearly distinct
     from the bell's red danger badge - the two used to share a similar
     dark tone, creating an unintentional visual rhyme. */
  background: var(--orderzy-brand);
  color: #fff;
  border-radius: var(--r-pill);
  font-size: 11px;
  font-weight: 700;
  display: grid;
  place-items: center;
  padding: 0 5px;
  border: 2px solid var(--orderzy-canvas);
}
.oz-nav__cart-badge.hidden { display: none; }
.oz-nav__cart--empty { opacity: 0.5; }
.oz-nav__link--muted {
  font-size: 14px;
  font-weight: 600;
  color: var(--orderzy-ink-muted);
  transition: color var(--dur-fast) var(--ease);
}
.oz-nav__link--muted:hover { color: var(--orderzy-danger); }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 16px;
  padding: 12px 20px;
  border-radius: var(--r-sm);
  border: 1px solid transparent;
  transition: all var(--dur-fast) var(--ease);
  text-align: center;
  white-space: nowrap;
}
.btn:active { transform: scale(0.97); }

.btn--primary {
  background: var(--orderzy-brand-deep);
  color: #fff;
  box-shadow: 0 1px 2px rgba(31,29,26,0.1);
}
.btn--primary:hover {
  background: var(--orderzy-brand-hover);
  box-shadow: var(--orderzy-shadow-lift);
}

/* FE1-5: .btn--ink removed - unused in production templates. */

.btn--secondary {
  background: var(--orderzy-surface-sand);
  color: var(--orderzy-ink);
  border-color: var(--orderzy-border);
}
.btn--secondary:hover { background: var(--orderzy-border-strong); }

.btn--ghost {
  background: transparent;
  color: var(--orderzy-ink);
}
.btn--ghost:hover { color: var(--orderzy-brand); }

/* FE1-3: shared disabled states for buttons + inputs */
.btn:disabled,
.btn[aria-disabled="true"] {
  opacity: 0.5;
  cursor: not-allowed;
  box-shadow: none;
}
.btn:disabled:hover,
.btn[aria-disabled="true"]:hover {
  background: inherit;
  color: inherit;
  transform: none;
}
.input:disabled,
.input[aria-disabled="true"] {
  background: var(--orderzy-surface-alt);
  color: var(--orderzy-ink-muted);
  cursor: not-allowed;
  border-color: var(--orderzy-border);
}

.btn--large {
  font-size: 17px;
  padding: 14px 26px;
}
.btn--block { width: 100%; }

/* ---------- Status pill ---------- */
.pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 3px 10px;
  border-radius: var(--r-pill);
  font-family: var(--font-heading);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
}
.pill--success { background: var(--orderzy-success-soft); color: var(--orderzy-success); }
.pill--warn    { background: var(--orderzy-warning-soft); color: var(--orderzy-warning); }
.pill--brand   { background: var(--orderzy-brand-soft); color: var(--orderzy-brand-ink); }
.pill--closed  { background: var(--orderzy-surface-alt); color: var(--orderzy-ink-muted); }
/* Variant for status pills laid over hero photos. Solid semi-opaque white
   surface + strong shadow + frosted backdrop so the pill reads against ANY
   underlying photography (bright food, dark interiors, varied compositions).
   Text color is forced dark; the colored status dot via ::before stays
   theme-aware (success green / closed grey). FE0 follow-up 2026-06-02:
   strengthened from blur(2px) + soft shadow which faded on bright photos. */
.pill--on-photo {
  background: rgba(255,255,255,0.92) !important;
  color: var(--orderzy-ink) !important;
  box-shadow: 0 2px 8px rgba(0,0,0,0.25);
  backdrop-filter: blur(8px) saturate(1.2);
  -webkit-backdrop-filter: blur(8px) saturate(1.2);
  border: 1px solid rgba(255,255,255,0.6);
}
/* Status dot picks up the variant color even though text is dark. */
.pill--on-photo.pill--success::before { background: var(--orderzy-success); }
.pill--on-photo.pill--warn::before    { background: var(--orderzy-warning); }
.pill--on-photo.pill--brand::before   { background: var(--orderzy-brand-ink); }
.pill--on-photo.pill--closed::before  { background: var(--orderzy-ink-muted); }
.pill::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}

/* ---------- Trust badge ---------- */
.trust-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: var(--r-pill);
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink-soft);
  font-size: 13px;
  font-weight: 600;
}
.trust-badge__icon {
  width: 14px;
  height: 14px;
  color: var(--orderzy-brand);
}

/* ---------- Inputs ---------- */
.input {
  width: 100%;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border-strong);
  border-radius: var(--r-sm);
  padding: 12px 14px;
  font: inherit;
  color: var(--orderzy-ink);
  transition: all var(--dur-fast) var(--ease);
}
.input::placeholder { color: var(--orderzy-ink-muted); }
.input:focus {
  outline: none;
  border-color: var(--orderzy-brand);
  box-shadow: 0 0 0 3px var(--orderzy-brand-soft);
}
.input-label {
  display: block;
  font-size: 14px;
  font-weight: 600;
  color: var(--orderzy-ink);
  margin-bottom: 6px;
}

/* ---------- Search bar (hero) ---------- */
.search-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-pill);
  padding: 6px 6px 6px 18px;
  box-shadow: var(--orderzy-shadow-card);
  max-width: 480px;
}
.search-bar__icon {
  width: 18px;
  height: 18px;
  color: var(--orderzy-ink-muted);
  flex-shrink: 0;
}
.search-bar__input {
  flex: 1;
  border: none;
  background: transparent;
  font: inherit;
  outline: none;
  color: var(--orderzy-ink);
  padding: 10px 0;
}
.search-bar__input::placeholder { color: var(--orderzy-ink-muted); }
.search-bar__btn {
  background: var(--orderzy-brand-deep);
  color: #fff;
  border: none;
  width: 42px;
  height: 42px;
  border-radius: var(--r-pill);
  display: grid;
  place-items: center;
  transition: background var(--dur-fast) var(--ease);
}
.search-bar__btn:hover { background: var(--orderzy-brand-hover); }

/* ---------- Quick-search chips below hero search bar ---------- */
/* P1.C05.hotfix (2026-08-16): dropped the max-width: 480px cap. It was sized
   for a phantom left column that disappeared when the phone mock retired,
   which forced any sixth (or wide-labelled) chip to wrap onto a second row
   on desktop. The row now uses whatever horizontal space the hero column
   offers; the hero__grid rules gate the actual width. */
.search-suggest {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 12px;
}
.search-suggest__chip {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-pill);
  padding: 6px 14px;
  font-size: 13px;
  font-weight: 600;
  color: var(--orderzy-ink);
  cursor: pointer;
  transition: background var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
  font-family: inherit;
}
.search-suggest__chip:hover {
  background: var(--orderzy-brand-soft);
  border-color: var(--orderzy-brand);
  color: var(--orderzy-brand-ink);
}
.search-suggest__chip:focus-visible {
  outline: 2px solid var(--orderzy-brand);
  outline-offset: 2px;
}

/* ---------- Card (Airbnb-style restaurant listing) ---------- */
.rest-card {
  background: var(--orderzy-surface);
  border-radius: var(--r-lg);
  box-shadow: var(--orderzy-shadow-card);
  overflow: hidden;
  transition: box-shadow var(--dur-med) var(--ease);
  display: flex;
  flex-direction: column;
}
.rest-card:hover { box-shadow: var(--orderzy-shadow-lift); }
.rest-card--closed { opacity: 0.65; }
.rest-card--closed .rest-card__media img { filter: grayscale(40%); }

/* =========== Marketplace browse header =========== */
.browse-head {
  padding: 32px 0 8px;
  background: var(--orderzy-canvas);
  position: sticky;
  top: 72px;
  z-index: 30;
  border-bottom: 1px solid var(--orderzy-border-soft);
}
.browse-head__search {
  display: flex;
  gap: 12px;
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: 18px;
}
.browse-head__search .search-bar { flex: 1; min-width: 260px; margin: 0; }
.browse-head__location {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  padding: 10px 14px;
  font-size: 14px;
  color: var(--orderzy-ink);
  font-weight: 600;
}
.browse-head__location svg { color: var(--orderzy-brand); width: 16px; height: 16px; }
.browse-head__location-change {
  color: var(--orderzy-brand-ink);
  font-size: 12px;
  font-weight: 700;
  margin-left: 4px;
  border-left: 1px solid var(--orderzy-border);
  padding-left: 10px;
  background: none;
  border-top: none;
  border-right: none;
  border-bottom: none;
  cursor: pointer;
}

.filter-row {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding: 4px 0 16px;
  scrollbar-width: none;
}
.filter-row::-webkit-scrollbar { display: none; }
.filter-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  border-radius: var(--r-pill);
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink);
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
  text-decoration: none;
  transition: all var(--dur-fast) var(--ease);
}
.filter-chip:hover { border-color: var(--orderzy-ink); }
.filter-chip.is-active {
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
  border-color: var(--orderzy-ink);
}
.filter-chip:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}
.filter-chip:disabled:hover { border-color: var(--orderzy-border); }
.filter-chip__dot { width: 8px; height: 8px; border-radius: 50%; }
.filter-chip__dot--veg { background: #1f9d55; }
.filter-chip__dot--nonveg { background: #b53333; }

.results-head {
  padding: 20px 0 12px;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 8px;
}
.results-head__count { font-size: 15px; color: var(--orderzy-ink-soft); }
.results-head__count strong { color: var(--orderzy-ink); }
.results-head__sort { font-size: 14px; color: var(--orderzy-ink-soft); }
.results-head__sort strong { color: var(--orderzy-ink); font-weight: 700; }

@media (max-width: 520px) {
  .browse-head { top: 56px; padding: 16px 0 4px; }
  .browse-head__search { margin-bottom: 12px; }
  .results-head { padding: 14px 0 10px; }
}
.rest-card__media {
  aspect-ratio: 16 / 10;
  background: var(--orderzy-surface-alt);
  position: relative;
  overflow: hidden;
}
.rest-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.rest-card__badge {
  position: absolute;
  top: 12px;
  left: 12px;
}
/* CTA row at the foot of the card. Both CTAs sit above the stretched-link
   overlay (z-index:2) so they receive their own clicks. View menu is primary
   (outlined, brand-ink), Book a table is secondary text-link. */
.rest-card__ctas {
  position: relative;
  z-index: 2;
  display: flex;
  gap: 8px;
  align-items: center;
  margin-top: 12px;
  flex-wrap: wrap;
}
.rest-card__view-cta {
  display: inline-flex;
  align-items: center;
  padding: 8px 16px;
  border: 1px solid var(--orderzy-brand-ink);
  border-radius: 9999px;
  color: var(--orderzy-brand-ink);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 13px;
  text-decoration: none;
  transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}
.rest-card__view-cta:hover {
  background: var(--orderzy-brand-ink);
  color: #fff;
}
.rest-card__book-cta {
  display: inline-flex;
  align-items: center;
  padding: 8px 12px;
  color: var(--orderzy-ink-muted);
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 13px;
  text-decoration: none;
  transition: color var(--dur-fast) var(--ease);
}
.rest-card__book-cta:hover {
  color: var(--orderzy-brand-ink);
  text-decoration: underline;
  text-underline-offset: 4px;
}
.rest-card__body { padding: 14px 18px 18px; }
.rest-card__title {
  font-size: 18px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0 0 4px;
}
.rest-card__meta {
  font-size: 14px;
  color: var(--orderzy-ink-soft);
  line-height: 1.4;
}
.rest-card__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--orderzy-border);
}
.rest-card__price {
  font-size: 14px;
  color: var(--orderzy-ink-soft);
}
.rest-card__rating {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 14px;
  font-weight: 600;
  color: var(--orderzy-ink);
}

/* ---------- Hero ---------- */
.hero {
  padding: 48px 0 64px;
}
.hero__grid {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 48px;
  align-items: center;
}
.hero__eyebrow {
  display: inline-block;
  font-family: var(--font-heading);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  background: var(--orderzy-brand-soft);
  padding: 5px 12px;
  border-radius: var(--r-pill);
  margin-bottom: 20px;
}
.hero__headline {
  font-family: var(--font-heading);
  font-size: 56px;
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.025em;
  color: var(--orderzy-ink);
  margin: 0 0 16px;
}
.hero__headline-accent { color: var(--orderzy-brand); }
.hero__subline {
  font-size: 18px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  max-width: 480px;
  margin: 0 0 28px;
}
.hero__trust {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 18px;
  margin-top: 28px;
}

/* ---------- Hero location pill (three-state, no CLS) ---------- */
/* P1.C05.hotfix (2026-08-16). Before this pass the pill was styled inline on
   the element itself (a hostile pattern for CSP nonces) and always mounted
   the Change button, so the "Add your location" state read as the literal
   string "Add your location Change" - two labels smoothed together with no
   affordance. State-machine is now data-state-driven and Change only shows
   when there is a real location to change AWAY FROM. */
.search-bar__location {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-pill);
  padding: 8px 14px;
  font-size: 13px;
  color: var(--orderzy-ink);
  font-weight: 600;
  min-height: 36px;
  transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
}
.search-bar__location:hover { border-color: var(--orderzy-border-strong); }
.search-bar__location svg { color: var(--orderzy-brand); flex-shrink: 0; }
.search-bar__location .location-refresh {
  color: var(--orderzy-brand-ink);
  font-size: 12px;
  font-weight: 700;
  border: none;
  background: none;
  cursor: pointer;
  border-left: 1px solid var(--orderzy-border);
  padding: 2px 0 2px 10px;
  margin-left: 4px;
  font-family: inherit;
  transition: color var(--dur-fast) var(--ease);
}
.search-bar__location .location-refresh:hover { color: var(--orderzy-brand); }
.search-bar__location .location-refresh:focus-visible {
  outline: 2px solid var(--orderzy-brand);
  outline-offset: 2px;
  border-radius: 4px;
}
/* Detecting: no Change button (nothing to change from). */
.search-bar__location[data-state="detecting"] .location-refresh { display: none; }
.search-bar__location[data-state="detecting"] { color: var(--orderzy-ink-muted); }
/* Add: whole pill is the affordance; no trailing Change button. */
.search-bar__location[data-state="add"] .location-refresh { display: none; }
.search-bar__location[data-state="add"] {
  cursor: pointer;
  color: var(--orderzy-brand-ink);
  border-color: var(--orderzy-brand-soft);
  background: var(--orderzy-brand-soft);
}
.search-bar__location[data-state="add"]:hover {
  background: var(--orderzy-surface);
  border-color: var(--orderzy-brand);
}

/* ---------- Phone mockup ---------- */
.phone {
  position: relative;
  width: 300px;
  margin: 0 auto;
  aspect-ratio: 300 / 620;
  background: var(--orderzy-ink);
  border-radius: 44px;
  padding: 10px;
  box-shadow: var(--orderzy-shadow-whisper),
              0 40px 80px -20px rgba(31,29,26,0.25);
}
.phone__screen {
  width: 100%;
  height: 100%;
  background: var(--orderzy-canvas);
  border-radius: 34px;
  overflow: hidden;
  position: relative;
  display: flex;
  flex-direction: column;
}
.phone__notch {
  position: absolute;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  width: 88px;
  height: 22px;
  background: var(--orderzy-ink);
  border-radius: 16px;
  z-index: 2;
}
.phone__status {
  padding: 16px 22px 6px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 11px;
  font-weight: 700;
  color: var(--orderzy-ink);
  z-index: 1;
}
.phone__body {
  flex: 1;
  padding: 6px 14px 14px;
  overflow: hidden;
}
.phone__rest-header {
  padding: 8px 6px 14px;
  border-bottom: 1px solid var(--orderzy-border);
  margin-bottom: 12px;
}
.phone__rest-name {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 17px;
  color: var(--orderzy-ink);
  margin: 0;
}
.phone__rest-meta {
  font-size: 11px;
  color: var(--orderzy-ink-soft);
  margin-top: 2px;
}
.phone__item {
  display: flex;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--orderzy-border-soft);
}
.phone__item:last-child { border-bottom: 0; }
.phone__item-img {
  width: 58px;
  height: 58px;
  flex-shrink: 0;
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-md);
  overflow: hidden;
}
.phone__item-img img { width: 100%; height: 100%; object-fit: cover; }
.phone__item-info {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.phone__item-title {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--orderzy-ink);
  line-height: 1.25;
  margin: 0;
}
.phone__item-desc {
  font-size: 10.5px;
  color: var(--orderzy-ink-muted);
  line-height: 1.3;
  margin: 2px 0 0;
}
.phone__item-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 4px;
}
.phone__item-price {
  font-weight: 700;
  font-size: 12px;
  color: var(--orderzy-ink);
}
.phone__item-add {
  font-size: 10px;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: var(--r-xs);
  background: var(--orderzy-brand-deep);
  color: #fff;
  border: none;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
/* P1.C05.hotfix.r4 (2026-08-16). The stepper used to render as one text run
   ("&minus;&nbsp;1&nbsp;+") which read as a cramped, ambiguous glyph string.
   Unpacked into three balanced sub-elements: .phone__item-qty-btn for - / +
   (bolder glyphs sized as buttons) and .phone__item-qty-num for the count
   (tabular numeral so it stays aligned as it grows past 9). Vertical hairline
   dividers between the three cells mirror the real product's .qty-stepper
   shape without pretending to be interactive. */
.phone__item-qty {
  display: inline-flex;
  align-items: stretch;
  font-weight: 700;
  border-radius: var(--r-xs);
  border: 1px solid var(--orderzy-brand);
  color: var(--orderzy-brand-ink);
  background: var(--orderzy-brand-soft);
  overflow: hidden;
  line-height: 1;
}
.phone__item-qty-btn,
.phone__item-qty-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 5px 0;
  min-width: 22px;
  font-family: var(--font-body);
  font-size: 13px;
  line-height: 1;
  color: var(--orderzy-brand-ink);
}
.phone__item-qty-btn { font-weight: 800; }
.phone__item-qty-num {
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  border-left: 1px solid rgba(184, 102, 0, 0.22);
  border-right: 1px solid rgba(184, 102, 0, 0.22);
  padding-left: 4px;
  padding-right: 4px;
}

/* ---------- Phone status-bar (shared across every .phone mock) ---------- */
/* P1.C05.hotfix.r3 (2026-08-16). Clock + signal indicator live at the .phone
   scope, not the .phone--hero-mock scope, because both the home hero mock
   and the /dine-in-ordering-system/ hero mock (base .phone) use them. */
.phone__clock {
  font-family: var(--font-body);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  letter-spacing: 0.02em;
}
.phone__signal {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-weight: 700;
  font-size: 12px;
}
.phone__signal-dots {
  display: inline-flex;
  align-items: flex-end;
  gap: 2px;
  height: 10px;
}
.phone__signal-dot {
  width: 3px;
  background: var(--orderzy-ink);
  border-radius: 1px;
}
.phone__signal-dot:nth-child(1) { height: 4px; }
.phone__signal-dot:nth-child(2) { height: 6px; }
.phone__signal-dot:nth-child(3) { height: 8px; }
.phone__signal-dot:nth-child(4) { height: 10px; }
.phone__signal-label {
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.01em;
}

/* ---------- Hero phone mock (right column, ≥1024px only) ---------- */
/* Sits inside .hero__grid's right column on home. Wider than the base .phone
   (which is 300px) so the item rows breathe more, matching the mockup in
   Image #4. Hides at ≤1023px (tablet + mobile) so the hero collapses to a
   single centered column - matches the responsive rule set for the retired
   .hero__preview card. */
.phone--hero-mock {
  width: 320px;
  aspect-ratio: 320 / 640;
  justify-self: end;
  margin: 0;
}
.phone--hero-mock .phone__status {
  padding: 14px 22px 4px;
  font-size: 12px;
  color: var(--orderzy-ink);
}
.phone--hero-mock .phone__rest-name { font-size: 18px; letter-spacing: -0.005em; }
.phone--hero-mock .phone__rest-meta { font-size: 12px; margin-top: 4px; }
.phone--hero-mock .phone__item { padding: 12px 0; }
.phone--hero-mock .phone__item:first-of-type { padding-top: 4px; }
.phone--hero-mock .phone__item-img { width: 64px; height: 64px; }
.phone--hero-mock .phone__item-title { font-size: 13.5px; }
.phone--hero-mock .phone__item-desc { font-size: 11px; margin-top: 3px; }
.phone--hero-mock .phone__item-price { font-size: 13px; }
.phone--hero-mock .phone__item-add { font-size: 10.5px; padding: 4px 12px; }
/* Stepper sized down slightly for the hero mock; cells shrink together so
   the pill stays symmetric. */
.phone--hero-mock .phone__item-qty-btn,
.phone--hero-mock .phone__item-qty-num {
  font-size: 12px;
  min-width: 20px;
  padding-top: 4px;
  padding-bottom: 4px;
}
/* Hide the phone at tablet + mobile. The tablet/mobile hero collapses to a
   centered single-column via the existing @media rules on .hero__grid. */
@media (max-width: 1023px) {
  .phone--hero-mock { display: none; }
}

/* ---------- Section title ---------- */
.section {
  padding: 56px 0;
}
.section__head {
  margin-bottom: 28px;
}
.section__title {
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.015em;
  color: var(--orderzy-ink);
  margin: 0;
}
.section__sub {
  font-size: 16px;
  color: var(--orderzy-ink-soft);
  margin-top: 6px;
}

.rest-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 24px;
}

/* ---------- How it works ---------- */
.steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.step {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  padding: 28px 24px;
  text-align: left;
  position: relative;
}
.step__num {
  font-family: var(--font-heading);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--orderzy-brand);
  text-transform: uppercase;
  margin-bottom: 12px;
}
.step__title {
  font-size: 20px;
  font-weight: 700;
  margin: 0 0 8px;
}
.step__desc {
  font-size: 15px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0;
}
.step__icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: grid;
  place-items: center;
  margin-bottom: 16px;
}

/* ---------- Restaurant acquisition band ---------- */
.ra-band {
  background: var(--orderzy-brand-soft);
  padding: 72px 0;
  position: relative;
  overflow: hidden;
}
.ra-band::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 85% 50%, rgba(242,133,0,0.08) 0%, transparent 55%);
  pointer-events: none;
}
.ra-band__grid {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 56px;
  align-items: center;
  position: relative;
}
.ra-band__title {
  font-size: 40px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 12px;
  line-height: 1.1;
}
.ra-band__sub {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0 0 20px;
  max-width: 480px;
}
.ra-band__benefits {
  list-style: none;
  padding: 0;
  margin: 0 0 28px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px 20px;
}
.ra-band__benefits li {
  font-size: 15px;
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--orderzy-ink);
  font-weight: 600;
}
.ra-band__benefits li::before {
  content: "";
  width: 8px;
  height: 8px;
  background: var(--orderzy-brand);
  border-radius: 50%;
  flex-shrink: 0;
}

/* Mini dashboard mockup */
.dash-mini {
  background: var(--orderzy-surface);
  border-radius: var(--r-lg);
  box-shadow: var(--orderzy-shadow-lift);
  padding: 20px;
  font-size: 12px;
}
.dash-mini__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--orderzy-border);
  margin-bottom: 14px;
}
.dash-mini__brand {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  color: var(--orderzy-brand);
}
.dash-mini__metric {
  display: flex;
  gap: 14px;
  margin-bottom: 16px;
}
.dash-mini__metric-cell {
  flex: 1;
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-md);
  padding: 10px 12px;
}
.dash-mini__metric-label {
  font-size: 10px;
  font-weight: 600;
  color: var(--orderzy-ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.dash-mini__metric-value {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 22px;
  color: var(--orderzy-ink);
  margin-top: 2px;
}
.dash-mini__row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 8px 0;
  border-bottom: 1px solid var(--orderzy-border-soft);
  font-size: 12px;
}
.dash-mini__row:last-child { border-bottom: none; }
.dash-mini__row-id { color: var(--orderzy-ink-muted); font-weight: 600; }
.dash-mini__row-amt { font-weight: 700; }

/* ---------- Footer ---------- */
/* P4.C08 (2026-08-15): the legacy (dark-ink) `.oz-footer` block plus its
   `.oz-footer__grid` and `.oz-footer__bottom` variants was deleted. Every
   production render uses `.oz-footer .oz-footer--compact` (see
   `templates/includes/footer.html`); the compact-specific rules further
   down still declare the shell (background/color come from the Luxe
   override at §3.6 of the components section). No template referenced
   `.oz-footer__grid` or `.oz-footer__bottom` after Wave 0. */

/* ---------- Compact footer (production default) ----------
   Two-column top (brand on left, 3-column link grid on right) +
   bottom strip with contact + copyright. */
.oz-footer--compact { padding: 48px 0 24px; margin-top: 0; }
.oz-footer__inner {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.oz-footer__top {
  display: grid;
  grid-template-columns: 1.2fr 2fr;
  gap: 48px;
  margin-bottom: 36px;
}
.oz-footer__brand {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
/* Brand title uses .oz-wordmark + .oz-footer__brand-title - inherits the
   Playfair Display Bold 800 from .oz-wordmark; size is footer-specific. */
.oz-footer__brand-title {
  font-size: 26px;
  text-decoration: none;
}
.oz-footer__tagline {
  font-family: var(--font-body);
  font-style: italic;
  font-size: 13px;
  color: rgba(250,249,245,0.6);
}
.oz-footer__brand-desc {
  color: rgba(250,249,245,0.5);
  font-size: 13px;
  line-height: 1.5;
  margin: 8px 0 0;
  max-width: 280px;
}
.oz-footer__cols {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 32px;
}
/* Selector renamed h4 → h3 on 2026-08-22 to fix H2→H4 heading-skip. */
/* Footer column titles kept their 12px uppercase caption look. */
.oz-footer__col h3 {
  font-family: var(--font-heading);
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: rgba(250,249,245,0.85);
  margin: 0 0 12px;
}
.oz-footer__col ul { list-style: none; padding: 0; margin: 0; }
.oz-footer__col li { margin-bottom: 8px; }
.oz-footer__col a {
  color: rgba(250,249,245,0.55);
  font-size: 13px;
  font-weight: 500;
  text-decoration: none;
  transition: color var(--dur-fast) var(--ease);
}
.oz-footer__col a:hover {
  color: var(--orderzy-brand);
  text-decoration: underline;
  text-underline-offset: 4px;
}
.oz-footer__bottom-strip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-top: 20px;
  border-top: 1px solid rgba(250,249,245,0.08);
  flex-wrap: wrap;
}
.oz-footer__contact {
  display: flex;
  align-items: center;
  gap: 16px;
}
.oz-footer__contact a {
  color: rgba(250,249,245,0.55);
  font-size: 13px;
  font-weight: 500;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: color var(--dur-fast) var(--ease);
}
.oz-footer__contact a:hover { color: var(--orderzy-brand); }
.oz-footer__copy {
  color: rgba(250,249,245,0.4);
  font-size: 12px;
}
@media (max-width: 768px) {
  .oz-footer--compact { padding: 36px 0 20px; }
  .oz-footer__top {
    grid-template-columns: 1fr;
    gap: 28px;
  }
  .oz-footer__cols { grid-template-columns: 1fr 1fr 1fr; gap: 20px; }
  .oz-footer__brand-desc { max-width: none; }
}
@media (max-width: 480px) {
  .oz-footer__cols { grid-template-columns: 1fr 1fr; gap: 20px; }
  .oz-footer__bottom-strip {
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
  }
  .oz-footer__contact { flex-direction: column; align-items: flex-start; gap: 6px; }
}

/* =========== Restaurant detail page =========== */
.rest-hero {
  position: relative;
  width: 100%;
  height: 280px;
  overflow: hidden;
  background: var(--orderzy-ink);
}
@media (max-width: 880px) { .rest-hero { height: 220px; } }
@media (max-width: 520px) { .rest-hero { height: 180px; } }
.rest-hero img { width: 100%; height: 100%; object-fit: cover; opacity: 0.85; }
.rest-hero__overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(31,29,26,0.8) 0%, rgba(31,29,26,0.2) 60%, transparent 100%);
}
.rest-hero__content {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 32px 24px;
  color: var(--orderzy-ink-invert);
}
.rest-info { max-width: 1200px; margin: 0 auto; }
.rest-info__name {
  font-family: var(--font-heading);
  font-size: 36px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 6px;
  color: #fff;
}
.rest-info__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  font-size: 14px;
  color: rgba(255,255,255,0.9);
  align-items: center;
}
.rest-info__meta-sep { opacity: 0.5; }
.rest-info__outlet {
  font-size: 14px;
  font-weight: 600;
  color: rgba(255,255,255,0.92);
  margin: -2px 0 6px;
}
.cw-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 34px;
  padding: 0 14px;
  border-radius: 17px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  white-space: nowrap;
  background: var(--orderzy-brand);
  border: 1px solid var(--orderzy-brand);
  color: #fff;
  transition: background 150ms, color 150ms, border-color 150ms, transform 80ms;
}
.cw-btn:hover { background: var(--orderzy-brand-ink); border-color: var(--orderzy-brand-ink); }
.cw-btn:active { transform: scale(0.98); }
.cw-btn[disabled] { opacity: 0.6; cursor: not-allowed; }
.rest-banner {
  background: var(--orderzy-brand-soft);
  border-bottom: 1px solid var(--orderzy-border);
  padding: 14px 0;
}
.rest-banner__inner {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 14px;
  color: var(--orderzy-brand-ink);
  font-weight: 600;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.rest-layout {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 40px;
  padding: 32px 0 120px;
  max-width: 1200px;
  margin: 0 auto;
  padding-left: 24px;
  padding-right: 24px;
}
.cat-nav {
  position: sticky;
  top: 96px;
  align-self: start;
}
.cat-nav__title {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--orderzy-ink-muted);
  margin: 0 0 12px;
  padding: 0 12px;
}
.cat-nav__list { list-style: none; padding: 0; margin: 0; }
.cat-nav__item {
  display: flex;
  justify-content: space-between;
  padding: 10px 12px;
  border-radius: var(--r-sm);
  font-size: 14px;
  color: var(--orderzy-ink);
  font-weight: 600;
  border-left: 3px solid transparent;
  cursor: pointer;
  transition: all var(--dur-fast) var(--ease);
}
.cat-nav__item:hover { background: var(--orderzy-surface-alt); }
.cat-nav__item.is-active {
  background: var(--orderzy-brand-soft);
  border-left-color: var(--orderzy-brand);
  color: var(--orderzy-brand-ink);
}
.cat-nav__count {
  font-weight: 600;
  color: var(--orderzy-ink-muted);
  font-size: 13px;
}
.cat-nav__item.is-active .cat-nav__count { color: var(--orderzy-brand-ink); }

/* Mobile: sidebar becomes horizontal pill strip */
@media (max-width: 880px) {
  .rest-layout { grid-template-columns: 1fr; gap: 24px; padding: 16px; }
  .cat-nav {
    position: static;
    display: flex;
    overflow-x: auto;
    padding: 4px 0 12px;
    scrollbar-width: none;
  }
  .cat-nav::-webkit-scrollbar { display: none; }
  .cat-nav__title { display: none; }
  .cat-nav__list { display: flex; gap: 6px; }
  .cat-nav__item {
    white-space: nowrap;
    border-left: none;
    border-bottom: 3px solid transparent;
    padding: 8px 14px;
    border-radius: 0;
  }
  .cat-nav__item.is-active {
    border-left: none;
    border-bottom-color: var(--orderzy-brand);
    background: transparent;
  }
  .cat-nav__count { display: none; }
  .rest-info__name { font-size: 24px; }
}
@media (max-width: 520px) {
  .rest-info__meta { font-size: 12px; gap: 8px; }
}

/* Cart bar (floating bottom) */
.cart-bar {
  display: none;
  position: fixed;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  width: calc(100% - 48px);
  max-width: 560px;
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
  border-radius: var(--r-md);
  padding: 14px 18px;
  align-items: center;
  justify-content: space-between;
  box-shadow: 0 20px 48px -12px rgba(31,29,26,0.3), var(--orderzy-shadow-lift);
  z-index: 40;
}
.cart-bar--visible { display: flex; }
.cart-bar__count {
  display: inline-flex;
  align-items: center;
  gap: 10px;
}
.cart-bar__count-badge {
  background: var(--orderzy-brand);
  color: #fff;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  display: inline-grid;
  place-items: center;
  font-weight: 700;
  font-size: 13px;
}
.cart-bar__label { font-weight: 700; font-size: 15px; }
.cart-bar__total { font-family: var(--font-heading); font-weight: 700; font-size: 14px; opacity: 0.75; margin-left: 6px; }
.cart-bar__cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  color: var(--orderzy-brand);
  text-decoration: none;
}

@media (max-width: 880px) {
  .rest-layout { grid-template-columns: 1fr; gap: 0; }
  .cat-sidebar {
    position: static;
    display: none;
  }
  .rest-info__name { font-size: 24px; }
  .rest-hero__content { padding: 20px 16px; }
  .rest-info__meta { font-size: 12px; gap: 8px; }
}

/* =========== Checkout page specific =========== */
.co-layout {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  gap: 40px;
  padding: 40px 0 80px;
}
.co-title {
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 6px;
}
.co-subtitle {
  color: var(--orderzy-ink-soft);
  font-size: 15px;
  margin: 0 0 28px;
}
.co-step-indicator {
  display: flex;
  gap: 6px;
  margin-bottom: 16px;
  font-size: 13px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
}
.co-step-indicator strong { color: var(--orderzy-ink); }
.card-box {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 24px;
}
.card-box + .card-box { margin-top: 16px; }
.card-box__title {
  font-size: 17px;
  font-weight: 700;
  margin: 0 0 16px;
}
.form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}
.form-row--single { grid-template-columns: 1fr; }

.pay-option {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px;
  border: 1px solid var(--orderzy-border-strong);
  border-radius: var(--r-sm);
  cursor: pointer;
  transition: all var(--dur-fast) var(--ease);
}
.pay-option + .pay-option { margin-top: 10px; }
.pay-option:hover { border-color: var(--orderzy-ink); }
.pay-option.selected {
  border-color: var(--orderzy-brand);
  background: var(--orderzy-brand-soft);
  box-shadow: 0 0 0 3px var(--orderzy-brand-soft);
}
.pay-option__radio {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  border: 2px solid var(--orderzy-border-strong);
  flex-shrink: 0;
  position: relative;
}
.pay-option.selected .pay-option__radio { border-color: var(--orderzy-brand); }
.pay-option.selected .pay-option__radio::after {
  content: "";
  position: absolute;
  inset: 3px;
  background: var(--orderzy-brand);
  border-radius: 50%;
}
.pay-option__body { flex: 1; }
.pay-option__title { font-weight: 700; font-size: 15px; }
.pay-option__sub { font-size: 13px; color: var(--orderzy-ink-soft); }
.pay-option__logos {
  display: flex;
  gap: 6px;
  align-items: center;
  flex-shrink: 0;
}
.pay-logo {
  font-size: 10px;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 4px;
  background: var(--orderzy-surface-alt);
  color: var(--orderzy-ink-soft);
  letter-spacing: 0.04em;
}

/* Order summary */
.summary {
  position: sticky;
  top: 96px;
  background: var(--orderzy-surface);
  border-radius: var(--r-md);
  box-shadow: var(--orderzy-shadow-whisper);
  padding: 24px;
  border: 1px solid var(--orderzy-border);
}
.summary__title {
  font-size: 17px;
  font-weight: 700;
  margin: 0 0 4px;
}
.summary__rest {
  font-size: 13px;
  color: var(--orderzy-ink-soft);
  margin: 0 0 20px;
}
.summary__item {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 0;
  font-size: 14px;
}
.summary__item-name { flex: 1; }
.summary__item-qty { color: var(--orderzy-ink-muted); font-weight: 600; margin-right: 8px; }
.summary__item--rich { align-items: center; gap: 10px; }
.summary__item-thumb { width: 40px; height: 40px; border-radius: var(--r-xs, 6px); object-fit: cover; flex-shrink: 0; }
.summary__divider { border-top: 1px solid var(--orderzy-border); margin: 10px 0; }
.summary__line {
  display: flex;
  justify-content: space-between;
  font-size: 14px;
  color: var(--orderzy-ink-soft);
  padding: 4px 0;
}
.summary__line--total {
  font-size: 20px;
  font-weight: 700;
  color: var(--orderzy-ink);
  padding-top: 14px;
  margin-top: 6px;
  border-top: 1px solid var(--orderzy-border);
}
.summary__btn { margin-top: 20px; }
.summary__trust {
  display: flex;
  align-items: center;
  gap: 8px;
  justify-content: center;
  margin-top: 14px;
  font-size: 12px;
  color: var(--orderzy-ink-muted);
}

/* Compact navbar for checkout */
.oz-nav--minimal .oz-nav__links { gap: 18px; }

/* ---------- Mobile adjustments ---------- */
/* P1.C05.hotfix (2026-08-16). Tablet range (881-1023px) between the desktop
   two-column hero and the mobile stack. The preview card hides here so the
   hero doesn't feel cramped, and the copy column centres to a comfortable
   editorial width instead of clinging to the left edge of a 1000px viewport. */
@media (max-width: 1023px) {
  .hero__preview { display: none; }
}
@media (min-width: 881px) and (max-width: 1023px) {
  .hero__grid {
    grid-template-columns: 1fr;
    max-width: 720px;
    margin-left: auto;
    margin-right: auto;
  }
  .hero__headline { font-size: 48px; }
  .hero__trust { justify-content: flex-start; }
}
@media (max-width: 880px) {
  .hero { padding: 32px 0 40px; }
  .hero__grid { grid-template-columns: 1fr; gap: 40px; }
  .hero__headline { font-size: 40px; }
  .ra-band__grid { grid-template-columns: 1fr; gap: 32px; }
  .ra-band__title { font-size: 30px; }
  .ra-band__benefits { grid-template-columns: 1fr; }
  .steps { grid-template-columns: 1fr; }
  .co-layout { grid-template-columns: 1fr; gap: 24px; padding: 24px 0 48px; }
  .summary { position: static; }
  /* P4.C08 (2026-08-15): `.oz-footer__grid` mobile fallback deleted; the
     compact footer's `.oz-footer__cols` already collapses at ≤540px. */
  .oz-nav__links { gap: 14px; }
  .oz-nav__link--restaurant { padding: 6px 10px; font-size: 13px; }
}
@media (max-width: 520px) {
  .hero__headline { font-size: 32px; }
  .section__title { font-size: 24px; }
  /* P4.C08 (2026-08-15): `.oz-footer__grid` mobile fallback deleted alongside
     the legacy grid selector. Compact footer collapses at its own breakpoint. */
  .form-row { grid-template-columns: 1fr; }

  /* Navbar: plain text links collapse at mobile. Restaurant pill + cart/bell stay visible. */
  .oz-nav__inner { padding: 0 16px; height: 60px; }
  .oz-nav__links { gap: 8px; }
  .oz-nav__link { display: none; }
  .oz-nav__link--restaurant { padding: 5px 10px; font-size: 12px; }
  .oz-wordmark { font-size: 20px; }
  /* Minimal checkout navbar keeps its links visible (Back + Secure badge). */
  .oz-nav--minimal .oz-nav__link { display: inline-flex; font-size: 12.5px; }
  .oz-nav--minimal .oz-nav__links { gap: 10px; }
}
@media (max-width: 420px) {
  .oz-nav__inner { padding: 0 14px; height: 56px; }
  .oz-nav__links { gap: 6px; }
  .oz-nav__link--restaurant { padding: 4px 8px; font-size: 11.5px; }
  .oz-nav__cart, .oz-nav__bell { width: 36px; height: 36px; }
  .oz-wordmark { font-size: 19px; }
  .oz-nav--minimal .oz-nav__link { font-size: 11.5px; }
}

/* ===================================================================
   BATCH 1 ADDITIONS. Cross-cutting patterns
   (toasts, empty states, mobile nav, bell, error pages, gallery)
   =================================================================== */

/* ---------- Toasts ---------- */
.toast-stack {
  position: fixed;
  top: 24px;
  right: 24px;
  z-index: 100;
  display: flex;
  flex-direction: column;
  gap: 10px;
  max-width: 420px;
  width: calc(100% - 48px);
}
.toast-stack--inline { position: static; width: 100%; max-width: 480px; }
.toast {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  padding: 14px 16px;
  border-radius: var(--r-md);
  background: var(--orderzy-surface);
  box-shadow: var(--orderzy-shadow-lift);
  border: 1px solid var(--orderzy-border);
}
.toast__icon { flex-shrink: 0; width: 20px; height: 20px; margin-top: 2px; }
.toast__body { flex: 1; min-width: 0; }
.toast__title { font-size: 14px; font-weight: 700; color: var(--orderzy-ink); margin: 0; line-height: 1.4; }
.toast__msg { font-size: 13px; color: var(--orderzy-ink-soft); line-height: 1.45; margin: 3px 0 0; }
.toast__action { background: none; border: none; font-weight: 700; color: var(--orderzy-brand-ink); cursor: pointer; margin-top: 8px; font-size: 13px; padding: 0; }
.toast__action:hover { text-decoration: underline; }
.toast__close {
  background: transparent;
  border: none;
  color: var(--orderzy-ink-muted);
  cursor: pointer;
  padding: 2px;
  margin: -2px;
  border-radius: var(--r-xs);
  flex-shrink: 0;
}
.toast__close:hover { color: var(--orderzy-ink); background: var(--orderzy-surface-alt); }
.toast--success { border-left: 3px solid var(--orderzy-success); }
.toast--success .toast__icon { color: var(--orderzy-success); }
.toast--error { border-left: 3px solid var(--orderzy-danger); }
.toast--error .toast__icon { color: var(--orderzy-danger); }
.toast--warning { border-left: 3px solid var(--orderzy-warning); }
.toast--warning .toast__icon { color: var(--orderzy-warning); }
.toast--info { border-left: 3px solid var(--orderzy-brand); }
.toast--info .toast__icon { color: var(--orderzy-brand); }

/* M12: native <dialog> confirm shim. Replaces sweetalert.swal() on
   destructive-action confirmations (cart switch, delete, etc.). */
.oz-confirm {
  border: none;
  padding: 0;
  border-radius: var(--r-lg);
  box-shadow: var(--orderzy-shadow-lift);
  max-width: 420px;
  width: calc(100% - 32px);
  background: var(--orderzy-surface);
  color: var(--orderzy-ink);
}
.oz-confirm::backdrop { background: rgba(0, 0, 0, 0.45); }
.oz-confirm__body { padding: 24px 24px 8px; }
.oz-confirm__title {
  /* Post-Luxe-unification (2026-08-14): --orderzy-font-heading was never
     defined; the retired Montserrat fallback made every confirm-dialog
     title render in system sans-serif. Now points at the canonical
     --font-heading token that :root defines. */
  font-family: var(--font-heading, 'DM Serif Display', Georgia, serif);
  font-size: 18px;
  font-weight: 700;
  margin: 0 0 8px;
  color: var(--orderzy-ink);
}
.oz-confirm__text {
  font-size: 14px;
  line-height: 1.5;
  color: var(--orderzy-ink-soft);
  margin: 0;
}
.oz-confirm__actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
  padding: 16px 24px 20px;
  flex-wrap: wrap;
}
.oz-confirm__btn {
  font-family: inherit;
  font-size: 14px;
  font-weight: 600;
  padding: 10px 18px;
  border-radius: var(--r-md);
  border: 1px solid transparent;
  cursor: pointer;
  min-height: 40px;
}
.oz-confirm__btn--cancel {
  background: var(--orderzy-surface-alt);
  color: var(--orderzy-ink-soft);
  border-color: var(--orderzy-border);
}
.oz-confirm__btn--cancel:hover { background: var(--orderzy-border); }
.oz-confirm__btn--confirm {
  background: var(--orderzy-brand-deep);
  color: var(--orderzy-surface);
}
.oz-confirm__btn--confirm:hover { background: var(--orderzy-brand-hover); }
.oz-confirm__btn--danger {
  background: var(--orderzy-danger);
  color: var(--orderzy-surface);
}
.oz-confirm__btn--danger:hover { filter: brightness(0.92); }

/* ---------- Empty state ---------- */
.empty-state {
  text-align: center;
  padding: 48px 24px;
  max-width: 440px;
  margin: 0 auto;
}
.empty-state--card {
  background: var(--orderzy-surface);
  border-radius: var(--r-lg);
  border: 1px solid var(--orderzy-border);
  padding: 56px 32px;
  max-width: none;
}
.empty-state__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 72px;
  height: 72px;
  border-radius: 50%;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand);
  margin: 0 auto 20px;
}
.empty-state__icon svg { width: 32px; height: 32px; }
.empty-state__title {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0 0 8px;
}
.empty-state__text {
  font-size: 15px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0 0 24px;
}
.empty-state__actions {
  display: flex;
  gap: 10px;
  justify-content: center;
  flex-wrap: wrap;
}

/* ---------- Error page ---------- */
.error-page {
  min-height: 60vh;
  display: grid;
  place-items: center;
  padding: 60px 24px;
}
.error-page__inner { text-align: center; max-width: 520px; }
.error-page__code {
  font-family: var(--font-heading);
  font-size: 120px;
  font-weight: 700;
  line-height: 1;
  color: var(--orderzy-brand);
  letter-spacing: -0.04em;
  margin: 0 0 8px;
}
.error-page__title {
  font-family: var(--font-heading);
  font-size: 32px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0 0 12px;
  letter-spacing: -0.02em;
}
.error-page__sub {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0 0 32px;
}
.error-page__actions {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
}
.error-page__hint {
  margin-top: 40px;
  padding: 20px;
  border-radius: var(--r-md);
  background: var(--orderzy-surface-alt);
  font-size: 14px;
  color: var(--orderzy-ink-soft);
  text-align: left;
}
.error-page__hint strong { color: var(--orderzy-ink); }
.error-page__hint a { color: var(--orderzy-brand-ink); font-weight: 700; }

/* ---------- Mobile hamburger + drawer ---------- */
.oz-nav__burger {
  display: none;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  width: 40px;
  height: 40px;
  align-items: center;
  justify-content: center;
  color: var(--orderzy-ink);
  cursor: pointer;
}
.oz-nav__drawer {
  display: none;
  background: var(--orderzy-canvas);
  border-top: 1px solid var(--orderzy-border);
  padding: 16px 24px 24px;
  flex-direction: column;
  gap: 4px;
}
@media (max-width: 720px) {
  .oz-nav__burger { display: inline-flex; }
  .oz-nav__desktop-only { display: none !important; }
  .oz-nav__drawer.open { display: flex; }
  .oz-nav__links { gap: 10px; }
}
.oz-nav__drawer a {
  padding: 14px 12px;
  border-radius: var(--r-sm);
  font-weight: 600;
  font-size: 16px;
  color: var(--orderzy-ink);
  border: 1px solid transparent;
}
.oz-nav__drawer a:hover { background: var(--orderzy-surface-alt); }
.oz-nav__drawer .is-restaurant {
  border-color: var(--orderzy-border-strong);
  color: var(--orderzy-brand-ink);
  background: var(--orderzy-brand-soft);
}

/* ---------- Restaurant staff navbar (bell + user) ---------- */
.oz-nav__bell {
  position: relative;
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: var(--r-pill);
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink);
  transition: all var(--dur-fast) var(--ease);
  cursor: pointer;
}
.oz-nav__bell:hover { border-color: var(--orderzy-ink); }
.oz-nav__bell-badge {
  position: absolute;
  top: -4px;
  right: -4px;
  min-width: 18px;
  height: 18px;
  background: var(--orderzy-danger);
  color: #fff;
  border-radius: var(--r-pill);
  font-size: 11px;
  font-weight: 700;
  display: grid;
  place-items: center;
  padding: 0 5px;
  border: 2px solid var(--orderzy-canvas);
}
.oz-nav__user {
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  border: 1px solid var(--orderzy-border);
  cursor: pointer;
  transition: border-color var(--dur-fast) var(--ease);
}
.oz-nav__user:hover { border-color: var(--orderzy-ink); }

/* ---------- User-menu dropdown ----------
   Anchored under the avatar. Opens via click on the avatar; closes on
   outside-click or Escape. Replaces the previous standalone Logout link
   so the navbar stays compact (cart + bell + avatar). */
.oz-user-wrap {
  position: relative;
  display: inline-block;
}
.oz-user-menu {
  display: none;
  position: absolute;
  top: 48px;
  right: 0;
  width: 240px;
  background: var(--orderzy-surface);
  border-radius: var(--r-md);
  box-shadow: var(--orderzy-shadow-lift);
  border: 1px solid var(--orderzy-border);
  overflow: hidden;
  z-index: 60;
}
.oz-user-menu.open { display: block; }
.oz-user-menu__head {
  padding: 14px 18px 12px;
  border-bottom: 1px solid var(--orderzy-border-soft);
}
.oz-user-menu__name {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  color: var(--orderzy-ink);
}
.oz-user-menu__email {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.oz-user-menu a {
  display: block;
  padding: 10px 18px;
  font-size: 14px;
  color: var(--orderzy-ink);
  text-decoration: none;
  border: none;
}
.oz-user-menu a:hover { background: var(--orderzy-surface-alt); color: var(--orderzy-brand-ink); }
.oz-user-menu__divider {
  height: 1px;
  background: var(--orderzy-border-soft);
  margin: 4px 0;
}
.oz-user-menu__logout { color: var(--orderzy-ink-muted) !important; }
.oz-user-menu__logout:hover { color: var(--orderzy-danger) !important; background: var(--orderzy-danger-soft, #fff1f0) !important; }

/* ---------- Notification dropdown (oz-notif__*) ---------- */
.oz-notif {
  display: none;
  position: absolute;
  top: 44px;
  right: 0;
  width: 340px;
  background: var(--orderzy-surface);
  border-radius: var(--r-md);
  box-shadow: var(--orderzy-shadow-lift);
  border: 1px solid var(--orderzy-border);
  overflow: hidden;
  z-index: 60;
}
.oz-notif.open { display: block; }
.oz-notif__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 14px 18px;
  border-bottom: 1px solid var(--orderzy-border);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  color: var(--orderzy-ink);
}
.oz-notif__mark {
  font-size: 12px;
  color: var(--orderzy-brand-ink);
  background: none;
  border: none;
  cursor: pointer;
  font-weight: 700;
}
.oz-notif__list { max-height: 380px; overflow-y: auto; }
.oz-notif__item {
  padding: 12px 18px;
  border-bottom: 1px solid var(--orderzy-border-soft);
  font-size: 13px;
  line-height: 1.45;
  display: flex;
  gap: 10px;
}
.oz-notif__item:last-child { border-bottom: none; }
.oz-notif__item--unread { background: var(--orderzy-brand-soft); }
.oz-notif__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--orderzy-brand);
  flex-shrink: 0;
  margin-top: 6px;
}
.oz-notif__item:not(.oz-notif__item--unread) .oz-notif__dot { background: transparent; }
.oz-notif__body { flex: 1; min-width: 0; }
.oz-notif__msg { color: var(--orderzy-ink); }
.oz-notif__time {
  font-size: 11px;
  color: var(--orderzy-ink-muted);
  margin-top: 3px;
  font-weight: 600;
}
.oz-notif__empty {
  padding: 24px 18px;
  text-align: center;
  color: var(--orderzy-ink-muted);
  font-size: 13px;
}
@media (max-width: 400px) {
  .oz-notif { width: 280px; right: -40px; }
}


/* Mobile viewport frame for mockups */
.mobile-frame {
  max-width: 390px;
  margin: 0 auto;
  border: 1px solid var(--orderzy-border-strong);
  border-radius: 28px;
  overflow: hidden;
  background: var(--orderzy-canvas);
  box-shadow: var(--orderzy-shadow-whisper);
}
.mobile-frame .oz-nav { border-radius: 0; }
.mobile-frame__status {
  padding: 10px 20px 6px;
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  font-weight: 700;
  color: var(--orderzy-ink);
  background: var(--orderzy-canvas);
}

/* Mockup page header band */
.mockup-hdr {
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
  padding: 12px 24px;
  font-family: var(--font-heading);
  font-size: 12px;
  font-weight: 600;
  display: flex;
  gap: 16px;
  align-items: center;
  flex-wrap: wrap;
}
.mockup-hdr__badge {
  font-weight: 700;
  padding: 3px 9px;
  border-radius: var(--r-xs);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.mockup-hdr__badge--cross   { background: var(--orderzy-brand); color: #fff; }
.mockup-hdr__badge--rebuild { background: var(--orderzy-danger); color: #fff; }
.mockup-hdr__badge--refine  { background: var(--orderzy-warning); color: #fff; }
.mockup-hdr__badge--repaint { background: var(--orderzy-success); color: #fff; }
.mockup-hdr__path { opacity: 0.7; font-family: ui-monospace, Menlo, monospace; }
.mockup-hdr__note { opacity: 0.85; margin-left: auto; font-weight: 400; }


/* ===================================================================
   BATCH 3 ADDITIONS. Shared marketing-page patterns
   (breadcrumbs, section shells, FAQ, CTA band).
   Prefix: mk-* (marketing).
   =================================================================== */

/* ---------- Breadcrumb ---------- */
.mk-crumbs {
  padding: 18px 0 4px;
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}
.mk-crumbs a { color: var(--orderzy-brand-ink); font-weight: 600; }
.mk-crumbs a:hover { text-decoration: underline; }
.mk-crumbs__sep { opacity: 0.4; margin: 0 6px; }

/* ---------- Section shell ---------- */
.mk-sec { padding: 64px 0; }
.mk-sec--alt { background: var(--orderzy-surface-alt); }
.mk-sec--ink { background: var(--orderzy-ink); color: var(--orderzy-ink-invert); }
.mk-sec--ink .mk-sec__title,
.mk-sec--ink h2,
.mk-sec--ink h3 { color: #fff; }
.mk-sec--ink .mk-sec__sub,
.mk-sec--ink p { color: rgba(250,249,245,0.75); }

.mk-sec__eyebrow {
  display: inline-block;
  font-family: var(--font-heading);
  /* 2026-08-22: 11px → 12px to hit the caption/fine-print floor. */
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  background: var(--orderzy-brand-soft);
  padding: 4px 11px;
  border-radius: var(--r-pill);
  margin-bottom: 14px;
}
.mk-sec--ink .mk-sec__eyebrow {
  background: rgba(242,133,0,0.16);
  color: var(--orderzy-brand);
}
.mk-sec__title {
  font-family: var(--font-heading);
  font-size: 36px;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.02em;
  margin: 0 0 12px;
  max-width: 780px;
}
.mk-sec__sub {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  line-height: 1.6;
  max-width: 680px;
  margin: 0 0 32px;
}

/* ---------- FAQ accordion ---------- */
.mk-faq { max-width: 820px; }
.mk-faq details {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  margin-bottom: 10px;
  overflow: hidden;
}
.mk-faq summary {
  padding: 18px 22px;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 16px;
  color: var(--orderzy-ink);
  cursor: pointer;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 14px;
}
.mk-faq summary::-webkit-details-marker { display: none; }
.mk-faq summary::after {
  content: "+";
  font-family: var(--font-heading);
  font-size: 22px;
  color: var(--orderzy-brand);
  width: 28px;
  height: 28px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--orderzy-brand-soft);
  flex-shrink: 0;
  line-height: 1;
}
.mk-faq details[open] summary::after { content: "\2212"; }
.mk-faq details p {
  padding: 0 22px 18px;
  margin: 0;
  font-size: 15px;
  color: var(--orderzy-ink-soft);
  line-height: 1.7;
}

/* ---------- Final CTA band (dark) ---------- */
.mk-cta {
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
  padding: 64px 0;
  text-align: center;
}
.mk-cta h2 {
  font-family: var(--font-heading);
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #fff;
  margin: 0 0 12px;
}
.mk-cta p {
  font-size: 16px;
  color: rgba(250,249,245,0.75);
  max-width: 540px;
  margin: 0 auto 28px;
  line-height: 1.55;
}
.mk-cta__ctas {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
}
.mk-cta .btn--ghost {
  color: #fff;
  border: 1px solid rgba(255,255,255,0.22);
}
.mk-cta .btn--ghost:hover {
  background: rgba(255,255,255,0.06);
  color: var(--orderzy-brand);
}

/* ---------- Marketing responsive ---------- */
@media (max-width: 880px) {
  .mk-sec { padding: 48px 0; }
  .mk-sec__title { font-size: 28px; }
  .mk-cta h2 { font-size: 26px; }
}
@media (max-width: 520px) {
  .mk-sec__title { font-size: 24px; }
}

/* ===================================================================
   Policy / prose pages (about, privacy, refunds, terms)
   Simple form pattern (contact) and shared long-form typography.
   =================================================================== */

.mk-prose {
  color: var(--orderzy-ink-soft);
  font-size: 16px;
  line-height: 1.75;
  max-width: 760px;
}
.mk-prose > :first-child { margin-top: 0; }
.mk-prose h2 {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 32px 0 12px;
  letter-spacing: -0.01em;
}
.mk-prose h3 {
  font-family: var(--font-heading);
  font-size: 17px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 24px 0 10px;
}
.mk-prose h4 {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 600;
  color: var(--orderzy-ink);
  margin: 20px 0 8px;
}
.mk-prose p { margin: 0 0 14px; }
.mk-prose ul,
.mk-prose ol { padding-left: 22px; margin: 0 0 14px; }
.mk-prose li { margin-bottom: 6px; }
.mk-prose a {
  color: var(--orderzy-brand-ink);
  font-weight: 600;
  text-decoration: none;
}
.mk-prose a:hover { text-decoration: underline; }
.mk-prose strong { color: var(--orderzy-ink); font-weight: 700; }
.mk-prose hr {
  border: 0;
  border-top: 1px solid var(--orderzy-border);
  margin: 28px 0;
}
.mk-prose__meta {
  font-size: 13px;
  color: var(--orderzy-ink-muted);
  margin: 0 0 24px;
}
.mk-prose__lead {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  line-height: 1.65;
  margin: 0 0 20px;
  padding: 16px 20px;
  background: var(--orderzy-brand-soft);
  border-left: 3px solid var(--orderzy-brand);
  border-radius: var(--r-sm);
}

/* Document card (optional card-wrap around .mk-prose) */
.mk-doc-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 40px;
  box-shadow: 0 1px 3px rgba(31,29,26,0.04);
}
@media (max-width: 560px) {
  .mk-doc-card { padding: 28px 20px; }
}

/* Simple form (contact, non-auth forms) */
.mk-form { max-width: 560px; }
.mk-form__field { margin-bottom: 18px; }
.mk-form__label {
  display: block;
  font-family: var(--font-heading);
  font-size: 13px;
  font-weight: 600;
  color: var(--orderzy-ink);
  margin-bottom: 6px;
}
.mk-form__input,
.mk-form__textarea {
  width: 100%;
  padding: 11px 14px;
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--orderzy-ink);
  background: #fff;
  border: 1px solid var(--orderzy-border-strong);
  border-radius: var(--r-xs);
  transition: all var(--dur-fast) var(--ease);
}
.mk-form__textarea { min-height: 120px; resize: vertical; }
.mk-form__input:focus,
.mk-form__textarea:focus {
  outline: none;
  border-color: var(--orderzy-brand);
  box-shadow: 0 0 0 3px var(--orderzy-brand-soft);
}
.mk-form__input::placeholder,
.mk-form__textarea::placeholder { color: var(--orderzy-ink-muted); }
.mk-form__help { font-size: 12px; color: var(--orderzy-ink-muted); margin-top: 6px; }
.mk-form__error {
  background: #FEE2E2;
  color: #991B1B;
  padding: 12px 16px;
  border-radius: var(--r-sm);
  font-size: 13px;
  margin-top: 14px;
}
.mk-form__error p { margin: 0; }
.mk-form__success {
  background: #D1FAE5;
  color: #065F46;
  padding: 14px 18px;
  border-radius: var(--r-sm);
  font-size: 14px;
  text-align: center;
}

/* Direct-contact link row (contact page, below the form) */
.mk-contact-links {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
  margin-top: 8px;
}
.mk-contact-links a {
  color: var(--orderzy-brand-ink);
  text-decoration: none;
  font-weight: 600;
  font-size: 14px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  transition: color var(--dur-fast) var(--ease);
}
.mk-contact-links a:hover { color: var(--orderzy-brand); }

/* ============================================================================
   RESTAURANT DETAIL PAGE (merged from legacy menu-row.css on 2026-04-19)
   ============================================================================ */

/* Menu category (section) */
.menu-cat { margin-bottom: 48px; }
.menu-cat:last-child { margin-bottom: 0; }
.menu-cat__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--orderzy-border);
  margin-bottom: 20px;
}
.menu-cat__title {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0;
  letter-spacing: -0.01em;
}
.menu-cat__count {
  font-size: 13px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
}

/* Menu item (row: info left, 140x140 image right, Add/qty below image) */
.menu-item {
  display: flex;
  gap: 20px;
  padding: 20px 0;
  border-bottom: 1px solid var(--orderzy-border-soft, #f0ebe4);
}
.menu-item:last-child { border-bottom: none; }
.menu-item__info {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.menu-item__head { display: flex; align-items: center; gap: 8px; }

/* CSS-drawn veg / non-veg indicator */
.menu-item__veg {
  width: 14px;
  height: 14px;
  border: 2px solid;
  border-radius: 2px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.menu-item__veg--veg { border-color: #1f9d55; }
.menu-item__veg--veg::after {
  content: '';
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #1f9d55;
}
.menu-item__veg--nonveg { border-color: #b53333; }
.menu-item__veg--nonveg::after {
  content: '';
  width: 0;
  height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-bottom: 7px solid #b53333;
}

.menu-item__title {
  font-family: var(--font-heading);
  font-size: 17px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0;
}
.menu-item__price {
  font-size: 16px;
  font-weight: 700;
  color: var(--orderzy-ink);
  font-feature-settings: "tnum";
}
.menu-item__desc {
  font-size: 14px;
  color: var(--orderzy-ink-soft);
  line-height: 1.5;
  margin: 2px 0 0;
  /* Warmth: 2-line clamp with "more" reveal. Luxe override at :8564 keeps 3 lines.
     Owner-authored line breaks are preserved so paragraph-style descriptions read as intended. */
  white-space: pre-line;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.menu-item__desc.is-expanded {
  -webkit-line-clamp: unset;
  overflow: visible;
}
.oz-desc-more {
  background: none;
  border: none;
  padding: 4px 0 0;
  color: var(--orderzy-brand-ink);
  font-family: inherit;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  letter-spacing: 0.01em;
}
.oz-desc-more:hover, .oz-desc-more:focus {
  text-decoration: underline;
  outline: none;
}
.oz-desc-more:focus-visible {
  outline: 2px solid var(--orderzy-brand);
  outline-offset: 2px;
  border-radius: 2px;
}
@media print {
  .menu-item__desc { -webkit-line-clamp: unset; display: block; overflow: visible; }
  .oz-desc-more { display: none; }
}

/* Image block + floating Add button / qty stepper.
   Media is column-flex so variant rows (Full + Half) can stack BELOW the photo
   without overflowing into the next card. Photo dims fixed on the inner
   .menu-item__img / .menu-item__no-photo so the photo stays square. */
.menu-item__media {
  position: relative;
  width: 140px;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.menu-item__media--noimg { width: auto; align-self: center; }
.menu-item__img { width: 140px; height: 140px; object-fit: cover; border-radius: var(--r-md); }
.menu-item__no-photo {
  width: 140px;
  height: 140px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 6px;
  color: var(--orderzy-ink-muted);
  background: var(--orderzy-surface-alt);
  border: 1px dashed var(--orderzy-border);
  border-radius: var(--r-md);
  font-family: var(--font-heading);
  font-size: 10.5px;
  font-weight: 600;
  line-height: 1.2;
  /* 2026-08-22: text-transform: uppercase removed so the "Photo coming soon" */
  /* placeholder renders in sentence case per its source text. Do not reintroduce. */
  letter-spacing: 0.06em;
  text-align: center;
  padding: 6px;
}
.menu-item__no-photo svg { opacity: 0.5; }
.menu-item__no-photo {
  border-style: solid;
  border-color: var(--orderzy-border);
  font-family: var(--font-body, 'Inter', sans-serif);
  /* 2026-08-22: text-transform: uppercase removed (see comment on the block above). */
  letter-spacing: 0.12em;
  font-size: 10px;
  font-weight: 500;
}

.menu-item__add {
  position: absolute;
  bottom: -14px;
  left: 50%;
  transform: translateX(-50%);
  background: #ffffff;
  color: var(--orderzy-brand-deep);
  /* 2px brand-deep border + lift shadow + 2px white outline keeps the button
     readable when it sits half-overlapping a food photo, whether the photo is
     bright (white plate) or dark (charred meat / black plate). Single 1px border
     + whisper shadow disappeared on dark photos (image-2 report 2026-06-14). */
  border: 2px solid var(--orderzy-brand-deep);
  border-radius: var(--r-sm);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 13px;
  padding: 8px 20px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  box-shadow:
    0 0 0 2px rgba(255, 255, 255, 0.85),
    var(--orderzy-shadow-lift);
  cursor: pointer;
  transition: all var(--dur-fast) var(--ease);
  white-space: nowrap;
}
.menu-item__add:hover {
  background: var(--orderzy-brand-deep);
  color: #fff;
  box-shadow:
    0 0 0 2px rgba(255, 255, 255, 0.85),
    var(--orderzy-shadow-lift);
}
.menu-item__add:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  border-color: var(--orderzy-border);
  color: var(--orderzy-ink-muted);
  background: var(--orderzy-surface-alt);
}
.menu-item__add:disabled:hover { background: var(--orderzy-surface-alt); color: var(--orderzy-ink-muted); }
.menu-item__media--noimg .menu-item__add,
.menu-item__media--noimg .qty-stepper {
  position: static;
  transform: none;
}
/* Two-variant (Full + Half) rows: take buttons OUT of absolute layout so
   they sit inline with their "FULL"/"HALF" labels instead of stacking on
   top of each other at bottom:-14px;left:50%.
   IMPORTANT: selector includes .menu-item__media to beat the base rule at
   `.menu-item__media .qty-stepper { position:absolute }` below - both had
   specificity (0,2,0) before and the LATER rule was winning on tie, which
   sent every variant stepper back to absolute layout and overlapped the
   FULL/HALF labels (image-8/image-9 bug report 2026-05-31). The compound
   `.menu-item__media .menu-item__variants .qty-stepper` is (0,3,0) and
   wins cleanly. */
.menu-item__media .menu-item__variants .menu-item__add,
.menu-item__media .menu-item__variants .qty-stepper {
  position: static;
  bottom: auto;
  left: auto;
  transform: none;
  box-shadow: none;
}
/* 2026-08-22: variant Add + stepper size overrides retired. They shrank the
   variant tap target below the standard path (12px font, 28x28 buttons vs
   13px font, 36x36 buttons) because the earlier horizontal .oz-variant-row
   layout (label + control on one line) had to fit inside the 140px
   .menu-item__media column. .oz-variant-row was flipped to a stacked column
   layout below so the standard control size fits verbatim - diners now get
   the same tap area on Half/Full items as on single-variant items. */

.menu-item__closed {
  display: inline-flex;
  align-items: center;
  padding: 8px 16px;
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-sm);
  font-size: 12px;
  font-weight: 600;
  color: var(--orderzy-ink-muted);
}
.menu-item__media .menu-item__closed {
  position: absolute;
  bottom: -14px;
  left: 50%;
  transform: translateX(-50%);
}

/* Qty stepper for menu items. Scoped to .menu-item__media so it doesn't collide
   with the cart page's .stepper + .qty-stepper multi-class on cart rows. */
.menu-item__media .qty-stepper {
  position: absolute;
  bottom: -14px;
  left: 50%;
  transform: translateX(-50%);
  display: inline-flex;
  align-items: center;
  background: var(--orderzy-brand-deep);
  color: #fff;
  border-radius: var(--r-sm);
  /* 2px white outline + lift shadow keeps the stepper legible when it overlaps
     a dark food photo (sibling of .menu-item__add - same overlap geometry). */
  box-shadow:
    0 0 0 2px rgba(255, 255, 255, 0.85),
    var(--orderzy-shadow-lift);
  overflow: hidden;
}
.menu-item__media .qty-stepper__btn {
  background: transparent;
  border: none;
  color: #fff;
  width: 36px;
  height: 36px;
  font-size: 18px;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.menu-item__media .qty-stepper__btn:hover { background: rgba(0,0,0,0.15); }
.menu-item__media .qty-stepper__btn svg { display: block; width: 14px; height: 14px; }
.menu-item__media .qty-stepper__count {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  padding: 0 8px;
  min-width: 24px;
  text-align: center;
}

/* Pure-veg / active-session strip on restaurant detail */
.veg-toggle {
  display: flex;
  gap: 10px;
  align-items: center;
  margin-bottom: 24px;
  padding: 12px 16px;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  font-size: 14px;
}
.veg-toggle__dot {
  width: 12px;
  height: 12px;
  border-radius: 2px;
  border: 2px solid;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.veg-toggle__dot--veg { border-color: #1f9d55; }
.veg-toggle__dot--veg::after {
  content: '';
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #1f9d55;
}

/* In-menu search (simple bar, no sticky header) */
.menu-search { margin-bottom: 24px; }
.menu-search .search-bar { max-width: none; box-shadow: none; }
.menu-search__clear {
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  display: none;
  align-items: center;
  justify-content: center;
  background: var(--orderzy-border);
  border: none;
  border-radius: 50%;
  cursor: pointer;
  color: var(--orderzy-ink-soft);
  margin-right: 8px;
}
.menu-search__clear:hover { background: var(--orderzy-border-strong); }
.menu-search__clear.visible { display: inline-flex; }

.menu-page-content { padding-bottom: 100px; }
.menu-no-results {
  padding: 48px 16px;
  text-align: center;
  color: var(--orderzy-ink-muted);
  font-size: 14px;
  display: none;
}
.menu-no-results.visible { display: block; }
.menu-cat.search-hidden { display: none; }

@media (max-width: 880px) {
  .menu-item__media { width: 100px; height: 100px; }
  /* Image must follow the column width or it overflows and the absolute-
     positioned Add button centers on the (narrow) column instead of the
     (wider) image - landing the button on the image's left edge instead
     of its bottom center (image-8 report). */
  .menu-item__media .menu-item__img,
  .menu-item__media .menu-item__no-photo { width: 100px; height: 100px; }
  .menu-item__title { font-size: 15px; }
  .menu-item__desc { font-size: 13px; }
  /* With variants present, the 100px-wide column can't hold a "Full ₹280" label
     + Add/stepper (~150-170px). Widen the column so the variant rows sit cleanly
     under the image instead of overflowing into the next card (image-7 report). */
  .menu-item__media--has-variants { width: 160px; height: auto; }
  .menu-item__media--has-variants .menu-item__img,
  .menu-item__media--has-variants .menu-item__no-photo { width: 100px; height: 100px; align-self: flex-end; }
}
@media (max-width: 520px) {
  .menu-item { gap: 12px; }
  .menu-item__media { width: 80px; height: 80px; }
  .menu-item__media .menu-item__img,
  .menu-item__media .menu-item__no-photo { width: 80px; height: 80px; }
  .menu-item__add { padding: 6px 16px; font-size: 12px; }
  .menu-item__media .qty-stepper__btn { width: 30px; height: 30px; font-size: 16px; }
  .menu-cat__title { font-size: 18px; }
  .menu-item__media--has-variants { width: 150px; height: auto; }
  .menu-item__media--has-variants .menu-item__img,
  .menu-item__media--has-variants .menu-item__no-photo { width: 90px; height: 90px; }
}
@media (max-width: 360px) {
  .menu-item { padding: 14px 0; gap: 10px; }
  .menu-item__media { width: 70px; height: 70px; }
  .menu-item__media .menu-item__img,
  .menu-item__media .menu-item__no-photo { width: 70px; height: 70px; }
  .menu-item__title { font-size: 14px; }
  .menu-item__media--has-variants { width: 140px; height: auto; }
  .menu-item__media--has-variants .menu-item__img,
  .menu-item__media--has-variants .menu-item__no-photo { width: 80px; height: 80px; }
}
@media (hover: none) and (pointer: coarse) {
  .menu-item__add,
  .menu-item__media .qty-stepper__btn { min-height: 44px; }
}

/* ============================================================================
   CART PAGE (merged from legacy cart.css on 2026-04-19)
   ============================================================================ */

/* Layout container (legacy, overridden below when inside .cart-page) */
.cart-container {
  max-width: 600px;
  margin: 0 auto;
  padding: 0 16px;
  padding-bottom: 100px;
}
@media (min-width: 768px) { .cart-container { padding-bottom: 24px; } }
@media (max-width: 360px) { .cart-container { padding: 0 12px; padding-bottom: 100px; } }

/* Legacy cart item (kept for back-compat; overridden by .cart-row styles later) */
.cart-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 0;
  border-bottom: 1px solid #F0F0F0;
  position: relative;
  background: #fff;
  transition: transform 0.2s ease;
}
.cart-item.swiping { transition: none; }
.cart-item.removing { transform: translateX(-100%); opacity: 0; transition: transform 0.2s ease, opacity 0.2s ease; }
/* Per-element fade on disabled (closed-outlet) rows lives in .cart-row.disabled below.
   The old blanket .cart-item.disabled { opacity: 0.5 } also faded the Remove button +
   Closed badge, hurting affordance. Children are now targeted individually. */
.cart-item-image { width: 64px; height: 64px; border-radius: 8px; object-fit: cover; flex-shrink: 0; }
.cart-item-details { flex: 1; min-width: 0; }
.cart-item-name { font-size: 16px; font-weight: 500; color: #1A1A1A; margin: 0 0 8px 0; word-break: break-word; }
.cart-item-price { font-size: 16px; font-weight: 600; color: #1A1A1A; }

/* Legacy qty stepper on cart (retained for markup that still uses these classes) */
.cart-item .qty-stepper { display: flex; align-items: center; gap: 0; }
.qty-btn {
  width: 36px;
  height: 36px;
  border: 1.5px solid #E5E5E5;
  background: #fff;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 0.1s ease;
  font-size: 18px;
  color: #1A1A1A;
  -webkit-tap-highlight-color: transparent;
}
.qty-btn:active { background: #F28500; border-color: #F28500; color: #fff; }
.qty-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.qty-display { width: 36px; text-align: center; font-size: 16px; font-weight: 600; color: #1A1A1A; }
@media (min-width: 768px) { .qty-btn { width: 44px; height: 44px; } .qty-display { width: 44px; } }
@media (max-width: 480px) { .qty-btn { width: 44px; height: 44px; min-width: 44px; min-height: 44px; } .qty-display { width: 32px; font-size: 15px; } }

/* Delete button (legacy trash icon, kept in case any template still uses it) */
.cart-item-delete {
  width: 44px;
  height: 44px;
  min-width: 44px;
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #999;
  cursor: pointer;
  border: none;
  background: transparent;
  border-radius: 8px;
  transition: color 0.15s ease, background 0.15s ease;
  -webkit-tap-highlight-color: transparent;
  flex-shrink: 0;
  margin-left: 8px;
}
.cart-item-delete:hover,
.cart-item-delete:active { color: #FF4444; background: #FFF0F0; }
@media (max-width: 480px) { .cart-item-delete { color: #CC0000; background: #FFF5F5; } }

.swipe-delete-bg {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  width: 80px;
  background: #FF4444;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 14px;
  font-weight: 500;
  opacity: 0;
  pointer-events: none;
  z-index: -1;
}

/* Remove confirmation dialog (inline, preserved from legacy cart UX) */
.remove-confirm {
  display: none;
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  background: #FFF5F5;
  border: 1px solid #FFD0D0;
  border-radius: 8px;
  align-items: center;
  justify-content: center;
  gap: 12px;
  z-index: 10;
}
.remove-confirm.show { display: flex; }
.remove-confirm span { font-size: 14px; color: #666; }
.remove-confirm-btn { padding: 8px 16px; border-radius: 6px; font-size: 14px; font-weight: 500; cursor: pointer; border: none; }
.remove-confirm-btn.cancel { background: #E5E5E5; color: #333; }
.remove-confirm-btn.confirm { background: #FF4444; color: #fff; }

/* Cart item status badges */
.cart-item-badge { font-size: 12px; font-weight: 500; padding: 4px 8px; border-radius: 4px; }
.cart-item-badge.closed { background: #FFE5E5; color: #CC0000; }
.cart-item-badge.unavailable { background: #F5F5F5; color: #666; }

/* Desktop CTA (inline) */
.cart-cta-inline { display: none; margin-top: 20px; padding-bottom: 24px; }
@media (min-width: 768px) { .cart-cta-inline { display: block !important; visibility: visible !important; } }

/* FE1-2: layered overrides on top of .btn.btn--primary.btn--block.
   Background/color/hover come from .btn--primary (uses --orderzy-brand-deep for AA contrast).
   Display/visibility/opacity !important kept defensively against legacy hide-fights. */
.cart-cta-btn {
  display: flex !important;
  visibility: visible !important;
  opacity: 1 !important;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 52px;
  min-height: 52px;
  padding: 16px;
  border-radius: var(--r-sm);
  cursor: pointer;
}
.cart-cta-btn:disabled,
.cart-cta-btn.disabled { opacity: 0.5; cursor: not-allowed; }

/* Mobile sticky CTA */
.cart-sticky-cta {
  display: block !important;
  visibility: visible !important;
  opacity: 1 !important;
  position: fixed !important;
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  background: #fff !important;
  padding: 12px 16px !important;
  padding-bottom: max(12px, env(safe-area-inset-bottom)) !important;
  box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.15) !important;
  z-index: 99999 !important;
  transform: none !important;
}
@media (min-width: 768px) { .cart-sticky-cta { display: none !important; } }
@media (max-height: 500px) and (orientation: landscape) {
  .cart-sticky-cta { padding: 8px 16px !important; }
  .cart-sticky-cta .cart-cta-btn { height: 44px !important; }
}
.cart-sticky-cta .cart-cta-btn {
  height: 52px;
  display: flex !important;
  align-items: center;
  justify-content: center;
  visibility: visible !important;
  opacity: 1 !important;
}

/* Empty cart state */
.cart-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 48px 20px;
  text-align: center;
  min-height: 50vh;
}
@media (max-width: 480px) { .cart-empty { padding: 32px 16px; min-height: 40vh; } }
.cart-has-items .cart-empty { display: none; }
.cart-is-empty .cart-items-list,
.cart-is-empty .cart-cta-inline,
.cart-is-empty .cart-restaurant-header { display: none; }
.cart-is-empty .cart-sticky-cta { display: none; }

/* Guest info banner */
.guest-info-banner {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: #F0FDF4;
  border: 1px solid #BBF7D0;
  border-radius: 8px;
  margin-bottom: 16px;
  font-size: 14px;
  font-weight: 500;
  color: #166534;
}
.guest-info-banner svg { flex-shrink: 0; color: #22C55E; }

/* Legacy cart summary (kept for markup using .cart-summary) */
.cart-summary { margin-top: 16px; padding: 12px 0; border-top: 1px solid #E5E5E5; }
.cart-summary-row { display: flex; justify-content: space-between; align-items: center; padding: 6px 0; font-size: 14px; color: #4B5563; }
.cart-summary-row.discount { color: #16A34A; }
.cart-summary-row.total { font-size: 16px; font-weight: 600; color: #1A1A1A; padding-top: 10px; margin-top: 6px; border-top: 1px solid #E5E5E5; }

/* --- Cart page (mockup 13-cart.html migration). Override legacy where needed. --- */
.cart-page { padding: 32px 0 80px; }
.cart-page .cart-container { max-width: none; padding: 0; }

.cart-layout {
  display: grid;
  grid-template-columns: 1.3fr 1fr;
  gap: 32px;
  align-items: start;
}

.cart-head { margin-bottom: 24px; }
.cart-head__title {
  font-family: var(--font-heading);
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 4px;
}
.cart-head__rest { font-size: 15px; color: var(--orderzy-ink-soft); margin: 0; }
.cart-head__rest strong { color: var(--orderzy-ink); font-weight: 700; }
.cart-head__rest strong a { color: inherit; text-decoration: none; }
.cart-head__rest strong a:hover { color: var(--orderzy-brand-ink); }

/* Parcel toggle strip on cart. Placement under review (see STATE_OF_WORK P4.5). */
.cart-parcel-toggle {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  margin-bottom: 20px;
}
.cart-parcel-toggle__label { font-size: 14px; color: var(--orderzy-ink); font-weight: 600; }
.cart-parcel-toggle__buttons { display: flex; gap: 8px; margin-left: auto; }
.cart-parcel-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 32px;
  padding: 0 14px;
  border-radius: 16px;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border-strong);
  color: var(--orderzy-ink);
  transition: all var(--dur-fast) var(--ease);
}
.cart-parcel-btn--active {
  background: var(--orderzy-ink);
  border-color: var(--orderzy-ink);
  color: #fff;
}

.cart-card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 0;
  overflow: hidden;
  margin-bottom: 0;
}
.cart-card + .cart-card { margin-top: 16px; }
.cart-card__head {
  padding: 16px 24px;
  border-bottom: 1px solid var(--orderzy-border);
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  color: var(--orderzy-ink);
}

.cart-row {
  display: grid;
  grid-template-columns: 56px 1fr auto auto;
  gap: 16px;
  align-items: center;
  padding: 16px 24px;
  border-bottom: 1px solid var(--orderzy-border-soft);
  position: relative;
  background: var(--orderzy-surface);
}
.cart-row:last-child { border-bottom: none; }
.cart-row.disabled .cart-row__img,
.cart-row.disabled .cart-row__title,
.cart-row.disabled .cart-row__meta .num,
.cart-row.disabled .chef-note-trunc,
.cart-row.disabled .cart-row__line { opacity: 0.5; }
.cart-row.disabled .cart-row__remove { opacity: 1; }
.cart-row.removing { opacity: 0; transition: opacity 200ms; }
.cart-row.swiping { transition: transform 100ms; }

.cart-row__img { width: 56px; height: 56px; border-radius: var(--r-sm); object-fit: cover; }
.cart-row__info { min-width: 0; }
.cart-row__title {
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 15px;
  color: var(--orderzy-ink);
  margin: 0 0 2px;
  display: flex;
  align-items: center;
  gap: 8px;
}
.cart-row__veg {
  width: 12px;
  height: 12px;
  border: 2px solid;
  border-radius: 2px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cart-row__veg--veg { border-color: #1f9d55; }
.cart-row__veg--veg::after { content: ''; width: 4px; height: 4px; border-radius: 50%; background: #1f9d55; }
.cart-row__veg--nonveg { border-color: #b53333; }
.cart-row__veg--nonveg::after { content: ''; width: 0; height: 0; border-left: 3px solid transparent; border-right: 3px solid transparent; border-bottom: 5px solid #b53333; }
.cart-row__meta { font-size: 13px; color: var(--orderzy-ink-muted); }
/* 2026-08-22: give the unit-price span a stable inline-block so the middle-dot */
/* and the Remove button line up on a consistent x across rows regardless of */
/* price digit count (₹80 vs ₹220 vs ₹1200). Uses `ch` because .num already */
/* has font-feature-settings: "tnum" applied by the global .num rule, so digits */
/* have equal width. min-width (not width) means a 5-digit price still fits */
/* without truncation - that row's Remove would drift slightly, matching today's */
/* worst case rather than making it worse. Item title (.cart-row__title) is */
/* untouched; this rule is scoped to the meta line only. */
.cart-row__meta .num { display: inline-block; min-width: 4ch; }
.cart-row__remove {
  color: var(--orderzy-ink-soft);
  font-weight: 600;
  font-size: 13px;
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.cart-row__remove:hover { color: var(--orderzy-danger); }
.cart-row__line {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 15px;
  color: var(--orderzy-ink);
  font-feature-settings: "tnum";
  min-width: 64px;
  text-align: right;
}

/* Cart stepper (different visual from menu-item stepper) */
.cart-row .stepper {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--orderzy-border-strong);
  border-radius: var(--r-sm);
  overflow: hidden;
  background: var(--orderzy-surface);
}
.cart-row .stepper__btn {
  background: var(--orderzy-surface);
  border: none;
  width: 32px;
  height: 32px;
  font-size: 16px;
  font-weight: 700;
  color: var(--orderzy-ink);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 0;
}
.cart-row .stepper__btn:hover { background: var(--orderzy-surface-alt); }
.cart-row .stepper__count {
  font-family: var(--font-heading);
  font-weight: 700;
  padding: 0 10px;
  min-width: 28px;
  text-align: center;
  font-size: 14px;
  color: var(--orderzy-ink);
}

.cart-add-more {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 14px 24px;
  color: var(--orderzy-brand-ink);
  background: var(--orderzy-brand-soft);
  font-weight: 700;
  font-size: 14px;
  text-decoration: none;
  border: none;
  border-top: 1px solid var(--orderzy-border);
}
.cart-add-more:hover { background: #fde5c8; color: var(--orderzy-brand-ink); }

/* Bill summary */
.bill {
  position: sticky;
  top: 96px;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 24px;
}
.bill__title {
  font-family: var(--font-heading);
  font-size: 17px;
  font-weight: 700;
  margin: 0 0 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--orderzy-border);
}
.bill__line {
  display: flex;
  justify-content: space-between;
  padding: 6px 0;
  font-size: 14px;
  color: var(--orderzy-ink-soft);
}
.bill__line--total {
  font-family: var(--font-heading);
  font-size: 20px;
  font-weight: 700;
  color: var(--orderzy-ink);
  border-top: 1px solid var(--orderzy-border);
  padding-top: 14px;
  margin-top: 10px;
}
.bill__line--total .total { color: var(--orderzy-ink); }
.bill__hint {
  margin-top: 12px;
  text-align: center;
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}

@media (max-width: 880px) {
  .cart-layout { grid-template-columns: 1fr; gap: 20px; }
  .bill { position: static; }
  .cart-page { padding: 20px 0 120px; }
  .cart-head__title { font-size: 24px; }
  .cart-row { grid-template-columns: 48px 1fr auto; padding: 14px 16px; gap: 12px; }
  .cart-row__line { grid-column: 2 / -1; text-align: right; min-width: 0; }
  .cart-row__img { width: 48px; height: 48px; }
  .cart-card__head { padding: 12px 16px; }
  .cart-add-more { padding: 12px 16px; }
  .bill { padding: 20px 16px; }
}

/* ============================================================================
   OFFER BANNER / CAROUSEL (merged from legacy offer-banner.css on 2026-04-19)
   ============================================================================ */

.offer-banner-section { padding: 12px 16px; background: #FAFAFA; }

.offer-banner {
  position: relative;
  display: flex;
  align-items: stretch;
  background: linear-gradient(135deg, #1A472A 0%, #2D5A3D 100%);
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
.offer-banner__accent {
  width: 6px;
  background: linear-gradient(180deg, #4ADE80 0%, #22C55E 100%);
  flex-shrink: 0;
}
.offer-banner__content {
  flex: 1;
  display: flex;
  align-items: center;
  padding: 14px 16px;
  gap: 14px;
}
.offer-banner__icon {
  flex-shrink: 0;
  width: 36px;
  height: 36px;
  background: rgba(255, 255, 255, 0.15);
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.offer-banner__icon svg { width: 20px; height: 20px; color: #4ADE80; }
.offer-banner__value {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 0 12px;
  border-right: 1px solid rgba(255, 255, 255, 0.15);
}
.offer-banner__discount {
  font-size: 28px;
  font-weight: 800;
  color: #4ADE80;
  line-height: 1;
  letter-spacing: -0.5px;
}
.offer-banner__discount-label {
  font-size: 11px;
  font-weight: 600;
  color: rgba(255, 255, 255, 0.8);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  margin-top: 2px;
}
.offer-banner__details { flex: 1; min-width: 0; }
.offer-banner__title {
  font-size: 14px;
  font-weight: 600;
  color: #fff;
  margin-bottom: 3px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.offer-banner__condition {
  font-size: 12px;
  color: rgba(255, 255, 255, 0.7);
  display: flex;
  align-items: center;
  gap: 6px;
}
.offer-banner__validity {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  color: #4ADE80;
  margin-top: 4px;
}
.offer-banner__validity svg { width: 12px; height: 12px; }
.offer-banner__code {
  flex-shrink: 0;
  padding: 6px 10px;
  background: rgba(255, 255, 255, 0.1);
  border: 1px dashed rgba(255, 255, 255, 0.4);
  border-radius: 6px;
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  letter-spacing: 0.8px;
  text-transform: uppercase;
}
.offer-banner__theme {
  position: absolute;
  top: 8px;
  right: 8px;
  font-size: 10px;
  font-weight: 600;
  color: #FFD700;
  background: rgba(0, 0, 0, 0.3);
  padding: 3px 8px;
  border-radius: 4px;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

/* Offer slider */
.offer-slider { position: relative; }
.offer-slider__viewport { overflow: hidden; position: relative; }
.offer-slider__track {
  display: flex;
  transition: transform 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
  will-change: transform;
}
.offer-slider__slide { flex: 0 0 100%; width: 100%; }

.offer-carousel__arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 32px;
  height: 32px;
  background: rgba(255, 255, 255, 0.95);
  border: none;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 2;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
  transition: background 0.15s, box-shadow 0.15s, transform 0.15s;
  padding: 0;
}
.offer-carousel__arrow:hover {
  background: #fff;
  box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
  transform: translateY(-50%) scale(1.08);
}
.offer-carousel__arrow--prev { left: 10px; }
.offer-carousel__arrow--next { right: 10px; }
.offer-carousel__arrow svg { width: 18px; height: 18px; color: #1F2937; display: block; }
@media (hover: none) and (pointer: coarse) { .offer-carousel__arrow { display: none; } }
@media (hover: hover) and (pointer: fine) {
  .offer-slider .offer-banner__content { padding-left: 44px; padding-right: 44px; }
}

.offer-slider__dots {
  display: flex;
  justify-content: center;
  gap: 6px;
  margin-top: 10px;
}
.offer-slider__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #D1D5DB;
  border: none;
  padding: 0;
  cursor: pointer;
  transition: background 0.2s ease, transform 0.2s ease;
}
.offer-slider__dot--active { background: #2D5A3D; transform: scale(1.2); }
.offer-slider__dot:hover { background: #9CA3AF; }
.offer-slider__dot--active:hover { background: #2D5A3D; }

.offer-banner--platform { background: linear-gradient(135deg, #0F766E 0%, #14B8A6 100%); }
.offer-banner--platform .offer-banner__accent { background: linear-gradient(180deg, #5EEAD4 0%, #2DD4BF 100%); }
.offer-banner--platform .offer-banner__discount { color: #5EEAD4; }
.offer-banner--platform .offer-banner__validity { color: #5EEAD4; }
.offer-banner--platform .offer-banner__icon svg { color: #5EEAD4; }
.offer-banner--platform .offer-banner__theme { color: #5EEAD4; background: rgba(0, 0, 0, 0.25); }

.offer-banner--restaurant { background: linear-gradient(135deg, #7C2D12 0%, #9A3412 100%); }
.offer-banner--restaurant .offer-banner__accent { background: linear-gradient(180deg, #FB923C 0%, #F97316 100%); }
.offer-banner--restaurant .offer-banner__discount { color: #FDBA74; }
.offer-banner--restaurant .offer-banner__validity { color: #FDBA74; }
.offer-banner--restaurant .offer-banner__icon svg { color: #FDBA74; }

.no-offers { display: none; }

@media (max-width: 768px) {
  .offer-banner-section { padding: 10px 12px; }
  .offer-banner__content { padding: 12px 14px; gap: 12px; }
  .offer-banner__discount { font-size: 24px; }
  .offer-banner__value { padding: 0 10px; }
  .offer-banner__title { font-size: 13px; }
  .offer-banner__condition { font-size: 11px; }
}
@media (max-width: 480px) {
  .offer-banner-section { padding: 8px 10px; }
  .offer-banner__content { padding: 10px 12px; gap: 10px; flex-wrap: wrap; }
  .offer-banner__icon { display: none; }
  .offer-banner__value { padding: 0 8px; border-right: none; }
  .offer-banner__discount { font-size: 22px; }
  .offer-banner__discount-label { font-size: 10px; }
  .offer-banner__details { flex: 1 1 auto; min-width: 100px; }
  .offer-banner__title { font-size: 12px; white-space: normal; line-height: 1.3; }
  .offer-banner__condition { font-size: 10px; flex-wrap: wrap; }
  .offer-banner__code { font-size: 9px; padding: 4px 6px; letter-spacing: 0.5px; }
  .offer-banner__theme { font-size: 9px; padding: 2px 6px; top: 6px; right: 6px; }
  .offer-slider__dots { margin-top: 8px; }
  .offer-slider__dot { width: 5px; height: 5px; }
}
@media (max-width: 360px) {
  .offer-banner__content { padding: 8px 10px; gap: 8px; }
  .offer-banner__discount { font-size: 20px; }
  .offer-banner__value { padding: 0 6px; }
  .offer-banner__details { min-width: 80px; }
  .offer-banner__title { font-size: 11px; }
  .offer-banner__code { font-size: 8px; padding: 3px 5px; }
}

/* Guest toast (from offer-banner.css; overrides menu-row's version) */
.guest-toast {
  position: fixed;
  bottom: 84px;
  left: 50%;
  transform: translateX(-50%) translateY(20px);
  background: #1A1A1A;
  color: #fff;
  padding: 12px 20px;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 500;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  z-index: 999;
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s ease;
  max-width: calc(100% - 32px);
  text-align: center;
}
.guest-toast.visible {
  opacity: 1;
  visibility: visible;
  transform: translateX(-50%) translateY(0);
}
.guest-toast svg {
  display: inline-block;
  vertical-align: middle;
  margin-right: 8px;
  color: #4ADE80;
}
@media (max-height: 500px) and (orientation: landscape) {
  .guest-toast { bottom: 72px; padding: 10px 16px; font-size: 13px; }
}
/* ============================================================================
   CHECKOUT PAGE (merged from legacy checkout.css on 2026-04-19)
   ============================================================================ */
/* ============================================
   CHECKOUT PAGE - LOCKED DESIGN SPECIFICATION
   Mobile-first, single column, confidence-focused
   ============================================ */

/* Layout Container */
.checkout-container {
    max-width: 600px;
    margin: 0 auto;
    padding: 0 16px 100px 16px;
}

/* Tablet and desktop: no sticky CTA, reduce padding */
@media (min-width: 768px) {
    .checkout-container {
        padding-bottom: 24px;
    }
}

/* Small phones */
@media (max-width: 360px) {
    .checkout-container {
        padding: 0 12px 100px 12px;
    }
}

/* Landscape phones: more bottom padding */
@media (max-height: 500px) and (orientation: landscape) {
    .checkout-container {
        padding-bottom: 80px;
    }
}

/* Section Styling */
.checkout-section {
    background: #fff;
    border-radius: 8px;
    margin-bottom: 16px;
}

.checkout-section-content {
    padding: 16px;
}

/* ============================================
   ORDER SUMMARY (Collapsed)
   ============================================ */
.order-summary-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px;
    cursor: pointer;
    border: 1px solid #E5E5E5;
    border-radius: 8px;
    background: #F9F9F9;
    -webkit-tap-highlight-color: transparent;
}

.order-summary-header:hover {
    background: #F5F5F5;
}

.order-summary-title {
    font-size: 16px;
    font-weight: 500;
    color: #1A1A1A;
}

.order-summary-toggle {
    font-size: 14px;
    color: #F28500;
    display: flex;
    align-items: center;
    gap: 4px;
}

.order-summary-toggle svg {
    transition: transform 0.2s ease;
}

.order-summary-header.expanded .order-summary-toggle svg {
    transform: rotate(180deg);
}

.order-summary-items {
    display: none;
    padding: 12px 16px;
    border: 1px solid #E5E5E5;
    border-top: none;
    border-radius: 0 0 8px 8px;
    background: #fff;
}

.order-summary-items.show {
    display: block;
}

.order-summary-item {
    display: flex;
    justify-content: space-between;
    padding: 8px 0;
    font-size: 14px;
    color: #333;
}

.order-summary-item:not(:last-child) {
    border-bottom: 1px solid #F0F0F0;
}

/* ============================================
   CONTACT DETAILS
   ============================================ */
.contact-section {
    border: 1px solid #E5E5E5;
    border-radius: 8px;
}

.contact-readonly {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px;
    background: #F9F9F9;
    border-radius: 8px;
}

.contact-readonly-info {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.contact-readonly-name {
    font-size: 16px;
    font-weight: 500;
    color: #1A1A1A;
}

.contact-readonly-phone {
    font-size: 14px;
    color: #666;
}

.contact-edit-link {
    font-size: 14px;
    color: #F28500;
    text-decoration: none;
    padding: 8px;
    margin: -8px;
}

.contact-fields {
    padding: 16px;
}

.form-field {
    margin-bottom: 12px;
}

.form-field:last-child {
    margin-bottom: 0;
}

.form-label {
    display: block;
    font-size: 14px;
    font-weight: 500;
    color: #333;
    margin-bottom: 6px;
}

.form-label .required {
    color: #E53935;
}

.form-input {
    width: 100%;
    height: 48px;
    min-height: 44px;
    padding: 0 12px;
    border: 1px solid #E5E5E5;
    border-radius: 8px;
    font-size: 16px;
    color: #1A1A1A;
    background: #fff;
    transition: border-color 0.15s ease;
    -webkit-appearance: none;
    appearance: none;
}

.form-input:focus {
    outline: none;
    border-color: #F28500;
    box-shadow: 0 0 0 3px rgba(242, 133, 0, 0.1);
}

.form-input.error {
    border-color: #E53935;
}

/* Mobile: ensure 16px font to prevent zoom on iOS */
@media (max-width: 768px) {
    .form-input {
        font-size: 16px;
    }
}

.form-error {
    font-size: 12px;
    color: #E53935;
    margin-top: 4px;
    display: none;
}

.form-input.error+.form-hint+.form-error,
.form-input.error+.form-error {
    display: block;
}

.form-hint {
    font-size: 12px;
    color: #6B7280;
    margin-top: 4px;
}

.optional-field-toggle {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 14px;
    color: #666;
    padding: 8px 0;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}

.optional-field-toggle:hover {
    color: #F28500;
}

.optional-field {
    display: none;
    margin-top: 8px;
}

.optional-field.show {
    display: block;
}

/* ============================================
   TABLE NUMBER BADGE
   ============================================ */
.table-badge {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    background: #E8F5E9;
    border: 1px solid #A5D6A7;
    border-radius: 8px;
    margin-bottom: 16px;
}

.table-badge-icon {
    width: 20px;
    height: 20px;
    color: #4CAF50;
}

.table-badge-text {
    font-size: 14px;
    font-weight: 500;
    color: #2E7D32;
}

/* ============================================
   COLLAPSIBLE SECTIONS
   ============================================ */
.collapsible-trigger {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 0;
    font-size: 14px;
    color: #666;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
    border: none;
    background: none;
    width: 100%;
    text-align: left;
}

.collapsible-trigger:hover {
    color: #F28500;
}

.collapsible-trigger svg {
    width: 16px;
    height: 16px;
    transition: transform 0.2s ease;
}

.collapsible-trigger.expanded svg {
    transform: rotate(45deg);
}

.collapsible-content {
    display: none;
    padding-bottom: 12px;
    overflow: hidden;
}

.collapsible-content.show {
    display: block;
}

/* Override global transition rules for checkout collapsibles */
.collapsible-content,
.order-summary-items,
.coupon-input-container,
.optional-field {
    transition: none !important;
}

/* Pre-order timing */
.timing-options {
    display: flex;
    gap: 8px;
    flex-wrap: nowrap;
}

.timing-option {
    flex: 1;
    min-width: 0;
    height: 48px;
    min-height: 44px;
    border: 1px solid #E5E5E5;
    border-radius: 8px;
    background: #fff;
    font-size: 14px;
    font-weight: 500;
    color: #333;
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
    -webkit-tap-highlight-color: transparent;
    padding: 0 8px;
    white-space: nowrap;
}

.timing-option:hover {
    border-color: #F28500;
}

.timing-option.selected {
    background: #F28500;
    border-color: #F28500;
    color: #fff;
}

/* Small screens: stack if needed */
@media (max-width: 320px) {
    .timing-options {
        gap: 6px;
    }

    .timing-option {
        font-size: 13px;
        padding: 0 6px;
    }
}

.timing-display {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    color: #666;
}

.timing-display-value {
    font-weight: 500;
    color: #1A1A1A;
}

/* Seating section */
.seating-fields {
    display: flex;
    gap: 12px;
}

.seating-fields .form-field {
    flex: 1;
}

/* ============================================
   PRICE BREAKDOWN
   ============================================ */
.price-breakdown {
    border: 1px solid #E5E5E5;
    border-radius: 8px;
    padding: 16px;
}

.price-line {
    display: flex;
    justify-content: space-between;
    padding: 8px 0;
    font-size: 14px;
    color: #666;
}

.price-line:not(:last-child) {
    border-bottom: 1px solid #F0F0F0;
}

.price-line.total {
    font-size: 16px;
    font-weight: 600;
    color: #1A1A1A;
    border-bottom: none;
    padding-top: 12px;
    margin-top: 4px;
    border-top: 1px solid #E5E5E5;
}

.price-line.discount {
    color: #16A34A;
}

.price-line.discount .discount-amount {
    font-weight: 600;
}

.savings-banner {
    margin-top: 12px;
    padding: 10px 12px;
    background: #F0FDF4;
    border: 1px solid #BBF7D0;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 600;
    color: #166534;
    text-align: center;
}

/* ============================================
   COUPON SECTION
   ============================================ */
.coupon-section {
    border: 1px solid #E5E5E5;
    border-radius: 8px;
}

.coupon-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}

.coupon-label {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    color: #374151;
}

.coupon-label svg {
    color: #F28500;
}

.coupon-toggle {
    font-size: 14px;
    font-weight: 600;
    color: #F28500;
}

.coupon-input-container {
    display: none;
    margin-top: 12px;
}

.coupon-input-container.show {
    display: block;
}

.coupon-input-row {
    display: flex;
    gap: 8px;
    flex-wrap: nowrap;
}

.coupon-input {
    flex: 1;
    min-width: 0;
    height: 44px;
    min-height: 44px;
    padding: 0 12px;
    border: 1px solid #E5E5E5;
    border-radius: 6px;
    font-size: 16px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    -webkit-appearance: none;
    appearance: none;
}

.coupon-input:focus {
    outline: none;
    border-color: #F28500;
}

.coupon-apply-btn {
    flex-shrink: 0;
    min-width: 72px;
    height: 44px;
    min-height: 44px;
    padding: 0 16px;
    background: #F28500;
    color: #fff;
    border: none;
    border-radius: 6px;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s ease;
}

.coupon-apply-btn:hover {
    background: #E07800;
}

.coupon-apply-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}

/* Small screens: stack coupon row if needed */
@media (max-width: 320px) {
    .coupon-input-row {
        flex-wrap: wrap;
    }

    .coupon-input {
        width: 100%;
    }

    .coupon-apply-btn {
        width: 100%;
        margin-top: 8px;
    }
}

.coupon-message {
    margin-top: 8px;
    font-size: 13px;
    display: none;
}

.coupon-message.show {
    display: block;
}

.coupon-message.success {
    color: #16A34A;
}

.coupon-message.error {
    color: #DC2626;
}

.coupon-applied {
    display: none;
    align-items: center;
    justify-content: space-between;
    margin-top: 12px;
    padding: 10px 12px;
    background: #F0FDF4;
    border: 1px solid #BBF7D0;
    border-radius: 6px;
}

.coupon-applied.show {
    display: flex;
}

.coupon-applied-text {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 14px;
    font-weight: 600;
    color: #166534;
}

.coupon-applied-text svg {
    color: #22C55E;
}

.coupon-remove-btn {
    padding: 4px 12px;
    background: transparent;
    border: 1px solid #DC2626;
    border-radius: 4px;
    font-size: 12px;
    font-weight: 600;
    color: #DC2626;
    cursor: pointer;
    transition: all 0.15s ease;
}

.coupon-remove-btn:hover {
    background: #DC2626;
    color: #fff;
}

/* ============================================
   PAYMENT METHOD
   ============================================ */
.payment-section {
    margin-top: 16px;
}

.payment-card {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px;
    border: 1px solid #E5E5E5;
    border-radius: 8px;
    background: #fff;
    cursor: pointer;
    transition: background 0.15s ease, border-color 0.15s ease;
    margin-bottom: 8px;
    min-height: 56px;
    -webkit-tap-highlight-color: transparent;
}

.payment-card:last-child {
    margin-bottom: 0;
}

.payment-card:hover {
    border-color: #F28500;
}

.payment-card.selected {
    background: #FFF5F0;
    /* 2026-08-22: 2px → 1px. Selected border was heavier than the Pay button */
    /* under it, inverting the hierarchy. Colour + fill + radio dot still carry */
    /* the selected state (the later .pay-option.selected block overrides */
    /* border-color to --accent). */
    border: 1px solid #F28500;
}

/* Mobile: active state for touch feedback */
@media (max-width: 768px) {
    .payment-card:active {
        background: #FFF5F0;
    }

    .payment-card.selected {
        box-shadow: 0 0 0 1px #F28500 inset;
    }
}

.payment-card input[type="radio"] {
    display: none;
}

.payment-radio {
    width: 20px;
    height: 20px;
    border: 2px solid #CCC;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.payment-card.selected .payment-radio {
    border-color: #F28500;
}

.payment-radio-inner {
    width: 10px;
    height: 10px;
    background: #F28500;
    border-radius: 50%;
    opacity: 0;
    transition: opacity 0.15s ease;
}

.payment-card.selected .payment-radio-inner {
    opacity: 1;
}

.payment-info {
    flex: 1;
}

.payment-label {
    font-size: 16px;
    font-weight: 500;
    color: #1A1A1A;
}

.payment-sublabel {
    font-size: 13px;
    color: #666;
    margin-top: 2px;
}

/* Pay at End info */
.pay-at-end-info {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    background: #F5F5F5;
    border-radius: 8px;
    margin-top: 16px;
}

.pay-at-end-info svg {
    width: 18px;
    height: 18px;
    color: #666;
    flex-shrink: 0;
}

.pay-at-end-info span {
    font-size: 14px;
    color: #666;
}

/* ============================================
   CTA BUTTON
   ============================================ */
/* Desktop CTA (inline) - Hidden on mobile, visible on tablet/desktop */
.checkout-cta-inline {
    display: none;
    margin-top: 20px;
    padding-bottom: 24px;
}

@media (min-width: 768px) {
    .checkout-cta-inline {
        display: block !important;
        visibility: visible !important;
    }
}

/* FE1-2: layered overrides on top of .btn.btn--primary.btn--block.
   Background/color/hover come from .btn--primary; display/visibility kept defensive. */
.checkout-cta-btn {
    display: flex !important;
    visibility: visible !important;
    opacity: 1 !important;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 52px;
    min-height: 52px;
    padding: 0 24px;
    border-radius: var(--r-sm);
    cursor: pointer;
}

.checkout-cta-btn:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.checkout-cta-btn .spinner {
    display: none;
    width: 20px;
    height: 20px;
    border: 2px solid rgba(255, 255, 255, 0.3);
    border-top-color: #fff;
    border-radius: 50%;
    margin-right: 8px;
    animation: spin 0.8s linear infinite;
}

.checkout-cta-btn.loading .spinner {
    display: block;
}

.checkout-cta-btn.loading .btn-text {
    display: none;
}

.checkout-cta-btn .loading-text {
    display: none;
}

.checkout-cta-btn.loading .loading-text {
    display: inline;
}

@keyframes spin {
    to {
        transform: rotate(360deg);
    }
}

/* M7: utility class for inline spinner SVGs (replaces .fa-spinner.fa-spin). */
.oz-spin { animation: spin 0.8s linear infinite; }

/* M9: sortable table header buttons (replaces DataTables sort indicators). */
.oz-th-sort {
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  color: inherit;
  cursor: pointer;
  text-align: inherit;
  width: 100%;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.oz-th-sort:hover { color: var(--orderzy-brand-ink); }
.oz-th-sort__ind { font-size: 10px; opacity: 0.7; }

/* Sticky CTA Bar (Mobile) - ALWAYS VISIBLE ON MOBILE */
.checkout-sticky-cta {
    display: block !important;
    visibility: visible !important;
    opacity: 1 !important;
    position: fixed !important;
    bottom: 0 !important;
    left: 0 !important;
    right: 0 !important;
    background: #fff !important;
    padding: 12px 16px !important;
    padding-bottom: max(12px, env(safe-area-inset-bottom)) !important;
    box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.15) !important;
    z-index: 99999 !important;
    transform: none !important;
}

/* Tablet and desktop: hide sticky, use inline CTA */
@media (min-width: 768px) {
    .checkout-sticky-cta {
        display: none !important;
    }
}

/* Landscape phones: reduce height */
@media (max-height: 500px) and (orientation: landscape) {
    .checkout-sticky-cta {
        padding: 8px 16px !important;
    }

    .checkout-sticky-cta .checkout-cta-btn {
        height: 44px !important;
    }
}

/* ============================================
   FORM VALIDATION
   ============================================ */
.form-input:invalid:not(:placeholder-shown) {
    border-color: #E53935;
}

/* Hide number input spinners */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
}

input[type="number"] {
    -moz-appearance: textfield;
}

/* ============================================================================
   ORDER COMPLETE PAGE (mockup 15-order-complete.html migration)
   ============================================================================ */

.oc-page { padding: 56px 0 80px; }

.oc-grid {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 40px;
  align-items: start;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}

.oc-hero {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  padding: 40px 36px;
  position: relative;
  overflow: hidden;
}
.oc-hero::before {
  content: "";
  position: absolute;
  top: -80px;
  right: -80px;
  width: 220px;
  height: 220px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(31,157,85,0.12), transparent 70%);
  pointer-events: none;
}

.oc-tick {
  width: 72px;
  height: 72px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  margin-bottom: 20px;
}
.oc-tick--success { background: var(--orderzy-success-soft); color: var(--orderzy-success); }
.oc-tick--fail { background: var(--orderzy-danger-soft); color: var(--orderzy-danger); }
.oc-tick--processing { background: var(--orderzy-brand-soft); color: var(--orderzy-brand); }
.oc-tick--cancelled { background: var(--orderzy-surface-sand); color: var(--orderzy-ink-soft); }
.oc-tick svg { width: 34px; height: 34px; }

.oc-title {
  font-family: var(--font-heading);
  font-size: 34px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 6px;
}
.oc-sub {
  font-size: 16px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0 0 28px;
}

.oc-number {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-sm);
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  color: var(--orderzy-ink);
  letter-spacing: 0.02em;
  font-feature-settings: "tnum";
}

.oc-status {
  margin-top: 28px;
  padding: 20px 0 0;
  border-top: 1px solid var(--orderzy-border);
}
.oc-status__label {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  margin: 0 0 14px;
}

.oc-actions {
  margin-top: 24px;
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.oc-side {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.oc-card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 20px 22px;
}
.oc-card__title {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  margin: 0 0 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.oc-card__title span {
  font-size: 13px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
}

.oc-items { display: flex; flex-direction: column; gap: 10px; }
.oc-item {
  display: flex;
  justify-content: space-between;
  font-size: 14px;
}
.oc-item__name { color: var(--orderzy-ink); }
.oc-item__qty { color: var(--orderzy-ink-muted); font-weight: 600; margin-right: 6px; }
.oc-item__price { color: var(--orderzy-ink); font-weight: 600; font-feature-settings: "tnum"; }

.oc-totals {
  border-top: 1px solid var(--orderzy-border);
  margin-top: 14px;
  padding-top: 14px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.oc-totals__line {
  display: flex;
  justify-content: space-between;
  font-size: 13px;
  color: var(--orderzy-ink-soft);
}
.oc-totals__line--discount { color: var(--orderzy-success); font-weight: 600; }
.oc-totals__line--grand {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 16px;
  color: var(--orderzy-ink);
  margin-top: 6px;
  padding-top: 10px;
  border-top: 1px solid var(--orderzy-border-soft);
}

.oc-paid {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 14px;
  background: var(--orderzy-success-soft);
  border-radius: var(--r-sm);
  font-size: 13px;
  color: #117a42;
  font-weight: 600;
  margin-top: 14px;
}

.oc-referral {
  background: linear-gradient(135deg, var(--orderzy-brand-soft), #fde5c8);
  border: 1px solid var(--orderzy-brand);
  padding: 18px 20px;
}
.oc-referral__head {
  font-family: var(--font-heading);
  font-size: 16px;
  font-weight: 700;
  color: var(--orderzy-brand-ink);
  margin-bottom: 4px;
}
.oc-referral__body {
  font-size: 13px;
  color: var(--orderzy-ink);
  line-height: 1.5;
  margin-bottom: 12px;
}

@media (max-width: 880px) {
  .oc-grid { grid-template-columns: 1fr; gap: 20px; }
  .oc-title { font-size: 26px; }
  .oc-hero { padding: 28px 20px; }
  .oc-page { padding: 24px 0 80px; }
}

/* ============================================================================
   MY ORDERS PAGE (mockup 16-my-orders.html migration)
   ============================================================================ */

.mo-page { padding: 40px 0 80px; }

.mo-head {
  margin-bottom: 24px;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 12px;
}
.mo-title {
  font-family: var(--font-heading);
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.02em;
  margin: 0 0 4px;
}
.mo-count { font-size: 14px; color: var(--orderzy-ink-soft); }

.mo-filters {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding: 4px 0 16px;
  scrollbar-width: none;
  margin-bottom: 8px;
}
.mo-filters::-webkit-scrollbar { display: none; }
.mo-filter {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  border-radius: var(--r-pill);
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink);
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
  transition: all var(--dur-fast) var(--ease);
}
.mo-filter:hover:not(:disabled) { border-color: var(--orderzy-ink); }
.mo-filter.is-active {
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
  border-color: var(--orderzy-ink);
}
.mo-filter:disabled { opacity: 0.65; cursor: not-allowed; }
.mo-filter__count {
  background: rgba(31,29,26,0.08);
  padding: 1px 6px;
  border-radius: var(--r-pill);
  font-size: 11px;
  font-family: var(--font-heading);
  font-feature-settings: "tnum";
}
.mo-filter.is-active .mo-filter__count { background: rgba(255,255,255,0.2); }

.mo-list { display: flex; flex-direction: column; gap: 16px; }

.mo-card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 22px 24px;
  transition: box-shadow var(--dur-med) var(--ease);
}
.mo-card:hover { box-shadow: var(--orderzy-shadow-whisper); }
.mo-card--cancelled { border-style: dashed; opacity: 0.8; }

.mo-card__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 12px;
  flex-wrap: wrap;
}
.mo-card__rest { display: flex; align-items: center; gap: 12px; }
.mo-card__rest-img {
  width: 44px;
  height: 44px;
  border-radius: var(--r-sm);
  object-fit: cover;
  flex-shrink: 0;
}
.mo-card__rest-info { display: flex; flex-direction: column; gap: 2px; }
.mo-card__rest-name {
  font-family: var(--font-heading);
  font-size: 16px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0;
}
.mo-card__meta {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
  font-feature-settings: "tnum";
  display: flex;
  gap: 10px;
  align-items: center;
  flex-wrap: wrap;
}
.mo-card__meta-sep { opacity: 0.4; }

.mo-card__body {
  display: flex;
  justify-content: space-between;
  gap: 20px;
  padding: 12px 0;
  border-top: 1px solid var(--orderzy-border-soft);
  border-bottom: 1px solid var(--orderzy-border-soft);
  margin-bottom: 14px;
}
.mo-card__items {
  flex: 1;
  min-width: 0;
  font-size: 14px;
  color: var(--orderzy-ink);
  line-height: 1.55;
}
.mo-card__item-name { color: var(--orderzy-ink); }
.mo-card__item-qty { color: var(--orderzy-ink-muted); font-weight: 600; margin-right: 4px; }
.mo-card__total { text-align: right; flex-shrink: 0; }
.mo-card__total-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--orderzy-ink-muted);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.mo-card__total-val {
  font-family: var(--font-heading);
  font-size: 20px;
  font-weight: 700;
  color: var(--orderzy-ink);
  font-feature-settings: "tnum";
  margin-top: 2px;
}
.mo-card__total-val--strike { text-decoration: line-through; color: var(--orderzy-ink-muted); }

.mo-card__actions {
  display: flex;
  gap: 8px;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
}
.mo-card__actions-left { display: flex; gap: 8px; flex-wrap: wrap; }

.mo-btn-sm {
  padding: 8px 14px;
  font-size: 13px;
  border-radius: var(--r-sm);
  font-weight: 700;
  border: 1px solid transparent;
  background: transparent;
  color: var(--orderzy-ink);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  text-decoration: none;
  transition: all var(--dur-fast) var(--ease);
}
.mo-btn-sm--outline { border-color: var(--orderzy-border-strong); }
.mo-btn-sm--outline:hover { border-color: var(--orderzy-ink); }
.mo-btn-sm--danger { color: var(--orderzy-danger); }
.mo-btn-sm--reorder {
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  border-color: var(--orderzy-brand);
}
.mo-btn-sm--reorder:hover { background: var(--orderzy-brand); color: #fff; }

.mo-load-more { margin-top: 32px; text-align: center; }

@media (max-width: 640px) {
  .mo-card { padding: 16px 18px; }
  .mo-card__body { flex-direction: column; gap: 10px; }
  .mo-card__total {
    text-align: left;
    display: flex;
    justify-content: space-between;
    align-items: center;
  }
  .mo-title { font-size: 24px; }
}


/* ===================================================================
   BATCH 3 ADDITIONS. Marketing page 30 (for-restaurants)
   Extends the shared mk-sec / mk-faq / mk-cta shells.
   Adds: hero, kitchen-queue preview, problem grid, 4-step rail,
   feature deep-dive cards + inline visuals, try-customer band,
   pricing card, Kulhadwala case study.
   =================================================================== */

/* ---------- Hero ---------- */
.mk-hero {
  padding: 72px 0 56px;
  position: relative;
  overflow: hidden;
}
.mk-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 80% 20%, rgba(242,133,0,0.10) 0%, transparent 55%),
    radial-gradient(circle at 10% 90%, rgba(242,133,0,0.05) 0%, transparent 50%);
  pointer-events: none;
}
.mk-hero__grid {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: 56px;
  align-items: center;
  position: relative;
}
.mk-hero__headline {
  font-family: var(--font-heading);
  font-size: 52px;
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.025em;
  margin: 0 0 18px;
}
.mk-hero__headline-accent { color: var(--orderzy-brand); }
.mk-hero__sub {
  font-size: 18px;
  color: var(--orderzy-ink-soft);
  line-height: 1.6;
  max-width: 520px;
  margin: 0 0 28px;
}
.mk-hero__founder {
  font-size: 13.5px;
  color: var(--orderzy-ink-muted);
  font-style: italic;
  margin: -10px 0 22px;
  max-width: 520px;
  line-height: 1.5;
}
.mk-hero__ctas {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 22px;
}
.mk-hero__trust {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 22px;
  font-size: 13.5px;
  color: var(--orderzy-ink-soft);
  font-weight: 600;
}
.mk-hero__trust-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.mk-hero__trust-item svg {
  color: var(--orderzy-success);
  flex-shrink: 0;
}

/* ---------- Kitchen dashboard preview (hero right) ---------- */
.mk-kqueue {
  background: var(--orderzy-surface);
  border-radius: var(--r-lg);
  box-shadow: var(--orderzy-shadow-lift);
  padding: 0;
  overflow: hidden;
  border: 1px solid var(--orderzy-border);
  position: relative;
}
.mk-kqueue__chrome {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
}
.mk-kqueue__dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--orderzy-border-strong);
}
.mk-kqueue__dot:first-child { background: #e06d6d; }
.mk-kqueue__dot:nth-child(2) { background: #e0b56d; }
.mk-kqueue__dot:nth-child(3) { background: #7ec58a; }
.mk-kqueue__url {
  flex: 1;
  text-align: center;
  font-family: ui-monospace, Menlo, monospace;
  /* 2026-08-22: 11px → 12px (caption floor). */
  font-size: 12px;
  color: var(--orderzy-ink-muted);
}
.mk-kqueue__body { padding: 18px 18px 14px; }
.mk-kqueue__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 14px;
}
.mk-kqueue__title {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 15px;
}
.mk-kqueue__meta {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
}
.mk-kqueue__cols {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 8px;
}
.mk-kqueue__col {
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-sm);
  padding: 10px 10px 12px;
}
.mk-kqueue__col-head {
  font-family: var(--font-heading);
  /* 2026-08-22: 10px → 12px (caption floor). */
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  margin-bottom: 8px;
  display: flex;
  justify-content: space-between;
}
.mk-kqueue__col-count {
  color: var(--orderzy-ink);
  background: var(--orderzy-surface);
  border-radius: var(--r-xs);
  padding: 1px 6px;
  /* 2026-08-22: 10px → 12px (caption floor). */
  font-size: 12px;
}
.mk-kq-ticket {
  background: var(--orderzy-surface);
  border-radius: var(--r-xs);
  padding: 8px 9px;
  margin-bottom: 6px;
  border-left: 2px solid var(--orderzy-brand);
  box-shadow: var(--orderzy-shadow-whisper);
}
.mk-kq-ticket:last-child { margin-bottom: 0; }
.mk-kq-ticket--ready { border-left-color: var(--orderzy-success); }
.mk-kq-ticket--done { border-left-color: var(--orderzy-ink-muted); opacity: 0.7; }
.mk-kq-ticket__head {
  display: flex;
  justify-content: space-between;
  font-family: var(--font-heading);
  font-weight: 700;
  /* 2026-08-22: 11px → 12px (caption floor). */
  font-size: 12px;
  color: var(--orderzy-ink);
}
.mk-kq-ticket__id { color: var(--orderzy-brand-ink); }
/* 2026-08-22: 10px → 12px (caption floor). */
.mk-kq-ticket__time { color: var(--orderzy-ink-muted); font-size: 12px; }
.mk-kq-ticket__body {
  /* 2026-08-22: 10.5px → 12px (caption floor). */
  font-size: 12px;
  color: var(--orderzy-ink-soft);
  margin-top: 3px;
  line-height: 1.35;
}
.mk-kqueue__foot {
  display: flex;
  justify-content: space-between;
  /* 2026-08-22: 11px → 12px (caption floor). */
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  padding: 10px 18px 14px;
  border-top: 1px solid var(--orderzy-border);
  margin-top: 12px;
}
.mk-kqueue__foot strong { color: var(--orderzy-ink); font-family: var(--font-heading); }

/* ---------- Problem grid ---------- */
.mk-prob {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}
.mk-prob__card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 24px 22px;
}
.mk-prob__icon {
  width: 40px;
  height: 40px;
  border-radius: var(--r-sm);
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: grid;
  place-items: center;
  margin-bottom: 14px;
}
.mk-prob__card h3 {
  font-family: var(--font-heading);
  font-size: 17px;
  font-weight: 700;
  margin: 0 0 6px;
}
.mk-prob__card p {
  font-size: 14.5px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0;
}

/* ---------- Steps (4-step rail) ---------- */
.mk-steps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px;
  position: relative;
}
.mk-steps::before {
  content: "";
  position: absolute;
  top: 36px;
  left: 12.5%;
  right: 12.5%;
  height: 2px;
  background: linear-gradient(90deg, var(--orderzy-brand), rgba(242,133,0,0.2));
  z-index: 0;
}
.mk-step {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 20px 18px;
  position: relative;
  z-index: 1;
}
.mk-step__num {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--orderzy-brand-deep);
  color: #fff;
  display: grid;
  place-items: center;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  margin-bottom: 14px;
  box-shadow: 0 2px 8px rgba(31,29,26,0.15);
}
.mk-step h3 {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  margin: 0 0 4px;
}
.mk-step p {
  font-size: 13.5px;
  color: var(--orderzy-ink-soft);
  line-height: 1.5;
  margin: 0;
}

/* ---------- Feature deep-dive cards ---------- */
.mk-feat {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 32px;
  margin-top: 8px;
}
.mk-feat__card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  padding: 28px;
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
}
.mk-feat__label {
  font-family: var(--font-heading);
  /* 2026-08-22: 11px → 12px (caption floor). */
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
}
.mk-feat__card h3 {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  margin: 0 0 8px;
  letter-spacing: -0.01em;
}
.mk-feat__card p {
  font-size: 15px;
  color: var(--orderzy-ink-soft);
  line-height: 1.6;
  margin: 0 0 14px;
}
.mk-feat__bullets {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 8px;
}
.mk-feat__bullets li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 14px;
  color: var(--orderzy-ink);
}
.mk-feat__bullets li svg {
  flex-shrink: 0;
  color: var(--orderzy-success);
  margin-top: 2px;
}
.mk-feat__visual {
  background: var(--orderzy-surface-alt);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 16px;
  font-size: 12.5px;
}
.mk-feat__visual-row {
  display: flex;
  justify-content: space-between;
  padding: 8px 10px;
  background: var(--orderzy-surface);
  border-radius: var(--r-xs);
  margin-bottom: 6px;
  font-family: var(--font-heading);
  font-weight: 600;
}
.mk-feat__visual-row:last-child { margin-bottom: 0; }
.mk-feat__visual-row .num,
.mk-feat__visual-row .price { color: var(--orderzy-ink); }
.mk-feat__visual-row .dim { color: var(--orderzy-ink-muted); font-weight: 500; }

/* QR grid visual */
.mk-qr-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
}
.mk-qr-grid__cell {
  aspect-ratio: 1 / 1;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-xs);
  display: grid;
  place-items: center;
  position: relative;
  overflow: hidden;
}
.mk-qr-grid__cell::before {
  content: "";
  position: absolute;
  inset: 14%;
  background:
    linear-gradient(45deg, var(--orderzy-ink) 25%, transparent 25%) 0 0 / 6px 6px,
    linear-gradient(-45deg, var(--orderzy-ink) 25%, transparent 25%) 0 0 / 6px 6px;
  opacity: 0.75;
  border-radius: 2px;
}
.mk-qr-grid__cell span {
  position: relative;
  z-index: 2;
  background: var(--orderzy-surface);
  padding: 2px 5px;
  border-radius: 2px;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 10px;
  color: var(--orderzy-ink);
}

/* Waitlist visual */
.mk-wl-row {
  display: grid;
  grid-template-columns: 26px 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  background: var(--orderzy-surface);
  border-radius: var(--r-xs);
  margin-bottom: 6px;
}
.mk-wl-row:last-child { margin-bottom: 0; }
.mk-wl-row__pos {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  text-align: center;
}
.mk-wl-row__name { font-weight: 700; font-size: 13px; }
/* 2026-08-22: 11px → 12px (caption floor). */
.mk-wl-row__party { font-size: 12px; color: var(--orderzy-ink-muted); }

/* Bill visual */
.mk-bill-row {
  display: flex;
  justify-content: space-between;
  font-size: 13px;
  padding: 5px 0;
  color: var(--orderzy-ink-soft);
}
.mk-bill-row--total {
  border-top: 1px solid var(--orderzy-border);
  margin-top: 6px;
  padding-top: 10px;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 16px;
  color: var(--orderzy-ink);
}

/* ---------- Try customer view band ---------- */
.mk-try {
  padding: 28px 0 8px;
}
.mk-try__band {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px 20px;
  flex-wrap: wrap;
  padding: 18px 24px;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  text-align: center;
}
.mk-try__text {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 600;
  color: var(--orderzy-ink);
  margin: 0;
}
.mk-try__text small {
  display: block;
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 400;
  color: var(--orderzy-ink-soft);
  margin-top: 2px;
}

/* ---------- Pricing card ---------- */
.mk-price {
  max-width: 680px;
  margin: 0 auto;
  background: var(--orderzy-surface);
  border: 2px solid var(--orderzy-brand);
  border-radius: var(--r-lg);
  padding: 36px 36px 32px;
  position: relative;
}
.mk-price__tag {
  position: absolute;
  top: -14px;
  left: 36px;
  background: var(--orderzy-brand-deep);
  color: #fff;
  padding: 5px 12px;
  border-radius: var(--r-pill);
  font-family: var(--font-heading);
  /* 2026-08-22: 11px → 12px (caption floor). */
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.mk-price__head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 6px;
}
.mk-price__name {
  font-family: var(--font-heading);
  font-size: 24px;
  font-weight: 700;
  margin: 0;
}
.mk-price__amount {
  font-family: var(--font-heading);
  font-size: 40px;
  font-weight: 700;
  color: var(--orderzy-ink);
  letter-spacing: -0.02em;
}
.mk-price__amount small {
  font-size: 15px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
  margin-left: 4px;
}
.mk-price__tagline {
  font-size: 15px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0 0 20px;
}
.mk-price__list {
  list-style: none;
  padding: 0;
  margin: 0 0 24px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px 18px;
}
.mk-price__list li {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: 14px;
  color: var(--orderzy-ink);
}
.mk-price__list li svg {
  color: var(--orderzy-success);
  flex-shrink: 0;
  margin-top: 2px;
}
.mk-price__note {
  padding: 14px 16px;
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-sm);
  font-size: 13px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin-bottom: 22px;
}
.mk-price__note strong { color: var(--orderzy-ink); }
.mk-price__ctas {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}
.mk-price__ctas .btn { flex: 1 1 220px; }

/* ---------- Kulhadwala case study (warm anchor) ---------- */
.mk-case {
  background: linear-gradient(135deg, var(--orderzy-brand-soft) 0%, #fde5c8 100%);
  padding: 72px 0;
  position: relative;
  overflow: hidden;
}
.mk-case::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 90% 40%, rgba(242,133,0,0.14), transparent 55%);
  pointer-events: none;
}
.mk-case__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
  position: relative;
}
.mk-case__tag {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-heading);
  /* 2026-08-22: 11px → 12px (caption floor). */
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  background: rgba(255,255,255,0.75);
  padding: 5px 12px;
  border-radius: var(--r-pill);
  margin-bottom: 18px;
}
.mk-case__title {
  font-family: var(--font-heading);
  font-size: 32px;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.02em;
  margin: 0 0 14px;
}
.mk-case__quote {
  font-family: var(--font-heading);
  font-size: 20px;
  line-height: 1.5;
  font-weight: 600;
  color: var(--orderzy-ink);
  margin: 0 0 18px;
  padding-left: 18px;
  border-left: 3px solid var(--orderzy-brand);
}
.mk-case__body {
  font-size: 16px;
  color: var(--orderzy-ink-soft);
  line-height: 1.65;
  margin: 0 0 16px;
}
.mk-case__facts {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 10px;
  margin: 18px 0 0;
}
.mk-case__fact {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 11px;
  background: rgba(255,255,255,0.8);
  border-radius: var(--r-pill);
  font-size: 12px;
  font-weight: 600;
  color: var(--orderzy-ink);
}
.mk-case__fact svg { color: var(--orderzy-brand-ink); flex-shrink: 0; }
.mk-case__media {
  position: relative;
  border-radius: var(--r-lg);
  overflow: hidden;
  aspect-ratio: 4 / 5;
  box-shadow: var(--orderzy-shadow-lift),
              0 24px 60px -20px rgba(31,29,26,0.25);
}
.mk-case__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.mk-case__media-meta {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  padding: 18px 20px;
  background: linear-gradient(to top, rgba(31,29,26,0.85), transparent);
  color: #fff;
}
/* Selector renamed h4 → h3 on 2026-08-22 to fix H2→H4 heading-skip while */
/* preserving the visual 17px caption size in the case-study media strip. */
.mk-case__media-meta h3 {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 17px;
  margin: 0;
  color: #fff;
}
.mk-case__media-meta div {
  font-size: 13px;
  opacity: 0.85;
  margin-top: 3px;
}

/* ---------- Marketing-30 responsive ---------- */
@media (max-width: 1024px) {
  .mk-hero__grid { gap: 40px; }
  .mk-hero__headline { font-size: 44px; }
  .mk-feat { gap: 20px; }
}
@media (max-width: 880px) {
  .mk-hero { padding: 48px 0 40px; }
  .mk-hero__grid { grid-template-columns: 1fr; gap: 40px; }
  .mk-hero__headline { font-size: 36px; }
  .mk-prob { grid-template-columns: 1fr; }
  .mk-steps { grid-template-columns: repeat(2, 1fr); }
  .mk-steps::before { display: none; }
  .mk-feat { grid-template-columns: 1fr; }
  .mk-price__list { grid-template-columns: 1fr; }
  .mk-case__grid { grid-template-columns: 1fr; gap: 32px; }
  .mk-case__media { aspect-ratio: 3 / 2; max-width: 520px; }
}
@media (max-width: 520px) {
  .mk-hero__headline { font-size: 30px; }
  .mk-steps { grid-template-columns: 1fr; }
  .mk-price { padding: 32px 22px 24px; }
  .mk-price__amount { font-size: 32px; }
  .mk-case__title { font-size: 24px; }
  .mk-case__quote { font-size: 17px; }
}


/* ===================================================================
   BATCH 3 ADDITIONS. Marketing page 31 (restaurant-management-software)
   Extends mk-crumbs / mk-sec / mk-faq / mk-cta shells.
   Adds: feat-hero (smaller than page 30), dashboard preview,
   lead block, 8-feature 4-col grid, day-in-the-life rail + blocks,
   comparison table.
   =================================================================== */

/* ---------- Smaller hero for feature pages (has breadcrumb above) ---------- */
.mk-feat-hero {
  padding: 24px 0 48px;
  position: relative;
  overflow: hidden;
}
.mk-feat-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 85% 15%, rgba(242,133,0,0.08) 0%, transparent 55%);
  pointer-events: none;
}
.mk-feat-hero__grid {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 48px;
  align-items: center;
  position: relative;
}
.mk-feat-hero__headline {
  font-family: var(--font-heading);
  font-size: 44px;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.02em;
  margin: 0 0 16px;
}
.mk-feat-hero__lede {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  line-height: 1.65;
  border-left: 3px solid var(--orderzy-brand);
  padding: 4px 0 4px 18px;
  margin: 0 0 24px;
  max-width: 620px;
}
.mk-feat-hero__ctas {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

/* ---------- Dashboard mock (hero right) ---------- */
.mk-dashmock {
  background: var(--orderzy-surface);
  border-radius: var(--r-lg);
  box-shadow: var(--orderzy-shadow-lift);
  border: 1px solid var(--orderzy-border);
  overflow: hidden;
}
.mk-dashmock__chrome {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
}
.mk-dashmock__chrome-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--orderzy-border-strong);
}
.mk-dashmock__chrome-dot:first-child { background: #e06d6d; }
.mk-dashmock__chrome-dot:nth-child(2) { background: #e0b56d; }
.mk-dashmock__chrome-dot:nth-child(3) { background: #7ec58a; }
.mk-dashmock__chrome-url {
  flex: 1;
  text-align: center;
  font-family: ui-monospace, Menlo, monospace;
  font-size: 11px;
  color: var(--orderzy-ink-muted);
}
.mk-dashmock__layout {
  display: grid;
  grid-template-columns: 140px 1fr;
  min-height: 380px;
}
.mk-dashmock__side {
  background: var(--orderzy-ink);
  color: rgba(250,249,245,0.7);
  padding: 16px 12px;
  font-size: 11.5px;
}
.mk-dashmock__side-brand {
  font-family: var(--font-heading);
  font-weight: 700;
  color: var(--orderzy-brand);
  font-size: 14px;
  margin-bottom: 14px;
  padding: 0 4px;
}
.mk-dashmock__side-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 8px;
  border-radius: var(--r-xs);
  font-weight: 600;
}
.mk-dashmock__side-item svg { flex-shrink: 0; color: currentColor; opacity: 0.8; }
.mk-dashmock__side-item--active {
  background: rgba(242,133,0,0.14);
  color: var(--orderzy-brand);
}
.mk-dashmock__side-label {
  font-family: var(--font-heading);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(250,249,245,0.4);
  padding: 12px 8px 6px;
}
.mk-dashmock__main {
  padding: 16px;
  background: var(--orderzy-canvas, var(--orderzy-surface-alt));
}
.mk-dashmock__title {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  margin-bottom: 12px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.mk-dashmock__title .pill { font-size: 10px; }
.mk-dashmock__metrics {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  margin-bottom: 12px;
}
.mk-dashmock__metric {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  padding: 10px 12px;
}
.mk-dashmock__metric-label {
  font-family: var(--font-heading);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}
.mk-dashmock__metric-value {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 18px;
  color: var(--orderzy-ink);
  margin-top: 2px;
}
.mk-dashmock__metric-value small {
  font-size: 11px;
  color: var(--orderzy-success);
  font-weight: 700;
  margin-left: 4px;
}
.mk-dashmock__rows {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  overflow: hidden;
}
.mk-dashmock__row {
  display: flex;
  justify-content: space-between;
  padding: 8px 12px;
  font-size: 11.5px;
  align-items: center;
  border-bottom: 1px solid var(--orderzy-border);
}
.mk-dashmock__row:last-child { border-bottom: 0; }
.mk-dashmock__row .pill { font-size: 10px; }
.mk-dashmock__row-left { display: flex; gap: 10px; align-items: center; }
.mk-dashmock__row-id { font-weight: 700; color: var(--orderzy-brand-ink); }
.mk-dashmock__row-meta { color: var(--orderzy-ink-muted); }

/* ---------- Lead paragraph block ---------- */
.mk-lead {
  padding: 12px 0 48px;
}
.mk-lead__block {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 28px 32px;
  max-width: 860px;
  font-size: 16px;
  line-height: 1.7;
  color: var(--orderzy-ink-soft);
}
.mk-lead__block strong { color: var(--orderzy-ink); }

/* ---------- 8-feature grid (4-col shallow cards) ---------- */
.mk-feat8 {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px;
}
.mk-feat8__card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 22px 22px 24px;
  display: flex;
  flex-direction: column;
}
.mk-feat8__icon {
  width: 40px;
  height: 40px;
  border-radius: var(--r-sm);
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: grid;
  place-items: center;
  margin-bottom: 14px;
}
.mk-feat8__card h3 {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  margin: 0 0 6px;
}
.mk-feat8__card p {
  font-size: 13.5px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0;
}

/* ---------- A day running Orderzy (sticky time-rail) ---------- */
.mk-day {
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: 32px;
}
.mk-day__rail {
  position: sticky;
  top: 96px;
  align-self: start;
  padding-right: 20px;
  border-right: 1px solid var(--orderzy-border);
}
.mk-day__rail-title {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  margin: 0 0 12px;
}
.mk-day__rail-item {
  padding: 10px 4px;
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 13px;
  color: var(--orderzy-ink-soft);
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-bottom: 1px solid var(--orderzy-border);
}
.mk-day__rail-item:last-child { border-bottom: none; }
.mk-day__rail-item--active { color: var(--orderzy-brand-ink); }
.mk-day__rail-time {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  color: var(--orderzy-ink-muted);
}
.mk-day__rail-item--active .mk-day__rail-time { color: var(--orderzy-brand); }

.mk-day__block {
  padding-bottom: 40px;
  margin-bottom: 40px;
  border-bottom: 1px solid var(--orderzy-border);
}
.mk-day__block:last-child { border-bottom: none; margin-bottom: 0; }
.mk-day__time {
  font-family: var(--font-heading);
  font-size: 12px;
  font-weight: 700;
  color: var(--orderzy-brand);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin-bottom: 8px;
}
.mk-day__title {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  margin: 0 0 8px;
  letter-spacing: -0.01em;
}
.mk-day__body {
  font-size: 15.5px;
  line-height: 1.65;
  color: var(--orderzy-ink-soft);
  margin: 0 0 16px;
  max-width: 600px;
}
.mk-day__body strong { color: var(--orderzy-ink); }
.mk-day__visual {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 16px 18px;
  font-size: 13px;
  max-width: 520px;
}
.mk-day__visual-row {
  display: flex;
  justify-content: space-between;
  padding: 6px 0;
  border-bottom: 1px solid var(--orderzy-border);
  font-family: var(--font-heading);
  font-weight: 600;
}
.mk-day__visual-row:last-child { border-bottom: none; }
.mk-day__visual-row .dim { color: var(--orderzy-ink-muted); font-weight: 500; }

/* ---------- Comparison table ---------- */
.mk-compare {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  overflow: hidden;
  box-shadow: var(--orderzy-shadow-whisper);
}
.mk-compare table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14.5px;
}
.mk-compare thead {
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
}
.mk-compare th {
  padding: 14px 18px;
  text-align: left;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 0.02em;
  color: #fff;
}
.mk-compare th:nth-child(2),
.mk-compare th:nth-child(3) { text-align: center; }
.mk-compare th:nth-child(2) { color: var(--orderzy-brand); }
.mk-compare td {
  padding: 14px 18px;
  border-top: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink-soft);
}
.mk-compare td:first-child {
  color: var(--orderzy-ink);
  font-weight: 600;
}
.mk-compare td:nth-child(2),
.mk-compare td:nth-child(3) { text-align: center; }
.mk-compare tbody tr:nth-child(even) { background: var(--orderzy-surface-alt); }
.mk-compare__check { color: var(--orderzy-success); font-weight: 700; }
.mk-compare__x { color: var(--orderzy-ink-muted); }
.mk-compare__pill {
  display: inline-block;
  padding: 2px 9px;
  border-radius: var(--r-pill);
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
}
.mk-compare__pill--good {
  background: var(--orderzy-success-soft);
  color: var(--orderzy-success);
}

/* ---------- Marketing-31 responsive ---------- */
@media (max-width: 1024px) {
  .mk-feat8 { grid-template-columns: repeat(2, 1fr); }
  .mk-feat-hero__headline { font-size: 36px; }
}
@media (max-width: 880px) {
  .mk-feat-hero__grid { grid-template-columns: 1fr; gap: 32px; }
  .mk-day { grid-template-columns: 1fr; gap: 20px; }
  .mk-day__rail {
    position: static;
    padding-right: 0;
    border-right: none;
    border-bottom: 1px solid var(--orderzy-border);
    padding-bottom: 12px;
  }
  .mk-lead__block { padding: 22px 24px; font-size: 15px; }
  .mk-compare { overflow-x: auto; }
  .mk-compare table { min-width: 560px; }
}
@media (max-width: 520px) {
  .mk-feat-hero__headline { font-size: 28px; }
  .mk-feat8 { grid-template-columns: 1fr; }
  .mk-day__title { font-size: 19px; }
  .mk-dashmock__layout { grid-template-columns: 1fr; }
  .mk-dashmock__side { display: none; }
}


/* ===================================================================
   BATCH 3 ADDITIONS. Marketing page 32 (dine-in-ordering-system)
   Customer-facing lens. Extends mk-crumbs / mk-sec / mk-faq / mk-cta.
   Reuses the existing .phone* classes from the home page migration.
   Adds: di-hero (hero with phone stage), 3-step explainer,
   split blocks with bill + waitlist visuals, "not an app" trust grid.
   =================================================================== */

/* ---------- Hero ---------- */
.mk-di-hero {
  padding: 24px 0 56px;
  position: relative;
  overflow: hidden;
}
.mk-di-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(circle at 80% 20%, rgba(242,133,0,0.10) 0%, transparent 55%);
  pointer-events: none;
}
.mk-di-hero__grid {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 48px;
  align-items: center;
  position: relative;
}
.mk-di-hero__headline {
  font-family: var(--font-heading);
  font-size: 46px;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.025em;
  margin: 0 0 16px;
}
.mk-di-hero__headline em {
  font-style: normal;
  color: var(--orderzy-brand);
}
.mk-di-hero__sub {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  line-height: 1.65;
  max-width: 560px;
  margin: 0 0 24px;
}
.mk-di-hero__ctas {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}
.mk-di-phone-stage {
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
}
.mk-di-phone-stage::before {
  content: "";
  position: absolute;
  inset: 20% 10%;
  background: radial-gradient(circle, rgba(242,133,0,0.18), transparent 70%);
  filter: blur(40px);
  z-index: 0;
}
.mk-di-phone-stage .phone { position: relative; z-index: 1; }

/* ---------- 3-step explainer ---------- */
.mk-di-steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.mk-di-step {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  padding: 28px 26px;
  position: relative;
}
.mk-di-step__num {
  font-family: var(--font-heading);
  font-size: 12px;
  font-weight: 700;
  color: var(--orderzy-brand);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin-bottom: 12px;
}
.mk-di-step__icon {
  width: 44px;
  height: 44px;
  border-radius: var(--r-sm);
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: grid;
  place-items: center;
  margin-bottom: 16px;
}
.mk-di-step h3 {
  font-family: var(--font-heading);
  font-size: 19px;
  font-weight: 700;
  margin: 0 0 8px;
}
.mk-di-step p {
  font-size: 15px;
  color: var(--orderzy-ink-soft);
  line-height: 1.6;
  margin: 0;
}

/* ---------- Split feature blocks ---------- */
.mk-di-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
  margin-bottom: 72px;
}
.mk-di-split:last-child { margin-bottom: 0; }
.mk-di-split--reverse > :first-child { order: 2; }
.mk-di-split__visual {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  padding: 28px;
  box-shadow: var(--orderzy-shadow-whisper);
}
.mk-di-split__label {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  margin-bottom: 10px;
}
.mk-di-split h3 {
  font-family: var(--font-heading);
  font-size: 28px;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.015em;
  margin: 0 0 14px;
}
.mk-di-split p {
  font-size: 16px;
  color: var(--orderzy-ink-soft);
  line-height: 1.65;
  margin: 0 0 16px;
}
.mk-di-split__bullets {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 10px;
}
.mk-di-split__bullets li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  font-size: 15px;
  color: var(--orderzy-ink);
}
.mk-di-split__bullets li svg {
  color: var(--orderzy-success);
  flex-shrink: 0;
  margin-top: 3px;
}

/* ---------- Bill visual (inside split) ---------- */
.mk-di-bill-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--orderzy-border);
  margin-bottom: 10px;
}
.mk-di-bill-head h4 {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  margin: 0;
}
.mk-di-bill-head span {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
}
.mk-di-bill-row {
  display: flex;
  justify-content: space-between;
  font-size: 13.5px;
  padding: 5px 0;
  color: var(--orderzy-ink-soft);
}
.mk-di-bill-row--discount { color: var(--orderzy-success); }
.mk-di-bill-row--total {
  border-top: 1px solid var(--orderzy-border);
  margin-top: 6px;
  padding-top: 10px;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 17px;
  color: var(--orderzy-ink);
}

/* ---------- Waitlist visual (inside split) ---------- */
.mk-di-wl-head {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
  margin-bottom: 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.mk-di-wl-head span { font-size: 12px; color: var(--orderzy-ink-muted); font-weight: 600; }
.mk-di-wl-you {
  background: linear-gradient(135deg, var(--orderzy-brand-soft), #fde5c8);
  border: 1px solid var(--orderzy-brand);
  border-radius: var(--r-md);
  padding: 14px;
  margin-bottom: 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.mk-di-wl-you__num {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 32px;
  color: var(--orderzy-brand-ink);
  line-height: 1;
}
.mk-di-wl-you__label {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  margin-bottom: 2px;
}
.mk-di-wl-you__name {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 15px;
}
.mk-di-wl-you__pos { text-align: right; }
.mk-di-wl-you__pos-label {
  font-size: 10.5px;
  color: var(--orderzy-brand-ink);
  font-weight: 700;
}
.mk-di-wl-row {
  display: flex;
  justify-content: space-between;
  padding: 8px 10px;
  font-size: 13px;
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-xs);
  margin-bottom: 4px;
}
.mk-di-wl-row__status {
  color: var(--orderzy-brand-ink);
  font-weight: 700;
}

/* ---------- "Not an app" trust grid ---------- */
.mk-di-not-app {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.mk-di-not-app__card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 22px;
}
.mk-di-not-app__card svg {
  color: var(--orderzy-brand);
  margin-bottom: 10px;
}
.mk-di-not-app__card h3 {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  margin: 0 0 4px;
}
.mk-di-not-app__card p {
  font-size: 13.5px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0;
}

/* ---------- Marketing-32 responsive ---------- */
@media (max-width: 1024px) {
  .mk-di-hero__headline { font-size: 36px; }
}
@media (max-width: 880px) {
  .mk-di-hero__grid { grid-template-columns: 1fr; gap: 32px; }
  .mk-di-hero__headline { font-size: 30px; }
  .mk-di-steps { grid-template-columns: 1fr; }
  .mk-di-split { grid-template-columns: 1fr; gap: 24px; margin-bottom: 40px; }
  .mk-di-split--reverse > :first-child { order: 0; }
  .mk-di-not-app { grid-template-columns: 1fr; }
}
@media (max-width: 520px) {
  .mk-di-hero__headline { font-size: 26px; }
}


/* ===================================================================
   BATCH 3 ADDITIONS. Marketing page 33 (city-landing)
   Per-city SEO template rendering CITY_DATA. Extends mk-* shells.
   =================================================================== */

.mk-cl-hero {
  padding: 16px 0 56px;
  position: relative;
  overflow: hidden;
}
.mk-cl-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 85% 10%, rgba(242,133,0,0.10) 0%, transparent 50%),
    radial-gradient(circle at 5% 80%, rgba(242,133,0,0.06) 0%, transparent 50%);
  pointer-events: none;
}
.mk-cl-hero__grid {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  gap: 48px;
  align-items: center;
  position: relative;
}
.mk-cl-hero__city-tag {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  background: var(--orderzy-brand-soft);
  padding: 5px 12px;
  border-radius: var(--r-pill);
  margin-bottom: 14px;
}
.mk-cl-hero__city-tag svg { color: var(--orderzy-brand); }
.mk-cl-hero__headline {
  font-family: var(--font-heading);
  font-size: 44px;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.025em;
  margin: 0 0 16px;
}
.mk-cl-hero__headline em {
  font-style: normal;
  color: var(--orderzy-brand);
}
.mk-cl-hero__sub {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  line-height: 1.65;
  max-width: 560px;
  margin: 0 0 24px;
}
.mk-cl-hero__ctas {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 20px;
}
.mk-cl-hero__trust {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 20px;
  font-size: 13px;
  color: var(--orderzy-ink-soft);
  font-weight: 600;
}
.mk-cl-hero__trust-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.mk-cl-hero__trust-item svg { color: var(--orderzy-success); }

/* Local (city) card */
.mk-cl-local {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  box-shadow: var(--orderzy-shadow-lift);
  overflow: hidden;
}
.mk-cl-local__banner {
  aspect-ratio: 4 / 3;
  background: var(--orderzy-surface-alt);
  position: relative;
  overflow: hidden;
}
.mk-cl-local__banner img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.mk-cl-local__banner-gradient {
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom, transparent 50%, rgba(31,29,26,0.75) 100%);
}
.mk-cl-local__banner-meta {
  position: absolute;
  bottom: 16px;
  left: 18px;
  right: 18px;
  color: #fff;
}
.mk-cl-local__banner-city {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 20px;
  color: #fff;
}
.mk-cl-local__banner-state {
  font-size: 13px;
  opacity: 0.85;
  margin-top: 3px;
}

/* Partner strip */
.mk-cl-partner {
  background: linear-gradient(135deg, var(--orderzy-brand-soft) 0%, #fde5c8 100%);
  border-radius: var(--r-lg);
  padding: 28px;
  display: grid;
  grid-template-columns: 120px 1fr;
  gap: 24px;
  align-items: center;
  position: relative;
  overflow: hidden;
}
.mk-cl-partner__pic {
  aspect-ratio: 1 / 1;
  border-radius: var(--r-md);
  overflow: hidden;
  box-shadow: var(--orderzy-shadow-whisper);
}
.mk-cl-partner__pic img { width: 100%; height: 100%; object-fit: cover; }
.mk-cl-partner__badge {
  display: inline-block;
  font-family: var(--font-heading);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  background: rgba(255,255,255,0.8);
  padding: 4px 10px;
  border-radius: var(--r-pill);
  margin-bottom: 10px;
}
.mk-cl-partner h3 {
  font-family: var(--font-heading);
  font-size: 20px;
  font-weight: 700;
  margin: 0 0 6px;
}
.mk-cl-partner p {
  font-size: 14px;
  color: var(--orderzy-ink-soft);
  margin: 0;
  line-height: 1.55;
}

/* Capabilities grid */
.mk-cl-cap {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}
.mk-cl-cap__card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 20px;
}
.mk-cl-cap__icon {
  width: 36px;
  height: 36px;
  border-radius: var(--r-sm);
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: grid;
  place-items: center;
  margin-bottom: 12px;
}
.mk-cl-cap__card h3 {
  font-family: var(--font-heading);
  font-size: 14px;
  font-weight: 700;
  margin: 0 0 4px;
}
.mk-cl-cap__card p {
  font-size: 13px;
  color: var(--orderzy-ink-soft);
  line-height: 1.5;
  margin: 0;
}

/* Nearby cities */
.mk-cl-nearby {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 8px;
}
.mk-cl-nearby__chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 10px 16px;
  border-radius: var(--r-pill);
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  font-family: var(--font-heading);
  font-size: 13px;
  font-weight: 600;
  color: var(--orderzy-ink);
}
.mk-cl-nearby__chip svg { color: var(--orderzy-brand); }
.mk-cl-nearby__note {
  font-size: 13px;
  color: var(--orderzy-ink-muted);
  margin-top: 12px;
}

/* Page 33 responsive */
@media (max-width: 1024px) { .mk-cl-cap { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 880px) {
  .mk-cl-hero__grid { grid-template-columns: 1fr; gap: 32px; }
  .mk-cl-hero__headline { font-size: 30px; }
  .mk-cl-partner { grid-template-columns: 1fr; gap: 16px; }
  .mk-cl-partner__pic { max-width: 160px; }
}
@media (max-width: 520px) {
  .mk-cl-cap { grid-template-columns: 1fr; }
  .mk-cl-hero__headline { font-size: 26px; }
}


/* ===================================================================
   BATCH 3 ADDITIONS. Marketing page 34 (blog index)
   Text-first article grid matching BLOG_ARTICLES data contract
   (slug/title/excerpt/date/read_time). No images, no categories.
   =================================================================== */

.mk-bl-masthead {
  padding: 56px 0 44px;
  border-bottom: 1px solid var(--orderzy-border);
  background: linear-gradient(180deg, var(--orderzy-brand-soft) 0%, transparent 100%);
}
.mk-bl-masthead__eyebrow {
  display: inline-block;
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  background: rgba(255,255,255,0.8);
  padding: 5px 12px;
  border-radius: var(--r-pill);
  margin-bottom: 14px;
}
.mk-bl-masthead__title {
  font-family: var(--font-heading);
  font-size: 44px;
  font-weight: 700;
  letter-spacing: -0.025em;
  line-height: 1.1;
  margin: 0 0 12px;
  max-width: 760px;
}
.mk-bl-masthead__sub {
  font-size: 17px;
  color: var(--orderzy-ink-soft);
  max-width: 620px;
  line-height: 1.6;
  margin: 0;
}

.mk-bl-grid {
  padding: 56px 0 48px;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}
.mk-bl-card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  padding: 28px 28px 24px;
  transition: box-shadow 180ms ease, transform 180ms ease, border-color 180ms ease;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.mk-bl-card:hover {
  box-shadow: var(--orderzy-shadow-lift);
  border-color: var(--orderzy-brand-soft);
  transform: translateY(-2px);
}
.mk-bl-card__media {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: var(--r-md);
  background: var(--orderzy-surface-alt);
  margin-bottom: 4px;
}
.mk-bl-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.mk-bl-card__date {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
}
.mk-bl-card__title {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  line-height: 1.25;
  letter-spacing: -0.01em;
  margin: 0;
  color: var(--orderzy-ink);
}
.mk-bl-card__title a { color: inherit; text-decoration: none; }
.mk-bl-card__title a:hover { color: var(--orderzy-brand-ink); }
.mk-bl-card__excerpt {
  font-size: 15px;
  color: var(--orderzy-ink-soft);
  line-height: 1.6;
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.mk-bl-card__foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 13px;
  color: var(--orderzy-ink-muted);
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px solid var(--orderzy-border);
}
.mk-bl-card__foot-link {
  font-family: var(--font-heading);
  font-weight: 700;
  color: var(--orderzy-brand-ink);
  display: inline-flex;
  align-items: center;
  gap: 5px;
  text-decoration: none;
}
.mk-bl-empty {
  grid-column: 1 / -1;
  color: var(--orderzy-ink-muted);
  font-size: 15px;
}

@media (max-width: 880px) {
  .mk-bl-masthead__title { font-size: 30px; }
  .mk-bl-grid { grid-template-columns: 1fr; gap: 20px; padding: 40px 0 36px; }
  .mk-bl-card { padding: 24px 22px 22px; }
  .mk-bl-card__title { font-size: 20px; }
}
@media (max-width: 520px) {
  .mk-bl-masthead__title { font-size: 26px; }
}


/* ===================================================================
   BATCH 3 ADDITIONS. Marketing page 35 (blog article)
   Shared shell for all 4 blog article templates.
   Typography-first prose, sticky TOC, share rail, inline CTA,
   highlight callout, comparison table, author bio, related cards.
   =================================================================== */

/* Article header */
.mk-ar-head {
  padding: 24px 0 40px;
  max-width: 760px;
  margin: 0 auto;
}
.mk-ar-head__tag {
  display: inline-block;
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  background: var(--orderzy-brand-soft);
  padding: 4px 11px;
  border-radius: var(--r-pill);
  margin-bottom: 16px;
}
.mk-ar-head__title {
  font-family: var(--font-heading);
  font-size: 44px;
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.025em;
  margin: 0 0 14px;
  color: var(--orderzy-ink);
}
.mk-ar-head__dek {
  font-size: 19px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0 0 24px;
}
.mk-ar-head__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  align-items: center;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--orderzy-border);
  font-size: 13.5px;
  color: var(--orderzy-ink-muted);
}
.mk-ar-head__author {
  display: flex;
  align-items: center;
  gap: 10px;
}
.mk-ar-head__avatar {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: grid;
  place-items: center;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 14px;
}
.mk-ar-head__name { color: var(--orderzy-ink); font-weight: 700; font-size: 14px; }
.mk-ar-head__role { font-size: 12px; color: var(--orderzy-ink-muted); }
.mk-ar-head__meta-sep { opacity: 0.5; }

/* Hero image */
.mk-ar-hero {
  max-width: 1100px;
  margin: 0 auto 40px;
  aspect-ratio: 16 / 8;
  border-radius: var(--r-lg);
  overflow: hidden;
  background: var(--orderzy-surface-alt);
}
.mk-ar-hero img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Layout */
.mk-ar-layout {
  display: grid;
  grid-template-columns: 220px 1fr 200px;
  gap: 56px;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px 64px;
}

/* TOC */
.mk-ar-toc {
  position: sticky;
  top: 96px;
  align-self: start;
  font-size: 13.5px;
}
.mk-ar-toc__title {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  margin: 0 0 14px;
  padding-left: 12px;
}
.mk-ar-toc ol {
  list-style: none;
  padding: 0;
  margin: 0;
}
.mk-ar-toc li {
  padding: 8px 0 8px 12px;
  border-left: 2px solid var(--orderzy-border);
}
.mk-ar-toc li.is-active {
  border-left-color: var(--orderzy-brand);
  color: var(--orderzy-brand-ink);
  font-weight: 700;
}
.mk-ar-toc a {
  color: var(--orderzy-ink-soft);
  text-decoration: none;
}
.mk-ar-toc a:hover { color: var(--orderzy-brand); }
.mk-ar-toc li.is-active a { color: var(--orderzy-brand-ink); }

/* Prose column */
.mk-ar-prose {
  max-width: 680px;
}
.mk-ar-prose p {
  font-size: 17px;
  line-height: 1.75;
  color: var(--orderzy-ink);
  margin: 0 0 22px;
}
.mk-ar-prose h2 {
  font-family: var(--font-heading);
  font-size: 28px;
  font-weight: 700;
  letter-spacing: -0.015em;
  margin: 48px 0 16px;
  line-height: 1.2;
  color: var(--orderzy-ink);
  scroll-margin-top: 100px;
}
.mk-ar-prose h3 {
  font-family: var(--font-heading);
  font-size: 20px;
  font-weight: 700;
  margin: 36px 0 12px;
  line-height: 1.3;
  color: var(--orderzy-ink);
}
.mk-ar-prose ul, .mk-ar-prose ol {
  font-size: 17px;
  line-height: 1.75;
  color: var(--orderzy-ink);
  padding-left: 22px;
  margin: 0 0 22px;
}
.mk-ar-prose li { margin-bottom: 8px; }
.mk-ar-prose strong { color: var(--orderzy-ink); font-weight: 700; }
.mk-ar-prose a {
  color: var(--orderzy-brand-ink);
  text-decoration: underline;
  text-decoration-color: rgba(184,102,0,0.35);
  text-underline-offset: 3px;
}
.mk-ar-prose a:hover { text-decoration-color: var(--orderzy-brand-ink); }

.mk-ar-prose blockquote {
  margin: 32px 0;
  padding: 8px 0 8px 24px;
  border-left: 4px solid var(--orderzy-brand);
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 600;
  color: var(--orderzy-ink);
  line-height: 1.5;
}
.mk-ar-prose blockquote footer {
  font-size: 13px;
  font-weight: 600;
  color: var(--orderzy-ink-muted);
  margin-top: 10px;
  font-family: var(--font-body);
}

/* Highlight callout */
.mk-ar-highlight {
  background: var(--orderzy-brand-soft);
  border-left: 4px solid var(--orderzy-brand);
  border-radius: var(--r-sm);
  padding: 18px 22px;
  margin: 28px 0;
}
.mk-ar-highlight h4 {
  font-family: var(--font-heading);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin: 0 0 6px;
  color: var(--orderzy-brand-ink);
}
.mk-ar-highlight p {
  margin: 0;
  font-size: 15.5px;
  line-height: 1.65;
  color: var(--orderzy-ink);
}

/* Comparison table */
.mk-ar-table {
  margin: 28px 0;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  overflow: hidden;
  font-size: 14.5px;
}
.mk-ar-table__title {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  padding: 12px 18px;
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
}
.mk-ar-table table {
  width: 100%;
  border-collapse: collapse;
}
.mk-ar-table th, .mk-ar-table td {
  padding: 12px 18px;
  text-align: left;
  line-height: 1.55;
}
.mk-ar-table thead th {
  font-family: var(--font-heading);
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
}
.mk-ar-table tbody tr + tr td { border-top: 1px solid var(--orderzy-border); }
.mk-ar-table tbody td:first-child {
  font-family: var(--font-heading);
  font-weight: 700;
  color: var(--orderzy-ink);
}
.mk-ar-table tbody td.mk-ar-table__good { color: var(--orderzy-success); font-weight: 700; }
.mk-ar-table tbody td.mk-ar-table__bad { color: var(--orderzy-danger); font-weight: 700; }

/* In-article CTA. P3.C01: swap dark gradient for warm canvas with accent
   border-left. Matches About-page editorial register. */
.mk-ar-inline-cta {
  background: var(--orderzy-surface);
  color: var(--orderzy-ink);
  border: 1px solid var(--orderzy-border);
  border-left: 4px solid var(--accent, var(--orderzy-brand-deep));
  border-radius: var(--r-lg);
  padding: 26px 28px;
  margin: 36px 0;
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 20px;
  align-items: center;
}
.mk-ar-inline-cta h4 {
  font-family: var(--font-heading);
  font-size: 20px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0 0 6px;
  line-height: 1.25;
}
.mk-ar-inline-cta p {
  font-size: 14.5px;
  color: var(--orderzy-ink-soft);
  margin: 0;
  line-height: 1.55;
}

/* Social share rail */
.mk-ar-rail {
  position: sticky;
  top: 96px;
  align-self: start;
}
.mk-ar-rail__title {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  margin: 0 0 12px;
}
.mk-ar-rail__list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.mk-ar-rail__list a {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--orderzy-border);
  display: grid;
  place-items: center;
  color: var(--orderzy-ink-muted);
  background: var(--orderzy-surface);
  text-decoration: none;
}
.mk-ar-rail__list a:hover { color: var(--orderzy-brand); border-color: var(--orderzy-brand); }

/* Author bio */
.mk-ar-author {
  max-width: 820px;
  margin: 32px auto 0;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  padding: 28px;
  display: grid;
  grid-template-columns: 64px 1fr;
  gap: 20px;
  align-items: center;
}
.mk-ar-author__avatar {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: grid;
  place-items: center;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 22px;
}
.mk-ar-author__label {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}
.mk-ar-author h4 {
  font-family: var(--font-heading);
  font-size: 18px;
  font-weight: 700;
  margin: 2px 0 6px;
}
.mk-ar-author p {
  font-size: 14.5px;
  color: var(--orderzy-ink-soft);
  line-height: 1.55;
  margin: 0;
}

/* Related */
.mk-ar-related {
  padding: 0 24px 64px;
  max-width: 1200px;
  margin: 0 auto;
}
.mk-ar-related h3 {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  margin: 0 0 20px;
}
.mk-ar-related__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}
.mk-ar-related__card {
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-lg);
  overflow: hidden;
  transition: box-shadow 200ms ease, transform 200ms ease;
}
.mk-ar-related__card:hover {
  box-shadow: var(--orderzy-shadow-lift);
  transform: translateY(-2px);
}
.mk-ar-related__body { padding: 20px 22px 22px; }
.mk-ar-related__tag {
  font-family: var(--font-heading);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  margin-bottom: 8px;
  display: inline-block;
}
.mk-ar-related__title {
  font-family: var(--font-heading);
  font-size: 16px;
  font-weight: 700;
  line-height: 1.35;
  margin: 0;
}
.mk-ar-related__title a {
  color: var(--orderzy-ink);
  text-decoration: none;
}
.mk-ar-related__title a:hover { color: var(--orderzy-brand-ink); }

/* P3.C01: TOC disclosure. Wraps the "In this article" list in a <details>
   so mobile visitors get a tap-to-open dropdown instead of a wall of anchors
   above the prose. Desktop keeps the list expanded (details[open]) and hides
   the chevron so the sidebar reads as a plain block. */
.mk-ar-toc__disclosure { }
.mk-ar-toc__disclosure > summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 0 0 0 12px;
  margin: 0 0 14px;
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  outline: none;
}
.mk-ar-toc__disclosure > summary::-webkit-details-marker { display: none; }
.mk-ar-toc__disclosure > summary:focus-visible {
  outline: 2px solid var(--orderzy-brand);
  outline-offset: 3px;
  border-radius: var(--r-sm);
}
.mk-ar-toc__chevron {
  width: 12px;
  height: 12px;
  display: none;
  transition: transform 180ms var(--ease, ease);
}
.mk-ar-toc__disclosure[open] .mk-ar-toc__chevron { transform: rotate(180deg); }

/* Article author bio: warmer, editorial. Matches About page register. */
.mk-ar-author {
  border-left: 4px solid var(--accent, var(--orderzy-brand-deep));
  padding-left: 24px;
  border-radius: 0;
  border-top: none;
  border-right: none;
  border-bottom: none;
  background: transparent;
}

/* Related-card polish: tighten spacing, add subtle underline hover. */
.mk-ar-related__title a {
  transition: color 150ms var(--ease, ease);
}

/* Page 35 responsive */
@media (max-width: 1024px) {
  .mk-ar-layout { grid-template-columns: 1fr; gap: 32px; padding-top: 24px; }
  .mk-ar-toc { position: static; order: -1; }
  .mk-ar-toc li { padding: 6px 0 6px 12px; }
  .mk-ar-rail { display: none; }
  .mk-ar-head__title { font-size: 34px; }
  .mk-ar-related__grid { grid-template-columns: repeat(2, 1fr); }
}
/* P3.C01: mobile TOC collapses; the <details> chevron becomes visible so the
   tap-affordance is legible. Desktop keeps the toc expanded by force via the
   `open` attribute on the <details>. */
@media (max-width: 767px) {
  .mk-ar-toc__disclosure > summary { padding: 10px 12px; background: var(--orderzy-surface); border: 1px solid var(--orderzy-border); border-radius: var(--r-md); margin: 0; justify-content: space-between; }
  .mk-ar-toc__disclosure > summary .mk-ar-toc__title-text { flex: 1; }
  .mk-ar-toc__chevron { display: inline-block; color: var(--orderzy-ink-muted); }
  .mk-ar-toc__disclosure[open] > summary { margin-bottom: 8px; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
  .mk-ar-toc ol { border: 1px solid var(--orderzy-border); border-top: none; border-radius: 0 0 var(--r-md) var(--r-md); background: var(--orderzy-surface); padding: 6px 8px; }
  .mk-ar-toc li { padding: 8px 8px 8px 16px; }
}
@media (max-width: 520px) {
  .mk-ar-head__title { font-size: 26px; }
  .mk-ar-head__dek { font-size: 16px; }
  .mk-ar-prose p, .mk-ar-prose ul, .mk-ar-prose ol { font-size: 16px; }
  .mk-ar-prose h2 { font-size: 24px; }
  .mk-ar-inline-cta { grid-template-columns: 1fr; }
  .mk-ar-author { grid-template-columns: 1fr; text-align: left; padding-left: 20px; }
  .mk-ar-author__avatar { margin: 0; }
  .mk-ar-related__grid { grid-template-columns: 1fr; }
  .mk-ar-table { font-size: 13.5px; }
  .mk-ar-table th, .mk-ar-table td { padding: 10px 12px; }
}

/* ===================================================================
   Customer account pages. Shared nav + layout for custDashboard,
   cprofile. my_orders uses its own mo-* layout.
   =================================================================== */

.cust-nav {
  display: flex;
  gap: 4px;
  padding: 4px;
  background: var(--orderzy-surface-alt);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  margin-bottom: 20px;
  overflow-x: auto;
}
.cust-nav__item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 14px;
  border-radius: var(--r-xs);
  font-weight: 600;
  font-size: 13.5px;
  color: var(--orderzy-ink-soft);
  text-decoration: none;
  white-space: nowrap;
  transition: all var(--dur-fast) var(--ease);
}
.cust-nav__item:hover {
  color: var(--orderzy-ink);
  background: rgba(0,0,0,0.03);
}
.cust-nav__item.is-active {
  background: #fff;
  color: var(--orderzy-brand-ink);
  box-shadow: 0 1px 2px rgba(31,29,26,0.06);
}

.cd-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 14px;
  margin-bottom: 24px;
}
.cd-stat {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  padding: 18px 20px;
  display: flex;
  align-items: center;
  gap: 14px;
}
.cd-stat__icon {
  width: 44px; height: 44px;
  border-radius: 12px;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.cd-stat__label {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin: 0 0 4px;
}
.cd-stat__value {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0;
  line-height: 1.2;
}
.cd-stat__sub {
  font-size: 12.5px;
  color: var(--orderzy-ink-muted);
  margin: 2px 0 0;
}
.cd-stat__sub a { color: var(--orderzy-brand-ink); font-weight: 600; text-decoration: none; }
.cd-stat__sub a:hover { text-decoration: underline; }

.cd-panel {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  overflow: hidden;
}
.cd-panel__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px 20px;
  border-bottom: 1px solid var(--orderzy-border);
  gap: 10px;
  flex-wrap: wrap;
}
.cd-panel__title {
  font-family: var(--font-heading);
  font-size: 16px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0;
}
.cd-panel__body { padding: 20px; }
.cd-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13.5px;
}
.cd-table th {
  text-align: left;
  padding: 12px 20px;
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--orderzy-ink-muted);
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
}
.cd-table td {
  padding: 14px 20px;
  border-bottom: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink-soft);
  vertical-align: middle;
}
.cd-table tr:last-child td { border-bottom: 0; }
.cd-table tr:hover td { background: var(--orderzy-surface-alt); }
.cd-empty {
  text-align: center;
  padding: 48px 24px;
  color: var(--orderzy-ink-muted);
}
.cd-empty__icon {
  width: 52px; height: 52px;
  margin: 0 auto 12px;
  color: var(--orderzy-border-strong);
}

/* ===================================================================
   Referrals (refer / track / thanks / paused). Shared form + table.
   =================================================================== */

.rf-wrap { max-width: 820px; margin: 32px auto 60px; padding: 0 16px; }
.rf-wrap--narrow { max-width: 560px; }

.rf-head { text-align: center; margin-bottom: 24px; }
.rf-head h1 {
  font-family: var(--font-heading);
  font-size: 30px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0 0 10px;
  letter-spacing: -0.02em;
}
.rf-head p { color: var(--orderzy-ink-soft); font-size: 16px; line-height: 1.6; margin: 0 0 8px; max-width: 620px; margin-left: auto; margin-right: auto; }
.rf-head a { color: var(--orderzy-brand-ink); text-decoration: none; font-weight: 600; }

.rf-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 24px;
  margin-bottom: 18px;
}

.rf-section-title {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0 0 4px;
}
.rf-section-sub { font-size: 13px; color: var(--orderzy-ink-muted); margin: 0 0 14px; }
.rf-divider { height: 1px; background: var(--orderzy-border); margin: 20px 0; border: 0; }

.rf-field { margin-bottom: 14px; }
.rf-field__label {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: var(--orderzy-ink);
  margin-bottom: 6px;
}
.rf-field input[type="text"],
.rf-field input[type="email"],
.rf-field input[type="tel"],
.rf-field textarea,
.rf-field select {
  width: 100%;
  padding: 10px 12px;
  font-size: 14px;
  color: var(--orderzy-ink);
  background: #fff;
  border: 1px solid var(--orderzy-border-strong);
  border-radius: var(--r-xs);
  transition: all var(--dur-fast) var(--ease);
}
.rf-field textarea { min-height: 80px; resize: vertical; }
.rf-field input:focus, .rf-field textarea:focus, .rf-field select:focus {
  outline: none;
  border-color: var(--orderzy-brand);
  box-shadow: 0 0 0 3px var(--orderzy-brand-soft);
}
.rf-field__help { font-size: 12px; color: var(--orderzy-ink-muted); margin-top: 4px; }
.rf-field__error { font-size: 12px; color: var(--orderzy-danger); margin-top: 4px; }
.rf-field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
@media (max-width: 560px) { .rf-field-row { grid-template-columns: 1fr; } }

.rf-alert {
  padding: 12px 16px;
  border-radius: var(--r-sm);
  margin-bottom: 14px;
  font-size: 13.5px;
}
.rf-alert--info    { background: #DBEAFE; color: #1E40AF; }
.rf-alert--error   { background: #FEE2E2; color: #991B1B; }
.rf-alert--success { background: #D1FAE5; color: #065F46; }

.rf-howitworks {
  font-size: 13.5px;
  color: var(--orderzy-ink-muted);
  margin-top: 24px;
  line-height: 1.7;
}
.rf-howitworks strong { color: var(--orderzy-ink); }
.rf-howitworks ol { padding-left: 22px; margin: 8px 0; }
.rf-howitworks ol li { margin-bottom: 4px; }

.rf-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-bottom: 28px;
}
@media (max-width: 620px) { .rf-stats { grid-template-columns: 1fr; } }
.rf-stat {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 18px 20px;
  text-align: center;
}
.rf-stat__label {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin: 0 0 6px;
}
.rf-stat__value {
  font-family: var(--font-heading);
  font-size: 28px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0;
}
.rf-stat__value--pending { color: #B45309; }
.rf-stat__value--paid    { color: #047857; }

.rf-table {
  width: 100%;
  border-collapse: collapse;
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  overflow: hidden;
  font-size: 13.5px;
}
.rf-table th {
  text-align: left;
  padding: 12px 14px;
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--orderzy-ink-muted);
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
}
.rf-table td {
  padding: 12px 14px;
  border-bottom: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink-soft);
}
.rf-table tr:last-child td { border-bottom: 0; }


/* ============================================================================
   PAGE-SCOPED STYLES (folded in 2026-04-20 from inline <style> blocks)
   Each prefix namespace is scoped to a single customer-facing page:
     cp-*   → customers/cprofile.html
     cod-*  → customers/bill_detail.html (renamed in bill-numbering PR 4; classes preserved for style continuity)
     gb-*   → marketplace/get_bill.html
     wl-*   → marketplace/waitlist_join.html
     ws-*   → marketplace/waitlist_status.html
     po-*   → orders/place_order.html
     bpc-*  → orders/bill_payment_complete.html
     fb-*   → orders/find_bill.html
   Rationale: consolidating these blocks here avoids per-request CSS churn,
   lets the browser cache the rules alongside the rest of orderzy.css,
   and keeps templates free of long inline <style> blocks.
   No visual change vs. the prior inline versions.
   ============================================================================ */

/* ---------- cp-*  customers/cprofile.html ---------- */
.cp-field input[type="text"],
.cp-field input[type="email"],
.cp-field input[type="number"],
.cp-field input[type="tel"],
.cp-field select,
.cp-field textarea {
  display: block;
  width: 100%;
  padding: 10px 12px;
  font-size: 14px;
  color: var(--orderzy-ink);
  background: #fff;
  border: 1px solid var(--orderzy-border-strong);
  border-radius: var(--r-xs);
  transition: all var(--dur-fast) var(--ease);
}
.cp-field input:focus,
.cp-field select:focus,
.cp-field textarea:focus {
  outline: none;
  border-color: var(--orderzy-brand);
  box-shadow: 0 0 0 3px var(--orderzy-brand-soft);
}
.cp-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
}
.cp-grid .cp-field--full { grid-column: 1 / -1; }
.cp-field__label {
  display: block;
  font-size: 11.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--orderzy-ink-muted);
  margin-bottom: 6px;
}
.cp-field__hint {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  margin-top: 4px;
}
.cp-section-title {
  grid-column: 1 / -1;
  font-family: var(--font-heading);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--orderzy-ink-soft);
  margin: 12px 0 0;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--orderzy-border);
}
@media (max-width: 640px) {
  .cp-grid { grid-template-columns: 1fr; }
}

/* ---------- cod-*  customers/bill_detail.html ---------- */
.cod-wrap { max-width: 820px; margin: 32px auto 60px; padding: 0 16px; }
.cod-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 28px;
}
.cod-brand { text-align: center; margin-bottom: 22px; }
.cod-brand a {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  color: var(--orderzy-brand-ink);
  text-decoration: none;
  letter-spacing: 0.5px;
}
.cod-head { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; }
.cod-head__left { flex: 1; min-width: 220px; }
.cod-order-num {
  display: inline-block;
  padding: 6px 14px;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  border-radius: 9999px;
  font-size: 13.5px;
  font-weight: 600;
  margin-bottom: 10px;
}
.cod-greet { font-family: var(--font-heading); font-size: 17px; font-weight: 700; color: var(--orderzy-ink); margin: 6px 0 0; }
.cod-sub { color: var(--orderzy-ink-muted); font-size: 13.5px; margin: 6px 0 0; }
.cod-meta {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin: 18px 0;
  padding: 14px 0;
  border-top: 1px solid var(--orderzy-border);
  border-bottom: 1px solid var(--orderzy-border);
}
.cod-meta__cell span:first-child {
  display: block;
  color: var(--orderzy-ink-muted);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 2px;
}
.cod-meta__cell span:last-child {
  font-weight: 600;
  color: var(--orderzy-ink);
  word-break: break-all;
}
@media (max-width: 620px) {
  .cod-meta { grid-template-columns: 1fr; gap: 10px; }
  .cod-meta__cell { border-bottom: 1px dashed var(--orderzy-border); padding-bottom: 8px; }
  .cod-meta__cell:last-child { border-bottom: 0; }
}
.cod-items { width: 100%; border-collapse: collapse; font-size: 13.5px; margin: 10px 0; }
.cod-items td { padding: 12px 6px; border-bottom: 1px solid var(--orderzy-border); vertical-align: middle; }
.cod-items tr:last-child td { border-bottom: 0; }
.cod-items img { border-radius: var(--r-xs); display: block; object-fit: cover; }
.cod-totals { padding: 18px 22px; background: var(--orderzy-surface-alt); border-radius: var(--r-sm); }
.cod-totals ul { list-style: none; padding: 0; margin: 0; }
.cod-totals li { display: flex; justify-content: space-between; padding: 5px 0; font-size: 14px; color: var(--orderzy-ink-soft); }
.cod-totals li.is-grand {
  margin-top: 8px; padding-top: 10px;
  border-top: 1px solid var(--orderzy-border);
  font-size: 17px; font-weight: 700;
  color: var(--orderzy-ink);
}
.cod-summary-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
  align-items: center;
  margin-top: 24px;
}
@media (max-width: 620px) { .cod-summary-row { grid-template-columns: 1fr; } }
.cod-denied {
  padding: 14px 18px;
  background: #FEE2E2;
  color: #991B1B;
  border-radius: var(--r-sm);
  margin-top: 14px;
  font-size: 13.5px;
  line-height: 1.5;
}
.cod-foot {
  display: flex; justify-content: space-between;
  flex-wrap: wrap; gap: 10px;
  margin-top: 28px; padding-top: 18px;
  border-top: 1px solid var(--orderzy-border);
  font-size: 13.5px;
  color: var(--orderzy-ink-soft);
}
.cod-foot b { color: var(--orderzy-ink); display: block; margin-bottom: 2px; }

/* ---------- gb-*  marketplace/get_bill.html ---------- */
.gb-wrap { max-width: 720px; margin: 24px auto 60px; padding: 0 16px; }
.gb-header {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 20px 22px;
  text-align: center;
  margin-bottom: 14px;
}
.gb-header h1 {
  font-family: var(--font-heading);
  font-size: 22px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0 0 4px;
  word-break: break-word;
}
.gb-header p { color: var(--orderzy-ink-muted); font-size: 13.5px; margin: 0; }
.gb-table-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
  padding: 8px 16px;
  background: var(--orderzy-success-soft, #ECFDF5);
  color: var(--orderzy-success, #065F46);
  border-radius: 9999px;
  font-weight: 600;
  font-size: 13.5px;
}
.gb-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  margin-bottom: 14px;
  overflow: hidden;
}
.gb-card__head {
  padding: 14px 20px;
  border-bottom: 1px solid var(--orderzy-border);
  background: var(--orderzy-surface-alt);
}
.gb-card__title {
  font-family: var(--font-heading);
  font-size: 15px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 0;
}
.gb-card__body { padding: 16px 20px; }
.gb-meta { display: flex; justify-content: space-between; gap: 12px; padding: 12px 20px; }
.gb-meta__label { color: var(--orderzy-ink-muted); font-size: 12px; display: block; margin-bottom: 2px; }
.gb-meta__val   { color: var(--orderzy-ink); font-weight: 700; font-size: 14px; }
.gb-order-strip {
  display: flex; justify-content: space-between; align-items: center;
  padding: 8px 20px;
  background: var(--orderzy-surface-alt);
  border-top: 1px solid var(--orderzy-border);
  font-size: 12.5px;
  color: var(--orderzy-ink-muted);
}
.gb-item-row {
  display: flex; justify-content: space-between; align-items: start;
  padding: 12px 20px;
  border-top: 1px solid var(--orderzy-border);
  gap: 12px;
}
.gb-item-row:first-of-type { border-top: 0; }
.gb-item-row__name { font-weight: 600; color: var(--orderzy-ink); flex: 1; min-width: 0; }
.gb-item-row__qty  { font-size: 12.5px; color: var(--orderzy-ink-muted); margin-top: 2px; }
.gb-item-row__amt  { font-weight: 600; color: var(--orderzy-ink); white-space: nowrap; }
.gb-total-row { display: flex; justify-content: space-between; padding: 6px 0; font-size: 14px; color: var(--orderzy-ink-soft); }
.gb-total-row.is-grand {
  margin-top: 8px; padding-top: 12px;
  border-top: 1px solid var(--orderzy-border);
  font-size: 17px; font-weight: 700; color: var(--orderzy-ink);
}
.gb-banner {
  background: #FFFBEB;
  border: 1px solid #F59E0B;
  border-radius: var(--r-sm);
  padding: 14px 18px;
  margin-bottom: 14px;
  display: flex; gap: 12px; align-items: start;
  flex-wrap: wrap; justify-content: space-between;
}
.gb-banner__text { flex: 1; min-width: 200px; color: #92400E; }
.gb-banner__text strong { display: block; color: #78350F; margin-bottom: 2px; }
.gb-paymethod {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 16px;
  border: 2px solid var(--orderzy-brand);
  background: var(--orderzy-brand-soft);
  border-radius: var(--r-sm);
  cursor: pointer;
  margin-bottom: 14px;
}
.gb-paymethod input[type="radio"] { margin: 0; accent-color: var(--orderzy-brand-ink); }
.gb-spinner {
  display: inline-block;
  width: 18px; height: 18px;
  border: 2px solid rgba(0,0,0,0.15);
  border-top-color: var(--orderzy-brand-ink);
  border-radius: 50%;
  animation: gb-spin 0.6s linear infinite;
  vertical-align: middle;
}
@keyframes gb-spin { to { transform: rotate(360deg); } }
.gb-counter-note {
  text-align: center;
  padding: 28px 20px;
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  margin-bottom: 14px;
}
.gb-counter-note__icon { width: 56px; height: 56px; margin: 0 auto 14px; color: var(--orderzy-brand-ink); }
.gb-help {
  padding: 12px 18px;
  background: var(--orderzy-surface-alt);
  border-radius: var(--r-sm);
  text-align: center;
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}

/* ---------- wl-*  marketplace/waitlist_join.html ---------- */
.wl-wrap { max-width: 520px; margin: 32px auto 60px; padding: 0 16px; }
.wl-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  margin-bottom: 16px;
  overflow: hidden;
}
.wl-header {
  padding: 22px 24px;
  text-align: center;
  border-bottom: 1px solid var(--orderzy-border);
}
.wl-header h1 { font-family: var(--font-heading); font-size: 20px; font-weight: 700; color: var(--orderzy-ink); margin: 0 0 4px; }
.wl-header p { color: var(--orderzy-ink-muted); font-size: 13.5px; margin: 0; }
.wl-body { padding: 22px 24px; }
.wl-body__title {
  font-family: var(--font-heading);
  font-size: 18px;
  font-weight: 700;
  color: var(--orderzy-ink);
  text-align: center;
  margin: 0 0 8px;
}
.wl-body__sub { color: var(--orderzy-ink-muted); text-align: center; font-size: 13.5px; line-height: 1.5; margin: 0 0 22px; }
.wl-field { margin-bottom: 16px; }
.wl-field__label { display: block; font-size: 13px; font-weight: 600; color: var(--orderzy-ink); margin-bottom: 6px; }
.wl-field input[type="text"],
.wl-field input[type="tel"],
.wl-field select {
  width: 100%;
  padding: 12px 14px;
  font-size: 16px;
  color: var(--orderzy-ink);
  background: #fff;
  border: 1px solid var(--orderzy-border-strong);
  border-radius: var(--r-sm);
  transition: all var(--dur-fast) var(--ease);
}
.wl-field input:focus, .wl-field select:focus {
  outline: none;
  border-color: var(--orderzy-brand);
  box-shadow: 0 0 0 3px var(--orderzy-brand-soft);
}
.wl-field__hint { font-size: 12px; color: var(--orderzy-ink-muted); margin-top: 4px; }
.wl-alert {
  padding: 12px 16px;
  border-radius: var(--r-sm);
  margin-bottom: 14px;
  font-size: 13.5px;
}
.wl-alert--error   { background: #FEE2E2; color: #991B1B; }
.wl-alert--success { background: #D1FAE5; color: #065F46; }
.wl-alert--info    { background: #DBEAFE; color: #1E40AF; }
.wl-alert--warn    { background: #FEF3C7; color: #92400E; }

/* ---------- ws-*  marketplace/waitlist_status.html ---------- */
.ws-wrap { max-width: 520px; margin: 32px auto 60px; padding: 0 16px; }
.ws-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  margin-bottom: 16px;
  overflow: hidden;
}
.ws-header {
  padding: 22px 24px;
  text-align: center;
  border-bottom: 1px solid var(--orderzy-border);
}
.ws-header h1 { font-family: var(--font-heading); font-size: 20px; font-weight: 700; color: var(--orderzy-ink); margin: 0 0 4px; }
.ws-header p { color: var(--orderzy-ink-muted); font-size: 13.5px; margin: 0; }
.ws-state { padding: 32px 24px; text-align: center; }
.ws-state__icon {
  width: 64px; height: 64px;
  margin: 0 auto 14px;
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%;
}
.ws-state__icon--wait    { background: #FEF3C7; color: #B45309; }
.ws-state__icon--called  { background: #D1FAE5; color: #047857; }
.ws-state__icon--seated  { background: #D1FAE5; color: #047857; }
.ws-state__icon--skipped { background: #FEE2E2; color: #B91C1C; }
.ws-state__icon--gone    { background: var(--orderzy-surface-alt); color: var(--orderzy-ink-muted); }
.ws-state__title { font-family: var(--font-heading); font-size: 19px; font-weight: 700; color: var(--orderzy-ink); margin: 0 0 8px; }
.ws-state__title--ok { color: #047857; }
.ws-state__position {
  font-family: var(--font-heading);
  font-size: 68px;
  font-weight: 800;
  color: var(--orderzy-ink);
  line-height: 1;
  margin: 0;
  letter-spacing: -0.03em;
}
.ws-state__sub { color: var(--orderzy-ink-muted); font-size: 14px; margin: 8px 0 16px; }
.ws-state__table-num {
  font-family: var(--font-heading);
  font-size: 26px;
  font-weight: 700;
  color: var(--orderzy-ink);
  margin: 6px 0 8px;
}
.ws-meta {
  padding: 10px 16px;
  background: var(--orderzy-surface-alt);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  font-size: 13.5px;
  color: var(--orderzy-ink-soft);
  margin-bottom: 12px;
  display: inline-block;
}
.ws-banner {
  padding: 10px 16px;
  background: #D1FAE5;
  color: #065F46;
  border-radius: var(--r-sm);
  font-size: 13.5px;
  margin-top: 10px;
}
.ws-spin {
  display: inline-block;
  width: 12px; height: 12px;
  border: 2px solid rgba(0,0,0,0.15);
  border-top-color: var(--orderzy-brand-ink);
  border-radius: 50%;
  animation: wsSpin 1s linear infinite;
  vertical-align: middle;
  margin-right: 5px;
}
@keyframes wsSpin { to { transform: rotate(360deg); } }

/* ---------- po-*  orders/place_order.html ---------- */
.po-wrap {
  max-width: 980px;
  margin: 24px auto 48px;
  padding: 0 16px;
  display: grid;
  grid-template-columns: 1fr 360px;
  gap: 20px;
  align-items: start;
}
@media (max-width: 840px) { .po-wrap { grid-template-columns: 1fr; } }
.po-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  overflow: hidden;
}
.po-card__head {
  padding: 14px 20px;
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
  font-family: var(--font-heading);
  font-size: 13px;
  font-weight: 700;
  color: var(--orderzy-ink);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  display: flex;
  align-items: center;
  gap: 8px;
}
.po-card__body { padding: 20px; }
.po-queue-note {
  padding: 10px 14px;
  background: var(--orderzy-brand-soft);
  color: var(--orderzy-brand-ink);
  border-radius: var(--r-sm);
  font-size: 13.5px;
  font-style: italic;
  margin-bottom: 14px;
}
.po-addr { line-height: 1.7; font-size: 14px; color: var(--orderzy-ink-soft); }
.po-addr > div { padding: 2px 0; }
.po-addr b { color: var(--orderzy-ink); margin-right: 4px; }
.po-items { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.po-items td { padding: 10px 6px; border-bottom: 1px solid var(--orderzy-border); vertical-align: middle; }
.po-items tr:last-child td { border-bottom: 0; }
.po-items img { border-radius: var(--r-xs); display: block; }
.po-totals { list-style: none; padding: 0; margin: 16px 0 0; }
.po-totals li { display: flex; justify-content: space-between; padding: 5px 0; font-size: 14px; color: var(--orderzy-ink-soft); }
.po-totals li.is-grand {
  margin-top: 8px; padding-top: 10px;
  border-top: 1px solid var(--orderzy-border);
  font-size: 17px; font-weight: 700;
  color: var(--orderzy-ink);
}
.po-actions { margin-top: 16px; }

/* ---------- bpc-*  orders/bill_payment_complete.html ---------- */
.bpc-wrap { max-width: 620px; margin: 28px auto 60px; padding: 0 16px; }
.bpc-status {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  padding: 40px 24px;
  text-align: center;
  margin-bottom: 16px;
}
.bpc-status__icon {
  width: 72px; height: 72px;
  margin: 0 auto 16px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
}
.bpc-status__icon--success { background: #D1FAE5; color: #047857; }
.bpc-status__icon--fail    { background: #FEE2E2; color: #B91C1C; }
.bpc-status__icon--pending { background: #FEF3C7; color: #B45309; }
.bpc-status h1 { font-family: var(--font-heading); font-size: 22px; font-weight: 700; margin: 0 0 8px; }
.bpc-status h1.is-success { color: #047857; }
.bpc-status h1.is-fail    { color: #B91C1C; }
.bpc-status h1.is-pending { color: #B45309; }
.bpc-status p { color: var(--orderzy-ink-muted); margin: 0; font-size: 14px; }
.bpc-card {
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-md);
  margin-bottom: 16px;
  overflow: hidden;
}
.bpc-card__head {
  padding: 14px 20px;
  background: var(--orderzy-surface-alt);
  border-bottom: 1px solid var(--orderzy-border);
  font-family: var(--font-heading);
  font-size: 14px;
  font-weight: 700;
  color: var(--orderzy-ink);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.bpc-card__body { padding: 18px 20px; }
.bpc-row {
  display: flex; justify-content: space-between;
  padding: 5px 0; gap: 10px;
  font-size: 14px;
}
.bpc-row > span:first-child { color: var(--orderzy-ink-muted); }
.bpc-row > span:last-child { color: var(--orderzy-ink); font-weight: 600; text-align: right; }
.bpc-divider { height: 1px; background: var(--orderzy-border); margin: 12px 0; }
.bpc-total {
  display: flex; justify-content: space-between; align-items: center;
  font-size: 17px; font-weight: 700;
  color: var(--orderzy-ink);
}
.bpc-total .is-amount { color: var(--orderzy-success, #047857); }
.bpc-total .is-due    { color: var(--orderzy-danger, #DC2626); }
.bpc-thanks {
  background: linear-gradient(135deg, var(--orderzy-brand) 0%, var(--orderzy-brand-ink) 100%);
  color: #fff;
  border-radius: var(--r-md);
  padding: 28px 24px;
  text-align: center;
  margin-bottom: 16px;
}
.bpc-thanks svg { margin-bottom: 10px; }
.bpc-thanks h2 { font-family: var(--font-heading); font-size: 20px; font-weight: 700; margin: 0 0 6px; }
.bpc-thanks p { margin: 0; font-size: 14px; opacity: 0.92; }
.bpc-spin {
  display: inline-block;
  width: 28px; height: 28px;
  border: 3px solid rgba(0,0,0,0.15);
  border-top-color: var(--orderzy-brand-ink);
  border-radius: 50%;
  animation: bpcSpin 0.8s linear infinite;
}
@keyframes bpcSpin { to { transform: rotate(360deg); } }
.bpc-alert-info {
  background: #DBEAFE;
  color: #1E40AF;
  padding: 14px 18px;
  border-radius: var(--r-sm);
  font-size: 13.5px;
}

/* ---------- fb-*  orders/find_bill.html ---------- */
.fb-wrap { max-width: 480px; margin: 32px auto 60px; padding: 0 16px; }
.fb-head { text-align: center; margin-bottom: 22px; }
.fb-head__icon {
  width: 56px; height: 56px;
  background: var(--orderzy-brand-soft);
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 12px;
  color: var(--orderzy-brand-ink);
}
.fb-head h1 { font-family: var(--font-heading); font-size: 22px; font-weight: 700; color: var(--orderzy-ink); margin: 0 0 4px; }
.fb-head p { color: var(--orderzy-ink-muted); font-size: 14px; margin: 0; }
.fb-phone { position: relative; margin-bottom: 12px; }
.fb-phone__prefix {
  position: absolute;
  left: 16px; top: 50%;
  transform: translateY(-50%);
  color: var(--orderzy-ink-muted);
  font-size: 15px;
  font-weight: 500;
  pointer-events: none;
}
.fb-phone input {
  width: 100%;
  padding: 14px 14px 14px 52px;
  font-size: 16px;
  border: 2px solid var(--orderzy-border);
  border-radius: 12px;
  background: #fff;
  color: var(--orderzy-ink);
  outline: none;
  transition: border-color 150ms;
}
.fb-phone input:focus { border-color: var(--orderzy-brand); }
.fb-results-head { font-size: 13px; color: var(--orderzy-ink-muted); margin: 24px 0 12px; }
.fb-order {
  display: block;
  text-decoration: none;
  color: inherit;
  background: #fff;
  border: 1px solid var(--orderzy-border);
  border-radius: 12px;
  padding: 16px;
  margin-bottom: 10px;
  transition: all 150ms;
}
.fb-order:hover { border-color: var(--orderzy-brand); box-shadow: 0 2px 8px rgba(242, 133, 0, 0.1); }
.fb-order__top { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; }
.fb-order__name { font-weight: 600; font-size: 15px; color: var(--orderzy-ink); margin-bottom: 4px; }
.fb-order__time { font-size: 13px; color: var(--orderzy-ink-muted); }
.fb-order__price {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 16px;
  color: var(--orderzy-ink);
  white-space: nowrap;
}
.fb-order__method { font-size: 12px; margin-top: 2px; }
.fb-order__method--pae    { color: #3B82F6; }
.fb-order__method--cash   { color: var(--orderzy-ink-muted); }
.fb-order__method--online { color: #10B981; }
.fb-order__foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--orderzy-border);
  gap: 6px;
  flex-wrap: wrap;
}
.fb-order__num {
  font-size: 12px;
  color: var(--orderzy-ink-muted);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fb-order__cta { font-size: 13px; color: var(--orderzy-brand-ink); font-weight: 600; white-space: nowrap; }
.fb-pill { font-size: 10px; padding: 2px 8px; border-radius: 20px; font-weight: 600; white-space: nowrap; }
.fb-pill--placed    { color: #F59E0B; background: #FFFBEB; }
.fb-pill--preparing { color: #F28500; background: #FFF7ED; }
.fb-pill--ready     { color: #10B981; background: #ECFDF5; }
.fb-empty { text-align: center; padding: 32px 16px; }
.fb-empty__icon { font-size: 40px; margin-bottom: 8px; }
.fb-empty__title { font-weight: 600; color: var(--orderzy-ink); margin-bottom: 4px; }
.fb-empty__sub {
  font-size: 13px;
  color: var(--orderzy-ink-muted);
  max-width: 320px;
  margin: 0 auto;
  line-height: 1.5;
}

/* ===========================================================
   Focus indication (Phase 0 / H12) - must sit at end of file
   so it wins source-order against page-specific :focus rules
   that pair `outline: none` with a `box-shadow` ring. Those
   rules keep working on mouse/touch focus; this layer ensures
   keyboard focus always shows a clear ring.
   =========================================================== */
.btn:focus-visible,
.adm-btn:focus-visible,
.input:focus-visible,
.auth-input:focus-visible,
.adm-field__input:focus-visible,
button:focus-visible,
a:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible,
[role="button"]:focus-visible {
  outline: 2px solid var(--focus-ring);
  outline-offset: 2px;
}


/* ===========================================================
   LUXE CARD-SCOPED TOKENS  (STYLEGUIDE_LUXE.md §1.8, §2.7, §3.2)
   For Luxe outlet cards rendered on multi-brand Warmth pages (homepage,
   marketplace listing, find-a-table). The page chrome stays Warmth; each card
   flips to its brand theme via data-theme="luxe". Per-card accent is injected
   inline as --card-brand-accent; falls back to Charcoal.
   =========================================================== */
.outlet-card {
  --card-canvas:       #fdfbf7;
  --card-surface:      #ffffff;
  --card-surface-alt:  #f6f0e6;
  --card-divider:      #ede5d7;
  --card-ink:          #1a1815;
  --card-ink-muted:    #6b6760;
  --card-accent:       var(--card-brand-accent, #1a1815);
  --card-font-display: "DM Serif Display", Georgia, serif;
  --card-font-body:    "Inter", system-ui, sans-serif;
  --card-radius:       8px;
  --card-shadow:       0 2px 8px rgba(0,0,0,0.04);
}

/* ===========================================================
   COMPONENTS  (formerly LUXE COMPONENTS: STYLEGUIDE_LUXE.md section 3 + PLAN_PREMIUM_TIER.md section 2.4)

   Post-Luxe-unification (2026-08-14): the `body.theme-luxe` wrapper was
   retired. Rules below apply site-wide as the default surface. Two kinds
   of rules coexist here:
   1. Component styling for production classes (.btn, .menu-item, .oz-nav,
      .oz-footer, .pill, .input, .bill ...) which are now the site-wide
      treatment. Earlier declarations of the same classes elsewhere in this
      file may still exist as pre-unification base rules; source-order + the
      cascade resolves the effective render.
   2. NET-NEW components (.course-header, .lazy-image, .skeleton). The
      previously orphaned `.luxe-*` design-system stubs (modal, toast, step,
      slot, empty, field, dish__*, nav__outlet) were deleted in P4.C01
      because no template or JS ever consumed them; when a future rebuild
      needs a modal / toast / step primitive, add fresh classes under the
      `.oz-*` namespace rather than reviving the `.luxe-*` prefix.

   Motion: transitions run on --duration-*/--ease-* tokens; card hover scale
   capped at 1.03 (§5.1 rule 2). The global prefers-reduced-motion block
   zeroes all of it.
   =========================================================== */

/* Focus ring follows the brand accent (STYLEGUIDE §7.2).
   Post-Luxe-unification (2026-08-14): the --focus-ring token now lives in
   :root above and reads var(--accent) directly. This standalone override
   was retired alongside the wrapper. */

/* ---------- §3.1 Buttons - OUTLINED, never filled (LOCKED) ---------- */
.btn {
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 15px;
  letter-spacing: 0.04em;
  padding: 16px 32px;
  min-height: 48px;
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  transition: color var(--duration-base) var(--ease-default),
              border-color var(--duration-base) var(--ease-default),
              box-shadow var(--duration-base) var(--ease-default),
              transform 80ms var(--ease-accelerate);
}
.btn:active { transform: scale(0.98); }

/* Primary: outlined accent, transparent fill. */
.btn--primary {
  background: transparent;
  color: var(--accent);
  border-color: var(--accent);
  box-shadow: none;
}
.btn--primary:hover {
  background: transparent;
  color: var(--accent-hover);
  border-color: var(--accent-hover);
  box-shadow: var(--shadow-soft);
}
.btn--primary:disabled,
.btn--primary[aria-disabled="true"] {
  background: transparent;
  color: var(--orderzy-ink-muted);
  border-color: var(--orderzy-border);
  box-shadow: none;
}

/* Secondary: text link, no border, no fill. */
.btn--secondary {
  background: transparent;
  color: var(--accent);
  border-color: transparent;
  padding: 8px 4px;
  min-height: 0;
  text-decoration: none;
}
.btn--secondary:hover {
  background: transparent;
  text-decoration: underline;
  text-decoration-color: var(--accent);
  text-underline-offset: 4px;
}

/* Danger: text link in muted semantic red (cancel / destructive). */
.btn--danger,
.btn-cancel {
  background: transparent;
  color: var(--orderzy-danger);
  border-color: transparent;
}
.btn--danger:hover,
.btn-cancel:hover {
  background: transparent;
  text-decoration: underline;
  text-decoration-color: var(--orderzy-danger);
  text-underline-offset: 4px;
}

/* Ghost: icon-only square, quiet hover. */
.btn--ghost {
  background: transparent;
  color: var(--orderzy-ink-soft);
  border-color: transparent;
}
.btn--ghost:hover {
  background: var(--orderzy-surface-alt);
  color: var(--orderzy-ink);
  border-radius: var(--radius-sm);
}

.btn--large { font-size: 15px; padding: 20px 40px; min-height: 52px; }
.btn--block { width: 100%; }

/* ===========================================================
   P1.C04 - Design System Wave 1 (2026-08-15)
   -----------------------------------------------------------
   Runs AFTER the Luxe cascade block above so its filled-primary
   override wins the specificity race. Three intents:

   1. Reintroduce filled primary buttons. The pixel-truth pass
      on 2026-08-15 evening (master audit §0.5.3, §0.5.8) found
      that primary CTAs on /for-restaurants/, /find-table/, and
      the home hero were rendering as outlined-only. Filled
      primaries were retired inside the Luxe cascade (see
      .btn--primary at :~8302); reintroduced here as the
      canonical Wave 1 look. Outlined stays available as
      .btn.btn--ghost / .btn.btn--secondary.

   2. Add .oz-sec--hero / --standard / --wide / --quiet section
      variants per master audit §1.3. New pages compose with
      these; .section (home) and .mk-sec (marketing) stay
      untouched with their existing padding, deletion deferred
      to Phase 2's cross-page sweep. Docs the four-variant
      vocabulary at the token layer so any surface can adopt.

   3. Restore .cat-nav sidebar on desktop. The .rest-layout
      grid was collapsed to display:block AND the sidebar hidden
      with display:none inside the Luxe cascade, wasting the
      confidence a sync-navigation sidebar brings to a long
      menu. Undoing both restores the base 220px + 1fr grid at
      >=880px and lets the existing @media (max-width: 880px)
      rule handle mobile as a horizontal pill strip. The new
      Level 2 sticky-top chip strip pattern ships in Phase 2.
   =========================================================== */

/* 1. Filled primary CTA. */
.btn.btn--primary {
  background: var(--accent);
  color: var(--accent-contrast);
  border-color: var(--accent);
}
.btn.btn--primary:hover {
  background: var(--accent-hover);
  color: var(--accent-contrast);
  border-color: var(--accent-hover);
}
.btn.btn--primary:disabled,
.btn.btn--primary[aria-disabled="true"] {
  background: var(--orderzy-border);
  color: var(--orderzy-ink-muted);
  border-color: var(--orderzy-border);
  cursor: not-allowed;
}

/* 2. Section variants. Padding + background per master audit §1.3.
      D also constrains width to keep editorial paragraphs readable. */
.oz-sec { padding: 64px 0; }
.oz-sec--hero { padding: 72px 0 48px; background: var(--orderzy-canvas); }
.oz-sec--standard { padding: 64px 0; }
.oz-sec--wide { padding: 96px 0; }
.oz-sec--quiet {
  padding: 48px 0;
  background: var(--orderzy-canvas);
}
.oz-sec--quiet > .container,
.oz-sec--quiet > .oz-container {
  max-width: 720px;
  margin: 0 auto;
}
.oz-sec--alt { background: var(--orderzy-surface-alt); }
.oz-sec--ink {
  background: var(--orderzy-ink);
  color: var(--orderzy-ink-invert);
}
.oz-sec--ink h2,
.oz-sec--ink h3 { color: var(--orderzy-ink-invert); }
.oz-sec__eyebrow {
  display: inline-block;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  letter-spacing: var(--tracking-wide, 0.12em);
  text-transform: uppercase;
  color: var(--accent);
  margin-bottom: 12px;
}
.oz-sec__title {
  font-family: var(--font-display, "DM Serif Display", Georgia, serif);
  font-weight: 400;
  font-size: var(--text-h2, clamp(32px, 4vw, 40px));
  line-height: var(--leading-snug, 1.3);
  color: var(--orderzy-ink);
  margin: 0 0 12px;
}
.oz-sec__sub {
  font-family: var(--font-body);
  font-size: 17px;
  line-height: var(--leading-relaxed, 1.7);
  color: var(--orderzy-ink-soft);
  margin: 0;
  max-width: 720px;
}
@media (max-width: 767px) {
  .oz-sec { padding: 48px 0; }
  .oz-sec--hero { padding: 56px 0 32px; }
  .oz-sec--standard { padding: 48px 0; }
  .oz-sec--wide { padding: 64px 0; }
  .oz-sec--quiet { padding: 32px 0; }
}

/* 3. Restore .cat-nav sidebar on desktop.
      The Luxe cascade block at ~8674-8675 declared:
          .rest-layout { display: block; padding-top: 0; }
          .cat-nav    { display: none; }
      Wave 1 removes both by resetting them to the base grid + visible
      sidebar. The base @media (max-width: 880px) rule at ~1464 already
      turns the sidebar into a horizontal pill strip on small screens. */
.rest-layout { display: grid; padding-top: 32px; }
.cat-nav { display: block; }
@media (max-width: 880px) {
  .rest-layout { display: grid; grid-template-columns: 1fr; padding-top: 16px; }
  .cat-nav { display: flex; }
}

/* §3.3 dish "Add to order" + qty stepper inherit the outlined treatment.
   Solid surface bg + 2px white outline so the button stays readable when it
   overlaps any food photo (bright or dark). Without this the transparent
   variant disappeared against dark plates (image-5 report 2026-06-15). */
.menu-item__add {
  background: var(--orderzy-surface, #fdfbf7);
  color: var(--accent);
  border: 2px solid var(--accent);
  border-radius: var(--radius-md);
  font-family: var(--font-body);
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: none;
  box-shadow:
    0 0 0 2px rgba(255, 255, 255, 0.85),
    var(--shadow-medium);
  transition: color var(--duration-base) var(--ease-default),
              border-color var(--duration-base) var(--ease-default),
              background var(--duration-base) var(--ease-default),
              box-shadow var(--duration-base) var(--ease-default);
}
.menu-item__add:hover {
  background: var(--accent);
  color: #fff;
  border-color: var(--accent);
  box-shadow:
    0 0 0 2px rgba(255, 255, 255, 0.85),
    var(--shadow-medium);
}
.menu-item__add:disabled,
.menu-item__add:disabled:hover {
  background: var(--orderzy-surface, #fdfbf7);
  color: var(--orderzy-ink-muted);
  border-color: var(--orderzy-border);
  box-shadow: var(--shadow-soft);
}
.menu-item__media .qty-stepper {
  background: var(--orderzy-surface);
  color: var(--accent);
  border: 2px solid var(--accent);
  box-shadow:
    0 0 0 2px rgba(255, 255, 255, 0.85),
    var(--shadow-medium);
}
.menu-item__media .qty-stepper__btn { color: var(--accent); }
.menu-item__media .qty-stepper__btn:hover {
  background: color-mix(in srgb, var(--accent) 8%, transparent);
}

/* ---------- §3.2a Rest-card Luxe overrides (current rest-card.html structure) ---------- */
/* Minimal card-scoped Luxe treatment: cream canvas + serif title.                        */
/* Per-card accent is already injected inline as --card-brand-accent.                     */
.rest-card {
  --card-font-display: "DM Serif Display", Georgia, serif;
  background: #fdfbf7;
  border-color: #ede5d7;
}
.rest-card .rest-card__title {
  font-family: var(--card-font-display);
  font-weight: 400;
  letter-spacing: -0.01em;
}
/* Luxe brand-card CTAs - per styleguide §2.7. The relationship is reversed:
   on a Luxe brand (typically reservation-led fine dining), "Book a table"
   is primary outlined-accent, "View menu" is secondary text link. */
.rest-card .rest-card__view-cta {
  background: transparent;
  border: none;
  padding: 8px 4px;
  color: var(--card-brand-accent, #1a1815);
  font-family: "Inter", system-ui, sans-serif;
  font-weight: 500;
  font-size: 13px;
  letter-spacing: 0.04em;
}
.rest-card .rest-card__view-cta:hover {
  background: transparent;
  text-decoration: underline;
  text-underline-offset: 4px;
}
.rest-card .rest-card__book-cta {
  border: 1px solid var(--card-brand-accent, #1a1815);
  border-radius: 8px;
  padding: 8px 16px;
  color: var(--card-brand-accent, #1a1815);
  font-family: "Inter", system-ui, sans-serif;
  font-weight: 500;
  font-size: 13px;
  letter-spacing: 0.04em;
  transition: background 320ms cubic-bezier(0.16, 1, 0.3, 1),
              color 320ms cubic-bezier(0.16, 1, 0.3, 1);
}
.rest-card .rest-card__book-cta:hover {
  background: var(--card-brand-accent, #1a1815);
  color: #fdfbf7;
  text-decoration: none;
}

/* ---------- §3.2 Outlet card (multi-brand pages, card-scoped theme) ---------- */
.outlet-card {
  background: var(--card-surface);
  border: 1px solid var(--card-divider);
  border-radius: var(--card-radius);
  box-shadow: var(--card-shadow);
  padding: 32px;
  min-height: 380px;
  color: var(--card-ink);
  transition: box-shadow 600ms var(--ease-emphasized, ease);
}
.outlet-card .outlet-card__hero {
  aspect-ratio: 16 / 10;
  overflow: hidden;
  border-radius: var(--card-radius);
}
.outlet-card .outlet-card__hero img {
  width: 100%; height: 100%; object-fit: cover;
  transition: transform 600ms var(--ease-emphasized, ease);
}
.outlet-card .outlet-card__cuisine {
  font-family: var(--card-font-body);
  font-size: 13px; font-weight: 500;
  text-transform: uppercase; letter-spacing: 0.12em;
  color: var(--card-ink-muted);
}
.outlet-card .outlet-card__name {
  font-family: var(--card-font-display);
  font-size: 22px; margin: 6px 0;
}
.outlet-card .outlet-card__cta {
  display: inline-block;
  border: 1px solid var(--card-accent);
  color: var(--card-accent);
  border-radius: var(--card-radius);
  padding: 12px 24px;
  font-family: var(--card-font-body);
  font-weight: 500; font-size: 14px; letter-spacing: 0.04em;
}
@media (hover: hover) {
  .outlet-card:hover { box-shadow: var(--shadow-medium); }
  .outlet-card:hover .outlet-card__hero img { transform: scale(1.03); }
}
.outlet-card.is-closed .outlet-card__hero img { filter: grayscale(0.4); opacity: 0.8; }
@media (max-width: 768px) { .outlet-card { min-height: 320px; padding: 24px; } }

/* ---------- §3.3 Dish card - flat on canvas, divider ABOVE, no shadow ---------- */
/* Luxe section spacing: 40px instead of 96px. The sticky .course-header
   pill already gives the category its own visual break; 96px on top of a
   sticky header reads as a dead empty band (image-11 feedback 2026-06-11). */
.menu-cat { margin-bottom: 40px; }
/* In Luxe, the .course-header pill IS the visible section header.
   Hide the h2/count visually but keep them in the accessibility tree so
   screen readers still announce the category boundary. */
.menu-cat__head {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
.menu-cat__title {
  font-family: var(--font-display);
  font-size: var(--text-h3);
  font-weight: 400;
  letter-spacing: var(--tracking-tight);
}
.menu-item {
  padding: var(--space-5) 0;
  border-top: 1px solid var(--orderzy-border);
  border-bottom: none;
  transition: border-top-color var(--duration-base) var(--ease-default);
}
.menu-item:first-child { border-top: none; }
.menu-item__title {
  font-family: var(--font-display);
  font-size: var(--text-h3);
  font-weight: 400;
  letter-spacing: var(--tracking-tight);
}
.menu-item__desc {
  font-family: var(--font-body);
  font-size: var(--text-body);
  color: var(--orderzy-ink-soft);
  line-height: var(--leading-relaxed);
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
/* Luxe needs its own is-expanded rule to beat the specificity of the
   `.menu-item__desc` selector above. Without this, tapping
   "more" on a Luxe menu would leave the clamp at 3 lines. */
.menu-item__desc.is-expanded {
  -webkit-line-clamp: unset;
  overflow: visible;
}
.menu-item__price {
  font-family: var(--font-body);
  font-size: var(--text-price);
  font-weight: 500;
  font-feature-settings: "tnum";
  transition: color var(--duration-base) var(--ease-default);
}
/* P4.C01 (2026-08-15) - `.luxe-dish__note`, `.luxe-dish__provenance`,
   `.luxe-dish__bestseller` deleted. Zero template/JS consumers. The live chef
   note markup uses `.menu-item__chef-note` further down this file. */
/* Hover (desktop only) - divider + price shift to accent, no bg change (§5.4). */
@media (hover: hover) {
  .menu-item:hover { border-top-color: color-mix(in srgb, var(--accent) 30%, transparent); }
  .menu-item:hover .menu-item__price { color: var(--accent); }
}
/* The `.menu-item--hero` inline render path was retired on 2026-06-19 when the
   House Favourites rail above the search bar replaced it. .menu-rail__* rules
   live at the bottom of this file. */

/* §8.6 No-photo fallback - INTENTIONALLY NOT a sand placeholder card.
   Styleguide v1 specified a placeholder with the dish title centered,
   but in practice (2026-05-31 user feedback on image #11) the placeholder
   ate horizontal space on mobile and showed redundant text (dish title
   already in info column). Decision: let .menu-item__media--noimg collapse
   to auto-size like Warmth does; cart controls stay inline via the
   existing `.menu-item__media--noimg .menu-item__add { position: static }`
   rule. Styleguide §8.6 should be updated to match this behavior. */

/* ---------- §3.4 Navbar - quiet, brand-name primary, no notif bell ---------- */
.oz-nav {
  background: var(--orderzy-canvas);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border-bottom: 1px solid var(--orderzy-border);
  transition: background var(--duration-base) var(--ease-emphasized, ease),
              box-shadow var(--duration-base) var(--ease-emphasized, ease);
}
.oz-nav.is-stuck { box-shadow: var(--shadow-soft); }
.oz-nav__inner { height: 60px; }
/* The "Orderzy" wordmark stays in Playfair Display Bold 800 in BOTH themes -
   it's the platform mark, not theme typography. Color stays brand-orange
   (locked truth: --orderzy-wordmark always #f28500 per styleguide §0). */
.oz-wordmark {
  font-family: "Playfair Display", "DM Serif Display", Georgia, serif;
  font-weight: 800;
  font-size: 22px;
  letter-spacing: 0;
  color: var(--orderzy-brand);
  line-height: 1;
}
/* P4.C01 (2026-08-15) - `.oz-wordmark--brand` variant deleted. Zero template
   consumers post-Wave-0; the navbar renders the platform wordmark (Playfair
   Display + `--orderzy-brand`) on every surface per
   feedback_navbar_orderzy_wordmark_locked. */
/* P4.C01 (2026-08-15) - `.luxe-nav__outlet` deleted. Zero template consumers;
   the outlet name renders through `.oz-nav__outlet` in `includes/navbar.html`. */
/* No notification bell on the customer-facing Luxe surface.
   Scoped to .oz-nav so the admin-shell bell (rendered inside .adm-top__actions
   on Luxe brand admin pages) isn't accidentally hidden. */
.oz-nav .oz-nav__bell { display: none; }
/* Cart: quiet icon, small adjacent count, no bright badge. */
.oz-nav__cart {
  background: transparent;
  border-color: transparent;
  color: var(--orderzy-ink);
}
.oz-nav__cart:hover { border-color: var(--orderzy-border); }
.oz-nav__cart-badge {
  background: transparent;
  color: var(--accent);
  border: none;
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
}
@media (max-width: 768px) { .oz-nav__inner { height: 56px; } }

/* ---------- §3.3a Menu layout - P1.C04 (2026-08-15) restores desktop sidebar.
   The pre-Wave-1 Luxe cascade collapsed .rest-layout to display:block and hid
   .cat-nav entirely, which read as a 220px wasted column on desktop (master
   audit §0.5.4) and dropped a genuine desktop navigation win. The two rules
   below now come from the P1.C04 block at ~8367 in this file; the .rest-layout
   / .cat-nav overrides that used to live here are deleted. .menu-page-content
   still constrains the menu column width when there's no sidebar. */
.menu-page-content { max-width: 800px; margin: 0 auto; }

/* Restaurant hero outlet sub-name (was inline in restaurant__detail.html). */
.rest-info__outlet {
  font-family: var(--font-display, "DM Serif Display", Georgia, serif);
  font-weight: 400;
  letter-spacing: 0;
}

/* Call-waiter button - Luxe variant per §3.1 (outlined, accent-color).
   .rest-banner stays --orderzy-brand-soft in Luxe (warm cream), so we
   need accent-on-cream not white-on-dark. */
.cw-btn {
  background: transparent;
  border-color: var(--accent);
  color: var(--accent);
  font-family: var(--font-body, "Inter", system-ui, sans-serif);
  font-weight: 500;
  letter-spacing: 0.04em;
}
.cw-btn:hover {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--accent-contrast, #fdfbf7);
}

/* ---------- §3.5 Sticky course header (CSS only; JS in Session 22) ----------
   Only ONE pill ever renders - the active section's. Non-active pills are
   removed from the document entirely (display:none) so they cannot stack at
   the top, cannot create competing stacking contexts, and cannot poke through
   an open dropdown. Trade-off: inline section dividers are gone; the sticky
   active pill IS the visible section header (image-13/14/15 feedback
   2026-06-11). The IntersectionObserver in course-progression.js
   toggles .is-active per scroll position. The .menu-cat__head h2 remains
   sr-only above for screen-reader section announcement. */
.course-header {
  display: none;
}
.course-header.is-active {
  display: flex;
  position: sticky;
  top: 60px;
  z-index: 40;
  height: 36px;
  align-items: center;
  justify-content: center;
  background: var(--orderzy-canvas);
  border-bottom: 1px solid var(--orderzy-border);
}
/* When the dropdown is open, lift the header above other sticky course
   headers so the open list isn't covered by the next category scrolling
   into view. Sibling sticky headers share z-index:40, so a tie goes to
   the later DOM order without this boost. */
.course-header.is-dropdown-open {
  z-index: 80;
}
/* Black, solid text on every pill - readable on cream canvas. */
.course-header__name {
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--orderzy-ink);
  opacity: 1;
  transition: opacity 250ms var(--ease-default);
}
.course-header__chevron {
  width: 20px; height: 20px; margin-left: 8px; color: var(--orderzy-ink);
  background: transparent; border: none; padding: 0; cursor: pointer;
}
.course-dropdown {
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  z-index: 50;
  min-width: 220px;
  max-height: 60vh;
  overflow-y: auto;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-medium);
  padding: var(--space-3) 0;
  display: none;
}
.course-dropdown.is-open { display: block; }
.course-dropdown__item {
  display: block;
  width: 100%;
  text-align: left;
  background: transparent;
  border: none;
  cursor: pointer;
}
.course-dropdown__item {
  font-family: var(--font-display);
  font-size: 17px;
  padding: var(--space-2) var(--space-4);
  color: var(--orderzy-ink);
}
.course-dropdown__item--current { border: 1px solid var(--accent); border-radius: var(--radius-sm); }
@media (max-width: 768px) { .course-header { top: 56px; } }

/* ---------- §3.6 Footer - warm cream surface, Orderzy wordmark always present ----------
   Luxe footer keeps the new two-column-top structure; only colors flip
   from dark-ink to cream-friendly muted-ink. */
.oz-footer {
  background: var(--orderzy-surface-alt);
  color: var(--orderzy-ink-soft);
  border-top: 1px solid var(--orderzy-border);
}
.oz-footer__col h3 {
  color: var(--orderzy-ink);
  letter-spacing: 0.12em;
}
.oz-footer__col a,
.oz-footer__contact a {
  color: var(--orderzy-ink-soft);
}
.oz-footer__col a:hover,
.oz-footer__contact a:hover {
  color: var(--accent);
}
.oz-footer__tagline {
  color: var(--orderzy-ink-muted);
}
.oz-footer__brand-desc {
  color: var(--orderzy-ink-muted);
}
.oz-footer__bottom-strip {
  border-top-color: var(--orderzy-border);
}
.oz-footer__copy { color: var(--orderzy-ink-muted); }
/* Orderzy wordmark stays brand orange #f28500 in both themes (LOCKED §1.1).
   .oz-wordmark already gets Playfair Display Bold 800 from the base rule;
   in Luxe the brand-title size is footer-tuned. */
.oz-footer__brand-title { color: var(--orderzy-brand); }

/* Re-skin the existing sticky bill card so the cart page reads Luxe today. */
.bill { border-color: var(--orderzy-border); border-radius: var(--radius-md); }
.bill__title { font-family: var(--font-display); font-weight: 400; border-bottom-color: var(--orderzy-border); }
.bill__line { font-family: var(--font-body); font-feature-settings: "tnum"; }
.bill__line--total { font-family: var(--font-body); font-weight: 700; font-size: 28px; border-top-color: var(--orderzy-border); }

/* ---------- §3.3b Veg-toggle / Parcel strip - quiet horizontal rule, not a card ---------- */
/* Warmth uses a bordered card. Luxe's editorial restraint wants this row to
   feel like a serif italic note tucked under the search bar, with the
   "Parcel" toggle reading as a minimal pill. */
.veg-toggle {
  background: transparent;
  border: none;
  border-top: 1px solid var(--orderzy-border);
  border-bottom: 1px solid var(--orderzy-border);
  border-radius: 0;
  padding: 14px 0;
  margin-bottom: 24px;
  font-family: var(--font-body);
  font-size: 13px;
  letter-spacing: 0.04em;
}
.veg-toggle label,
.veg-toggle label > span:not(.veg-toggle__dot) {
  font-family: var(--font-body);
  font-weight: 500;
  color: var(--orderzy-ink-soft);
  text-transform: uppercase;
  letter-spacing: 0.18em;
  font-size: 11px;
}
.veg-toggle__dot--veg { border-color: var(--accent); }
.veg-toggle__dot--veg::after { background: var(--accent); }
#takeaway-pill {
  font-family: var(--font-body) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.18em !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  border-radius: var(--radius-pill) !important;
  border-color: var(--orderzy-border) !important;
  color: var(--orderzy-ink-soft) !important;
  background: transparent !important;
}
#takeaway-pill[aria-pressed="true"] {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: #fff !important;
}

/* ---------- §3.8 Status pills + badges - outlined only, muted semantic ---------- */
.pill {
  background: transparent;
  border: 1px solid currentColor;
  border-radius: var(--radius-pill);
  padding: var(--space-1) var(--space-3);
  min-height: 24px;
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.pill::before { display: none; }
.pill--success { color: var(--orderzy-success); }
.pill--warn { color: var(--orderzy-warning); }
.pill--brand { color: var(--accent); }

/* ---------- §3.9 Forms - underline-only inputs, floating labels ---------- */
.input {
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--orderzy-border);
  border-radius: 0;
  padding: var(--space-3) var(--space-1);
  min-height: 48px;
  font-family: var(--font-body);
  font-size: var(--text-body);
  color: var(--orderzy-ink);
  transition: border-color var(--duration-fast) var(--ease-default);
}
.input::placeholder { color: var(--orderzy-ink-muted); }
.input:focus {
  outline: none;
  border-bottom-width: 2px;
  border-bottom-color: var(--accent);
  box-shadow: none;
}
.input.is-error,
.input[aria-invalid="true"] { border-bottom-color: var(--orderzy-danger); }
textarea.input { border: 1px solid var(--orderzy-border); border-radius: var(--radius-sm); min-height: 120px; resize: vertical; }
select.input { appearance: none; -webkit-appearance: none; background-image: none; }
/* P4.C01 (2026-08-15) - `.luxe-field`, `.luxe-field__label` floating-label
   wrapper deleted. Zero template consumers. Every form on the customer
   surface uses the flat `.input` treatment above. */
/* Checkbox / radio. */
input[type="checkbox"],
input[type="radio"] {
  appearance: none; -webkit-appearance: none;
  width: 20px; height: 20px;
  border: 1px solid var(--orderzy-border);
  border-radius: var(--radius-sm);
}
input[type="radio"] { border-radius: var(--radius-pill); }
input[type="checkbox"]:checked,
input[type="radio"]:checked {
  background: var(--accent);
  border-color: var(--accent);
}

/* FE0 follow-up (2026-06-02): tick mark for Luxe checked state.
   appearance:none above strips the native checkmark; without an explicit
   tick, the checked state reads as just a solid accent square (confusing
   on dense forms like brand profile + offers list). */
input[type="checkbox"] { position: relative; }
input[type="checkbox"]:checked::after {
  content: "";
  position: absolute;
  left: 6px;
  top: 2px;
  width: 5px;
  height: 10px;
  border: solid var(--accent-contrast, #fff);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
input[type="radio"]:checked::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 8px;
  height: 8px;
  background: var(--accent-contrast, #fff);
  border-radius: 50%;
  transform: translate(-50%, -50%);
}

/* ---------- §3.10 Modals ---------- */
/* P4.C01 (2026-08-15) - `.luxe-modal-backdrop`, `.luxe-modal`,
   `.luxe-modal__title`, `.luxe-modal__body` deleted. Zero template consumers.
   Live modal path is `.oz-confirm*` further down this file. */

/* ---------- §3.11 Toasts - white surface + semantic icon, no full-colour bg ---------- */
/* P4.C01 (2026-08-15) - `.luxe-toast`, `.luxe-toast__icon`,
   `.luxe-toast--success/error` deleted. Zero template consumers. Live toast
   path is `.oz-toast*` in the app JS (`showOrderzyToast`). */

/* ---------- §3.12 Loading skeletons - shimmer, no spinners (LOCKED) ---------- */
.skeleton {
  background: var(--orderzy-surface-alt);
  border-radius: var(--radius-sm);
}
.skeleton-shimmer {
  background: linear-gradient(90deg,
    var(--orderzy-surface-alt) 0%,
    color-mix(in srgb, var(--orderzy-surface-alt) 60%, #fff) 50%,
    var(--orderzy-surface-alt) 100%);
  background-size: 200% 100%;
  animation: oz-shimmer 1500ms linear infinite;
}
/* Lazy-load image fade-in (§5.3); .is-loaded added by JS next session. */
.lazy-image { opacity: 0; transition: opacity 400ms var(--ease-decelerate); }
.lazy-image.is-loaded { opacity: 1; }

/* ---------- §3.13 Step indicator (3-step booking) ---------- */
/* P4.C01 (2026-08-15) - `.luxe-step-indicator`, `.luxe-step`, `.luxe-step__dot`,
   `.luxe-step__label`, `.luxe-step__connector` deleted. Zero template
   consumers. Booking step markers render through `.rsv-step*` further down. */

/* ---------- §3.15 Slot chip (booking flow) ---------- */
/* P4.C01 (2026-08-15) - `.luxe-slot`, `.luxe-slot.is-selected`,
   `.luxe-slot.is-soldout` deleted. Zero template consumers. Live slot chips
   render via `.rsv-slot`, `.mod-slot`, `.find-card__slot`. */

/* ---------- §3.16 Empty states - no illustrations ---------- */
/* P4.C01 (2026-08-15) - `.luxe-empty`, `.luxe-empty__title`,
   `.luxe-empty__copy` deleted. Zero template consumers. Live empty-state
   markup uses page-scoped classes (`.cart-empty`, `.mk-empty`, etc.). */

/* Keyframes (top-level; consumed only by the rules above). */
@keyframes oz-shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
@keyframes oz-modal-in { from { opacity: 0; transform: scale(0.96); } to { opacity: 1; transform: scale(1); } }
@keyframes oz-toast-in { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }

/* ===========================================================
   LUXE REDUCED MOTION  (STYLEGUIDE_LUXE.md §7.4 - LOCKED, non-negotiable)
   The global prefers-reduced-motion block near the top of this file already
   zeroes every *->transition/animation duration to ~0 and disables smooth
   scroll. These rules add the Luxe-specific stops: the lazy-load image fade
   resolves to fully-visible, and skeletons stop shimmering.
   =========================================================== */
@media (prefers-reduced-motion: reduce) {
  .lazy-image { opacity: 1; }
  .skeleton-shimmer {
    background: var(--orderzy-surface-alt);
    animation: none;
  }
}

/* ===========================================================
   FEATURE 3 - Premium menu rendering
   PLAN_PREMIUM_TIER.md §3.4 + STYLEGUIDE_LUXE.md §3.3
   =========================================================== */

/* ---------- Dietary chips (Warmth base) ---------- */
.di-chip {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 2px 8px;
  border-radius: 9999px;
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  line-height: 1.6;
}
.di-chip__icon { width: 12px; height: 12px; flex-shrink: 0; }
.di-chip--vegan   { background: #d1fae5; color: #065f46; }
.di-chip--gf      { background: #fef3c7; color: #92400e; }
.di-chip--df      { background: #ede9fe; color: #5b21b6; }
.di-chip--nuts    { background: #fef9c3; color: #713f12; }

/* ---------- Chef note (Warmth) ---------- */
.menu-item__chef-note {
  font-family: var(--font-body);
  font-size: 13px;
  font-style: italic;
  color: var(--orderzy-ink-muted);
  line-height: 1.5;
  margin: 4px 0 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.menu-item__chef-note::before { content: '\00B7\00A0'; }

/* ---------- Provenance (Warmth) ---------- */
.menu-item__provenance {
  font-family: var(--font-body);
  font-size: 11px;
  font-weight: 600;
  color: var(--orderzy-ink-muted);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin: 3px 0 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ---------- Category intro copy (Warmth) ---------- */
.menu-cat__intro {
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--orderzy-ink-muted);
  line-height: 1.5;
  margin: 4px 0 10px;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* ---------- Category hero image ---------- */
.cat-hero {
  width: 100%;
  margin: 0 0 16px;
  border-radius: var(--r-sm);
  overflow: hidden;
  aspect-ratio: 16/9;
  max-height: 240px;
}
.cat-hero__img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* ---------- Luxe: dietary chips - outlined ---------- */
.di-chip {
  background: transparent;
  font-family: var(--font-body);
  font-size: 12px;
  letter-spacing: 0.12em;
  border: 1px solid;
  border-radius: var(--radius-pill);
  padding: 3px 10px;
}
.di-chip--vegan   { border-color: #065f46; color: #065f46; }
.di-chip--gf      { border-color: #92400e; color: #92400e; }
.di-chip--df      { border-color: #5b21b6; color: #5b21b6; }
.di-chip--nuts    { border-color: #713f12; color: #713f12; }
.di-chip__icon    { display: none; }

/* ---------- Luxe: chef note ---------- */
.menu-item__chef-note {
  font-family: var(--font-body);
  font-size: 15px;
  color: var(--orderzy-ink-muted);
  line-height: 1.6;
  margin: 6px 0 0;
  -webkit-line-clamp: unset;
  display: block;
  overflow: visible;
}
.menu-item__chef-note::before { content: none; }

/* ---------- Luxe: provenance ---------- */
.menu-item__provenance {
  font-size: 13px;
  letter-spacing: 0.18em;
}

/* ---------- Luxe: category intro copy ---------- */
.menu-cat__intro {
  font-family: var(--font-display);
  font-size: clamp(18px, 1.5vw + 14px, 22px);
  font-style: italic;
  font-weight: 400;
  color: var(--orderzy-ink-muted);
  line-height: 1.5;
  max-width: 640px;
  margin: 8px auto 16px;
  text-align: center;
  display: block;
  -webkit-line-clamp: unset;
  overflow: visible;
}

/* ---------- Luxe: category hero, round medallion. ----------
   Reworked 2026-08-20. Was a full-bleed 400px billboard that dominated
   the menu and fought the food-item photos below. Premium menu design
   (Michelin sites, hotel menus, Noma-style) never uses rectangular
   category banners; the category is a typographic moment (serif name
   + italic intro copy) and food photos are the primary visual anchor.
   So .cat-hero becomes a small circular medallion, a decorative seal
   sitting centered above the category title. Composition reads as:
   medallion → serif title → italic intro → food items, each guiding
   the eye down. object-fit:cover on the img means a mistakenly-uploaded
   portrait dish photo crops to a harmless thumbnail rather than a
   viewport-eating banner. Fails gracefully.
   Safe: no existing restaurant renders .cat-hero (Kulhadwala + Angaraa
   have no hero_image on any Category); only newly onboarded Luxe
   categories that upload one will pick up this style. */
.cat-hero {
  width: 96px;
  height: 96px;
  margin: 4px auto 12px;
  border-radius: 50%;
  border: 1px solid var(--orderzy-border);
  box-shadow: 0 2px 8px rgba(20, 12, 4, 0.06);
  aspect-ratio: auto;
}
@media (min-width: 768px) {
  .cat-hero { width: 120px; height: 120px; margin-bottom: 16px; }
}

/* ============================================================
   House Favourites rail (Luxe only, 2026-06-19).
   Editorial discovery strip - image + name only. Each card is a
   <button> that smooth-scrolls to the matching menu-list row and
   pulses it briefly. No price, no Add, no cart state in the rail;
   the menu list below remains the single source of truth for
   ordering. Hidden entirely when no House Favourites configured.
   ============================================================ */
.menu-rail {
  margin: 16px 0 24px;
}
.menu-rail__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin: 0 0 12px;
}
.menu-rail__eyebrow {
  font-family: var(--font-display);
  font-style: italic;
  font-weight: 400;
  font-size: 15px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}
.menu-rail__track {
  display: flex;
  gap: 16px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  padding: 4px 4px 12px;
  scrollbar-width: thin;
  scrollbar-color: var(--orderzy-border) transparent;
}
.menu-rail__track::-webkit-scrollbar { height: 6px; }
.menu-rail__track::-webkit-scrollbar-thumb {
  background: var(--orderzy-border);
  border-radius: 3px;
}
/* Card is a native <button> so keyboard + screen-reader users get the same
   "tap to jump to dish" affordance. Reset button chrome explicitly. */
.menu-rail__card {
  flex: 0 0 240px;
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  text-align: left;
  background: var(--orderzy-surface);
  border: 1px solid var(--orderzy-border);
  border-radius: var(--r-sm);
  overflow: hidden;
  padding: 0;
  margin: 0;
  font: inherit;
  color: inherit;
  cursor: pointer;
  transition: transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);
}
@media (hover: hover) {
  .menu-rail__card:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 18px rgba(0,0,0,0.08);
    border-color: color-mix(in srgb, var(--accent) 25%, var(--orderzy-border));
  }
}
.menu-rail__card:focus-visible {
  outline: 2px solid var(--accent, var(--orderzy-brand-deep));
  outline-offset: 2px;
}
.menu-rail__photo {
  position: relative;
  width: 100%;
  aspect-ratio: 16/9;
  background: var(--orderzy-surface-alt);
  overflow: hidden;
}
.menu-rail__img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.menu-rail__veg {
  position: absolute;
  top: 8px;
  left: 8px;
  background: var(--orderzy-surface);
  padding: 2px;
  border-radius: 2px;
}
.menu-rail__title {
  font-family: var(--font-display);
  font-size: 19px;
  font-weight: 400;
  line-height: 1.25;
  margin: 0;
  padding: 12px 14px 14px;
  color: var(--orderzy-ink);
  /* 2-line clamp so cards stay aligned regardless of dish-name length. */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}
@media (max-width: 520px) {
  .menu-rail__card { flex-basis: 200px; }
  .menu-rail__title { font-size: 17px; }
}
@media (max-width: 360px) {
  .menu-rail__card { flex-basis: 180px; }
  .menu-rail__title { font-size: 16px; }
}

/* Highlight pulse on the menu-list row when a rail card jumps to it.
   Soft brand-soft background that fades in fast, holds, then fades out.
   The class is added by the inline rail click handler and removed after
   1.2s. Honors prefers-reduced-motion (animation disabled, single colour
   flash so users still see the destination). */
.menu-item--highlight {
  animation: menu-item-highlight 1.2s ease-out;
}
@keyframes menu-item-highlight {
  0%   { background-color: transparent; }
  15%  { background-color: var(--orderzy-brand-soft); }
  70%  { background-color: var(--orderzy-brand-soft); }
  100% { background-color: transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .menu-item--highlight {
    animation: none;
    background-color: var(--orderzy-brand-soft);
  }
}

/* ---------- Cart + order_complete Luxe truncated chef note ---------- */
.chef-note-trunc { display: none; }
.chef-note-trunc {
  display: block;
  font-family: var(--font-body);
  font-size: 13px;
  font-style: italic;
  color: var(--orderzy-ink-muted);
  line-height: 1.4;
  margin: 2px 0 0;
}
.oc-item { align-items: flex-start; }

/* ==========================================================================
   THERMAL PRINT - Feature 5 §5.3.3
   @media print block for 80mm and 58mm thermal printers.
   Post-Luxe-unification (2026-08-14): the two-theme conditional was retired;
   these rules apply on every printed receipt. The outlet's bill_paper_size
   drives @page size (injected inline in template).
   ========================================================================== */

/* ---- Shared print resets ---- */
@media print {
  /* Hide browser chrome, nav, interactive elements */
  .oz-nav, .oz-footer, .oz-nav__drawer,
  .no-print, button, .btn,
  #toast-stack { display: none !important; }

  body { margin: 0; padding: 0; background: #fff !important; }

  /* Thermal bill container.
     Post-Luxe-unification (2026-08-14): fonts switched from Montserrat/Open Sans
     (retired) to Inter/DM Serif Display, matching the site-wide surface. */
  .thermal-bill {
    font-family: 'Inter', Arial, sans-serif;
    font-size: 11px;
    color: #1a1815;
    margin: 0;
    padding: 4mm;
    width: 100%;
  }

  .thermal-bill__brand {
    font-family: 'DM Serif Display', Georgia, serif;
    font-size: 15px;
    font-weight: 400;
    margin: 0 0 2px;
    text-align: center;
  }

  .thermal-bill__outlet {
    font-size: 11px;
    text-align: center;
    color: #6a6861;
    margin: 0 0 6px;
  }

  .thermal-bill__meta { font-size: 10px; color: #6a6861; margin-bottom: 8px; }

  .thermal-bill__items { width: 100%; border-collapse: collapse; margin-bottom: 8px; }
  .thermal-bill__items th,
  .thermal-bill__items td { font-size: 11px; padding: 2px 0; vertical-align: top; }
  .thermal-bill__items th { border-bottom: 1px dashed #999; font-weight: 700; }
  .thermal-bill__items td:last-child { text-align: right; }

  .thermal-bill__total { font-size: 13px; font-weight: 700; border-top: 1px solid #1f1d1a; padding-top: 4px; margin-top: 4px; }
  .thermal-bill__footer { font-size: 9px; color: #87867f; text-align: center; margin-top: 10px; }
  .thermal-bill__orderzy { font-size: 9px; color: #f28500; text-align: center; }
}

/* ---- Luxe 80mm: DM Serif Display brand name ---- */
@media print {
  .thermal-bill .thermal-bill__brand {
    font-family: 'DM Serif Display', Georgia, serif;
    font-weight: 400;
    font-size: 18pt;
    letter-spacing: -0.01em;
  }

  .thermal-bill .thermal-bill__outlet {
    font-family: 'DM Serif Display', Georgia, serif;
    font-weight: 400;
    font-size: 12pt;
  }

  .thermal-bill .thermal-bill__items th,
  .thermal-bill .thermal-bill__items td {
    font-family: 'Inter', -apple-system, Arial, sans-serif;
    font-variant-numeric: tabular-nums;
  }

  .thermal-bill .thermal-bill__total {
    font-family: 'Inter', -apple-system, Arial, sans-serif;
    font-weight: 700;
    font-size: 13pt;
    font-variant-numeric: tabular-nums;
    border-top: 1px solid #1a1815;
  }

  .thermal-bill .thermal-bill__footer {
    font-family: 'Inter', -apple-system, Arial, sans-serif;
    font-size: 8pt;
    color: #9a948b;
  }
}

/* ---- Luxe 58mm: Inter Bold brand name (DM Serif too thin at narrow strip) ---- */
@media print and (max-width: 58mm) {
  .thermal-bill .thermal-bill__brand {
    font-family: 'Inter', -apple-system, Arial, sans-serif;
    font-weight: 700;
    font-size: 12pt;
  }

  .thermal-bill .thermal-bill__outlet {
    font-family: 'Inter', -apple-system, Arial, sans-serif;
    font-size: 10pt;
  }
}

/* ---- Bill view page (in-app /orders/<no>/bill/) ---- */
.bv-page { padding: 32px 0 64px; }
.bv-wrap { max-width: 600px; margin: 0 auto; padding: 0 16px; }

.bv-head { margin-bottom: 24px; padding-bottom: 20px; border-bottom: 1px solid var(--orderzy-border); }
.bv-head__brand { margin-bottom: 8px; }
.bv-head__brand-name {
  display: block;
  /* Post-Luxe-unification (2026-08-14): Montserrat fallback swapped to Georgia. */
  font-family: var(--font-heading, 'DM Serif Display', Georgia, serif);
  font-size: 22px;
  font-weight: 700;
  color: var(--orderzy-ink);
}
.bv-head__outlet-name {
  display: block;
  font-size: 14px;
  color: var(--orderzy-ink-muted);
  margin-top: 2px;
}
.bv-head__address { font-size: 12px; color: var(--orderzy-ink-muted); margin: 4px 0 0; }
.bv-head__wordmark { display: flex; align-items: center; gap: 8px; margin-top: 12px; }
.bv-head__powered { font-size: 11px; color: var(--orderzy-ink-muted); }

.bv-meta { margin-bottom: 20px; }
.bv-meta__row { display: flex; justify-content: space-between; align-items: baseline; padding: 5px 0; border-bottom: 1px solid var(--orderzy-border); }
.bv-meta__label { font-size: 12px; color: var(--orderzy-ink-muted); font-weight: 500; text-transform: uppercase; letter-spacing: 0.08em; }
.bv-meta__val { font-size: 13px; color: var(--orderzy-ink); }

.bv-items__head { display: flex; gap: 8px; padding: 6px 0; border-bottom: 1px solid var(--orderzy-border); }
.bv-items__col-name { flex: 1; font-size: 12px; font-weight: 600; color: var(--orderzy-ink-muted); text-transform: uppercase; letter-spacing: 0.08em; }
.bv-items__col-qty { width: 40px; text-align: center; font-size: 12px; font-weight: 600; color: var(--orderzy-ink-muted); text-transform: uppercase; letter-spacing: 0.08em; }
.bv-items__col-price { width: 80px; text-align: right; font-size: 12px; font-weight: 600; color: var(--orderzy-ink-muted); text-transform: uppercase; letter-spacing: 0.08em; }

.bv-item { display: flex; gap: 8px; padding: 10px 0; border-bottom: 1px solid var(--orderzy-border); align-items: baseline; }
.bv-item__name { flex: 1; font-size: 14px; color: var(--orderzy-ink); }
.bv-item__chef-note { display: block; font-size: 12px; color: var(--orderzy-ink-muted); font-style: italic; margin-top: 2px; }
.bv-item__qty { width: 40px; text-align: center; font-size: 13px; color: var(--orderzy-ink-muted); font-variant-numeric: tabular-nums; }
.bv-item__price { width: 80px; text-align: right; font-size: 14px; color: var(--orderzy-ink); font-variant-numeric: tabular-nums; }

.bv-totals { margin: 16px 0 24px; }
.bv-totals__line { display: flex; justify-content: space-between; padding: 5px 0; }
.bv-totals__label { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.12em; color: var(--orderzy-ink-muted); }
.bv-totals__val { font-size: 13px; color: var(--orderzy-ink); font-variant-numeric: tabular-nums; }
.bv-totals__line--grand .bv-totals__label { font-size: 13px; font-weight: 700; color: var(--orderzy-ink); text-transform: none; letter-spacing: 0; }
.bv-totals__line--grand .bv-totals__val { font-size: 17px; font-weight: 700; }
.bv-totals__line--discount .bv-totals__val { color: var(--orderzy-success); }

.bv-footer { border-top: 1px solid var(--orderzy-border); padding-top: 16px; text-align: center; }
.bv-footer__text { font-size: 14px; color: var(--orderzy-ink-soft); margin: 0 0 4px; }
.bv-footer__orderzy { font-size: 11px; color: var(--orderzy-ink-muted); margin: 0; }

/* ---------- Luxe overrides for bill view (STYLEGUIDE_LUXE.md §2.9) ----------
   Spec: DM Serif Display headlines, Inter body with tabular-nums on every
   monetary column, ALL-CAPS 0.12em on labels, Inter italic for chef notes.
   Type sizes ~85% of Warmth to read as "considered" not "billboard". */
.bv-head__brand-name {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 32px;
  letter-spacing: -0.01em;
}
.bv-head__outlet-name {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 20px;
  letter-spacing: 0;
}
.bv-head__address {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 11px;
  color: var(--orderzy-ink-muted);
}
.bv-head__powered {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 9px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}

.bv-meta__row {
  border-bottom-color: var(--orderzy-border);
}
.bv-meta__label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.12em;
}
.bv-meta__val {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 11px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}

.bv-items__head,
.bv-items__col-name,
.bv-items__col-qty,
.bv-items__col-price {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.12em;
}

.bv-item {
  font-family: var(--font-body, 'Inter', sans-serif);
  border-bottom-color: var(--orderzy-border);
}
.bv-item__name { font-size: 13px; }
.bv-item__qty,
.bv-item__price {
  font-size: 13px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
.bv-item__chef-note {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-style: italic;
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}

.bv-totals__label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}
.bv-totals__val {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.bv-totals__line--grand .bv-totals__label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
}
.bv-totals__line--grand .bv-totals__val {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}
.bv-totals__line--discount .bv-totals__val {
  color: var(--accent);
}

.bv-footer__text {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}
.bv-footer__orderzy {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 9px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}

/* ===========================================================
   FEATURE 1 - Reservations: Luxe overrides for customer-facing
   surfaces (book, confirmation, manage, find_table).
   Layered onto the existing .rsv-* / .conf-* / .mng-* / .find-*
   classes so JS that creates buttons dynamically (book.html
   slot picker line 177 sets className 'rsv-slot'+...) keeps
   working unmodified.
   Spec: STYLEGUIDE_LUXE.md §2.4, §2.5, §3.1, §3.8, §3.9, §3.13, §3.15
   =========================================================== */

/* --- Booking flow (templates/reservations/book.html) --- */
.rsv-head__eyebrow {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  letter-spacing: 0.18em;
  font-weight: 500;
  color: var(--orderzy-ink-muted);
}
.rsv-head__title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 56px;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--orderzy-ink);
}
.rsv-head__sub {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  color: var(--orderzy-ink-muted);
  line-height: 1.5;
}
.rsv-card {
  border-color: var(--orderzy-border);
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}
.rsv-step__num {
  background: transparent;
  border: 1px solid var(--accent);
  color: var(--accent);
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-size: 13px;
  width: 24px;
  height: 24px;
}
.rsv-step__label {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 22px;
  letter-spacing: 0;
}
.rsv-step__hint {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
  color: var(--orderzy-ink-muted);
  line-height: 1.7;
}
.rsv-input,
.rsv-select {
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--orderzy-border);
  border-radius: 0;
  padding: 12px 4px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  color: var(--orderzy-ink);
  transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1);
  min-height: 48px;
}
.rsv-textarea {
  background: transparent;
  border: 1px solid var(--orderzy-border);
  border-radius: 4px;
  padding: 12px 14px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  color: var(--orderzy-ink);
}
.rsv-input:focus,
.rsv-select:focus {
  outline: none;
  border-bottom-width: 2px;
  border-bottom-color: var(--accent);
}
.rsv-textarea:focus {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-color: var(--accent);
}
.rsv-summary__label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}
.rsv-summary__value {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  font-weight: 500;
  color: var(--orderzy-ink);
}
.rsv-summary {
  background: var(--orderzy-surface-alt);
  border-radius: 4px;
}
/* Slot chip per §3.15 - outlined square, no translate on hover */
.rsv-slot {
  background: transparent;
  border: 1px solid var(--orderzy-border);
  border-radius: 8px;
  color: var(--orderzy-ink);
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-size: 15px;
  padding: 12px 16px;
  letter-spacing: 0.04em;
  transition: border-color 200ms cubic-bezier(0.4, 0, 0.2, 1),
              background 200ms cubic-bezier(0.4, 0, 0.2, 1),
              transform 80ms;
}
.rsv-slot:hover {
  border-color: color-mix(in srgb, var(--accent) 60%, transparent);
  transform: none;
}
.rsv-slot:active { transform: scale(0.95); }
.rsv-slot[aria-pressed="true"] {
  background: color-mix(in srgb, var(--accent) 8%, transparent);
  border-color: var(--accent);
  color: var(--accent);
}
.rsv-slot__deposit {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 11px;
  letter-spacing: 0.12em;
  font-weight: 500;
  color: var(--orderzy-ink-muted);
  text-transform: uppercase;
}
.rsv-slot[aria-pressed="true"] .rsv-slot__deposit {
  color: var(--accent);
}
.rsv-slot--full {
  background: transparent;
  border-color: var(--orderzy-border);
  color: var(--orderzy-ink-muted);
  text-decoration: line-through;
}
.rsv-slot--full .rsv-slot__deposit {
  text-decoration: none;
  color: var(--accent);
}
/* P1.C04 (2026-08-15): .rsv-cta retired. book.html now uses
   .btn.btn--primary.btn--block for the "Confirm reservation" button. */
.rsv-msg {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}
.rsv-msg--err { color: var(--orderzy-danger); }

/* Mobile size adjustments for booking flow */
@media (max-width: 540px) {
  .rsv-head__title { font-size: 40px; }
  .rsv-step__label { font-size: 20px; }
}

/* --- Confirmation + Manage (confirmation.html, manage.html) --- */
.conf-head__title,
.mng-head__title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 56px;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--orderzy-ink);
}
.conf-head__sub,
.mng-head__sub {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  color: var(--orderzy-ink-muted);
  line-height: 1.5;
}
/* Outlined status badges per §3.8 - .{prefix}-badge--{state}
   specificity (0,1,1) beats the inline-style-block .conf-badge--ok (0,1,0). */
.conf-badge,
.mng-badge {
  background: transparent;
  border: 1px solid currentColor;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.18em;
  padding: 4px 14px;
  text-transform: uppercase;
}
.conf-badge--ok,
.mng-badge--ok { color: var(--orderzy-success); background: transparent; }
.conf-badge--pending,
.mng-badge--pending { color: var(--orderzy-warning); background: transparent; }
.conf-badge--cancel { color: var(--orderzy-danger); background: transparent; }
.conf-card,
.mng-card {
  border-color: var(--orderzy-border);
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}
.conf-grid__cell label,
.mng-grid label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.12em;
  color: var(--orderzy-ink-muted);
}
.conf-grid__cell .conf-grid__value,
.mng-grid .mng-grid__value {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 22px;
  font-weight: 500;
  color: var(--orderzy-ink);
}
/* P1.C04 (2026-08-15): .mng-btn family retired. manage.html now uses
   .btn.btn--primary / .btn.btn--ghost / .btn.btn--danger from the
   canonical Wave 1 button family. .conf-btn stays defined below because
   confirmation.html still consumes it - the wider consolidation of
   .conf-* onto .btn.btn--* is a Phase 2 refactor. */
.conf-btn {
  background: transparent;
  border: 1px solid var(--orderzy-border);
  border-radius: 8px;
  color: var(--orderzy-ink);
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-size: 15px;
  letter-spacing: 0.04em;
  padding: 14px 24px;
  min-height: 48px;
  transition: border-color 320ms cubic-bezier(0.16, 1, 0.3, 1),
              color 320ms cubic-bezier(0.16, 1, 0.3, 1);
}
.conf-btn:hover {
  border-color: var(--accent);
  color: var(--accent);
}
.conf-btn--primary {
  background: transparent;
  border-color: var(--accent);
  color: var(--accent);
}
.conf-btn--primary:hover {
  background: var(--accent);
  color: var(--accent-contrast, #fdfbf7);
  opacity: 1;
}
.conf-deposit,
.mng-deposit {
  background: var(--orderzy-surface-alt);
  border-radius: 4px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
}
.conf-deposit__val,
.mng-deposit__val {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
.conf-help,
.mng-help {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
  line-height: 1.7;
  color: var(--orderzy-ink-muted);
}
.conf-help a,
.mng-help a {
  color: var(--accent);
  text-underline-offset: 4px;
}
@media (max-width: 540px) {
  .conf-head__title,
  .mng-head__title { font-size: 40px; }
}

/* --- Find-a-table (find_table.html) ---
   Post-Luxe-unification (2026-08-14): every find-card renders on the single
   unified surface. The `data-theme` attribute on `.find-card` (and its scoping
   selectors) were retired alongside the two-theme system. Per-brand accent
   comes from the inline --card-brand-accent CSS variable. */
.find-head__eyebrow {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  letter-spacing: 0.18em;
  font-weight: 500;
}
.find-head__title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 56px;
  letter-spacing: -0.02em;
  line-height: 1.15;
}
.find-head__sub {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  line-height: 1.5;
}
.find-form {
  border-color: var(--orderzy-border);
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}
.find-field label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  letter-spacing: 0.12em;
  font-weight: 500;
}
.find-input,
.find-select {
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--orderzy-border);
  border-radius: 0;
  padding: 12px 4px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1);
}
.find-input:focus,
.find-select:focus {
  outline: none;
  border-bottom-width: 2px;
  border-bottom-color: var(--accent);
}
/* P1.C04 (2026-08-15): .find-btn retired. find_table.html now uses
   .btn.btn--primary for the "Find a table" submit. */
.find-empty {
  background: var(--orderzy-surface-alt);
  border-radius: 4px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
  line-height: 1.7;
}
/* Card-scoped Luxe treatment for find-card on the Warmth find-table
   page. Uses --card-brand-accent which find_table.html injects per
   card from r.brand.accent_hex (line 68 of the template). */
.find-card {
  border-color: #ede5d7;
  border-radius: 8px;
  background: #fdfbf7;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
  transition: box-shadow 600ms cubic-bezier(0.16, 1, 0.3, 1);
}
.find-card:hover {
  box-shadow: 0 8px 24px rgba(0,0,0,0.06);
}
.find-card .find-card__brand {
  font-family: 'DM Serif Display', Georgia, serif;
  font-weight: 400;
  font-size: 22px;
  letter-spacing: 0;
  color: #1a1815;
}
.find-card .find-card__meta {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 13px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #6b6760;
}
.find-card .find-card__slot {
  background: transparent;
  border: 1px solid #ede5d7;
  border-radius: 8px;
  color: #1a1815;
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: 13px;
  padding: 8px 14px;
  letter-spacing: 0.04em;
  transition: border-color 200ms, color 200ms, background 200ms;
}
.find-card .find-card__slot:hover {
  border-color: var(--card-brand-accent, #1a1815);
  color: var(--card-brand-accent, #1a1815);
  background: color-mix(in srgb, var(--card-brand-accent, #1a1815) 8%, transparent);
}

/* ===========================================================
   Order complete page Luxe overrides (templates/orders/order_complete.html)
   Layered onto existing .oc-* classes; payment JS / GA4 / hidden
   fields / payment_status reads UNCHANGED.
   Spec: STYLEGUIDE_LUXE.md §2.5 (similar to reservation confirmation
   typography) + §3.x components.
   =========================================================== */

.oc-hero {
  background: var(--orderzy-surface);
  border-color: var(--orderzy-border);
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
  padding: 48px 40px;
}
/* Suppress the decorative green radial gradient - anti-pattern per
   STYLEGUIDE_LUXE.md §5.13 (no glow effects). */
.oc-hero::before { display: none; }

/* Outlined tick variants per §3.8 (status pills locked outlined). */
.oc-tick {
  background: transparent;
  border: 1px solid currentColor;
}
.oc-tick--success { color: var(--orderzy-success); }
.oc-tick--fail { color: var(--orderzy-danger); }
.oc-tick--processing { color: var(--accent); }
.oc-tick--cancelled { color: var(--orderzy-ink-muted); }

.oc-title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 56px;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--orderzy-ink);
}
.oc-sub {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  color: var(--orderzy-ink-muted);
  line-height: 1.7;
}
.oc-number {
  background: var(--orderzy-surface-alt);
  border-radius: 4px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-size: 13px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
  color: var(--orderzy-ink);
}

.oc-status {
  border-top-color: var(--orderzy-border);
}
.oc-status__label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.18em;
}

.oc-card {
  background: var(--orderzy-surface);
  border-color: var(--orderzy-border);
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}
.oc-card__title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 28px;
  letter-spacing: 0;
  color: var(--orderzy-ink);
}
.oc-card__title span {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}

.oc-item {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
}
.oc-item__qty {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
.oc-item__price {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  color: var(--orderzy-ink);
}

.oc-totals { border-top-color: var(--orderzy-border); }
.oc-totals__line {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}
.oc-totals__line .num { font-variant-numeric: tabular-nums; }
.oc-totals__line--discount {
  color: var(--accent);
  font-weight: 500;
}
.oc-totals__line--grand {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 700;
  font-size: 17px;
  color: var(--orderzy-ink);
  border-top-color: var(--orderzy-border);
}

/* Payment-confirmed pill - outlined accent instead of filled green. */
.oc-paid {
  background: transparent;
  border: 1px solid var(--orderzy-success);
  color: var(--orderzy-success);
  border-radius: 4px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}

/* Referral nudge card - lift the Warmth orange treatment in Luxe. */
.oc-referral { background: var(--orderzy-surface-alt); }
.oc-referral__head {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 22px;
  color: var(--orderzy-ink);
  letter-spacing: 0;
}
.oc-referral__body {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
  line-height: 1.7;
  color: var(--orderzy-ink-muted);
}

@media (max-width: 540px) {
  .oc-title { font-size: 40px; }
  .oc-hero { padding: 32px 24px; }
  .oc-card__title { font-size: 24px; }
}

/* ===========================================================
   Checkout flow Luxe overrides (templates/marketplace/checkout.html)
   PAYMENT-ADJACENT - CSS-ONLY. Form structure / hidden fields /
   JS / Cashfree SDK init / submission logic / GA4 begin_checkout
   are UNCHANGED. The template has 55 inline style= attributes; we
   layer Luxe classes onto the surrounding wrappers so JS hooks
   (id=checkout-form, name=payment_method, name=guest_*, etc.)
   keep functioning.
   Spec: STYLEGUIDE_LUXE.md §2.3 cart/checkout typography,
   §2.8 customer info forms, §3.1 outlined buttons, §3.9 inputs.
   =========================================================== */

.co-title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 56px;
  letter-spacing: -0.02em;
  line-height: 1.15;
  color: var(--orderzy-ink);
}
.co-subtitle {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  color: var(--orderzy-ink-muted);
}

/* Card-box: flatter, sharper corners */
.card-box {
  background: var(--orderzy-surface);
  border-color: var(--orderzy-border);
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
  padding: 24px 28px;
}
.card-box__title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 28px;
  letter-spacing: 0;
  color: var(--orderzy-ink);
}

/* Form fields per §3.9 - underline-only, large hit target.
   Inline width/padding from form-input itself stays; we add font + border. */
.form-input,
.input {
  background: transparent;
  border: none;
  border-bottom: 1px solid var(--orderzy-border);
  border-radius: 0;
  padding: 12px 4px;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 17px;
  color: var(--orderzy-ink);
  min-height: 48px;
  transition: border-color 180ms cubic-bezier(0.4, 0, 0.2, 1);
}
.form-input:focus,
.input:focus {
  outline: none;
  border-bottom-width: 2px;
  border-bottom-color: var(--accent);
  box-shadow: none;
}
.form-input.error,
.input.error,
.form-input[aria-invalid="true"],
.input[aria-invalid="true"] {
  border-bottom-color: var(--orderzy-danger);
}

/* Form labels per §2.8 - Inter 13 ALL-CAPS 0.12em */
.form-label,
.input-label {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}

/* Contact readonly + helper line */
.contact-readonly-name {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 22px;
  letter-spacing: 0;
}
.contact-readonly-phone {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}
.form-hint {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-style: italic;
  font-size: 13px;
}
.form-error {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  font-weight: 500;
  color: var(--orderzy-danger);
}

/* Table / Parcel badges: neutralize the hardcoded purple + orange
   from the inline styles. !important needed because inline style
   beats class without it. */
.table-badge {
  background: var(--orderzy-surface-alt) !important;
  border: 1px solid var(--orderzy-border) !important;
  color: var(--orderzy-ink) !important;
  font-family: var(--font-body, 'Inter', sans-serif) !important;
  font-weight: 500 !important;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-radius: 4px !important;
}

/* Order summary collapsible header */
.order-summary-header {
  font-family: var(--font-body, 'Inter', sans-serif);
}
.order-summary-title {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
}
.order-summary-toggle {
  color: var(--accent) !important;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500 !important;
  letter-spacing: 0.04em;
}
.order-summary-item {
  font-family: var(--font-body, 'Inter', sans-serif);
}
.order-summary-item .num {
  font-variant-numeric: tabular-nums;
}

/* Coupon section per §3.x */
.coupon-section { /* inherits .card-box */ }
.coupon-label,
.coupon-toggle {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
}
.coupon-toggle {
  color: var(--accent) !important;
  letter-spacing: 0.04em;
}
.coupon-input {
  border: 1px solid var(--orderzy-border) !important;
  background: var(--orderzy-surface-alt) !important;
  color: var(--orderzy-ink) !important;
  border-radius: 4px !important;
  font-family: var(--font-body, 'Inter', sans-serif) !important;
  letter-spacing: 0.12em !important;
}
.coupon-apply-btn {
  background: transparent !important;
  border: 1px solid var(--accent) !important;
  color: var(--accent) !important;
  border-radius: 4px !important;
  font-family: var(--font-body, 'Inter', sans-serif) !important;
  font-weight: 500 !important;
}
.coupon-apply-btn:hover {
  background: var(--accent) !important;
  color: var(--accent-contrast, #fdfbf7) !important;
}

/* Timing change "Now / +15 / +30 / +1hr" buttons - already get .btn
   variants via JS, but the inline classes use .timing-option. Layer
   Luxe styling. */
.timing-option {
  background: transparent;
  border: 1px solid var(--orderzy-border);
  color: var(--orderzy-ink);
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  border-radius: 4px;
  padding: 8px 16px;
  letter-spacing: 0.04em;
}
.timing-option.selected {
  background: color-mix(in srgb, var(--accent) 8%, transparent);
  border-color: var(--accent);
  color: var(--accent);
}

/* Price breakdown */
.price-line {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}
.price-line .num {
  font-variant-numeric: tabular-nums;
}
.price-line.total {
  font-family: var(--font-body, 'Inter', sans-serif) !important;
  font-weight: 700;
  font-size: 28px !important;
  color: var(--orderzy-ink) !important;
  border-top-color: var(--orderzy-border);
}
.price-line.discount {
  color: var(--accent) !important;
}

.savings-banner {
  background: transparent !important;
  border: 1px solid var(--orderzy-success) !important;
  color: var(--orderzy-success) !important;
  border-radius: 4px !important;
  font-family: var(--font-body, 'Inter', sans-serif) !important;
  font-size: 13px !important;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

/* Payment option card per §3.x */
.pay-option {
  background: transparent;
  border: 1px solid var(--orderzy-border);
  border-radius: 8px;
  padding: 16px 20px;
  transition: border-color 320ms cubic-bezier(0.16, 1, 0.3, 1);
}
.pay-option:hover { border-color: var(--accent); }
.pay-option.selected {
  background: color-mix(in srgb, var(--accent) 6%, transparent);
  border-color: var(--accent);
  box-shadow: none;
}
.pay-option__radio {
  border-color: var(--orderzy-border);
}
.pay-option.selected .pay-option__radio {
  border-color: var(--accent);
}
.pay-option.selected .pay-option__radio::after {
  background: var(--accent);
}
.pay-option__title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 22px;
  letter-spacing: 0;
}
.pay-option__sub {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  color: var(--orderzy-ink-muted);
}

/* Pay-at-end info card */
.pay-at-end-info {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
  color: var(--orderzy-ink-muted);
}

/* Sticky right-side order summary */
.summary {
  background: var(--orderzy-surface);
  border-color: var(--orderzy-border);
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
  padding: 32px;
}
.summary__title {
  font-family: var(--font-display, 'DM Serif Display', Georgia, serif);
  font-weight: 400;
  font-size: 32px;
  letter-spacing: 0;
  margin-bottom: 4px;
}
.summary__rest {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 13px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  margin-bottom: 24px;
}
.summary__item {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
  align-items: center;
}
.summary__item-name { font-family: var(--font-display, 'DM Serif Display', Georgia, serif); font-weight: 400; font-size: 17px; line-height: 1.3; }
.summary__item-qty {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500;
  font-variant-numeric: tabular-nums;
  color: var(--orderzy-ink-muted);
}
.summary__item .price,
.summary__line .price,
.summary__line .total {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-variant-numeric: tabular-nums;
}
.summary__divider { border-top-color: var(--orderzy-border); }
.summary__line {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 15px;
  color: var(--orderzy-ink-muted);
}
.summary__line--total {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 700;
  font-size: 28px;
  color: var(--orderzy-ink);
  border-top-color: var(--orderzy-border);
}
.summary__trust {
  font-family: var(--font-body, 'Inter', sans-serif);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
}

/* 2026-08-22: Luxe-era outlined-accent override deleted. Was making the checkout
   Pay button render as a transparent ghost while the cart Proceed-to-Checkout
   stayed solid-filled, so the checkout CTA read weaker than the payment selector
   under it. With this block gone, both buttons inherit .btn.btn--primary (solid
   accent fill, .num keeps tabular-nums via the site-wide .num rule). */

/* "Edit" / "View" / "Change" / "Login" mini-links - shift orange to accent.
   These have inline color via var(--orderzy-brand-ink), so we use !important. */
.contact-edit-link,
.contact-fields a {
  color: var(--accent) !important;
  font-family: var(--font-body, 'Inter', sans-serif);
  font-weight: 500 !important;
  letter-spacing: 0.04em;
  text-decoration: none;
}
.contact-edit-link:hover,
.contact-fields a:hover {
  text-decoration: underline;
  text-underline-offset: 4px;
}

@media (max-width: 540px) {
  .co-title { font-size: 40px; }
  .card-box { padding: 20px 22px; }
  .card-box__title { font-size: 24px; }
  .summary { padding: 24px; }
  .summary__title { font-size: 28px; }
  .summary__line--total,
  .price-line.total { font-size: 24px !important; }
}

/* ===========================================================
   HALF / FULL portion UX - Session C
   Customer-facing pill + Luxe variant toggle. The kitchen
   ticket badge lives in pending__orders.html (admin-only).
   =========================================================== */

/* ---------- [HALF] pill (cart row + bill view) ----------
   Same outlined treatment as the staff POS + kitchen ticket badge,
   so customer + staff see one visual language for "half portion". */
.oz-half-pill {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 6px;
  border: 1px solid var(--orderzy-line, #d8d2c3);
  border-radius: 9999px;
  font-family: var(--font-heading);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--orderzy-ink-soft, #6b6760);
  background: var(--orderzy-surface-alt, #faf8f4);
  vertical-align: 1px;
  text-transform: uppercase;
  line-height: 1.4;
  text-decoration: none;
}

/* Luxe overrides: serif typography is fine for short ALL-CAPS labels.
   Slightly larger + tighter tracking matches the brand chips on Luxe menus. */
.oz-half-pill {
  font-size: 10px;
  letter-spacing: 0.12em;
  border-color: rgba(26, 24, 21, 0.18);
  color: #1a1815;
  background: transparent;
}

/* ---------- Variant row layout (Full + Half side-by-side controls) ----------
   Replaces the earlier active-variant pill toggle (Session C, scrapped 2026-06-15).
   Each variant gets its own row with label + price + Add/stepper. Customer can
   add 1 Full and 1 Half independently without "switching" the active variant -
   answers the "how do I order 1F + 1H?" question by making both options always
   visible. Warmth uses muted-text labels; Luxe overrides to serif + outlined. */
.menu-item__variants {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  width: 100%;
}

/* 2026-08-22: was flex-direction:row (implicit) with justify-content:flex-end;
   label + control sat on one line inside the 140px .menu-item__media column,
   which forced the variant qty-stepper__btn down to 28x28 to fit. Stacked
   column layout lets the standard-size .menu-item__add / .qty-stepper reuse
   verbatim; the label sits above the control, both right-aligned so the
   control still lines up under the food photo. */
.oz-variant-row {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
}

.oz-variant-row__label {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--orderzy-ink-muted);
  white-space: nowrap;
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
}

.oz-variant-row__price {
  font-family: var(--font-body);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
  color: var(--orderzy-ink);
}

/* Luxe override: serif label, tighter tracking, accent-colored price. */
.oz-variant-row__label {
  font-family: var(--font-display, "DM Serif Display", Georgia, serif);
  font-size: 13px;
  font-weight: 400;
  letter-spacing: 0.04em;
  text-transform: none;
  color: var(--orderzy-ink, #1a1815);
}

.oz-variant-row__price {
  font-family: var(--font-body, "Inter", sans-serif);
  font-size: 12px;
  font-weight: 600;
  color: var(--accent, var(--orderzy-brand-deep));
}

@media (max-width: 540px) {
  .oz-variant-row { gap: 6px; }
  .oz-variant-row__label { font-size: 10px; }
  .oz-variant-row__price { font-size: 11px; }
}

/* ============================================================
   Homepage: 'Why Orderzy' editorial pull quote (2026-06-19).
   Replaces the plain centered paragraph that read as an orphan
   between the restaurants grid and How-It-Works steps. Treated
   as a founder/brand statement: warm brand-soft card, eyebrow
   label, large brand-orange open-quote glyph behind italic
   serif body. Matches the literate voice of the copy itself.
   ============================================================ */
.why-orderzy {
  padding: 64px 0 48px;
  background: var(--orderzy-canvas);
}
.why-orderzy__container {
  display: flex;
  justify-content: center;
}
.why-orderzy__card {
  position: relative;
  max-width: 620px;
  width: 100%;
  padding: 48px 48px 44px;
  background: var(--orderzy-brand-soft);
  border-radius: var(--r-md);
  /* Whisper shadow so the card lifts off the cream canvas without floating. */
  box-shadow: 0 1px 0 0 rgba(184, 102, 0, 0.04),
              0 2px 12px rgba(184, 102, 0, 0.04);
  text-align: center;
  overflow: hidden;
}
.why-orderzy__eyebrow {
  display: inline-block;
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--orderzy-brand-ink);
  margin: 0 0 28px;
}
/* Large open-quote glyph anchors the top-left of the card. Behind the body
   text (z-index), low opacity so it reads as decorative texture, not loud. */
.why-orderzy__quote-mark {
  position: absolute;
  top: 4px;
  left: 24px;
  font-family: "DM Serif Display", Georgia, serif;
  font-size: 160px;
  line-height: 1;
  color: var(--orderzy-brand);
  opacity: 0.14;
  pointer-events: none;
  user-select: none;
  z-index: 0;
}
.why-orderzy__body {
  font-family: "DM Serif Display", Georgia, serif;
  font-style: italic;
  font-size: 22px;
  font-weight: 400;
  line-height: 1.55;
  color: var(--orderzy-ink);
  margin: 0;
  position: relative;
  z-index: 1;
}
@media (max-width: 640px) {
  .why-orderzy { padding: 48px 0 32px; }
  .why-orderzy__card { padding: 36px 28px 32px; }
  .why-orderzy__quote-mark { font-size: 110px; top: 0; left: 12px; }
  .why-orderzy__body { font-size: 19px; line-height: 1.5; }
  .why-orderzy__eyebrow { margin-bottom: 22px; font-size: 10.5px; }
}

/* ===========================================================
   Phase 2 P2.C02: Design System Wave 2 mobile primitives
   -----------------------------------------------------------
   Three reusable components subsequent Phase 2 commits consume:
     .oz-sheet--bottom  : bottom sheet (checkout expand, variant popover, cart)
     .oz-farebar        : sticky-bottom expanding total bar (Uber pattern)
     .oz-cardstack      : horizontal scroll-snap card stack (comparison, reviews)
   Companion JS: orderzy/static/js/oz-mobile-primitives.js.
   Each primitive: 100dvh-safe, respects env(safe-area-inset-*), honors
   prefers-reduced-motion. Desktop keeps the class-target rendering styles
   inert unless the JS explicitly opens/expands.
   =========================================================== */

/* -------- .oz-sheet--bottom -------- */
.oz-sheet--bottom {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1200;
  transform: translateY(100%);
  transition: transform 240ms ease-out;
  background: var(--orderzy-surface, #ffffff);
  color: var(--orderzy-ink, #1a1815);
  border-top-left-radius: 16px;
  border-top-right-radius: 16px;
  box-shadow: 0 -12px 40px rgba(26, 24, 21, 0.18);
  max-height: min(88dvh, 720px);
  overflow-y: auto;
  padding: 8px 20px calc(20px + env(safe-area-inset-bottom));
  will-change: transform;
}
.oz-sheet--bottom[aria-hidden="false"] { transform: translateY(0); }
.oz-sheet__handle {
  display: block;
  width: 44px;
  height: 4px;
  margin: 6px auto 12px;
  border-radius: 3px;
  background: var(--orderzy-border-strong, #d4cdc0);
}
.oz-sheet__title {
  font-family: var(--font-heading, Georgia, serif);
  font-size: 22px;
  line-height: 1.2;
  margin: 0 0 12px;
  color: var(--orderzy-ink, #1a1815);
}
.oz-sheet__close {
  position: absolute;
  top: 12px;
  right: 12px;
  width: 44px;
  height: 44px;
  border: 0;
  background: transparent;
  color: var(--orderzy-ink-soft, #6b6760);
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
  border-radius: 50%;
}
.oz-sheet__close:focus-visible {
  outline: 2px solid var(--orderzy-brand, #f28500);
  outline-offset: 2px;
}
.oz-sheet__backdrop {
  position: fixed;
  inset: 0;
  z-index: 1150;
  background: rgba(26, 24, 21, 0.4);
  opacity: 0;
  pointer-events: none;
  transition: opacity 240ms ease-out;
}
.oz-sheet__backdrop[aria-hidden="false"] {
  opacity: 1;
  pointer-events: auto;
}

/* -------- .oz-farebar (sticky bottom expanding fare bar) -------- */
.oz-farebar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1100;
  background: var(--orderzy-surface, #ffffff);
  border-top: 1px solid var(--orderzy-border, #ede5d7);
  box-shadow: 0 -6px 24px rgba(26, 24, 21, 0.10);
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  display: none;
}
.oz-farebar[aria-hidden="false"] { display: block; }
.oz-farebar__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 44px;
}
.oz-farebar__label {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 8px;
  background: transparent;
  border: 0;
  padding: 0;
  font-family: var(--font-body, Inter, system-ui);
  font-size: 15px;
  color: var(--orderzy-ink, #1a1815);
  cursor: pointer;
  text-align: left;
}
.oz-farebar__label:focus-visible {
  outline: 2px solid var(--orderzy-brand, #f28500);
  outline-offset: 4px;
  border-radius: 6px;
}
.oz-farebar__caret {
  display: inline-block;
  width: 12px;
  height: 12px;
  transition: transform 200ms ease-out;
}
.oz-farebar[aria-expanded="true"] .oz-farebar__caret {
  transform: rotate(180deg);
}
.oz-farebar__cta {
  flex: 0 0 auto;
  min-width: 128px;
  height: 44px;
  padding: 0 18px;
  font-family: var(--font-body, Inter, system-ui);
  font-weight: 700;
  font-size: 15px;
  border-radius: 8px;
  border: 1px solid var(--accent, #b86600);
  background: var(--accent, #b86600);
  color: var(--accent-contrast, #fdfbf7);
  cursor: pointer;
}
.oz-farebar__cta:focus-visible {
  outline: 2px solid var(--orderzy-brand, #f28500);
  outline-offset: 3px;
}
.oz-farebar__expand {
  max-height: 0;
  overflow: hidden;
  transition: max-height 240ms ease-out;
  border-top: 1px solid transparent;
}
.oz-farebar[aria-expanded="true"] .oz-farebar__expand {
  max-height: 320px;
  border-top-color: var(--orderzy-border-soft, rgba(26, 24, 21, 0.08));
  padding-top: 12px;
  margin-top: 8px;
}
.oz-farebar__line {
  display: flex;
  justify-content: space-between;
  font-size: 14px;
  color: var(--orderzy-ink-soft, #6b6760);
  padding: 4px 0;
}
.oz-farebar__line--total {
  font-weight: 700;
  color: var(--orderzy-ink, #1a1815);
  border-top: 1px solid var(--orderzy-border-soft, rgba(26, 24, 21, 0.08));
  padding-top: 8px;
  margin-top: 4px;
}
.oz-farebar__trust {
  font-size: 12px;
  color: var(--orderzy-ink-muted, #9a948b);
  padding-top: 8px;
  text-align: center;
}

/* -------- .oz-cardstack (horizontal scroll-snap) -------- */
.oz-cardstack {
  display: flex;
  gap: 12px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-padding: 16px;
  padding: 8px 16px 20px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.oz-cardstack::-webkit-scrollbar { display: none; }
.oz-cardstack__card {
  flex: 0 0 88%;
  scroll-snap-align: start;
  background: var(--orderzy-surface, #ffffff);
  border: 1px solid var(--orderzy-border, #ede5d7);
  border-radius: 12px;
  padding: 20px;
  min-height: 200px;
  box-shadow: 0 2px 8px rgba(26, 24, 21, 0.04);
}
.oz-cardstack__card:last-child { margin-right: 0; }
.oz-cardstack__dots {
  display: flex;
  gap: 6px;
  justify-content: center;
  padding: 8px 0 0;
}
.oz-cardstack__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--orderzy-border-strong, #d4cdc0);
  transition: background 160ms ease-out;
  border: 0;
  padding: 0;
}
.oz-cardstack__dot[aria-current="true"] {
  background: var(--accent, #b86600);
}

/* -------- Reduced motion: collapse transitions -------- */
@media (prefers-reduced-motion: reduce) {
  .oz-sheet--bottom,
  .oz-sheet__backdrop,
  .oz-farebar__caret,
  .oz-farebar__expand,
  .oz-cardstack__dot {
    transition: none;
  }
}

/* ===========================================================
   Phase 2 P2.C05: Restaurant detail chip compression,
   mobile chip strip, Call Waiter FAB, sticky Get Bill.
   =========================================================== */

/* Menu-item tag chip compression: only the first 2 visible chips render
   inline; the rest hide behind a "+ N more" summary. JS in the detail
   template unhides them when the details is opened. Fallback (no-JS): the
   details stays closed so the extra chips don't render. */
.menu-item__tags[data-oz-compressed="true"] > *:nth-child(n+3):not(.menu-item__tags-more) {
  display: none;
}
.menu-item__tags[data-oz-compressed="true"][data-oz-expanded="true"] > * {
  display: inline-flex;
}
.menu-item__tags-more {
  cursor: pointer;
  padding: 2px 8px;
  border-radius: 9999px;
  background: var(--orderzy-surface-alt, #f6f0e6);
  color: var(--orderzy-ink-soft, #6b6760);
  border: 0;
  font-family: inherit;
  font-size: inherit;
  font-weight: inherit;
}
.menu-item__tags-more:focus-visible {
  outline: 2px solid var(--orderzy-brand, #f28500);
  outline-offset: 2px;
}

/* Mobile Level 2: replaces the desktop sidebar with a sticky top category
   chip strip at <=767px. .cat-nav__mobile-strip is a horizontal scroll
   container that renders BELOW the rest-hero and floats on scroll. */
.cat-nav__mobile-strip { display: none; }
@media (max-width: 767px) {
  .cat-nav__mobile-strip {
    display: flex;
    gap: 8px;
    overflow-x: auto;
    padding: 8px 16px;
    position: sticky;
    top: 60px;
    z-index: 90;
    background: var(--orderzy-canvas, #fdfbf7);
    border-bottom: 1px solid var(--orderzy-border-soft, rgba(26,24,21,0.08));
    scrollbar-width: none;
  }
  .cat-nav__mobile-strip::-webkit-scrollbar { display: none; }
  .cat-nav__mobile-strip-chip {
    flex: 0 0 auto;
    padding: 8px 14px;
    border-radius: 999px;
    background: var(--orderzy-surface, #ffffff);
    border: 1px solid var(--orderzy-border, #ede5d7);
    color: var(--orderzy-ink, #1a1815);
    font-family: var(--font-body, Inter, system-ui);
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
  }
  .cat-nav__mobile-strip-chip.is-active {
    background: var(--accent, #b86600);
    color: var(--accent-contrast, #fdfbf7);
    border-color: var(--accent, #b86600);
  }
}

/* Mobile Call Waiter FAB. Renders bottom-right on <=767px when the diner
   is in an active QR session and the outlet enables the affordance. */
.oz-fab-callwaiter {
  display: none;
  position: fixed;
  bottom: calc(96px + env(safe-area-inset-bottom));
  right: 16px;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--orderzy-surface, #ffffff);
  color: var(--orderzy-ink, #1a1815);
  border: 1px solid var(--orderzy-border, #ede5d7);
  box-shadow: 0 8px 24px rgba(26, 24, 21, 0.16);
  align-items: center;
  justify-content: center;
  z-index: 950;
  cursor: pointer;
}
.oz-fab-callwaiter:focus-visible {
  outline: 2px solid var(--orderzy-brand, #f28500);
  outline-offset: 3px;
}
@media (max-width: 767px) {
  .oz-fab-callwaiter { display: inline-flex; }
}

/* Mobile sticky Get Bill button. Attached to the bottom viewport when the
   diner has an active AT_END session and there are orders. Sits ABOVE the
   cart-bar (which itself only renders when there are cart items) so both
   can coexist. On <=767px only. */
.oz-getbill-sticky {
  display: none;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 900;
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  background: var(--orderzy-surface, #ffffff);
  border-top: 1px solid var(--orderzy-border, #ede5d7);
  box-shadow: 0 -6px 24px rgba(26, 24, 21, 0.08);
}
.oz-getbill-sticky__btn {
  display: block;
  width: 100%;
  height: 48px;
  background: var(--orderzy-success, #4a6b3a);
  color: #ffffff;
  border: 0;
  border-radius: 8px;
  font-family: var(--font-body, Inter, system-ui);
  font-weight: 700;
  font-size: 15px;
  text-align: center;
  text-decoration: none;
  line-height: 48px;
}
.oz-getbill-sticky__btn:focus-visible {
  outline: 2px solid var(--orderzy-brand, #f28500);
  outline-offset: 3px;
}
@media (max-width: 767px) {
  .oz-getbill-sticky { display: block; }
  /* When the sticky Get Bill is visible, pad the bottom cart bar upward so
     it doesn't collide with the diner's swipe area. */
  .cart-bar { padding-bottom: 76px; }
}


