/* =========================================================================
   site.css: the one shared stylesheet for every public page of biteout.app.

   Loaded first, before any page CSS (web/layouts/app.blade.php does it for
   every page that extends it; a standalone page adds the same two links:
   /css/fonts.css then /css/site.css). The rules come from the design spec of
   18 Oct 2026 and copy the partner portal: a calm black page, grey blocks,
   white words, one green button. Page CSS keeps LAYOUT ONLY and reads the
   variables below; it does not define colours, radii or type of its own.

   TOKENS (custom properties on :root; the site is dark only)
     Colour   --canvas #000 page   --surface #1C1C1E blocks   --raised #2C2C2E
              secondary buttons, fields, chips   --line #38383A hairlines
              --line-strong #545458 control borders, empty stars
              --text #FFF   --text-2 #B3B3B3 sentences, values
              --text-3 #9E9E9E muted (the floor for readable text)
              --text-4 #6E6E73 placeholders and disabled only
              --green #53F293 primary button, links, selection, Live
              --green-press #3DD67C hover/pressed green   --green-tint
              --on-green #000 text on green   --warn / --warn-tint
              --danger / --danger-tint   --promo #F8E480 paid placement only
              --pressed (overlay)   --scrim   --photo-scrim (the one gradient,
              text over photos)   --shadow-overlay (menus and dropdowns only)
     Type     --font   --fs-micro 12 --fs-caption 13 --fs-body 16
              --fs-headline 18 --fs-title 24 --fs-display 28 --fs-hero 48
              --fs-hero-phone 32 (the home hero h1 under 768)
     Radius   --radius-thumb 8  --radius-field 12  --radius-card 16
              --radius-sheet 30  --radius-pill 999
     Space    --space-4 --space-8 --space-12 --space-16 --space-20 --space-24
              --space-32 --space-48   --gutter (20, 32 from 1024)
              --max-width 1200   --header-h (56, 64 from 768)
     Motion   --dur-fast 150ms --dur-med 250ms --dur-slow 400ms
              --ease-enter (easeOutCubic)  --ease-exit (easeInCubic)

   BREAKPOINTS: 480, 768 and 1024 only. Write mobile first:
     @media (min-width: 480px) / (min-width: 768px) / (min-width: 1024px)
   and when a max-width is unavoidable use 479.98px / 767.98px / 1023.98px so
   the two sides never overlap.

   TYPE CLASSES (Poppins 500 to 800; nothing under 12px)
     .bo-hero      48/800 (home hero h1 only; 32 on phones)
     .bo-display   28/800 -0.5   .bo-title 24/800 -0.5   .bo-headline 18/700
     .bo-body      16/500 text-2 .bo-caption 13/600 text-2   .bo-micro 12/600
     .bo-eyebrow   12/600 uppercase +0.8 tracking, text-2 (never green)
     .bo-section-heading  24/800, 28 from 768 (an h2 over a section)
     .bo-section-sub      16/500 text-2 under it, max 640 wide

   LAYOUT  .bo-container   max 1200, side gutters
           .bo-section     vertical rhythm for a page section (48 / 64)

   COMPONENTS
     Button   <a|button class="bo-btn bo-btn--primary">Get the app</a>
              --primary   green fill, black 16/700 label, 50 tall, hover green-press
              --secondary raised fill, white label
              --text      no fill, green 16/600 label, 44 tall
              --danger    no fill, danger label (never a red fill)
              --sm        40 tall, 13px label (header, dense rows)
              --block     full width
              One primary per screen.
     Pill     <span class="bo-pill">7 reviews</span> raised fill, 12/600 text-2
              --outline (1px line-strong, no fill)  --live (green dot, tint)
              --warn  --danger  --promo (PROMOTED kicker, uppercase)
     Deal pill <span class="bo-deal-pill">रू 200 off</span> green, black 12/700
              --lg 13px   --none: the no-deal pill (same size, transparent,
              1px line-strong, text-2 label)
     Card     <div class="bo-card">  surface, radius 16, padding 16
              a.bo-card / .bo-card--link: tappable, pressed overlay on hover
              --flush: no padding (a photo on top, then .bo-card__body)
     Stars    <span class="bo-stars" style="--rating: 4.5" role="img"
                    aria-label="Rated 4.5 out of 5"></span>
              five stars, filled white, empty line-strong, any fraction;
              --size sets the star size (default 14px).
              <span class="bo-star" aria-hidden="true"></span> one star in
              a meta line, in that line's colour.
     Chip     <a|button class="bo-chip">Momo</a>  raised, text-2 label;
              selected (.is-selected, aria-pressed="true" or
              aria-current): white fill, black label. Never green.
              .bo-chips: a wrapping row of chips; .bo-chips--scroll: one
              straight horizontally scrolling line.
     Store    <div class="bo-store-badges">
     badges     <a class="bo-store-badge" href="…App Store…">
                  <svg …/><span><small>Download on the</small><b>App Store</b></span></a>
                …</div>
              black badge, white text, 1px line border (as on /join).
     Field    <input class="bo-input">  (also select, textarea) raised, no
              border, radius 12, 50 tall, 16px (no iOS zoom); focus: a
              text-3 edge (a text field matches :focus-visible on every
              tap, so it never takes the heavy white ring).
              <div class="bo-input-row"><span class="bo-input-prefix">+977</span>
                <input class="bo-input" type="tel"></div>  a phone number.
     Crumbs   <nav class="bo-breadcrumbs" aria-label="Breadcrumb"><a>…</a>
                <span aria-hidden="true">›</span><span aria-current="page">…</span>
              13/600: links text-2, separators and the current page text-3.
     Step     <span class="bo-step-n">1</span>  a 32 raised disc, white 13/700
              figure (numbered steps on home and /join).
     Price    <span class="bo-price-level" role="img" aria-label="Price level 2 of 3">
     level      <span class="bo-price-level__mark is-on">रू</span>…</span>
              three रू marks, the venue's own white, the rest line-strong.
     Header   @include('partials.site-header')   (classes .site-header*,
              .site-menu*; the phone menu's script is inline in the partial)
              Sticky, z-index 1000; mark + BiteOut, Restaurants, one
              primary "Get the app" (/download); under 768 a menu button
              opens a panel with Restaurants and Become a partner.
              ['headerCta' => 'secondary'] greys the button on a page
              with a green button of its own, 'none' leaves it out.
     Nowrap   <span class="bo-nowrap">+977 9705223669</span> keeps a phone
              number (or any short figure) on one line.
     Footer   @include('partials.site-footer')   (classes .site-footer*)
              @include('partials.site-footer', ['pricingLink' => true]) adds
              a Pricing link while diner membership is paid (the restaurant
              and discovery pages had one; the landing pages never do).
              ['popularRestaurants' => false] leaves out the group of links
              to other venues (a venue's own page does not list others).
              Pages extending web/layouts/app keep using
              @include('web.partials.header') / ('web.partials.footer'),
              which are now one-line includes of these two.
   ========================================================================= */

:root {
  color-scheme: dark;

  --canvas: #000000;
  --surface: #1C1C1E;
  --raised: #2C2C2E;
  --line: #38383A;
  --line-strong: #545458;
  --text: #FFFFFF;
  --text-2: #B3B3B3;
  --text-3: #9E9E9E;
  --text-4: #6E6E73;
  --green: #53F293;
  --green-press: #3DD67C;
  --green-tint: rgba(83, 242, 147, 0.14);
  --on-green: #000000;
  --warn: #FFB020;
  --warn-tint: rgba(255, 176, 32, 0.16);
  --danger: #FF6B6B;
  --danger-tint: rgba(255, 107, 107, 0.16);
  --promo: #F8E480;
  --pressed: rgba(255, 255, 255, 0.12);
  --scrim: rgba(0, 0, 0, 0.5);
  --photo-scrim: linear-gradient(180deg, rgba(0, 0, 0, 0) 40%, rgba(0, 0, 0, 0.72) 100%);
  --shadow-overlay: 0 12px 32px rgba(0, 0, 0, 0.6);

  --font: 'Poppins', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --fs-micro: 12px;
  --fs-caption: 13px;
  --fs-body: 16px;
  --fs-headline: 18px;
  --fs-title: 24px;
  --fs-display: 28px;
  --fs-hero: 48px;
  --fs-hero-phone: 32px;

  --radius-thumb: 8px;
  --radius-field: 12px;
  --radius-card: 16px;
  --radius-sheet: 30px;
  --radius-pill: 999px;

  --space-4: 4px;
  --space-8: 8px;
  --space-12: 12px;
  --space-16: 16px;
  --space-20: 20px;
  --space-24: 24px;
  --space-32: 32px;
  --space-48: 48px;
  --gutter: 20px;
  --max-width: 1200px;
  --header-h: 56px;

  --dur-fast: 150ms;
  --dur-med: 250ms;
  --dur-slow: 400ms;
  --ease-enter: cubic-bezier(0.33, 1, 0.68, 1);
  --ease-exit: cubic-bezier(0.32, 0, 0.67, 0);
}

@media (min-width: 768px) {
  :root { --header-h: 64px; }
}

@media (min-width: 1024px) {
  :root { --gutter: 32px; }
}

/* ── Base ─────────────────────────────────────────────────────────────── */

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

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  background-color: var(--canvas);
}

body {
  margin: 0;
  background-color: var(--canvas);
  color: var(--text);
  font-family: var(--font);
  font-size: var(--fs-body);
  font-weight: 500; /* 400 is not in the system: it maps to 500 */
  line-height: 1.45;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

b, strong { font-weight: 700; }

button, input, select, textarea { font-family: inherit; }

a {
  color: var(--green);
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}

/* Plain text links underline on hover; component links style themselves. */
a:not([class]):hover { text-decoration: underline; text-underline-offset: 3px; }

/* A visible focus ring for keyboard users, on everything. */
:focus-visible {
  outline: 2px solid var(--text);
  outline-offset: 2px;
}

::placeholder { color: var(--text-4); opacity: 1; }

/* Headings break into even lines, never one word left alone on the last. */
h1, h2, h3, .bo-hero, .bo-display, .bo-title, .bo-section-heading { text-wrap: balance; }

.bo-nowrap { white-space: nowrap; }

@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;
  }
}

/* ── Type ─────────────────────────────────────────────────────────────── */

.bo-hero {
  font-size: var(--fs-hero-phone);
  font-weight: 800;
  letter-spacing: -0.5px;
  line-height: 1.1;
}
@media (min-width: 768px) {
  .bo-hero { font-size: var(--fs-hero); letter-spacing: -1px; line-height: 1.05; }
}
.bo-display { font-size: var(--fs-display); font-weight: 800; letter-spacing: -0.5px; line-height: 1.15; }
.bo-title { font-size: var(--fs-title); font-weight: 800; letter-spacing: -0.5px; line-height: 1.2; }
.bo-headline { font-size: var(--fs-headline); font-weight: 700; letter-spacing: -0.2px; line-height: 1.3; }
.bo-body { font-size: var(--fs-body); font-weight: 500; line-height: 1.45; color: var(--text-2); }
.bo-caption { font-size: var(--fs-caption); font-weight: 600; line-height: 1.35; color: var(--text-2); }
.bo-micro { font-size: var(--fs-micro); font-weight: 600; line-height: 1.35; }

.bo-eyebrow {
  display: block;
  font-size: var(--fs-micro);
  font-weight: 600;
  line-height: 1.35;
  letter-spacing: 0.8px;
  text-transform: uppercase;
  color: var(--text-2);
}

.bo-section-heading {
  margin: 0;
  font-size: var(--fs-title);
  font-weight: 800;
  letter-spacing: -0.5px;
  line-height: 1.2;
  color: var(--text);
}
@media (min-width: 768px) {
  .bo-section-heading { font-size: var(--fs-display); line-height: 1.15; }
}
.bo-eyebrow + .bo-section-heading { margin-top: var(--space-8); }

.bo-section-sub {
  margin: var(--space-12) 0 0;
  max-width: 640px;
  font-size: var(--fs-body);
  font-weight: 500;
  line-height: 1.45;
  color: var(--text-2);
}

/* ── Layout ───────────────────────────────────────────────────────────── */

.bo-container {
  width: 100%;
  max-width: calc(var(--max-width) + 2 * var(--gutter));
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.bo-section { padding-block: var(--space-48); }
@media (min-width: 1024px) {
  .bo-section { padding-block: 64px; }
}

/* ── Button ───────────────────────────────────────────────────────────── */

.bo-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-8);
  min-height: 50px;
  padding: 0 var(--space-24);
  border: 0;
  border-radius: var(--radius-pill);
  background: transparent;
  color: var(--text);
  font-family: inherit;
  font-size: var(--fs-body);
  font-weight: 700;
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color var(--dur-fast) var(--ease-enter), color var(--dur-fast) var(--ease-enter);
}
.bo-btn:hover { text-decoration: none; }
.bo-btn svg { width: 18px; height: 18px; flex-shrink: 0; }
.bo-btn[disabled], .bo-btn[aria-disabled="true"] { cursor: default; opacity: 0.4; pointer-events: none; }

.bo-btn--primary { background: var(--green); color: var(--on-green); }
.bo-btn--primary:hover, .bo-btn--primary:active { background: var(--green-press); color: var(--on-green); }

.bo-btn--secondary { background: var(--raised); color: var(--text); }
.bo-btn--secondary:hover, .bo-btn--secondary:active { background: var(--line); color: var(--text); }

.bo-btn--text {
  min-height: 44px;
  padding: 0 var(--space-8);
  color: var(--green);
  font-weight: 600;
}
.bo-btn--text:hover { color: var(--green-press); }

.bo-btn--danger {
  min-height: 44px;
  padding: 0 var(--space-8);
  color: var(--danger);
  font-weight: 600;
}

.bo-btn--sm {
  min-height: 40px;
  padding: 0 var(--space-16);
  font-size: var(--fs-caption);
}
.bo-btn--sm svg { width: 16px; height: 16px; }

.bo-btn--block { display: flex; width: 100%; }

/* ── Pill ─────────────────────────────────────────────────────────────── */

.bo-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--space-4);
  min-height: 24px;
  padding: 0 var(--space-8);
  border-radius: var(--radius-pill);
  background: var(--raised);
  color: var(--text-2);
  font-size: var(--fs-micro);
  font-weight: 600;
  line-height: 1.35;
  white-space: nowrap;
}
.bo-pill--outline { background: transparent; box-shadow: inset 0 0 0 1px var(--line-strong); }
.bo-pill--live { background: var(--green-tint); color: var(--text); }
.bo-pill--live::before {
  content: '';
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--green);
}
.bo-pill--warn { background: var(--warn-tint); color: var(--warn); }
.bo-pill--danger { background: var(--danger-tint); color: var(--danger); }
.bo-pill--promo {
  background: transparent;
  padding-inline: 0;
  color: var(--promo);
  letter-spacing: 0.8px;
  text-transform: uppercase;
}

/* ── Deal pill ────────────────────────────────────────────────────────── */

.bo-deal-pill {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 0 var(--space-8);
  border-radius: var(--radius-pill);
  background: var(--green);
  color: var(--on-green);
  font-size: var(--fs-micro);
  font-weight: 700;
  line-height: 1.35;
  white-space: nowrap;
}
.bo-deal-pill--lg { min-height: 28px; padding: 0 var(--space-12); font-size: var(--fs-caption); }
.bo-deal-pill--none {
  background: transparent;
  box-shadow: inset 0 0 0 1px var(--line-strong);
  color: var(--text-2);
  font-weight: 600;
}

/* ── Card ─────────────────────────────────────────────────────────────── */

.bo-card {
  display: block;
  padding: var(--space-16);
  border-radius: var(--radius-card);
  background: var(--surface);
  color: var(--text);
}
.bo-card--flush { padding: 0; overflow: hidden; }
.bo-card__body { padding: var(--space-16); }

a.bo-card, .bo-card--link {
  position: relative;
  color: var(--text);
  text-decoration: none;
  cursor: pointer;
}
a.bo-card::after, .bo-card--link::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: var(--pressed);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--dur-fast) var(--ease-enter);
}
a.bo-card:hover::after, .bo-card--link:hover::after { opacity: 0.5; }
a.bo-card:active::after, .bo-card--link:active::after { opacity: 1; }

/* ── Stars ────────────────────────────────────────────────────────────── */

/* One element, any rating: the fill stops at --rating / 5 of five stars. */
.bo-stars {
  --rating: 0;
  --size: 14px;
  display: inline-block;
  flex-shrink: 0;
  width: calc(var(--size) * 5.5);
  height: var(--size);
  vertical-align: -2px;
  background: linear-gradient(90deg, var(--text) calc(var(--rating) / 5 * 100%), var(--line-strong) 0);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 26.4 24'%3E%3Cpath d='M12 1.6l3.1 6.6 7.2.9-5.3 5 1.4 7.1L12 17.7l-6.4 3.5L7 14.1l-5.3-5 7.2-.9z'/%3E%3C/svg%3E") 0 0 / calc(var(--size) * 1.1) var(--size) repeat-x;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 26.4 24'%3E%3Cpath d='M12 1.6l3.1 6.6 7.2.9-5.3 5 1.4 7.1L12 17.7l-6.4 3.5L7 14.1l-5.3-5 7.2-.9z'/%3E%3C/svg%3E") 0 0 / calc(var(--size) * 1.1) var(--size) repeat-x;
}

/* A single star in a meta line takes the line's colour. */
.bo-star {
  display: inline-block;
  flex-shrink: 0;
  width: 1em;
  height: 1em;
  vertical-align: -0.125em;
  background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 1.6l3.1 6.6 7.2.9-5.3 5 1.4 7.1L12 17.7l-6.4 3.5L7 14.1l-5.3-5 7.2-.9z'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 1.6l3.1 6.6 7.2.9-5.3 5 1.4 7.1L12 17.7l-6.4 3.5L7 14.1l-5.3-5 7.2-.9z'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* ── Chip ─────────────────────────────────────────────────────────────── */

.bo-chips { display: flex; flex-wrap: wrap; gap: var(--space-8); }
.bo-chips--scroll {
  flex-wrap: nowrap;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-x: contain;
}
.bo-chips--scroll::-webkit-scrollbar { display: none; }

.bo-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-8);
  flex-shrink: 0;
  min-height: 36px;
  padding: 0 var(--space-12);
  border: 0;
  border-radius: var(--radius-pill);
  background: var(--raised);
  color: var(--text-2);
  font-family: inherit;
  font-size: var(--fs-caption);
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--dur-med) var(--ease-enter), color var(--dur-med) var(--ease-enter);
}
.bo-chip:hover { color: var(--text); text-decoration: none; }
.bo-chip.is-selected,
.bo-chip[aria-pressed="true"],
.bo-chip[aria-current]:not([aria-current="false"]) {
  background: var(--text);
  color: var(--canvas);
}

/* ── Store badges ─────────────────────────────────────────────────────── */

.bo-store-badges { display: flex; flex-wrap: wrap; gap: var(--space-12); }

.bo-store-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--space-12);
  min-height: 52px;
  padding: var(--space-8) var(--space-16) var(--space-8) var(--space-12);
  border: 1px solid var(--line);
  border-radius: var(--radius-field);
  background: var(--canvas);
  color: var(--text);
  text-decoration: none;
  transition: border-color var(--dur-fast) var(--ease-enter);
}
.bo-store-badge:hover { border-color: var(--line-strong); color: var(--text); text-decoration: none; }
.bo-store-badge svg { width: 24px; height: 24px; flex-shrink: 0; }
.bo-store-badge small {
  display: block;
  color: var(--text-2);
  font-size: var(--fs-micro);
  font-weight: 500;
  line-height: 1.2;
}
.bo-store-badge b {
  display: block;
  font-size: var(--fs-body);
  font-weight: 600;
  line-height: 1.2;
}

/* ── Field ────────────────────────────────────────────────────────────── */

/* A text field (input, select, textarea): raised, no visible border, the
   site's white ring for keyboard focus. Page CSS adds only layout (a
   textarea's height, an icon's inset). */
.bo-input {
  display: block;
  width: 100%;
  min-height: 50px;
  padding: var(--space-12) var(--space-16);
  border: 1px solid transparent;
  border-radius: var(--radius-field);
  background: var(--raised);
  color: var(--text);
  font-family: inherit;
  font-size: var(--fs-body); /* 16: iOS does not zoom the page on focus */
  font-weight: 500;
  line-height: 1.4;
  transition: border-color var(--dur-fast) var(--ease-enter);
}
.bo-input option { font-weight: 500; } /* the browser's own list says 400 otherwise */
.bo-input:focus,
.bo-input:focus-visible { border-color: var(--text-3); outline: none; }

/* A phone number: the fixed country code, then the field. */
.bo-input-row { display: flex; align-items: stretch; gap: var(--space-8); }
.bo-input-row > .bo-input { flex: 1; min-width: 0; }
.bo-input-prefix {
  display: flex;
  flex: 0 0 auto;
  align-items: center;
  padding: 0 var(--space-12);
  border-radius: var(--radius-field);
  background: var(--raised);
  color: var(--text-2);
  font-size: var(--fs-body);
  font-weight: 600;
  white-space: nowrap;
}

/* ── Breadcrumbs ──────────────────────────────────────────────────────── */

/* A quiet line above a page title (it mirrors the BreadcrumbList JSON-LD).
   Links are text-2 (they can be tapped); the separators and the current
   page are text-3. Page CSS sets only the margins around it. */
.bo-breadcrumbs {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-4) var(--space-8);
  min-width: 0;
  color: var(--text-3);
  font-size: var(--fs-caption);
  font-weight: 600;
  line-height: 1.35;
}
.bo-breadcrumbs a {
  color: var(--text-2);
  text-decoration: none;
  transition: color var(--dur-fast) var(--ease-enter);
}
.bo-breadcrumbs a:hover { color: var(--text); text-decoration: none; }
.bo-breadcrumbs [aria-current] {
  max-width: 100%;
  overflow: hidden;
  color: var(--text-3);
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ── Step number ──────────────────────────────────────────────────────── */

.bo-step-n {
  display: inline-flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--raised);
  color: var(--text);
  font-size: var(--fs-caption);
  font-weight: 700;
  line-height: 1;
}

/* ── Price level ──────────────────────────────────────────────────────── */

/* Three रू marks: the venue's own level white, the rest line-strong (as in
   the app). The element carries role="img" and an aria-label. */
.bo-price-level { font-weight: 700; white-space: nowrap; }
.bo-price-level__mark { color: var(--line-strong); }
.bo-price-level__mark.is-on { color: var(--text); }
.bo-price-level__mark + .bo-price-level__mark { margin-left: var(--space-4); }

/* ── Header ───────────────────────────────────────────────────────────── */

.site-header {
  position: sticky;
  top: 0;
  z-index: 1000;
  background: var(--canvas);
  border-bottom: 1px solid var(--line);
  font-family: var(--font);
  text-align: left;
}

.site-header__inner {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: var(--space-12);
  height: var(--header-h);
  max-width: calc(var(--max-width) + 2 * var(--gutter));
  margin-inline: auto;
  padding-inline: var(--gutter);
  background: var(--canvas);
}

.site-header__brand {
  display: inline-flex;
  align-items: center;
  gap: var(--space-8);
  margin-right: auto;
  color: var(--text);
  text-decoration: none;
}
.site-header__brand:hover { color: var(--text); text-decoration: none; }
.site-header__mark {
  display: block;
  width: 32px;
  height: 32px;
  border-radius: var(--radius-thumb);
}
.site-header__name {
  font-size: var(--fs-headline);
  font-weight: 800;
  letter-spacing: -0.2px;
  line-height: 1;
}

.site-header__nav { display: none; }

.site-header__link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 var(--space-12);
  color: var(--text-2);
  font-size: var(--fs-body);
  font-weight: 600;
  text-decoration: none;
  transition: color var(--dur-fast) var(--ease-enter);
}
.site-header__link:hover,
.site-header__link[aria-current="page"] { color: var(--text); text-decoration: none; }

.site-header__toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  margin-right: -10px;
  padding: 0;
  border: 0;
  border-radius: var(--radius-pill);
  background: transparent;
  color: var(--text);
  cursor: pointer;
}
.site-header__toggle svg { width: 24px; height: 24px; }
.site-header__toggle .site-header__icon-close { display: none; }
.site-header.is-open .site-header__icon-open { display: none; }
.site-header.is-open .site-header__icon-close { display: block; }

/* Phone menu: a panel that slides in from the right under the bar. */
.site-menu {
  position: fixed;
  inset: var(--header-h) 0 0 0;
  z-index: 1;
  visibility: hidden;
  pointer-events: none;
  transition: visibility 0s linear var(--dur-med);
}
.site-menu__scrim {
  position: absolute;
  inset: 0;
  background: var(--scrim);
  opacity: 0;
  transition: opacity var(--dur-med) var(--ease-exit);
}
.site-menu__panel {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  display: flex;
  flex-direction: column;
  width: min(320px, 85vw);
  padding: var(--space-8) var(--gutter) var(--space-24);
  overflow-y: auto;
  background: var(--surface);
  box-shadow: var(--shadow-overlay);
  transform: translateX(100%);
  transition: transform var(--dur-med) var(--ease-exit);
}
.site-menu__link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 52px;
  border-bottom: 1px solid var(--line);
  color: var(--text);
  font-size: var(--fs-body);
  font-weight: 600;
  text-decoration: none;
}
.site-menu__link:last-child { border-bottom: 0; }
.site-menu__link:hover { color: var(--text); text-decoration: none; }
.site-menu__link svg { width: 20px; height: 20px; color: var(--text-3); }
.site-menu__cta { margin-top: var(--space-24); }

.site-header.is-open .site-menu {
  visibility: visible;
  pointer-events: auto;
  transition: visibility 0s;
}
.site-header.is-open .site-menu__scrim { opacity: 1; transition-timing-function: var(--ease-enter); }
.site-header.is-open .site-menu__panel { transform: none; transition-timing-function: var(--ease-enter); }

html.site-menu-open { overflow: hidden; }

@media (min-width: 768px) {
  .site-header__nav { display: flex; align-items: center; gap: var(--space-8); }
  .site-header__toggle, .site-menu { display: none; }
  /* The button's label is not smaller than the plain link beside it: 16/700,
     as the partner kit labels buttons. Phones keep 13 so the bar fits 320. */
  .site-header__cta { font-size: var(--fs-body); }
}

/* ── Footer ───────────────────────────────────────────────────────────── */

.site-footer {
  background: var(--surface);
  color: var(--text-2);
  font-family: var(--font);
  font-size: var(--fs-caption);
  font-weight: 500;
  line-height: 1.45;
  text-align: left;
}

.site-footer__inner {
  max-width: calc(var(--max-width) + 2 * var(--gutter));
  margin-inline: auto;
  padding: var(--space-48) var(--gutter) var(--space-32);
}

/* Six groups placed by grid areas. Phone: two short groups a row, then the
   popular restaurants (two columns of links) and the contact block full
   width. From 768: four columns; the popular restaurants take the first two
   (two columns of links, so no tall single list beside an empty middle) and
   contact the last two (under About when there is no popular group, so it
   does not sit alone at the far right of an empty row). */
.site-footer__columns {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-areas:
    "about legal"
    "social download"
    "popular popular"
    "contact contact";
  gap: var(--space-32) var(--space-24);
}

/* Without the popular restaurants (a venue's own page, or the index is
   down) the contact block moves up a row. */
.site-footer__columns--no-popular {
  grid-template-areas:
    "about legal"
    "social download"
    "contact contact";
}

.site-footer__group { min-width: 0; }
.site-footer__group--about { grid-area: about; }
.site-footer__group--popular { grid-area: popular; }
.site-footer__group--legal { grid-area: legal; }
.site-footer__group--social { grid-area: social; }
.site-footer__group--download { grid-area: download; }
.site-footer__group--contact { grid-area: contact; }
.site-footer__group--popular .site-footer__list { column-count: 2; column-gap: var(--space-24); }

.site-footer__title {
  margin: 0 0 var(--space-8);
  color: var(--text);
  font-size: var(--fs-caption);
  font-weight: 600;
  line-height: 1.35;
}

.site-footer__list {
  margin: 0;
  padding: 0;
  list-style: none;
}
.site-footer__list li { break-inside: avoid; }

.site-footer__link {
  display: inline-block;
  padding: var(--space-4) 0;
  color: var(--text-2);
  font-size: var(--fs-caption);
  font-weight: 500;
  line-height: 24px;
  text-decoration: none;
  overflow-wrap: anywhere;
  transition: color var(--dur-fast) var(--ease-enter);
}
.site-footer__link:hover { color: var(--text); text-decoration: none; }

.site-footer__address {
  padding: var(--space-4) 0;
  color: var(--text-3);
  font-size: var(--fs-caption);
  line-height: 24px;
}
.site-footer__nowrap { white-space: nowrap; }

.site-footer__legal {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-24);
  margin-top: var(--space-48);
  padding-top: var(--space-24);
  border-top: 1px solid var(--line);
}
.site-footer__legal-item { min-width: 0; }
.site-footer__legal-label {
  display: block;
  margin-bottom: var(--space-4);
  color: var(--text-3);
  font-size: var(--fs-micro);
  font-weight: 600;
  line-height: 1.35;
}
.site-footer__legal-value {
  display: block;
  color: var(--text-2);
  font-size: var(--fs-caption);
  line-height: 1.45;
  overflow-wrap: anywhere;
}
.site-footer__legal-value a { color: var(--text-2); text-decoration: none; }
.site-footer__legal-value a:hover { color: var(--text); }

.site-footer__bottom {
  display: flex;
  align-items: center;
  gap: var(--space-8);
  margin-top: var(--space-32);
  color: var(--text-3);
  font-size: var(--fs-caption);
}
.site-footer__bottom img { display: block; width: 24px; height: 24px; border-radius: var(--radius-thumb); }

@media (min-width: 768px) {
  .site-footer__columns {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    grid-template-areas:
      "about legal social download"
      "popular popular contact contact";
  }
  .site-footer__columns--no-popular {
    grid-template-areas:
      "about legal social download"
      "contact . . .";
  }
  .site-footer__legal { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
