/* ============================================================
   007 STAYCATION — Design tokens
   ============================================================ */
:root{
  /* Color — black / white / red, 007 mission-dossier palette */
  --bg:            #000000;
  --bg-elevated:   #161616;
  --bg-elevated-2: #202020;
  --line:          rgba(255,255,255,0.10);
  --line-strong:   rgba(255,255,255,0.20);
  --fg:            #f5f5f5;
  --fg-muted:      #adadad;
  --fg-dim:        #6e6e6e;
  --accent:        #e01b2e;
  --accent-strong: #ff2d3f;
  --accent-ink:    #ffffff;

  /* Type */
  --font-display: 'Bricolage Grotesque', system-ui, sans-serif;
  --font-body:    'Manrope', system-ui, sans-serif;
  --font-mono:    'Space Mono', ui-monospace, monospace;

  --fs-hero: clamp(2.6rem, 3vw + 2rem, 5.6rem);
  --fs-h2:   clamp(2rem, 1.4vw + 1.6rem, 3.1rem);
  --fs-h3:   clamp(1.3rem, 0.6vw + 1.1rem, 1.7rem);
  --fs-body: 1rem;
  --fs-small: 0.85rem;

  /* Spacing */
  --space-1: 8px;
  --space-2: 16px;
  --space-3: 24px;
  --space-4: 32px;
  --space-5: 48px;
  --space-6: 64px;
  --space-7: 96px;
  --space-8: 140px;

  --radius: 4px;
  --ease: cubic-bezier(.19,1,.22,1);
}

*,*::before,*::after{ box-sizing:border-box; }
/* overflow-x:hidden must live on <html>, not <body> — Safari/iOS disables
   position:sticky on any descendant when the horizontal-scroll clip sits on
   body instead, which silently broke the pinned hero video on iPhone while
   working fine on desktop Chrome. */
html{ scroll-behavior:smooth; overflow-x:hidden; }
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{ animation-duration:0.01ms !important; animation-iteration-count:1 !important; transition-duration:0.01ms !important; scroll-behavior:auto !important; }
}

body{
  margin:0;
  background:var(--bg);
  color:var(--fg);
  font-family:var(--font-body);
  font-size:var(--fs-body);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}

img{ max-width:100%; display:block; }
a{ color:inherit; text-decoration:none; }
h1,h2,h3{ font-family:var(--font-display); font-weight:700; line-height:1.05; margin:0 0 var(--space-3); letter-spacing:-0.01em; }
p{ margin:0 0 var(--space-3); color:var(--fg-muted); max-width:60ch; }
.mono{ font-family:var(--font-mono); letter-spacing:0.04em; }

.section-inner{
  max-width:1240px;
  margin:0 auto;
  padding:var(--space-7) var(--space-4);
}

.tag{
  font-family:var(--font-mono);
  font-size:0.78rem;
  letter-spacing:0.14em;
  color:var(--accent);
  text-transform:uppercase;
  margin-bottom:var(--space-2);
}

/* Faint film-grain overlay for texture, matches moody photo tone */
.grain{
  position:fixed; inset:0; z-index:999; pointer-events:none;
  opacity:0.035; mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ============================================================
   Buttons
   ============================================================ */
.btn{
  display:inline-flex; align-items:center; justify-content:center;
  padding:14px 28px;
  font-family:var(--font-mono);
  font-size:0.82rem;
  letter-spacing:0.06em;
  text-transform:uppercase;
  border-radius:var(--radius);
  border:1px solid transparent;
  cursor:pointer;
  transition:transform 0.25s var(--ease), background 0.25s var(--ease), border-color .25s var(--ease), color .25s var(--ease);
}
.btn--primary{ background:var(--accent); color:var(--accent-ink); }
.btn--primary:hover{ background:var(--accent-strong); transform:translateY(-2px); }
.btn--ghost{ background:transparent; color:var(--fg); border-color:var(--line-strong); }
.btn--ghost:hover{ border-color:var(--accent); color:var(--accent); transform:translateY(-2px); }
.btn:focus-visible, a:focus-visible, button:focus-visible{ outline:2px solid var(--accent); outline-offset:3px; }

/* ============================================================
   Nav
   ============================================================ */
.nav{
  position:fixed; top:0; left:0; right:0; z-index:200;
  background:linear-gradient(to bottom, rgba(0,0,0,0.85), transparent);
  transition:background .3s var(--ease);
}
.nav.is-scrolled{ background:rgba(0,0,0,0.92); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); }
.nav__inner{
  max-width:1240px; margin:0 auto; padding:22px var(--space-4) 14px;
  display:grid; grid-template-columns:1fr auto 1fr; align-items:center;
}
.nav__brand{ grid-column:2; justify-self:center; }
.nav__logo{ height:108px; width:auto; }
.nav__links{ grid-column:3; justify-self:end; display:flex; align-items:center; gap:var(--space-4); }
.nav__links a{
  font-family:var(--font-mono); font-size:0.78rem; letter-spacing:0.06em; text-transform:uppercase;
  color:var(--fg-muted); transition:color .2s;
}
.nav__links a:hover{ color:var(--accent); }
.nav__toggle{ grid-column:3; justify-self:end; display:none; flex-direction:column; gap:5px; background:none; border:none; cursor:pointer; padding:8px; }
.nav__toggle span{ width:22px; height:2px; background:var(--fg); display:block; }
.nav__links-close{ display:none; }

/* ============================================================
   HUD corner brackets — signature motif
   ============================================================ */
.hud-corners{ position:absolute; inset:var(--space-4); pointer-events:none; z-index:5; }
.hud-corner{ position:absolute; width:28px; height:28px; border-color:var(--accent); opacity:0.65; }
.hud-corner--tl{ top:0; left:0; border-top:1.5px solid; border-left:1.5px solid; }
.hud-corner--tr{ top:0; right:0; border-top:1.5px solid; border-right:1.5px solid; }
.hud-corner--bl{ bottom:0; left:0; border-bottom:1.5px solid; border-left:1.5px solid; }
.hud-corner--br{ bottom:0; right:0; border-bottom:1.5px solid; border-right:1.5px solid; }

/* ============================================================
   Hero + branch-select — share one pinned video background. The bg layer
   sticks for the combined natural height of both stages (hero overlaps it
   via negative margin, branch-select follows normally); JS maps scroll
   progress across that whole range to the video's currentTime, so it only
   releases back to normal scroll once branch-select has fully passed.
   ============================================================ */
.hero-pin{ position:relative; }
.hero-pin__bg{
  position:sticky; top:0; height:100vh; z-index:0; overflow:hidden;
  background:var(--bg); display:flex; align-items:center; justify-content:center;
}
.hero{
  position:relative; z-index:1; margin-top:-100vh;
  min-height:100vh; display:flex; flex-direction:column;
  align-items:center; justify-content:center; text-align:center;
  overflow:hidden; padding:var(--space-4);
}
/* aspect-ratio (not height:auto) so the box has real size immediately —
   iOS Safari loads video metadata far more conservatively than desktop
   Chrome, and a height:auto video sits at 0 height (poster included) until
   that metadata arrives, which read as "video missing" on real iPhones. */
.hero__video{ position:relative; width:66%; max-width:420px; aspect-ratio:1/1; object-fit:contain; }
.hero__content{ position:relative; z-index:2; max-width:900px; }
.hero__title{ font-size:var(--fs-hero); line-height:1.22; }
.hero__title span span{ display:inline-block; }
.hero__actions{ display:flex; justify-content:center; margin-top:220px; }
.hero__actions > span{ display:flex; gap:var(--space-2); flex-wrap:wrap; justify-content:center; }

/* reveal-line: text mask reveal used for hero */
.reveal-line{ overflow:hidden; display:block; }
.reveal-line > span{ display:inline-block; transform:translateY(110%); transition:transform 1s var(--ease); }
.reveal-line.is-visible > span{ transform:translateY(0); }
/* Once revealed, drop the clipping mask — some Vietnamese combining marks
   (e.g. "Ề") render taller than the font's own line-height box and were
   getting cut off at the top by the overflow:hidden used for the slide-in. */
.reveal-line.is-visible{ overflow:visible; }

.hero__scroll{
  position:absolute; bottom:var(--space-4); left:50%; transform:translateX(-50%);
  z-index:2; display:flex; flex-direction:column; align-items:center; gap:10px;
}
.hero__scroll-label{ font-family:var(--font-mono); font-size:0.68rem; letter-spacing:0.2em; color:var(--fg-muted); }
.hero__scroll-line{ width:1px; height:36px; background:var(--line-strong); position:relative; overflow:hidden; }
.hero__scroll-line::after{
  content:''; position:absolute; top:-100%; left:0; width:100%; height:100%; background:var(--accent);
  animation:scrollLine 1.8s ease-in-out infinite;
}
@keyframes scrollLine{ 0%{ top:-100%; } 60%{ top:100%; } 100%{ top:100%; } }

/* ============================================================
   Scroll reveal (generic)
   ============================================================ */
.reveal-up{ opacity:0; transform:translateY(28px); transition:opacity .8s var(--ease), transform .8s var(--ease); }
.reveal-up.is-visible{ opacity:1; transform:translateY(0); }

/* ============================================================
   Missions / Rooms
   ============================================================ */
.missions{
  position:relative; z-index:1; min-height:100vh;
  display:flex; flex-direction:column; justify-content:center;
  background:transparent; border-bottom:1px solid var(--line);
}

/* ---------- Rooms page — full-screen view shown after picking a branch,
   replacing the homepage (hero/about/etc.) entirely, per the booking-site
   reference: nav stays, everything else is swapped for just this branch's rooms. */
.rooms-page{ background:var(--bg); min-height:100vh; }
.rooms-page .section-inner{ padding-top:calc(var(--space-7) + var(--space-3)); }
.rooms-page h2{ margin-bottom:var(--space-2); color:var(--accent-strong); }

/* ---------- Step 1 — branch cards ---------- */
.branch-cards{
  display:grid; grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));
  gap:var(--space-3); margin-top:var(--space-4);
}
.branch-card{
  background:var(--bg-elevated-2); border:1px solid var(--line); border-radius:var(--radius);
  overflow:hidden; text-align:left; cursor:pointer; padding:0;
  display:flex; flex-direction:row; align-items:stretch;
  transition:border-color .3s, transform .3s var(--ease);
}
.branch-card:hover{ border-color:var(--accent); transform:translateY(-4px); }
.branch-card__media{ position:relative; display:block; flex:0 0 42%; overflow:hidden; }
.branch-card__slide{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  opacity:0; transition:opacity 1.2s ease, transform .6s var(--ease);
}
.branch-card__slide.is-active{ opacity:1; }
.branch-card:hover .branch-card__slide.is-active{ transform:scale(1.06); }
.branch-card__badge{
  position:absolute; top:12px; left:12px; background:rgba(0,0,0,0.8);
  border:1px solid var(--line-strong); padding:6px 12px; font-size:0.7rem;
  letter-spacing:0.08em; color:var(--accent-strong);
}
.branch-card__body{ flex:1; display:flex; flex-direction:column; justify-content:center; gap:6px; padding:var(--space-3); min-width:0; }
.branch-card__name{ font-family:var(--font-display); font-size:1.4rem; color:var(--accent-strong); font-weight:700; }
.branch-card__addr{ color:var(--fg); font-size:0.78rem; }
.branch-card__cta{ margin-top:8px; font-family:var(--font-mono); font-size:0.78rem; color:var(--accent); }

/* ---------- Step 2 — room grid ---------- */
.back-link{
  background:none; border:none; color:var(--fg-muted); cursor:pointer;
  font-size:0.78rem; letter-spacing:0.06em; padding:0; margin-bottom:var(--space-3);
  transition:color .2s;
}
.back-link:hover{ color:var(--accent); }
.branch-address{ color:var(--fg); font-size:0.8rem; margin-bottom:var(--space-4); }

/* ---------- Availability search — "which Missions are free right now" ---------- */
.availability{
  background:var(--bg-elevated); border:1px solid var(--line-strong); border-radius:var(--radius);
  padding:18px; margin-bottom:var(--space-4);
}
.availability__tabs{ display:grid; grid-template-columns:repeat(3,1fr); gap:6px; margin-bottom:14px; }
.availability__tab{
  background:var(--bg-elevated-2); border:1px solid var(--line-strong); color:var(--fg-muted);
  padding:8px 6px; border-radius:999px; cursor:pointer; font-size:0.78rem; text-align:center;
  transition:border-color .2s, color .2s, background .2s;
}
.availability__tab.is-active{ background:var(--accent); border-color:var(--accent); color:var(--accent-ink); font-weight:600; }
.availability__tab:not(.is-active):hover{ border-color:var(--accent); color:var(--accent); }

.availability__form{ display:flex; gap:12px; align-items:flex-end; flex-wrap:wrap; }
.availability__field{ display:flex; flex-direction:column; gap:5px; flex:1 1 100px; min-width:0; }
.availability__field--wide{ flex-basis:100%; }
.availability__field[hidden]{ display:none; }
.availability__field label{ font-size:0.7rem; color:var(--fg-dim); letter-spacing:0.04em; }
.availability__field input, .availability__field select{
  background:var(--bg); border:1px solid var(--line-strong); color:var(--fg);
  padding:8px 10px; border-radius:var(--radius); font-family:var(--font-body); font-size:0.86rem;
  min-height:38px; color-scheme:dark;
}
.availability__field input:focus, .availability__field select:focus{ outline:2px solid var(--accent); outline-offset:1px; }
.availability__submit{ min-height:38px; margin:2px auto 0; }
/* color-scheme alone doesn't reliably darken the native <option> listbox in
   every browser — set the option colors directly so the dropdown text stays
   readable instead of light-on-white. */
.availability__field select option{
  background:var(--bg-elevated); color:var(--fg);
}

/* One joined date field (Ngày | Tháng | Năm) — order is fixed regardless of
   the visitor's browser/OS locale, unlike a native <input type="date">. */
.availability__date-group{
  display:flex; align-items:stretch;
  background:var(--bg); border:1px solid var(--line-strong); border-radius:var(--radius);
  overflow:hidden; min-height:38px;
}
.availability__date-group select{
  min-width:0; border:none; background:transparent; border-radius:0;
  min-height:auto; padding:8px 6px; text-align:center;
  border-right:1px solid var(--line-strong);
}
.availability__date-group select:last-child{ border-right:none; }
.availability__date-group select:focus{ outline-offset:-2px; }
.availability__date-group select:nth-child(1){ flex:0 0 22%; }
.availability__date-group select:nth-child(2){ flex:0 0 28%; }
.availability__date-group select:nth-child(3){ flex:1 1 auto; }

.availability__status{ margin-top:10px; font-size:0.78rem; color:var(--accent); min-height:1.2em; }
.availability__note{ margin-top:10px; font-size:0.72rem; color:var(--fg-dim); line-height:1.4; }

.room-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:var(--space-3); }

/* ---------- Lưu ý & Nội quy — swipeable policy carousel ---------- */
.rules{ margin-top:var(--space-6); }
.rules-carousel{
  position:relative; background:var(--bg-elevated); border:1px solid var(--line);
  border-radius:var(--radius); overflow:hidden;
}
.rules-carousel__track{ display:flex; touch-action:pan-y; transition:transform .45s var(--ease); }
.rules-carousel__slide{
  flex:0 0 100%; min-width:0; padding:var(--space-4); max-height:min(70vh, 560px); overflow-y:auto;
}
.rules-carousel__title{ color:var(--accent-strong); font-size:1.3rem; margin-bottom:var(--space-3); }
.rules-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--space-3); }
.rules-list--icons > li{ display:flex; align-items:flex-start; gap:12px; color:var(--fg-muted); font-size:0.92rem; line-height:1.5; }
.rules-list--icons strong{ color:var(--fg); }
.rules-icon{
  flex:0 0 auto; width:32px; height:32px; border-radius:50%; border:1.5px solid var(--accent);
  display:flex; align-items:center; justify-content:center; font-size:0.68rem; font-weight:700;
  color:var(--accent); font-family:var(--font-mono); margin-top:2px;
}
.rules-list--numbered{ margin:0; padding-left:1.2em; display:flex; flex-direction:column; gap:var(--space-3); }
.rules-list--numbered > li{ color:var(--fg); font-size:0.95rem; }
.rules-sublist{
  list-style:disc; padding-left:1.2em; margin:8px 0 0; display:flex; flex-direction:column; gap:6px;
  font-weight:400; color:var(--fg-muted); font-size:0.88rem; line-height:1.5;
}
.rules-sublist strong{ color:var(--fg); font-weight:700; }
.rules-carousel__arrow{
  position:absolute; top:50%; transform:translateY(-50%); z-index:3;
  width:32px; height:32px; border-radius:50%; background:rgba(0,0,0,0.75); border:1px solid var(--line-strong);
  color:var(--fg); display:flex; align-items:center; justify-content:center;
  cursor:pointer; transition:border-color .2s, background .2s;
}
.rules-carousel__arrow svg{ width:15px; height:15px; }
.rules-carousel__arrow:hover{ border-color:var(--accent); background:rgba(0,0,0,0.9); color:var(--accent); }
.rules-carousel__arrow--prev{ left:8px; }
.rules-carousel__arrow--next{ right:8px; }
.rules-carousel__dots{ display:flex; justify-content:center; gap:6px; padding:0 0 var(--space-3); }
.rules-carousel__dot{ width:6px; height:6px; border-radius:50%; background:var(--line-strong); transition:background .2s, transform .2s; }
.rules-carousel__dot.is-active{ background:var(--accent); transform:scale(1.25); }
.room-card{
  background:var(--bg-elevated-2); border:1px solid var(--line); border-radius:var(--radius);
  overflow:hidden; position:relative; transition:border-color .3s;
}
.room-card:hover{ border-color:var(--accent); }

/* Per-card photo carousel — swipe or use the arrows to browse each room's photos */
.room-card__carousel{ position:relative; aspect-ratio:4/3; overflow:hidden; touch-action:pan-y; }
.room-card__track{ display:flex; height:100%; transition:transform .45s var(--ease); }
.room-card__track img{ width:100%; height:100%; object-fit:cover; flex:0 0 100%; }
.room-card__arrow{
  position:absolute; top:50%; transform:translateY(-50%); z-index:2;
  width:32px; height:32px; border-radius:50%; border:1px solid var(--line-strong);
  background:rgba(0,0,0,0.65); color:var(--fg); display:flex; align-items:center; justify-content:center;
  cursor:pointer; transition:border-color .2s, background .2s;
}
.room-card__arrow svg{ width:15px; height:15px; }
.room-card__arrow:hover{ border-color:var(--accent); background:rgba(0,0,0,0.9); color:var(--accent); }
.room-card__arrow--prev{ left:8px; }
.room-card__arrow--next{ right:8px; }
.room-card__dots{ position:absolute; left:0; right:0; bottom:10px; z-index:2; display:flex; justify-content:center; gap:6px; }
.room-card__dot{ width:6px; height:6px; border-radius:50%; background:rgba(245,241,232,0.4); transition:background .2s, transform .2s; }
.room-card__dot.is-active{ background:var(--accent); transform:scale(1.25); }
.room-card__badge{
  position:absolute; top:10px; left:10px; z-index:2; background:rgba(0,0,0,0.8);
  border:1px solid var(--line-strong); padding:5px 10px; font-size:0.65rem;
  font-family:var(--font-mono); letter-spacing:0.08em; color:var(--accent-strong);
}
.room-card__placeholder{
  position:absolute; top:10px; right:10px; z-index:2; background:rgba(0,0,0,0.8);
  border:1px solid var(--line-strong); padding:5px 8px; font-size:0.6rem;
  font-family:var(--font-mono); color:var(--fg-dim);
}

/* Availability status sticker — sits in the right-hand column of the card
   body (next to amenities) once a search has run. */
.room-card__status{
  position:static; border:none; background:none; padding:0; line-height:0; cursor:default;
  display:flex; flex-direction:column; align-items:center; gap:8px; width:100%;
}
.room-card__status img{ height:104px; width:auto; display:block; margin:0 auto; pointer-events:none; }
.room-card__status.is-busy img{ height:150px; }
.room-card__status.is-free{ cursor:pointer; transition:transform .2s; }
.room-card__status.is-free:hover{ transform:translateY(-4px); }
.room-card__book-label{
  background:#000; color:var(--accent); border:1.5px solid var(--accent);
  padding:8px 10px; border-radius:999px; font-family:var(--font-mono); font-size:0.66rem;
  font-weight:700; text-transform:uppercase; letter-spacing:0.04em; text-align:center;
  transition:background .2s, color .2s;
}
.room-card__status.is-free:hover .room-card__book-label{ background:var(--accent); color:var(--accent-ink); }
.room-card__body{ padding:var(--space-3); }
.room-card__body h3{ font-size:1.25rem; margin-bottom:6px; color:var(--accent); }
.room-card__body p{ font-size:0.85rem; margin-bottom:var(--space-2); }

.room-card__body-cols{ display:flex; gap:var(--space-3); align-items:flex-start; margin-top:var(--space-3); }
.room-card__amenities-col{ flex:1 1 55%; min-width:0; }
.room-card__status-col{
  flex:0 0 36%; display:flex; flex-direction:column; align-items:center; gap:8px;
  align-self:flex-end;
}

.room-card__price-table{ width:100%; border-collapse:collapse; margin-bottom:var(--space-3); font-size:0.7rem; table-layout:fixed; }
.room-card__price-table th{
  text-align:right; color:var(--fg-dim); font-weight:400; font-family:var(--font-mono);
  font-size:0.62rem; text-transform:uppercase; letter-spacing:0.02em; padding-bottom:6px; padding-left:4px;
}
.room-card__price-table th:first-child{ text-align:left; padding-left:0; width:36%; }
.room-card__price-table td{ padding:7px 0 7px 4px; border-top:1px solid var(--line); text-align:right; color:var(--fg); font-weight:700; }
.room-card__price-table td:first-child{ text-align:left; color:var(--fg-muted); font-weight:400; padding-left:0; }
.room-card__price-table td:first-child strong{ display:block; color:var(--fg); font-weight:700; }
.room-card__price-time{ display:block; font-family:var(--font-mono); font-size:0.6rem; color:var(--fg-dim); margin-top:2px; }
.room-card__computed-price{
  font-size:0.9rem; font-weight:700; color:var(--accent-strong); text-align:center;
  background:var(--bg-elevated); border:1px solid var(--line-strong);
  border-radius:var(--radius); padding:7px 8px; margin:0; width:100%;
}
.room-card__suggestion{
  font-size:0.72rem; line-height:1.4; color:var(--fg-muted); text-align:center;
  background:var(--bg-elevated); border:1px dashed var(--line-strong);
  border-radius:var(--radius); padding:7px 8px; margin:0; width:100%;
}
.room-card__suggestion strong{ color:var(--accent); font-family:var(--font-mono); }
.room-card__amenities{
  list-style:none; margin:0 0 var(--space-3); padding:0;
  display:flex; flex-direction:column; gap:4px;
}
.room-card__amenities li{
  font-size:0.8rem; color:var(--fg-muted); padding-left:14px; position:relative; line-height:1.4;
}
.room-card__amenities li::before{
  content:'—'; position:absolute; left:0; color:var(--accent); font-size:0.75rem;
}

.missions__note{ font-size:0.78rem; color:var(--fg-dim); margin-top:var(--space-4); }

/* ============================================================
   Location
   ============================================================ */
.location-intro > .section-inner > .tag, .location > .section-inner > h2{ text-align:center; }
.location-intro{ position:relative; z-index:1; background:transparent; }
.location-intro__inner{ padding-bottom:0; }
.location-intro .tag{ margin-bottom:0; }
.location > .section-inner{ padding-top:var(--space-2); }
.location-grid{ display:grid; grid-template-columns:1fr 1fr; gap:var(--space-4); margin-top:var(--space-4); }
.location-card{ background:var(--bg-elevated); border:1px solid var(--line); border-radius:var(--radius); padding:var(--space-4); }
.location-card p.mono{ color:var(--accent); font-size:0.75rem; margin-bottom:4px; }
.location-card h3{ color:var(--accent-strong); }
.location-card__addr{ color:var(--fg); margin-bottom:var(--space-3); }
.location-card__map{ aspect-ratio:16/10; border:1px solid var(--line); border-radius:var(--radius); overflow:hidden; margin-bottom:var(--space-3); }

/* ============================================================
   Reviews
   ============================================================ */
.reviews{ text-align:center; }
.reviews__inner{ max-width:700px; }
.reviews__inner p{ margin-left:auto; margin-right:auto; }
.reviews__stars{ font-size:1.8rem; color:var(--accent); letter-spacing:6px; margin-bottom:var(--space-3); }
.reviews__actions{ display:flex; gap:var(--space-2); justify-content:center; flex-wrap:wrap; margin-top:var(--space-3); }

/* ============================================================
   Footer
   ============================================================ */
.footer{ background:var(--bg); }
.footer__grid{ display:grid; grid-template-columns:1.3fr 1fr 1fr; gap:var(--space-5); padding-bottom:var(--space-4); }
.footer__logo{ height:32px; margin-bottom:var(--space-2); }
.footer__heading{ color:var(--accent); font-size:0.72rem; margin-bottom:var(--space-2); }
.footer p{ font-size:0.88rem; margin-bottom:8px; }
.footer a:hover{ color:var(--accent); }
.footer__bottom{ border-top:1px solid var(--line); padding-top:var(--space-3); padding-bottom:var(--space-4); }
.footer__bottom p{ font-size:0.75rem; color:var(--fg-dim); margin:0; }

/* ============================================================
   Booking request modal
   ============================================================ */
.booking-modal{ position:fixed; inset:0; z-index:1000; display:flex; align-items:center; justify-content:center; padding:var(--space-3); }
.booking-modal[hidden]{ display:none; }
.booking-modal__backdrop{ position:absolute; inset:0; background:rgba(0,0,0,0.75); backdrop-filter:blur(3px); }
.booking-modal__box{
  position:relative; z-index:1; background:var(--bg-elevated); border:1px solid var(--line-strong);
  border-radius:var(--radius); padding:var(--space-5); max-width:420px; width:100%;
  max-height:90vh; overflow-y:auto;
}
.booking-modal__close{
  position:absolute; top:14px; right:14px; background:none; border:none; color:var(--fg-muted);
  font-size:1.1rem; cursor:pointer; line-height:1; padding:6px;
}
.booking-modal__close:hover{ color:var(--accent); }
.booking-modal__box h3{ margin-bottom:var(--space-3); }
.booking-modal__details{ display:flex; flex-direction:column; gap:10px; margin-bottom:var(--space-4); }
.booking-modal__details > div{ display:flex; justify-content:space-between; align-items:baseline; gap:var(--space-2); border-bottom:1px solid var(--line); padding-bottom:8px; }
.booking-modal__details span{ color:var(--fg-dim); font-size:0.8rem; }
.booking-modal__details strong{ color:var(--fg); font-family:var(--font-mono); font-size:0.9rem; text-align:right; }
.booking-modal__hint-img{ display:block; width:100%; max-width:220px; margin:2px auto 0; border-radius:var(--radius); }
.booking-modal__actions{ display:flex; flex-direction:column; gap:8px; }
.booking-modal__copied{ margin-top:var(--space-3); font-size:0.8rem; color:var(--accent); text-align:center; }

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 900px){
  .location-grid{ grid-template-columns:1fr; }
  .footer__grid{ grid-template-columns:1fr; gap:var(--space-4); }
}

@media (max-width: 720px){
  .nav__links{
    position:fixed; top:0; right:0; height:100vh; width:min(78vw,320px);
    background:var(--bg-elevated); flex-direction:column; align-items:flex-start;
    padding:96px var(--space-4) var(--space-4); gap:var(--space-3);
    transform:translateX(100%); transition:transform .35s var(--ease);
    border-left:1px solid var(--line);
  }
  .nav__links.is-open{ transform:translateX(0); }
  .nav__links-close{
    display:flex; align-items:center; justify-content:center;
    position:absolute; top:20px; right:20px; width:36px; height:36px;
    background:none; border:1px solid var(--line-strong); border-radius:50%;
    color:var(--fg); font-size:1rem; cursor:pointer; padding:0;
  }
  .nav__links-close:hover{ border-color:var(--accent); color:var(--accent); }
  .nav__toggle{ display:flex; }
  .nav__inner{ padding:14px var(--space-3) 8px; }
  .nav__logo{ height:76px; }
  .section-inner{ padding:var(--space-6) var(--space-3); }
  .location-intro__inner{ padding-top:4px; padding-bottom:0; }
  .hud-corners{ inset:var(--space-2); }
  .hud-corner{ width:18px; height:18px; }
  /* Stacked branch cards get a tall gap so the shared video background
     (mascots pointing at each branch) reads clearly between them. The
     extra margin-bottom nudges the whole (centered) block upward so that
     gap lines up with the mascots' pose at the end of the pinned scroll. */
  #branchSelect{ margin-bottom:47px; }
  .branch-cards{ gap:320px; justify-items:center; }
  .branch-card{ max-width:300px; width:100%; min-height:110px; }
  .branch-card__body{ padding:12px; gap:4px; }
  .branch-card__name{ font-size:1rem; }
  .branch-card__addr{ font-size:0.68rem; }
  .branch-card__cta{ font-size:0.68rem; margin-top:4px; }
  .branch-card__badge{ padding:4px 8px; font-size:0.58rem; }
}
