/* =================================================================
   DYNAMIC AUTOWORKS — STYLESHEET  (v2 patch)
   Static. No build step, no frameworks, no dependencies.

   DESIGN NOTE
   Built around the shop's own artifact: the work order. Structural
   bands, monospace for anything that behaves like data, service
   op-codes, and a form rendered as a service ticket.
   The 15deg slant on the hero strip is the exact angle measured off
   the logo wordmark, so the page leans the way the mark does.

   THEMING
   Every colour is a variable. The light set lives in :root, the dark
   set overrides it on [data-theme="dark"] (set on <html>). Red is the
   accent in BOTH themes — only the base and text invert.
   REBRAND IN ONE PLACE: edit the variables below.
   ================================================================= */

/* ---------- LIGHT (default) ---------- */
:root {
  --paper:      #EDEBE6;   /* page base */
  --surface:    #F6F5F2;   /* cards and panels */
  --ink:        #16171A;   /* body text, matches the logo ink */
  --steel:      #6E7378;   /* secondary text */
  --zinc:       #D6D3CC;   /* hairlines and dividers */

  /* structural bands: dark-on-light in this theme */
  --band-bg:    #16171A;
  --band-ink:   #F6F5F2;
  --band-steel: #9BA0A6;
  --band-line:  rgba(246,245,242,.14);
  --band-raise: #202226;

  --field-bg:   #FFFFFF;
  --nav-bg:     rgba(237,235,230,.94);
  --shadow:     rgba(22,23,26,.5);
  --veil-a:     rgba(20,21,24,.90);
  --veil-m:     rgba(20,21,24,.62);
  --veil-b:     rgba(20,21,24,.34);

  /* shared "shop floor" texture — diagonal rule lines + a corner glow.
     Same motif on the main site and the build pages so they read as one
     thing. Tuned per theme so it stays a texture, never a pattern. */
  --grid-line:  rgba(192,57,43,.055);
  --grid-glow:  rgba(192,57,43,.10);

  /* ---- the one accent, constant across themes ---- */
  --signal:     #C0392B;   /* muted red — brake caliper, not alarm */
  --signal-d:   #96281C;   /* hover / pressed */
  --signal-up:  #E8776A;   /* lifted red, for use on dark bands */
  --signal-w:   rgba(192,57,43,.14);

  /* ---- TYPE ---- */
  --display: 'Archivo', system-ui, sans-serif;
  --body:    'Public Sans', system-ui, sans-serif;
  --mono:    'IBM Plex Mono', ui-monospace, monospace;

  /* ---- SHAPE ---- */
  --radius: 4px;         /* deliberately tight — this is a workshop */
  --maxw:   1180px;
  --narrow: 860px;
  --slant:  15deg;       /* measured off the logo */
}

/* ---------- DARK ---------- */
[data-theme="dark"] {
  --paper:      #0D0E10;
  --surface:    #17181B;
  --ink:        #EDEBE6;
  --steel:      #8A8F94;
  --zinc:       #3A3C40;

  /* bands invert their relationship: raised, not sunken */
  --band-bg:    #17181B;
  --band-ink:   #EDEBE6;
  --band-steel: #8A8F94;
  --band-line:  rgba(237,235,230,.10);
  --band-raise: #202226;

  --field-bg:   #101114;
  --nav-bg:     rgba(13,14,16,.94);
  --shadow:     rgba(0,0,0,.7);
  --veil-a:     rgba(8,9,10,.92);
  --veil-m:     rgba(8,9,10,.66);
  --veil-b:     rgba(8,9,10,.36);

  --grid-line:  rgba(192,57,43,.05);
  --grid-glow:  rgba(192,57,43,.18);
}

/* ---------- RESET ---------- */
* { margin: 0; padding: 0; box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 92px; }

body {
  font-family: var(--body);
  background: var(--paper);
  background-image: repeating-linear-gradient(115deg, transparent 0 38px, var(--grid-line) 38px 40px);
  background-attachment: fixed;
  color: var(--ink);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
  transition: background-color .45s ease, color .45s ease;
}

img, svg { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button, input, select, textarea { font: inherit; color: inherit; }

:focus-visible { outline: 3px solid var(--signal); outline-offset: 2px; }

.skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  background: var(--ink); color: var(--paper);
  padding: 12px 18px; font-family: var(--mono); font-size: .78rem;
}
.skip-link:focus { left: 12px; top: 12px; }

/* ---------- SHARED ---------- */
.wrap { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 24px; }
.wrap-narrow { max-width: var(--narrow); }

.mono {
  font-family: var(--mono);
  font-size: .72rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  font-weight: 500;
}

.tag { color: var(--signal); margin-bottom: 14px; }

.h2 {
  font-family: var(--display);
  font-weight: 900;
  font-size: clamp(2rem, 4.4vw, 3.1rem);
  line-height: .98;
  letter-spacing: -.02em;
  text-transform: uppercase;
}

.lede { color: var(--steel); max-width: 56ch; margin-top: 16px; font-size: 1.02rem; }
.head { margin-bottom: 46px; }
.section { padding: 96px 0; }

.band {
  background: var(--band-bg);
  color: var(--band-ink);
  transition: background .45s ease, color .45s ease;
}
.band .lede { color: var(--band-steel); }
.band .h2   { color: var(--band-ink); }
.band .tag  { color: var(--signal-up); }

.link { color: var(--signal); border-bottom: 1px solid currentColor; padding-bottom: 1px; }
.band .link { color: var(--signal-up); }

/* ---------- BUTTONS ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--signal);
  color: #fff;
  font-family: var(--display);
  font-weight: 700;
  font-size: .92rem;
  letter-spacing: .02em;
  text-transform: uppercase;
  padding: 15px 28px;
  border: 0; border-radius: var(--radius);
  cursor: pointer;
  transition: background .18s ease, transform .18s ease;
}
.btn:hover  { background: var(--signal-d); }
.btn:active { transform: translateY(1px); }
.btn-sm     { padding: 10px 18px; font-size: .8rem; }

.btn-ghost {
  background: transparent;
  color: #F6F5F2;
  border: 1px solid rgba(246,245,242,.35);
}
.btn-ghost:hover { background: rgba(246,245,242,.1); }

/* ---------- NAV ---------- */
.nav {
  position: sticky; top: 0; z-index: 100;
  background: var(--nav-bg);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--zinc);
  transition: background .45s ease, border-color .45s ease;
}
.nav-inner { display: flex; align-items: center; gap: 24px; min-height: 76px; }

/* Header mark: the square vector stamp. Two files — ink for light,
   white for dark — cross-faded on theme change. No white plate needed;
   these are real vector with real transparency. */
.brand { flex: 0 0 auto; display: block; position: relative; width: 46px; height: 46px; }
.brand img {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: contain;
  transition: opacity .45s ease;
}
.brand .mark-dark { opacity: 0; }
[data-theme="dark"] .brand .mark-light { opacity: 0; }
[data-theme="dark"] .brand .mark-dark  { opacity: 1; }

.nav-links {
  display: flex; align-items: center; gap: 26px;
  margin-left: auto;
  font-size: .93rem; font-weight: 500;
}
.nav-links a { padding: 6px 0; border-bottom: 2px solid transparent; }
.nav-links a:hover { border-bottom-color: var(--signal); }

.nav-actions { display: flex; align-items: center; gap: 14px; }
.nav-phone { color: var(--steel); }
.nav-phone:hover { color: var(--ink); }

.nav-toggle {
  display: none;
  width: 42px; height: 38px;
  background: transparent; border: 1px solid var(--zinc); border-radius: 3px;
  cursor: pointer; padding: 10px 9px;
}
.nav-toggle span {
  display: block; height: 2px; background: var(--ink);
  margin: 3px 0; transition: transform .2s ease, opacity .2s ease;
}
.nav-toggle.open span:nth-child(1) { transform: translateY(5px) rotate(45deg); }
.nav-toggle.open span:nth-child(2) { opacity: 0; }
.nav-toggle.open span:nth-child(3) { transform: translateY(-5px) rotate(-45deg); }

/* ---------- THEME TOGGLE (animated pill) ---------- */
.theme-toggle {
  position: relative;
  display: inline-flex; align-items: center;
  width: 112px; height: 28px;
  padding: 3px;
  background: var(--zinc);
  border: 0; border-radius: 999px;
  cursor: pointer;
  transition: background .45s ease;
  flex: 0 0 auto;
}
.theme-toggle .pill {
  position: absolute; top: 3px; left: 3px;
  width: 53px; height: 22px;
  border-radius: 999px;
  background: var(--surface);
  box-shadow: 0 1px 3px rgba(0,0,0,.22);
  transition: transform .38s cubic-bezier(.34,1.4,.64,1), background .45s ease;
  z-index: 1;
}
[data-theme="dark"] .theme-toggle .pill { transform: translateX(53px); }

.theme-toggle .opt {
  position: relative; z-index: 2;
  flex: 1;
  display: flex; align-items: center; justify-content: center; gap: 4px;
  font-family: var(--mono);
  font-size: .58rem; letter-spacing: .04em; text-transform: uppercase;
  transition: color .3s ease;
}
.theme-toggle .opt svg { width: 11px; height: 11px; flex: 0 0 auto; }
.theme-toggle .opt-light { color: var(--ink);   font-weight: 600; }
.theme-toggle .opt-dark  { color: var(--steel); font-weight: 500; }
[data-theme="dark"] .theme-toggle .opt-light { color: var(--steel); font-weight: 500; }
[data-theme="dark"] .theme-toggle .opt-dark  { color: var(--ink);   font-weight: 600; }

/* ---------- HERO ---------- */
/* The hero must NOT clip: the angled strip at its base is skewed, so its
   corners sit outside the hero box. Clipping moved onto .hero-bg, which
   is the only thing that actually needs it (the cover-fit media). */
.hero { position: relative; background: #0D0E10; color: #F6F5F2; overflow: visible; }

/* The photo is a CSS background here, NOT just the <video poster>. A
   <video> whose source 404s reports networkState 3 and can stop painting
   its poster once autoplay is attempted — which is exactly why the shop
   photo showed on mobile (autoplay blocked) and washed out on desktop.
   This way the photo is always painted, video or no video. */
.hero-bg {
  position: absolute; inset: 0; overflow: hidden; z-index: 0;
  background: #0D0E10 url("assets/hero/hero-1.jpg") center/cover no-repeat;
}
.hero-media {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: cover;
}

/* D78/D79 — hero photo slideshow. Same box as .hero-media so the two are
   interchangeable. Cross-fade only; nothing moves, because the wordmark and
   copy sit on top and any pan would drag the eye off them. .hero-media above
   is kept as the hook for a future return to video. */
.hero-slides { position: absolute; inset: 0; overflow: hidden; }
.hero-slide {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: cover;
  transform: translateX(100%);
  transition: transform 900ms cubic-bezier(.65, 0, .35, 1);
  will-change: transform;
}
.hero-slide.is-on   { transform: translateX(0);      z-index: 2; }
.hero-slide.is-out  { transform: translateX(-100%);  z-index: 1; }
/* Used for one frame to park an incoming slide back on the right without
   animating it there — otherwise it would visibly fly backwards first. */
.hero-slide.no-anim { transition: none; }

/* Horizontal travel is exactly what reduced-motion is meant to suppress, so
   that case gets a fade instead. Not a hard cut — a cut was the old bug. */
@media (prefers-reduced-motion: reduce) {
  .hero-slide          { transform: none; opacity: 0; transition: opacity .5s ease; }
  .hero-slide.is-on    { opacity: 1; }
  .hero-slide.is-out   { opacity: 0; }
}
/* Directional veil: heavy on the left where the wordmark and copy sit,
   light on the right so the shop floor is actually visible. On narrow
   screens the copy spans the full width, so it goes vertical instead. */
.hero-veil {
  position: absolute; inset: 0;
  /* Explicit, because the slides now carry z-index and an auto-stacked veil
     silently loses to them no matter where it sits in the markup. Stack inside
     .hero-bg is: out-slide 1, on-slide 2, veil 3. */
  z-index: 3;
  background:
    radial-gradient(circle at 12% 0%, var(--grid-glow), transparent 55%),
    repeating-linear-gradient(115deg, transparent 0 38px, rgba(192,57,43,.05) 38px 40px),
    linear-gradient(100deg,
      var(--veil-a) 0%, var(--veil-a) 30%,
      var(--veil-m) 58%, var(--veil-b) 100%);
  transition: background .45s ease;
}
.hero-inner { position: relative; z-index: 1; padding: 118px 24px 96px; }
.hero .tag { color: var(--signal-up); }

/* D27 — the real vector wordmark replaces the text headline. The hero
   sits on a dark veil in BOTH themes, so this is always the white variant. */
.hero-mark { width: min(680px, 100%); height: auto; margin: 4px 0 0; }
.hero-sub { margin-top: 24px; max-width: 52ch; color: #B4B9BF; font-size: 1.08rem; }
.hero-cta { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 34px; }

/* The angled strip — the logo's slant, used once, structurally.
   The container is skewed and each item counter-skewed, so the text sits
   level inside a tilted band. That was never the bug: the items were
   being CLIPPED by overflow:hidden on .hero, because a skewed box pushes
   its corners outside its own bounds vertically. .hero is now
   overflow:visible (only .hero-bg clips), so nothing is cut off.
   skewY shifts vertically only — it never changes width — so this adds
   no horizontal overflow. */
.strip {
  position: relative;
  z-index: 2;
  list-style: none;
  display: flex; flex-wrap: wrap; gap: 0;
  background: var(--signal);
  color: #fff;
  transform: skewY(calc(var(--slant) * -.12));
  margin-bottom: -14px;
}
.strip li {
  flex: 1 1 200px;
  padding: 16px 24px;
  transform: skewY(calc(var(--slant) * .12));
  border-right: 1px solid rgba(255,255,255,.22);
  font-family: var(--mono);
  font-size: .7rem; letter-spacing: .1em; text-transform: uppercase;
  white-space: nowrap;
}
.strip li:last-child { border-right: 0; }

/* ---------- OUR WORK / PERSONAL BUILDS ---------- */
.grid-work { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }

/* D32 — every tile links to its own build page */
.shot {
  position: relative;
  display: block;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  background: var(--zinc);
  border-radius: var(--radius);
}
.shot img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.shot:hover img { transform: scale(1.04); }

.shot-label {
  position: absolute; left: 0; right: 0; bottom: 0;
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 26px 16px 14px;
  background: linear-gradient(180deg, rgba(13,14,16,0) 0%, rgba(13,14,16,.88) 70%);
  color: #F6F5F2;
  font-family: var(--display);
  font-weight: 700; font-size: .95rem;
  text-transform: uppercase; letter-spacing: .01em;
}
.shot-label .go {
  font-family: var(--mono); font-size: .68rem; letter-spacing: .1em;
  color: var(--signal-up);
  opacity: 0; transform: translateX(-4px);
  transition: opacity .25s ease, transform .25s ease;
}
.shot:hover .go,
.shot:focus-visible .go { opacity: 1; transform: translateX(0); }
.shot-soon .shot-label { color: #9BA0A6; }

/* ---------- SERVICES (D33 — expandable, icon + op-code) ---------- */
.ops { list-style: none; display: grid; gap: 10px; }

.op {
  background: var(--band-raise);
  border: 1px solid var(--band-line);
  border-radius: var(--radius);
  overflow: hidden;
}
.op > summary {
  list-style: none; cursor: pointer;
  padding: 16px 20px;
  display: flex; align-items: center; gap: 16px;
  transition: background .15s ease;
}
.op > summary::-webkit-details-marker { display: none; }
.op > summary:hover { background: rgba(255,255,255,.04); }

.op-icon { width: 34px; height: 34px; flex: 0 0 auto; color: var(--signal-up); }
.op-icon svg { width: 100%; height: 100%; }

.op-code {
  font-family: var(--mono);
  font-size: .68rem; letter-spacing: .08em;
  color: var(--signal-up);
  background: rgba(192,57,43,.16);
  border: 1px solid rgba(232,119,106,.4);
  border-radius: 2px;
  padding: 3px 8px;
  flex: 0 0 auto;
}
.op-titles { flex: 1; min-width: 0; }
.op-name {
  font-family: var(--display);
  font-weight: 800; font-size: 1.06rem;
  line-height: 1.2; text-transform: uppercase; letter-spacing: .01em;
  color: var(--band-ink);
}
.op-note { color: var(--band-steel); font-size: .9rem; margin-top: 3px; }

.op-chev {
  width: 16px; height: 16px; flex: 0 0 auto;
  color: var(--band-steel);
  transition: transform .25s ease;
}
.op[open] .op-chev { transform: rotate(180deg); }

.op-detail { padding: 0 20px 20px; border-top: 1px solid var(--band-line); }
.op-detail p {
  color: var(--band-steel); font-size: .95rem; line-height: 1.65;
  margin: 16px 0 0; max-width: 74ch;
}

/* Per-service image carousel inside the expanded card. Native scroll-snap,
   drag to scrub, same mechanic as the build page carousel. */
.svc-rail {
  display: flex; gap: 10px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  margin-top: 16px; padding-bottom: 8px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin; scrollbar-color: var(--band-line) transparent;
  cursor: grab;
}
.svc-rail:active { cursor: grabbing; }
.svc-rail::-webkit-scrollbar { height: 6px; }
.svc-rail::-webkit-scrollbar-thumb { background: var(--band-line); border-radius: 3px; }
.svc-rail img {
  flex: 0 0 auto;
  width: 260px; height: 195px;
  cursor: zoom-in;
  object-fit: cover;
  border-radius: var(--radius);
  border: 1px solid var(--band-line);
  scroll-snap-align: start;
  user-select: none; -webkit-user-drag: none;
}
.svc-rail-note {
  font-family: var(--mono); font-size: .62rem; letter-spacing: .08em;
  text-transform: uppercase; color: var(--band-steel);
  margin-top: 10px;
}

/* The FAQ section is now the landing point for "Request service" (D64), so it
   ends by pointing onward instead of just stopping. */
.faq-foot {
  margin: 34px 0 0; text-align: center;
  font-size: .82rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--steel);
}
.faq-foot-arrow {
  display: inline-block; margin-left: 6px; color: var(--signal);
  animation: faq-nudge 2.2s ease-in-out infinite;
}
@keyframes faq-nudge {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(4px); }
}
@media (prefers-reduced-motion: reduce) {
  .faq-foot-arrow { animation: none; }
}

/* ---------- RATES (D29) ---------- */
.rates {
  border: 1px solid var(--zinc);
  border-radius: var(--radius);
  background: var(--surface);
  overflow: hidden;
  transition: background .45s ease, border-color .45s ease;
}
.rates-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 16px; flex-wrap: wrap;
  background: var(--band-bg);
  color: var(--band-ink);
  padding: 14px 22px;
  transition: background .45s ease, color .45s ease;
}
.rates-head .eff { color: var(--band-steel); }

.rate-row {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 20px;
  padding: 15px 22px;
  border-bottom: 1px solid var(--zinc);
}
.rate-row:last-of-type { border-bottom: 0; }
.rate-name {
  font-family: var(--display);
  font-weight: 600; font-size: 1rem;
  text-transform: uppercase; letter-spacing: .01em;
}
.rate-dots { flex: 1; border-bottom: 1px dotted var(--zinc); transform: translateY(-4px); }
.rate-val {
  font-family: var(--mono);
  font-size: .95rem; font-weight: 600;
  color: var(--signal);
  white-space: nowrap;
}
.rates-foot { color: var(--steel); font-size: .86rem; margin-top: 16px; }

/* ---------- SERVICE REQUEST TICKET ---------- */
.ticket {
  background: var(--surface);
  border: 1px solid var(--zinc);
  border-radius: var(--radius);
  box-shadow: 0 24px 50px -34px var(--shadow);
  overflow: hidden;
  transition: background .45s ease, border-color .45s ease;
}
.ticket-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 16px; flex-wrap: wrap;
  background: var(--band-bg);
  color: var(--band-ink);
  padding: 15px 26px;
  transition: background .45s ease, color .45s ease;
}
.ticket-id { color: var(--band-steel); }
.ticket-body { padding: 30px 26px 26px; }

.row   { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.row-3 { grid-template-columns: repeat(3, 1fr); }

.field { margin-bottom: 18px; }
.field label { display: block; color: var(--steel); margin-bottom: 7px; }
.field input,
.field select,
.field textarea {
  width: 100%;
  background: var(--field-bg);
  border: 1px solid var(--zinc);
  border-radius: 3px;
  padding: 12px 13px;
  font-size: .97rem;
  transition: border-color .16s ease, box-shadow .16s ease, background .45s ease;
}
.field textarea { resize: vertical; min-height: 120px; }
.field input:focus,
.field select:focus,
.field textarea:focus {
  border-color: var(--signal);
  box-shadow: 0 0 0 3px var(--signal-w);
  outline: none;
}
.field input.invalid,
.field select.invalid {
  border-color: var(--signal);
  box-shadow: 0 0 0 3px var(--signal-w);
}
.hint { color: var(--steel); font-size: .82rem; margin-top: 6px; }

/* D30 — booking clarity moved next to the date fields, where it's read */
[hidden] { display: none !important; }

.date-note {
  display: flex; align-items: flex-start; gap: 8px;
  color: var(--steel);
  font-size: .82rem;
  margin: -6px 0 18px;
}
.date-note::before {
  content: "!";
  font-family: var(--mono); color: var(--signal); font-weight: 600;
}

.hp { position: absolute; left: -9999px; }

.ticket-foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: 16px; flex-wrap: wrap;
  border-top: 1px dashed var(--zinc);
  margin-top: 10px;
  padding-top: 22px;
}
.foot-note { color: var(--steel); }
.form-error { color: var(--signal); font-size: .9rem; margin-bottom: 14px; }

/* ---------- STORE NOTICE ---------- */
.notice {
  background: var(--band-bg);
  color: var(--band-steel);
  padding: 18px 0;
  border-top: 1px solid var(--band-line);
  border-bottom: 1px solid var(--band-line);
  transition: background .45s ease, color .45s ease;
}
.notice p { letter-spacing: .12em; }

/* ---------- SHOP / SPLIT ---------- */
.split { display: grid; grid-template-columns: 1fr 1.15fr; gap: 34px; align-items: start; }
.facts { display: grid; grid-template-columns: 1fr 1fr; gap: 26px; }
.fact-key { color: var(--signal); margin-bottom: 8px; }
.band .fact-key { color: var(--signal-up); }
.fact-val { font-size: 1.04rem; }
.fact .link { display: inline-block; margin-top: 8px; font-size: .92rem; }

.map {
  border: 1px solid var(--band-line);
  border-radius: var(--radius);
  overflow: hidden;
  aspect-ratio: 16 / 11;
  background: var(--band-raise);
}
.map iframe { width: 100%; height: 100%; border: 0; display: block; filter: grayscale(.3); }

/* ---------- FAQ ---------- */
.faq-list { border-top: 1px solid var(--zinc); }
.qa { border-bottom: 1px solid var(--zinc); }
.qa summary {
  cursor: pointer; list-style: none;
  padding: 20px 40px 20px 0;
  position: relative;
  font-family: var(--display);
  font-weight: 600; font-size: 1.06rem;
}
.qa summary::-webkit-details-marker { display: none; }
.qa summary::after {
  content: "+";
  position: absolute; right: 6px; top: 50%;
  transform: translateY(-50%);
  color: var(--signal);
  font-family: var(--mono); font-size: 1.2rem;
}
.qa[open] summary::after { content: "–"; }
.qa p { color: var(--steel); padding: 0 40px 22px 0; max-width: 68ch; }

/* ---------- CONTACT ---------- */
.contact-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; align-items: center; }
.contact-cards { display: grid; gap: 12px; }
.card {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 16px;
  background: var(--surface);
  border: 1px solid var(--zinc);
  border-radius: var(--radius);
  padding: 20px 22px;
  transition: border-color .18s ease, transform .18s ease, background .45s ease;
}
.card:hover { border-color: var(--signal); transform: translateX(3px); }
.card-key { color: var(--steel); flex: 0 0 auto; }
/* the email address is one long unbreakable token — without these it
   sets the min-content width of the whole column and overflows mobile */
.card-val {
  font-family: var(--display); font-weight: 700; font-size: 1.06rem;
  min-width: 0; overflow-wrap: anywhere; text-align: right;
}

/* ---------- FOOTER (D28) ---------- */
.footer {
  background: var(--band-bg);
  color: var(--band-steel);
  padding: 66px 0 26px;
  transition: background .45s ease, color .45s ease;
}
.footer-inner { display: grid; grid-template-columns: 1.2fr 1fr 1fr 1fr; gap: 34px; }

.footer-brand { display: block; }
.brand-sm { position: relative; width: 88px; height: 88px; display: block; }

/* D28 — the description paragraph is gone; the nav-links column moved
   into that slot with its label removed. Bare links only. */
.footer-links { display: block; margin-top: 22px; }
.footer-links a { display: block; font-size: .94rem; margin-bottom: 9px; }
.footer-links a:hover { color: var(--band-ink); }

.col-key { color: var(--band-ink); margin-bottom: 14px; }
.footer-col a,
.footer-col p { display: block; font-size: .94rem; margin-bottom: 9px; }
.footer-col a:hover { color: var(--band-ink); }

/* D28 — the @ on each handle is replaced by an icon */
.ig { display: flex; align-items: center; gap: 9px; }
.ig svg { width: 15px; height: 15px; flex: 0 0 auto; color: var(--signal-up); }

.footer-base {
  display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap;
  border-top: 1px solid var(--band-line);
  margin-top: 46px;
  padding-top: 22px;
  color: var(--band-steel);
}

/* ---------- THANK YOU + UNDER CONSTRUCTION ---------- */
.receipt { min-height: 72vh; display: flex; align-items: center; padding: 80px 0; }
.receipt-card {
  background: var(--surface);
  border: 1px solid var(--zinc);
  border-radius: var(--radius);
  overflow: hidden;
  max-width: 620px; margin: 0 auto;
  box-shadow: 0 24px 50px -34px var(--shadow);
}
.receipt-body { padding: 34px 30px; }
.receipt-body .h2 { font-size: clamp(1.8rem, 4vw, 2.4rem); }
.receipt-body p { color: var(--steel); margin-top: 14px; }
.receipt-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 26px; }

.uc-mark { display: inline-flex; align-items: center; justify-content: center; width: 72px; height: 72px; margin-bottom: 20px; color: var(--signal); }
.uc-mark svg { width: 100%; height: 100%; }

/* ---------- RESPONSIVE ---------- */
@media (max-width: 1040px) {
  .nav-links { gap: 18px; font-size: .88rem; }
  .nav-inner { gap: 16px; }
}

@media (max-width: 960px) {
  .split { grid-template-columns: 1fr; }
  .contact-grid { grid-template-columns: 1fr; }
  .footer-inner { grid-template-columns: 1fr 1fr; }
  .grid-work { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 780px) {
  .nav-links {
    position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; align-items: stretch; gap: 0;
    background: var(--paper);
    border-bottom: 1px solid var(--zinc);
    padding: 8px 24px 18px;
    display: none;
  }
  .nav-links.open { display: flex; }
  .nav-links a { padding: 13px 0; border-bottom: 1px solid var(--zinc); }
  .nav-links a:hover { border-bottom-color: var(--zinc); color: var(--signal); }
  .nav-toggle { display: block; }
  .nav-phone { display: none; }
  /* .nav-links is absolutely positioned on mobile so it takes no row
     space — the actions have to claim the free space themselves. */
  .nav-actions { margin-left: auto; }
  /* copy spans the full width down here, so the veil goes vertical */
  .hero-veil {
    background:
      radial-gradient(circle at 12% 0%, var(--grid-glow), transparent 55%),
      repeating-linear-gradient(115deg, transparent 0 38px, rgba(192,57,43,.05) 38px 40px),
      linear-gradient(180deg, var(--veil-a) 0%, var(--veil-m) 62%, var(--veil-a) 100%);
  }
  .nav-inner { min-height: 68px; }
  .brand { width: 40px; height: 40px; }
  .theme-toggle { width: 96px; height: 26px; }
  .theme-toggle .pill { width: 45px; height: 20px; }
  [data-theme="dark"] .theme-toggle .pill { transform: translateX(45px); }
}

@media (max-width: 620px) {
  .section { padding: 66px 0; }
  .hero-inner { padding: 82px 24px 70px; }
  .row, .row-3 { grid-template-columns: 1fr; gap: 0; }
  .facts { grid-template-columns: 1fr; }
  .grid-work { grid-template-columns: 1fr 1fr; gap: 10px; }
  .footer-inner { grid-template-columns: 1fr; }
  .strip li { flex: 1 1 100%; border-right: 0; border-bottom: 1px solid rgba(255,255,255,.22); }
  .strip li:last-child { border-bottom: 0; }
  .ticket-body { padding: 24px 18px 20px; }
  .btn { width: 100%; }
  .receipt-actions .btn { width: 100%; }
  .nav-actions .btn-sm { display: none; }
  .op > summary { gap: 12px; padding: 14px 15px; flex-wrap: wrap; }
  .op-icon { width: 28px; height: 28px; }
  .op-titles { flex: 1 1 100%; order: 3; }
  .rate-row { padding: 13px 16px; }
  .rate-dots { display: none; }
  .shot-label { padding: 20px 11px 10px; font-size: .78rem; }
  .card { flex-direction: column; align-items: flex-start; gap: 5px; }
  .card-val { text-align: left; font-size: 1rem; }
}

/* =================================================================
   BUILD PAGES
   Same site header, same tokens, same fonts, same red — a louder
   extension of the language, not a separate design. Fully theme-aware
   so the header stays constant across the whole site.
   ================================================================= */

.build-hero { position: relative; overflow: hidden; padding: 60px 0 40px; }
.build-hero::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    repeating-linear-gradient(115deg, transparent 0 38px, var(--grid-line) 38px 40px),
    radial-gradient(circle at 12% 0%, var(--grid-glow), transparent 55%);
}
.build-hero .wrap { position: relative; }

.build-eyebrow {
  font-family: var(--mono); font-size: .72rem; letter-spacing: .14em;
  color: var(--signal); text-transform: uppercase;
  margin-bottom: 10px; display: flex; align-items: center; gap: 10px;
}
.build-eyebrow .dot {
  width: 6px; height: 6px; background: var(--signal); border-radius: 50%;
  box-shadow: 0 0 8px 2px rgba(192,57,43,.45);
  animation: pulse 1.6s ease-in-out infinite;
}
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }

.build-owner {
  margin: -4px 0 0;
  font-size: .82rem;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--band-steel);
}
.build-owner a { color: var(--signal-up); text-decoration: none; }
.build-owner a:hover { text-decoration: underline; }

.build-title {
  font-family: var(--display); font-weight: 900;
  font-size: clamp(2.5rem, 7vw, 5.25rem);
  line-height: .92; letter-spacing: -.01em; text-transform: uppercase;
}
.build-title .sub {
  display: block; font-weight: 600;
  font-size: clamp(1rem, 2vw, 1.35rem);
  color: var(--steel); letter-spacing: .06em;
  margin-top: 10px; text-transform: none;
}

.build-layout { display: grid; grid-template-columns: 1.15fr .85fr; gap: 28px; margin-top: 36px; }

.stagebox {
  background: var(--surface);
  border: 1px solid var(--zinc); border-radius: var(--radius);
  aspect-ratio: 4/5; position: relative; overflow: hidden;
}
.stagebox img { width: 100%; height: 100%; object-fit: cover; position: relative; z-index: 1; cursor: zoom-in; }
.stagebox::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 38%; z-index: 2;
  background: radial-gradient(ellipse at 50% 100%, rgba(192,57,43,.25), transparent 70%);
  pointer-events: none;
}
.corner { position: absolute; width: 22px; height: 22px; border: 2px solid var(--signal); opacity: .85; z-index: 3; }
.corner.tl { top: 14px; left: 14px; border-right: none; border-bottom: none; }
.corner.br { bottom: 14px; right: 14px; border-left: none; border-top: none; }

/* Was stretching to match a tall portrait cover, leaving a large empty panel
   below the four bars on every new build page. Take only the height needed. */
.statpanel { align-self: start; }

.statpanel {
  background: var(--surface); border: 1px solid var(--zinc);
  border-radius: var(--radius); padding: 24px;
}
.statpanel h2 {
  font-family: var(--mono); font-size: .72rem; letter-spacing: .1em;
  text-transform: uppercase; color: var(--steel); font-weight: 500;
  margin-bottom: 18px; padding-bottom: 10px; border-bottom: 1px solid var(--zinc);
}
.stat { margin-bottom: 16px; }
.stat:last-of-type { margin-bottom: 0; }
.stat-row {
  display: flex; justify-content: space-between; align-items: baseline;
  font-family: var(--mono); font-size: .72rem; letter-spacing: .05em; margin-bottom: 6px;
}
.stat-row .num { color: var(--ink); font-weight: 600; }
.bar { height: 8px; background: var(--paper); border: 1px solid var(--zinc); border-radius: 2px; overflow: hidden; }
/* MUST be block — an inline element ignores width/height entirely and the
   bar renders at 0x0 while still reporting its style attribute. */
.bar-fill {
  display: block; height: 100%; width: 0%;
  background: linear-gradient(90deg, var(--signal-d), var(--signal));
  box-shadow: 0 0 10px 0 rgba(192,57,43,.45);
  transition: width 1.1s cubic-bezier(.2,.8,.2,1);
}

.badges { display: flex; gap: 8px; margin-top: 22px; flex-wrap: wrap; }
.badge {
  font-family: var(--mono); font-size: .66rem; letter-spacing: .05em;
  border: 1px solid var(--signal); color: var(--signal);
  padding: 5px 10px; border-radius: 2px; text-transform: uppercase;
}

.sheet { margin-top: 28px; background: var(--surface); border: 1px solid var(--zinc); border-radius: var(--radius); }
.sheet-head {
  display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap;
  padding: 14px 22px; border-bottom: 1px solid var(--zinc);
  font-family: var(--mono); font-size: .72rem; letter-spacing: .06em;
  color: var(--steel); text-transform: uppercase;
}
.sheet-head .hot { color: var(--signal); }
.spec-grid { display: grid; grid-template-columns: repeat(3, 1fr); }
.spec-grid .cell.cell-wide { grid-column: 1 / -1; }
.cell { padding: 18px 22px; border-right: 1px solid var(--zinc); border-bottom: 1px solid var(--zinc); }
.cell:nth-child(3n) { border-right: none; }
.cell .k {
  font-family: var(--mono); font-size: .66rem; letter-spacing: .06em;
  color: var(--steel); text-transform: uppercase; margin-bottom: 6px;
}
.cell .v { font-size: .88rem; color: var(--ink); line-height: 1.45; }

.rail-wrap { margin-top: 28px; }
.rail-wrap h2, .reels h2 {
  font-family: var(--mono); font-size: .72rem; letter-spacing: .1em;
  text-transform: uppercase; color: var(--steel); font-weight: 500; margin-bottom: 14px;
}
.rail {
  display: flex; gap: 12px; overflow-x: auto;
  scroll-snap-type: x mandatory; padding-bottom: 8px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin; scrollbar-color: var(--zinc) transparent; cursor: grab;
}
.rail:active { cursor: grabbing; }
.rail::-webkit-scrollbar { height: 6px; }
.rail::-webkit-scrollbar-thumb { background: var(--zinc); border-radius: 3px; }
.rail img {
  flex: 0 0 auto; width: 260px; height: 325px; object-fit: cover;
  cursor: zoom-in;
  border-radius: var(--radius); border: 1px solid var(--zinc);
  scroll-snap-align: start; user-select: none; -webkit-user-drag: none;
}

/* Instagram's embed has a hard 326px minimum width. Anything narrower and
   the reel gets cut off horizontally. So the reels scroll sideways at a
   fixed real width rather than being squeezed into a 4-up grid. */
.reels { margin-top: 28px; }
.reel-rail {
  display: flex; gap: 14px; overflow-x: auto;
  padding-bottom: 10px; scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin; scrollbar-color: var(--zinc) transparent;
}
.reel-rail::-webkit-scrollbar { height: 6px; }
.reel-rail::-webkit-scrollbar-thumb { background: var(--zinc); border-radius: 3px; }
.clip {
  flex: 0 0 auto;
  width: 340px; min-width: 340px;
  scroll-snap-align: start;
  background: var(--surface); border: 1px solid var(--zinc);
  border-radius: var(--radius); overflow: hidden;
  transition: border-color .2s ease;
}
.clip:hover { border-color: var(--signal); }
.clip iframe, .clip .instagram-media {
  border-radius: var(--radius) !important;
  min-width: 326px !important;
  width: 100% !important;
  margin: 0 !important;
}

.build-cta {
  margin: 32px 0 0;
  background: linear-gradient(135deg, var(--signal-d), var(--signal));
  border-radius: var(--radius); padding: 22px 28px;
  display: flex; justify-content: space-between; align-items: center;
  gap: 20px; flex-wrap: wrap;
}
.build-cta .k {
  font-family: var(--mono); font-size: .66rem; letter-spacing: .08em;
  text-transform: uppercase; color: rgba(255,255,255,.75); margin-bottom: 4px;
}
.build-cta .v { font-family: var(--display); font-weight: 800; font-size: 1.25rem; color: #fff; }
.build-cta .go {
  font-family: var(--mono); font-size: .8rem; letter-spacing: .04em;
  background: #fff; color: var(--signal-d);
  padding: 12px 20px; border-radius: 2px; white-space: nowrap;
}

.build-foot {
  font-family: var(--mono); font-size: .68rem;
  color: var(--steel); margin: 24px 0 60px; line-height: 1.7;
}

@media (max-width: 860px) { .build-layout { grid-template-columns: 1fr; } }
@media (max-width: 760px) {
  .spec-grid { grid-template-columns: 1fr 1fr; }
  .cell:nth-child(3n) { border-right: 1px solid var(--zinc); }
  .cell:nth-child(2n) { border-right: none; }
}
@media (max-width: 600px) {
  .rail img { width: 200px; height: 250px; }
  .svc-rail img { width: 210px; height: 158px; }
  .clip { width: 326px; min-width: 326px; }
}
@media (max-width: 480px) {
  .spec-grid { grid-template-columns: 1fr; }
  .cell { border-right: none !important; }
}

/* =================================================================
   LIGHTBOX
   Click any gallery thumbnail to open it full size. The opening
   animation is a FLIP: the full image starts exactly on top of the
   thumbnail that was clicked, then transitions to its final place, so
   it reads as the thumbnail zooming out rather than a panel appearing.
   ================================================================= */
.lb {
  position: fixed; inset: 0; z-index: 300;
  display: none;
  align-items: center; justify-content: center;
  background: rgba(8,9,10,0);
  backdrop-filter: blur(0px);
  transition: background .28s ease, backdrop-filter .28s ease;
}
.lb.is-open { display: flex; }
.lb.is-lit { background: rgba(8,9,10,.92); backdrop-filter: blur(6px); }

.lb-stage { position: relative; width: 100%; height: 100%; }
.lb-img {
  position: absolute;
  object-fit: contain;
  border-radius: var(--radius);
  will-change: transform, width, height, top, left;
  transition: top .34s cubic-bezier(.2,.8,.2,1), left .34s cubic-bezier(.2,.8,.2,1),
              width .34s cubic-bezier(.2,.8,.2,1), height .34s cubic-bezier(.2,.8,.2,1),
              opacity .2s ease;
}
.lb-spinner {
  position: absolute; top: 50%; left: 50%;
  width: 34px; height: 34px; margin: -17px 0 0 -17px;
  border: 2px solid rgba(237,235,230,.25);
  border-top-color: var(--signal);
  border-radius: 50%;
  animation: lbspin .7s linear infinite;
  opacity: 0; transition: opacity .2s ease;
}
.lb-spinner.on { opacity: 1; }
@keyframes lbspin { to { transform: rotate(360deg); } }

.lb-btn {
  position: absolute; z-index: 2;
  display: flex; align-items: center; justify-content: center;
  width: 48px; height: 48px;
  background: rgba(23,24,27,.82);
  border: 1px solid rgba(237,235,230,.22);
  border-radius: 50%;
  color: #EDEBE6; cursor: pointer;
  transition: background .18s ease, border-color .18s ease, opacity .2s ease;
}
.lb-btn:hover { background: var(--signal); border-color: var(--signal); }
.lb-btn svg { width: 20px; height: 20px; }
.lb-btn[hidden] { display: none; }
.lb-prev { left: 20px;  top: 50%; margin-top: -24px; }
.lb-next { right: 20px; top: 50%; margin-top: -24px; }
.lb-close { top: 20px; right: 20px; }

.lb-count {
  position: absolute; left: 50%; bottom: 22px; transform: translateX(-50%);
  z-index: 2;
  font-family: var(--mono); font-size: .72rem; letter-spacing: .12em;
  color: #EDEBE6; background: rgba(23,24,27,.82);
  border: 1px solid rgba(237,235,230,.18);
  padding: 7px 14px; border-radius: 999px;
  white-space: nowrap;
}
.lb-caption {
  position: absolute; left: 50%; bottom: 62px; transform: translateX(-50%);
  z-index: 2; max-width: min(80vw, 620px);
  text-align: center;
  font-family: var(--mono); font-size: .66rem; letter-spacing: .08em;
  text-transform: uppercase; color: #9BA0A6;
}

body.lb-locked { overflow: hidden; }

@media (max-width: 620px) {
  .lb-prev { left: 10px; }
  .lb-next { right: 10px; }
  .lb-btn { width: 42px; height: 42px; }
  .lb-caption { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .lb, .lb-img { transition: none !important; }
  .lb-spinner { animation: none !important; }
}

/* ---------- MERCH PREVIEW ---------- */
.merch-preview { padding: 88px 0; overflow: hidden; }

.merch-track { overflow: hidden; }
.merch-placeholder {
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 48px 24px;
  text-align: center;
  color: var(--steel);
}

.merch-rail {
  display: flex;
  gap: 20px;
  width: max-content;
  padding: 0 24px;
  animation: merch-scroll 42s linear infinite;
}
.merch-track:hover .merch-rail,
.merch-track:focus-within .merch-rail { animation-play-state: paused; }

@keyframes merch-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

.merch-card {
  flex: 0 0 200px;
  color: inherit;
  text-decoration: none;
}
.merch-card-img {
  aspect-ratio: 4 / 5;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--surface);
  border: 1px solid var(--zinc);
}
.merch-card-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.merch-card-title {
  margin: 12px 0 2px;
  font-size: 14.5px;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.merch-card-price { color: var(--steel); font-size: 13px; }

.merch-cta-wrap { margin-top: 40px; text-align: center; }

@media (max-width: 620px) {
  .merch-card { flex: 0 0 150px; }
}

/* ---------- MOTION PREFERENCES ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { animation: none !important; transition: none !important; }
  .hero-media { display: none; }
  .merch-track { overflow-x: auto; }
  .merch-rail { padding-bottom: 12px; }
}
