/* Self-hosted Google Fonts, latin subset (the Spanish page's accents are inside
   U+0000-00FF). Files came from fonts.gstatic.com on 2026-08-31; IBM Plex Sans is
   one variable file covering 100-700. Concatenated into css/bundle.css by build.py. */
@font-face{font-family:'Anton';font-style:normal;font-weight:400;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Archivo';font-style:normal;font-weight:400 900;font-stretch:62% 125%;font-display:swap;src:url(/fonts/archivo-400-900.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:100 700;font-stretch:100%;font-display:swap;src:url(/fonts/ibm-plex-sans.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'IBM Plex Sans';font-style:italic;font-weight:400;font-stretch:100%;font-display:swap;src:url(/fonts/ibm-plex-sans-400-italic.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Permanent Marker';font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/permanent-marker-400.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}

/* Prime Lift Rigging Academy — shared stylesheet. Extracted from index.html
   so every generated page (see build.py) shares one design system.
   Page-only components live in css/pages.css. */
/* ============================================================
   PRIME LIFT RIGGING ACADEMY — demo homepage
   Zonkel Media. Single file. Edit CONFIG in the <script> below.

   Design language: editorial-industrial.
   - Hairline rules do the structural work, not boxes.
   - Serif index numerals (01/02/03) as editorial markers.
   - The chevron + hook marks are lifted from their own logo.
   - One accent (azure, sampled from their own reel captions) on a neutral steel field.
   ============================================================ */

/* The hidden attribute must always win. Without this, any class that sets
   display (e.g. .field{display:block}) overrides the browser default and the
   element stays visible: the booking form showed the assessment craft picker
   on every course (Andres, 10/1/26). */
[hidden]{display:none !important}


:root{
  /* --- ink & steel --- */
  --ink:#0A0A0C;
  --steel:#111318;
  --steel-2:#171A20;
  --steel-3:#1F232A;
  --edge:rgba(255,255,255,.075);
  --edge-2:rgba(255,255,255,.14);
  --edge-3:rgba(255,255,255,.26);

  /* --- one accent ---
     Sampled from their own reel: the "looking to level up?" captions run
     #1EE4FC. That exact cyan is a caption colour, not a brand colour — at
     full strength it reads neon against a sunset photo. This is the same
     family pulled down into an azure that carries dark text on a button
     and still pops off the magenta sky in the hero. */
  --accent:#29B6E8;
  --accent-2:#5FCDF2;
  --accent-dim:rgba(41,182,232,.12);

  --paper:#F2F0EC;
  --text:#EAE8E5;
  --muted:#A2A7B0;
  --muted-2:#71767F;
  --ok:#5FD08A;

  /* --- type ---
     --f-head  Anton: the closest match to the PRIME LIFT wordmark
               (same shortened M vertex, same tight heavy fit). Titles only.
     --f-display / --f-body  IBM Plex Sans: labels, buttons, controls and all
               running text. Squared terminals and a drafting-table feel — it
               reads like a document that means something, which is what a
               certification school is selling. Tops out at 700; nothing here
               may ask it for 800 or 900.
     --f-fig      Archivo EXPANDED (the wdth axis pushed to 125) — every
               numeral on the page. Figures on a jobsite are stamped wide and
               flat: load charts, capacity plates, sling tags. Setting them
               expanded against Anton's condensed heads makes the contrast a
               matter of WIDTH rather than of style, so the numbers read as
               part of the same industrial voice instead of a borrowed
               magazine serif. */
  --f-head:'Anton',Impact,system-ui,sans-serif;
  --f-display:'IBM Plex Sans',system-ui,sans-serif;
  --f-body:'IBM Plex Sans',system-ui,sans-serif;
  --f-fig:'Archivo',system-ui,sans-serif;

  /* --- rhythm --- */
  --wrap:1240px;
  --pad:clamp(20px,5vw,52px);
  --gut:clamp(28px,4.4vw,64px);
  --sec:clamp(72px,10vw,140px);
  /* square everything: their flyers are hard-edged plates and diagonal cuts */
  --r:0;
  /* the accent, pulled down far enough to carry text on the paper panels */
  --accent-deep:#0E7FB0;
  --marker:'Permanent Marker',cursive;
  --grunge:url(data:image/png;base64,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);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%; scroll-behavior:smooth}
/* desktop inertia scroll: site.js loads /js/lenis.min.js on fine-pointer screens
   (never on touch or reduced-motion) and tags <html class="lenis">. Lenis drives
   window.scrollTo every frame, so native smooth behavior must yield while it runs;
   phones keep the plain scroll-behavior:smooth above for anchor links. */
html.lenis, html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto !important}
.lenis.lenis-smooth [data-lenis-prevent]{overscroll-behavior:contain}
.lenis.lenis-stopped{overflow:hidden}
body{
  margin:0; background:var(--ink); color:var(--text);
  font-family:var(--f-body); font-size:17px; line-height:1.65;
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
img{max-width:100%; display:block}
a{color:inherit; text-decoration:none}
button{font:inherit; color:inherit; border:0; background:none; cursor:pointer}
h1,h2,h3,h4{
  font-family:var(--f-head); font-weight:400;
  letter-spacing:.006em; line-height:.97; margin:0; text-transform:uppercase;
}
p{margin:0 0 1em}
p:last-child{margin-bottom:0}
:focus-visible{outline:2px solid var(--accent); outline-offset:3px}
::selection{background:var(--accent); color:#04161F}

.wrap{width:100%; max-width:var(--wrap); margin-inline:auto; padding-inline:var(--pad)}
.section{padding:var(--sec) 0; position:relative}

/* ============================================================
   EDITORIAL PRIMITIVES
   ============================================================ */

/* index numeral — stamped-plate figures, not editorial italics */
.idx{
  font-family:var(--f-fig); font-stretch:125%; font-weight:600; font-style:normal;
  font-variant-numeric:tabular-nums; color:var(--accent);
  line-height:1; letter-spacing:.045em; text-transform:none;
}

/* eyebrow: label between the chevron wings (one heavy stroke, a thinner one
   floating below it, lifted from the logo). No index numerals. */
.eyebrow{
  display:flex; align-items:center; gap:14px; margin:0 0 22px;
  font-family:var(--f-display); font-weight:700; text-transform:uppercase;
  font-size:11.5px; letter-spacing:.22em; color:var(--accent);
  justify-content:center; text-align:center;
}
.eyebrow .idx{display:none}
.eyebrow::after,.eyebrow::before{
  content:""; flex:0 1 clamp(40px,7.5vw,82px); min-width:22px; height:9px;
  background-image:
    linear-gradient(var(--accent),var(--accent)),
    linear-gradient(var(--accent),var(--accent));
  background-repeat:no-repeat;
  background-size:100% 3px, 60% 1.5px;
}
.eyebrow::before{background-position:0 0, 100% 6px}
.eyebrow::after{background-position:0 0, 0 6px}
/* phones: the wings give way before the label breaks into three lines */
@media(max-width:560px){.eyebrow{gap:10px; font-size:10.5px; letter-spacing:.18em}}
/* The real NCCER wordmark (official SVG, brand orange) stands in for the word
   wherever accreditation is the claim: nav tagline and the hero eyebrow. Sized
   to the cap height of the text beside it so it reads as one line. */
img.nccer{width:auto; display:inline-block; vertical-align:-1px}
.eyebrow .nccer-lock{display:inline-flex; align-items:center; gap:9px; white-space:nowrap}
.eyebrow .nccer{height:12px}
@media(max-width:560px){.eyebrow .nccer{height:11px} .eyebrow .nccer-lock{gap:8px}}
/* "Accredited Training & Assessment Center" is too long to hold on one line on a
   phone, so below 620px the lock stops being nowrap and the phrase wraps under
   the mark instead of overflowing the hero. */
@media(max-width:620px){.eyebrow .nccer-lock{white-space:normal; flex-wrap:wrap; justify-content:center; row-gap:5px; letter-spacing:.15em}}
.brand-txt .nccer{height:12px; margin-right:4px}
@media(min-width:900px){
  .eyebrow{justify-content:flex-start; text-align:left}
  .eyebrow:not(.is-center)::before{display:none}
  .eyebrow.is-center{justify-content:center}
}

/* section head — asymmetric editorial block */
.sec-head{text-align:center; margin-bottom:clamp(44px,6vw,76px)}
.h-sec{font-size:clamp(34px,5.6vw,64px); line-height:.95}
.lede{
  color:var(--muted); font-size:clamp(16.5px,1.55vw,19.5px);
  max-width:56ch; margin:22px auto 0; line-height:1.6;
}
@media(min-width:900px){
  .sec-head{
    text-align:left; display:grid; align-items:end;
    grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr); gap:0 var(--gut);
  }
  .sec-head .eyebrow{grid-column:1/-1}
  .sec-head .lede{margin:0 0 6px; max-width:46ch}
  .sec-head.is-center{display:block; text-align:center}
  .sec-head.is-center .lede{margin:22px auto 0; max-width:56ch}
}

/* chevron mark from the logo, used as a section marker */
/* Masked, not filtered. The old hue-rotate chain was hand-tuned to produce
   one specific orange, so it silently ignored the accent token when the
   palette changed; a mask takes the colour directly.
   The mask is inlined as a data: URI because CSS masks are CORS-checked, and
   under file:// the origin is null — an external mask file makes the mark
   vanish whenever the page is opened by double-clicking it. */
.chev{
  width:clamp(46px,5vw,64px); aspect-ratio:893/123; opacity:.5;
  background:var(--accent);
  -webkit-mask:url("data:image/png;base64,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") center/contain no-repeat;
  mask:url("data:image/png;base64,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") center/contain no-repeat;
}
.chev-div{display:flex; justify-content:center; padding:0 0 clamp(18px,3vw,30px)}

.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:11px;
  font-family:var(--f-head); font-weight:400; text-transform:uppercase;
  letter-spacing:.055em; font-size:15px; line-height:1;
  padding:18px 27px; border-radius:var(--r); border:1.5px solid transparent;
  transition:transform .16s ease, background .16s ease, border-color .16s ease, box-shadow .16s ease;
  white-space:nowrap;
}
.btn svg{width:17px; height:17px; flex:none}
.btn-primary{background:var(--accent); color:#04161F}
.btn-primary:hover{background:var(--accent-2); transform:translateY(-2px)}
.btn-ghost{border-color:var(--edge-2); color:var(--text); background:rgba(255,255,255,.028)}
.btn-ghost:hover{border-color:var(--accent); color:#fff; transform:translateY(-2px)}
.btn-block{width:100%}

/* ============================================================
   NAV
   ============================================================ */
/* The header has no on/off state. --navp is scroll progress (0 at the top, 1
   after ~160px; written by the scroll handlers in index.html and site.js) and
   drives everything at once: the bar compresses 110 -> 88, the logo 84 -> 66,
   and an ink scrim fades up behind the row. It used to be a class toggle at
   40px that tweened a 93% black slab in over .3s: a switch, not a scroll. The
   scrim is a pseudo-element on its own layer (opacity is compositor-only) and
   is the same device the hero uses to fade its photo into ink: no blur, which
   appears nowhere else on the site, and no hairline. Its tail runs 76px past
   the bar on eased stops, so the header reads as a veil the page slides under,
   never as a bar that appeared. (?nav=flat in the URL = comparison mode where
   --navp stays 0 and nothing here ever changes.) */
.nav{position:fixed; inset:0 0 auto 0; z-index:70; --navp:0}
.nav::before{
  content:""; position:absolute; inset:0 0 -76px 0; z-index:0; pointer-events:none;
  background:linear-gradient(to bottom,
    rgba(10,10,12,.96) 0%, rgba(10,10,12,.93) 30%, rgba(10,10,12,.82) 50%,
    rgba(10,10,12,.62) 64%, rgba(10,10,12,.38) 77%, rgba(10,10,12,.18) 88%,
    rgba(10,10,12,.06) 95%, rgba(10,10,12,0) 100%);
  opacity:var(--navp);
}
.nav-in{display:flex; align-items:center; gap:26px; height:calc(110px - 22px * var(--navp))}
.brand{display:flex; align-items:center; gap:18px; flex:none}
/* direct child only: the NCCER mark inside .brand-txt must not inherit the logo's sizes */
.brand>img{height:calc(84px - 18px * var(--navp)); width:auto}
@media(max-width:620px){.brand>img{height:62px}}
/* The logo already says the company name — the nav only adds what it doesn't. */
.brand-txt{display:none}
@media(min-width:1000px){
  .brand-txt{
    display:block; padding-left:17px; border-left:1px solid var(--edge-2);
    font-family:var(--f-display); font-weight:700; font-size:9.5px;
    letter-spacing:.17em; text-transform:uppercase; color:var(--muted-2);
    line-height:1.65; white-space:nowrap;
  }
}
.nav-links{display:none; gap:32px; margin-left:auto; align-items:center}
@media(min-width:1000px){.nav-links{display:flex}}
/* only the top-level items get nav styling — menu items style themselves */
.nav-links>a,.nav-item>a{
  font-family:var(--f-display); font-weight:700; font-size:12px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--muted);
  transition:color .16s; position:relative; padding:8px 0; white-space:nowrap;
}
.nav-links>a:hover,.nav-item>a:hover{color:#fff}
.nav-links>a::after,.nav-item>a::after{
  content:""; position:absolute; left:0; right:100%; bottom:0; height:2px;
  background:var(--accent); transition:right .24s ease;
}
.nav-links>a:hover::after,.nav-item>a:hover::after{right:0}

/* ---- courses dropdown -------------------------------------------------
   .nav-menu is a transparent wrapper with top padding: it bridges the gap
   between the trigger and the panel so the pointer never crosses dead
   space on the way down. The chrome lives on .nav-menu-in. */
.nav-item{position:relative}
.nav-item>a{display:inline-flex; align-items:center; gap:7px}
.nav-item .caret{width:11px; height:11px; opacity:.6; transition:transform .24s ease, opacity .2s}
.nav-item:hover .caret,.nav-item:focus-within .caret{transform:rotate(180deg); opacity:1}
.nav-menu{
  position:absolute; top:100%; left:-26px; z-index:60; padding-top:20px;
  opacity:0; visibility:hidden; transform:translateY(-7px);
  transition:opacity .19s ease, transform .19s ease, visibility .19s;
}
.nav-item:hover .nav-menu,.nav-item:focus-within .nav-menu{
  opacity:1; visibility:visible; transform:translateY(0);
}
.nav-menu-in{
  width:398px; padding:9px;
  background:rgba(15,15,18,.975); -webkit-backdrop-filter:blur(16px) saturate(1.15); backdrop-filter:blur(16px) saturate(1.15);
  border:1px solid var(--edge); border-top:2px solid var(--accent);
  border-radius:var(--r); box-shadow:0 26px 64px rgba(0,0,0,.62);
}
.nm-item{
  display:grid; grid-template-columns:24px minmax(0,1fr) auto;
  align-items:center; gap:0 13px; padding:13px; border-radius:2px;
  transition:background .16s ease;
}
.nm-item:hover{background:rgba(41,182,232,.085)}
.nm-n{font-size:13px; color:var(--muted-2); transition:color .16s}
.nm-item:hover .nm-n{color:var(--accent)}
.nm-b b{
  display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase;
  font-size:16.5px; letter-spacing:.014em; color:var(--text); line-height:1.1; margin-bottom:4px;
}
.nm-b span{
  display:block; font-family:var(--f-body); font-size:12.5px; color:var(--muted-2);
  line-height:1.4; text-transform:none; letter-spacing:0;
}
.nm-p{
  font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-size:14px;
  color:var(--accent); letter-spacing:.02em; align-self:center;
}
.nm-all{
  display:flex; align-items:center; justify-content:space-between;
  margin-top:6px; padding:13px; border-top:1px solid var(--edge);
  font-family:var(--f-display); font-weight:700; font-size:10.5px;
  letter-spacing:.18em; text-transform:uppercase; color:var(--muted);
  transition:color .16s;
}
.nm-all svg{width:15px; height:15px; color:var(--accent); transition:transform .2s ease}
.nm-all:hover{color:#fff}
.nm-all:hover svg{transform:translateX(4px)}
.nav-cta{margin-left:auto; display:flex; gap:12px; align-items:center}
@media(min-width:1000px){.nav-cta{margin-left:30px}}
.nav-phone{
  display:none; font-family:var(--f-display); font-weight:700; font-size:14px;
  letter-spacing:.02em; align-items:center; gap:9px; white-space:nowrap;
}
.nav-phone svg{width:16px;height:16px;color:var(--accent)}
@media(min-width:640px){.nav-phone{display:inline-flex}}
.nav .btn{padding:15px 22px; font-size:14.5px}
/* Between the 1000px nav breakpoint and ~1215px the row needs more width than
   it has, and body{overflow-x:hidden} silently clips the Enroll button off the
   right edge. Tighten the row instead: the descriptor goes first (the logo
   already says the name), then the gaps. */
@media(max-width:1279px){
  .brand-txt{display:none}
  .nav-links{gap:22px}
  .nav-cta{margin-left:18px}
}

/* ============================================================
   HERO
   ============================================================ */
.hero{position:relative; min-height:100svh; display:flex; align-items:flex-end; overflow:hidden}
.hero-bg{position:absolute; inset:0; z-index:0}
.hero-bg img{
  width:100%; height:100%; object-fit:cover; object-position:58% 46%;
  transform:scale(1.12); animation:zoomout 34s cubic-bezier(.2,.5,.3,1) forwards;
}
@keyframes zoomout{to{transform:scale(1.005)}}
/* the photo arrives after first paint (data-defer) and fades over the ink + scrim */
.hero-bg img[data-defer]{opacity:0; transition:opacity .7s ease}
.hero-bg img[data-defer].in{opacity:1}
@media(prefers-reduced-motion:reduce){.hero-bg img{animation:none; transform:none}}
/* phones: the photo is landscape and the hero is a tall portrait stack (copy +
   graduate panel). Covering the whole section scaled the crane down to a sliver
   at the very bottom, under the fold, and left flat sky behind the headline.
   Pin the photo to the first screen instead, let the scrim run to ink at its
   bottom edge, and frame the boom + hook behind the headline. The rest of the
   hero below sits on plain ink, which is where the fade already ended. */
@media(max-width:899px){
  .hero{background:var(--ink)}
  .hero-bg{bottom:auto; height:100svh; min-height:640px; overflow:hidden}
  .hero-bg img{object-position:48% 50%}
}
/* --- cool grade -------------------------------------------------
   The photograph runs a hue ramp: violet (264deg) at the top of the
   sky, magenta (309deg) through the middle, rose (341deg) at the
   horizon. The accent is azure, about 197deg — so the horizon band
   sits nearly opposite it and the headline's second line read as a
   sticker laid on someone else's picture.

   Two blended layers walk the photo toward the accent instead:

     .grade-desat  a flat grey blended on `saturation`, which pulls
                   the magenta's intensity down without touching
                   brightness. Same result as filter:saturate(), but
                   it composites — a filter would re-run a shader over
                   a 2000px image on every frame of the 34s zoom, and
                   this hero has to feel instant on a phone.
     .grade-cool   an azure wash blended on `soft-light`, which moves
                   the midtones and leaves highlights alone. That is
                   why the crane's yellow boom survives: the frame
                   cools, the photo doesn't go monochrome.

   Order matters. The cool wash sits ABOVE the scrim (z-index 3 vs 2)
   so it cools the darkened corners too — under the scrim it would be
   crushed exactly where the nav sits. The scrim still owns text
   contrast; nothing here lightens it.

   .hero-bg has z-index:0, which makes a stacking context — that is
   what keeps mix-blend-mode from reaching the rest of the page. */
.hero-bg > .grade-desat{
  position:absolute; inset:0; z-index:1;
  background:#7A7A7A; mix-blend-mode:saturation; opacity:.34;
}
.hero-bg::after{
  content:""; position:absolute; inset:0; z-index:2;
  background:
    linear-gradient(180deg,rgba(10,10,12,.88) 0%,rgba(10,10,12,.28) 24%,rgba(10,10,12,.08) 42%,rgba(10,10,12,.82) 78%,var(--ink) 100%),
    linear-gradient(96deg,rgba(10,10,12,.92) 0%,rgba(10,10,12,.64) 34%,rgba(10,10,12,.10) 66%,transparent 100%);
}
.hero-bg > .grade-cool{
  position:absolute; inset:0; z-index:3; mix-blend-mode:soft-light;
  background:linear-gradient(178deg,
    rgba(20,104,160,.70) 0%,
    rgba(28,136,194,.48) 38%,
    rgba(41,182,232,.26) 66%,
    rgba(41,182,232,.12) 100%);
}

.hero-in{position:relative; z-index:2; width:100%; padding-block:156px 68px; text-align:center}
@media(max-width:640px){.hero-in{padding-block:132px 56px}}
@media(min-width:900px){.hero-in{text-align:left; padding-block:184px 100px}}
.hero h1{
  font-size:clamp(45px,7.8vw,96px); line-height:.92; letter-spacing:.004em;
  text-shadow:0 4px 44px rgba(0,0,0,.55); max-width:13ch; margin-inline:auto;
}
@media(min-width:900px){.hero h1{margin-inline:0}}
/* On phones 7.8vw never beats the 45px floor, so the headline sat at its
   minimum on every handset — and 13ch made its column narrower than the
   paragraph beneath it. Below 640px it gets its own scale and the full
   measure, so it reads like a headline instead of a caption. */
@media(max-width:640px){
  .hero h1{font-size:clamp(48px,13.2vw,64px); max-width:none; line-height:.9}
}
.hero h1 em{font-style:normal; color:var(--accent); display:block}
.hero-sub{
  margin:24px auto 0; max-width:50ch; font-size:clamp(16.5px,1.75vw,20px);
  color:#D3D0CB; text-shadow:0 2px 22px rgba(0,0,0,.7);
}
@media(min-width:900px){.hero-sub{margin-inline:0}}
.hero-cta{display:flex; flex-wrap:wrap; gap:13px; margin-top:34px; justify-content:center}
@media(min-width:900px){.hero-cta{justify-content:flex-start}}
.hero-cta .btn{flex:1 1 240px; max-width:340px}
@media(min-width:560px){.hero-cta .btn{flex:0 0 auto}}
/* Four floating capsules is the tell of a template. This is ONE band —
   a single piece of smoked glass laid on the photograph, divided by
   hairlines. Square corners; the premium cue is the material, not a pill. */
.hero-flags{
  margin:34px auto 0; max-width:540px;
  display:grid; grid-template-columns:repeat(2,minmax(0,1fr));
  background:linear-gradient(100deg,rgba(7,7,9,.72),rgba(7,7,9,.34));
  -webkit-backdrop-filter:blur(12px) saturate(1.12); backdrop-filter:blur(12px) saturate(1.12);
  border-top:1px solid rgba(255,255,255,.17);
  border-bottom:1px solid rgba(255,255,255,.06);
}
@media(min-width:900px){
  .hero-flags{display:flex; width:max-content; max-width:100%; margin-inline:0}
}
.flag{
  display:flex; align-items:center; gap:10px; min-width:0;
  padding:15px clamp(14px,1.6vw,20px);
  font-family:var(--f-display); font-weight:700; font-size:10.5px;
  letter-spacing:.155em; text-transform:uppercase; color:rgba(238,236,232,.9);
  border-left:1px solid rgba(255,255,255,.1);
}
.flag:nth-child(2n+1){border-left:0}
.flag:nth-child(n+3){border-top:1px solid rgba(255,255,255,.1)}
@media(min-width:900px){
  .flag:nth-child(2n+1){border-left:1px solid rgba(255,255,255,.1)}
  .flag:first-child{border-left:0}
  .flag:nth-child(n+3){border-top:0}
}
.flag svg{width:15px; height:15px; color:var(--accent); flex:none}

/* next-class strip */
.nextclass{position:relative; z-index:3; background:var(--accent); color:#04161F}
.nextclass-in{
  display:flex; flex-wrap:wrap; align-items:center; justify-content:center;
  gap:8px 20px; padding:15px 0; text-align:center;
}
.nextclass b{font-family:var(--f-head); font-weight:400; letter-spacing:.03em; text-transform:uppercase; font-size:17px}
.nextclass span{font-weight:600; font-size:14.5px}
.nextclass a{
  font-family:var(--f-display); font-weight:700; text-transform:uppercase; font-size:12.5px;
  letter-spacing:.1em; border-bottom:2px solid rgba(24,9,0,.45); padding-bottom:2px;
}
.nextclass a:hover{border-bottom-color:#04161F}

/* ============================================================
   TRUST — a student's own words first, the claims beside them.
   Four abstract claims in a row is a bar every contractor site has;
   putting a real recommendation in the lead position is the thing
   his competitors can't copy.
   ============================================================ */
.trust{border-bottom:1px solid var(--edge); background:var(--steel)}
.trust-in{display:grid; grid-template-columns:1fr}
@media(min-width:1040px){
  .trust-in{grid-template-columns:minmax(0,.88fr) minmax(0,1.12fr); gap:0 var(--gut)}
}

/* the pulled recommendation */
.trust-say{padding:clamp(40px,5vw,60px) 0 clamp(34px,4vw,46px)}
@media(min-width:1040px){
  /* the divider runs the full height of the band, so the quote centres
     itself against the claims instead of hanging from the top */
  .trust-say{
    padding:clamp(48px,5.4vw,66px) var(--gut) clamp(48px,5.4vw,66px) 0;
    border-right:1px solid var(--edge);
    display:flex; flex-direction:column; justify-content:center; align-items:flex-start;
  }
}
.trust-say .rev-quote{font-size:42px; margin-bottom:6px}
.trust-say blockquote{
  margin:0; font-family:var(--f-body); font-weight:500;
  font-size:clamp(19px,2.1vw,25px); line-height:1.42;
  color:#E9E7E3; letter-spacing:-.004em;
}
.trust-cite{display:flex; align-items:center; gap:11px; margin-top:24px; font-style:normal}
.trust-cite>svg{width:19px; height:19px; color:#7C93C9; flex:none}
.trust-cite b{
  display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase;
  font-size:16px; letter-spacing:.022em; line-height:1.15;
}
.trust-cite i{display:block; font-style:normal; font-size:12px; color:var(--muted-2)}
.trust-more{
  display:inline-flex; align-items:center; gap:9px; margin-top:26px;
  font-family:var(--f-display); font-weight:700; font-size:10.5px;
  letter-spacing:.18em; text-transform:uppercase; color:var(--muted);
  border-bottom:1px solid var(--edge-2); padding-bottom:8px;
  transition:color .16s, border-color .16s;
}
.trust-more:hover{color:#fff; border-bottom-color:var(--accent)}
.trust-more svg{width:14px; height:14px; color:var(--accent); transition:transform .2s ease}
.trust-more:hover svg{transform:translateX(4px)}

/* the claims */
.trust-grid{display:grid; grid-template-columns:1fr; align-content:center}
@media(min-width:600px){.trust-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(min-width:1040px){.trust-grid{padding:clamp(28px,3.2vw,44px) 0}}
.trust-cell{padding:30px clamp(18px,2.2vw,30px) 32px; border-top:1px solid var(--edge); position:relative}
/* stacked, the cells must line up with the quote above them */
@media(max-width:599px){.trust-cell{padding-inline:0}}
@media(min-width:600px){
  .trust-cell{border-left:1px solid var(--edge)}
  .trust-cell:nth-child(2n+1){border-left:0; padding-left:0}
}
@media(min-width:1040px){
  .trust-cell:nth-child(-n+2){border-top:0}
}
.trust-cell .idx{font-size:16px; display:block; margin-bottom:14px}
.trust-cell b{
  display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase;
  font-size:18px; letter-spacing:.012em; margin-bottom:10px; line-height:1.05;
}
.trust-cell span{font-size:14.5px; color:var(--muted); line-height:1.55; display:block}

/* ============================================================
   COURSES — real photo per course, editorial card
   ============================================================ */
.course-grid{display:grid; gap:clamp(18px,2.2vw,26px); grid-template-columns:1fr}
@media(min-width:820px){.course-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1140px){.course-grid{grid-template-columns:repeat(3,1fr)}}
.course{
  position:relative; display:flex; flex-direction:column; overflow:hidden;
  background:var(--steel); border:1px solid var(--edge); border-radius:var(--r);
  transition:border-color .22s, transform .22s;
}
.course:hover{border-color:rgba(41,182,232,.42); transform:translateY(-4px)}
.course.is-feature{border-color:rgba(41,182,232,.5)}
/* arriving from the nav dropdown — clear the sticky header, then flag the card */
.course{scroll-margin-top:132px}
.course.lit{animation:cardlit 1.9s ease}
@keyframes cardlit{
  0%,100%{border-color:var(--edge); box-shadow:none}
  16%,60%{border-color:rgba(41,182,232,.85); box-shadow:0 0 0 3px rgba(41,182,232,.12)}
}
.course-shot{position:relative; aspect-ratio:16/10; overflow:hidden; background:var(--steel-3)}
.course-shot img{width:100%; height:100%; object-fit:cover; transition:transform .7s cubic-bezier(.2,.6,.3,1)}
.course:hover .course-shot img{transform:scale(1.06)}
.course-shot::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg,rgba(10,10,12,.12) 0%,rgba(10,10,12,.55) 62%,var(--steel) 100%);
}
.course-tag{
  position:absolute; top:14px; left:14px; z-index:2;
  background:var(--accent); color:#04161F;
  font-family:var(--f-display); font-weight:700; font-size:10px;
  letter-spacing:.16em; text-transform:uppercase; padding:7px 12px; border-radius:2px;
}
.course-num{
  position:absolute; right:16px; bottom:10px; z-index:2;
  font-family:var(--f-fig); font-stretch:125%; font-weight:700;
  font-size:33px; line-height:1; letter-spacing:.05em;
  color:rgba(255,255,255,.26);
}
.course-top{padding:26px clamp(22px,2.4vw,28px) 0; position:relative; z-index:2; margin-top:-10px}
.course h3{font-size:29px; letter-spacing:.006em; margin-bottom:8px}
.course-cert{
  font-family:var(--f-display); font-size:10.5px; letter-spacing:.18em; text-transform:uppercase;
  color:var(--accent); font-weight:700; margin-bottom:16px; display:block;
}
.course p{color:var(--muted); font-size:15.5px; line-height:1.6}
.course-list{list-style:none; margin:20px 0 0; padding:0; display:grid}
.course-list li{
  display:flex; gap:12px; font-size:14.5px; color:#C0BEBA; line-height:1.45;
  padding:11px 0; border-top:1px solid var(--edge);
}
.course-list svg{width:14px; height:14px; color:var(--accent); flex:none; margin-top:4px}
.course-foot{margin-top:auto; padding:22px clamp(22px,2.4vw,28px) 28px}
.price-row{
  display:flex; align-items:baseline; gap:11px; flex-wrap:wrap;
  padding-top:22px; margin-top:4px; border-top:1px solid var(--edge-2);
}
.price{font-family:var(--f-head); font-weight:400; font-size:46px; letter-spacing:.01em; line-height:1}
.price-was{font-size:17px; color:var(--muted-2); text-decoration:line-through; font-weight:600}
.price-note{width:100%; font-size:12.5px; color:var(--muted-2); letter-spacing:.01em; line-height:1.5; margin-top:4px}
.course .btn{margin-top:20px}

/* assessment crafts — editorial inline list */
.assess{
  margin-top:clamp(22px,3vw,34px); padding:clamp(28px,3.6vw,46px);
  background:var(--steel); border:1px solid var(--edge); border-radius:var(--r);
}
.assess-head{display:grid; gap:10px var(--gut); margin-bottom:28px}
@media(min-width:900px){.assess-head{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr); align-items:end}}
.assess h3{font-size:clamp(23px,3vw,31px)}
.assess-head p{color:var(--muted); font-size:15.5px; max-width:56ch}
.assess-chips{display:flex; flex-wrap:wrap; gap:10px}
.chip{
  display:inline-flex; align-items:center; gap:9px;
  padding:12px 16px; border:1px solid var(--edge-2); border-radius:100px;
  background:var(--ink); font-size:14px; font-weight:600; color:#C9C7C3;
  transition:border-color .18s, color .18s;
}
.chip:hover{border-color:rgba(41,182,232,.5); color:#fff}
.chip svg{width:15px; height:15px; color:var(--accent)}

/* ============================================================
   SCHEDULER — rebuilt as an editorial booking rail
   ============================================================ */
.sched{background:var(--ink)}
.sched-shell{border:1px solid var(--edge-2); border-radius:var(--r); overflow:hidden; background:var(--steel)}
/* the numbered rail — hairline columns, no pills */
.rail{display:grid; grid-template-columns:repeat(4,1fr); border-bottom:1px solid var(--edge-2)}
.rail-step{
  position:relative; padding:20px clamp(12px,1.6vw,22px) 18px;
  border-left:1px solid var(--edge); text-align:left; min-width:0;
}
.rail-step:first-child{border-left:0}
.rail-step::before{
  content:""; position:absolute; left:0; right:0; top:-1px; height:2px;
  background:var(--accent); transform:scaleX(0); transform-origin:left;
  transition:transform .4s cubic-bezier(.3,.7,.3,1);
}
.rail-step.on::before,.rail-step.done::before{transform:scaleX(1)}
.rail-step.done::before{background:var(--ok); opacity:.55}
.rail-step .idx{display:block; font-size:15px; color:var(--muted-2); transition:color .2s}
.rail-step.on .idx{color:var(--accent)}
.rail-step.done .idx{color:var(--ok)}
.rail-step em{
  display:block; margin-top:5px; font-style:normal;
  font-family:var(--f-display); font-weight:700; text-transform:uppercase;
  font-size:11.5px; letter-spacing:.14em; color:var(--muted-2); transition:color .2s;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.rail-step.on em{color:#fff}
.rail-step.done em{color:#98A0AA}
@media(max-width:560px){
  .rail{grid-template-columns:repeat(4,1fr)}
  .rail-step{padding:14px 8px 12px; text-align:center}
  .rail-step .idx{font-size:13px}
  .rail-step em{font-size:9px; letter-spacing:.08em}
}

.sched-body{padding:clamp(26px,3.6vw,46px) clamp(20px,2.6vw,34px)}
.pane{display:none; animation:fade .32s ease}
.pane.on{display:block}
@keyframes fade{from{opacity:0; transform:translateY(9px)}to{opacity:1; transform:none}}

/* editorial pane heading */
.pane-h{
  display:flex; align-items:baseline; gap:14px; flex-wrap:wrap;
  padding-bottom:16px; margin-bottom:24px; border-bottom:1px solid var(--edge);
}
.pane-h b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:clamp(19px,2.2vw,25px); letter-spacing:.012em}
.pane-h span{
  font-family:var(--f-display); font-weight:700; font-size:11px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--muted-2); margin-left:auto;
}
/* Once these wrap onto their own line, margin-left:auto strands them against
   the right edge with nothing beside them. On phones they sit under the
   heading, left-aligned with it. Same for the scheduler's status line. */
@media(max-width:640px){
  .pane-h{gap:7px 14px}
  .pane-h span{margin-left:0}
}

/* program tiles — real photo, editorial */
.prog-grid{display:grid; gap:14px; grid-template-columns:1fr}
@media(min-width:760px){.prog-grid{grid-template-columns:repeat(3,1fr)}}
.prog{
  text-align:left; border:1px solid var(--edge); border-radius:var(--r);
  background:var(--ink); overflow:hidden; transition:.2s; display:flex; flex-direction:column;
}
.prog:hover{border-color:rgba(41,182,232,.5); transform:translateY(-3px)}
.prog.sel{border-color:var(--accent)}
.prog-shot{position:relative; aspect-ratio:16/9; overflow:hidden; background:var(--steel-3)}
.prog-shot img{width:100%; height:100%; object-fit:cover; transition:transform .6s ease}
.prog:hover .prog-shot img{transform:scale(1.05)}
.prog-shot::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg,transparent 40%,rgba(10,10,12,.9) 100%)}
.prog.sel .prog-shot::before{
  content:""; position:absolute; inset:0; z-index:2; border:2px solid var(--accent);
}
.prog-body{padding:16px 18px 18px; display:flex; flex-direction:column; flex:1}
.prog b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:20px; letter-spacing:.01em; margin-bottom:7px; line-height:1.05}
.prog span{display:block; font-size:13.5px; color:var(--muted); line-height:1.5}
.prog .prog-price{
  margin-top:14px; padding-top:13px; border-top:1px solid var(--edge);
  font-family:var(--f-head); font-weight:400; font-size:24px; color:var(--accent); letter-spacing:.01em;
}
.prog .prog-price small{font-family:var(--f-body); font-weight:600; font-size:11.5px; color:var(--muted-2); letter-spacing:.08em; text-transform:uppercase; margin-left:8px}
/* Phones: the three program cards were a ~1,000px stack inside a 1,100px step.
   Below the 3-column breakpoint they become one swipeable, snap-scrolling row
   that bleeds to the shell's edges, with the next card peeking in and dots
   under it. Desktop keeps the grid. */
.prog-dots{display:none}
@media(max-width:759px){
  .sched-body{--sb-pad:clamp(20px,2.6vw,34px)}
  .prog-grid{
    display:flex; gap:12px; overflow-x:auto; overscroll-behavior-x:contain;
    scroll-snap-type:x mandatory; scroll-padding-inline:var(--sb-pad);
    margin-inline:calc(-1 * var(--sb-pad)); padding:4px var(--sb-pad) 6px;
    scrollbar-width:none; -webkit-overflow-scrolling:touch;
  }
  .prog-grid::-webkit-scrollbar{display:none}
  .prog{flex:0 0 min(78vw,300px); scroll-snap-align:start}
  .prog:hover{transform:none}
  .prog-dots{display:flex; justify-content:center; gap:7px; margin-top:14px}
  .prog-dots i{width:7px; height:7px; border-radius:50%; background:var(--edge-2); transition:background .2s, transform .2s}
  .prog-dots i.on{background:var(--accent); transform:scale(1.3)}
}

/* format rows — hairline editorial list */
.fmt-list{display:grid; border-top:1px solid var(--edge)}
.fmt{
  display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:18px;
  text-align:left; padding:20px 6px; border-bottom:1px solid var(--edge);
  transition:background .18s, padding-left .18s;
}
.fmt:hover{background:rgba(255,255,255,.022); padding-left:14px}
.fmt.sel{background:rgba(41,182,232,.07); padding-left:14px}
.fmt .idx{font-size:16px; color:var(--muted-2); width:36px}
.fmt.sel .idx{color:var(--accent)}
.fmt b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:19px; letter-spacing:.012em; margin-bottom:4px}
.fmt span{display:block; font-size:13.5px; color:var(--muted); line-height:1.45}
.fmt span em{font-style:normal; color:var(--muted-2)}
.fmt .go{width:20px; height:20px; color:var(--muted-2); transition:.18s}
.fmt:hover .go,.fmt.sel .go{color:var(--accent); transform:translateX(3px)}

/* date rows */
.date-grid{display:grid; gap:11px; grid-template-columns:1fr}
@media(min-width:640px){.date-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1040px){.date-grid{grid-template-columns:repeat(3,1fr)}}
.date{
  display:flex; align-items:center; gap:15px; text-align:left; padding:15px 17px;
  border:1px solid var(--edge); border-radius:var(--r); background:var(--ink); transition:.18s;
}
.date:hover:not(:disabled){border-color:rgba(41,182,232,.5); transform:translateY(-2px)}
.date.sel{border-color:var(--accent); background:rgba(41,182,232,.07)}
.date:disabled{opacity:.34; cursor:not-allowed}
.date.is-full{opacity:.34; cursor:not-allowed; pointer-events:none}
.date-cal{flex:none; width:54px; border:1px solid var(--edge-2); border-radius:2px; overflow:hidden; text-align:center}
.date-cal em{
  display:block; font-style:normal; background:var(--steel-3); color:var(--muted);
  font-family:var(--f-display); font-size:9.5px; letter-spacing:.16em; font-weight:700;
  text-transform:uppercase; padding:4px 0;
}
.date.sel .date-cal em{background:var(--accent); color:#04161F}
.date-cal b{display:block; font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-variant-numeric:tabular-nums; font-size:21px; padding:6px 0 7px; line-height:1}
.date-info{min-width:0}
.date-info b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:16px; letter-spacing:.018em}
.date-info span{display:block; font-size:12.5px; color:var(--muted); margin-top:2px}
.seats{margin-left:auto; text-align:right; flex:none}
.seats b{display:block; font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-variant-numeric:tabular-nums; font-size:15px; color:var(--ok); line-height:1}
.seats.low b{color:var(--accent)}
.seats span{font-family:var(--f-display); font-size:9px; letter-spacing:.14em; text-transform:uppercase; color:var(--muted-2); font-weight:700}

.pane-nav{display:flex; gap:12px; flex-wrap:wrap; margin-top:28px; padding-top:22px; border-top:1px solid var(--edge)}
/* deep-link landing note: "You picked X starting Y. Not right? Change it" */
.deep-note{margin:-4px 0 20px; padding:12px 14px; border-left:3px solid var(--accent); background:rgba(41,182,232,.07); font-size:14px; line-height:1.5; color:#D8D6D2}
.deep-note b{color:#fff; font-weight:600}
.deep-note button{background:none; border:0; padding:0; margin-left:8px; color:var(--accent); font:inherit; text-decoration:underline; text-underline-offset:3px; cursor:pointer}
.link-back{
  display:inline-flex; align-items:center; gap:9px;
  font-family:var(--f-display); font-size:11.5px; font-weight:700;
  letter-spacing:.14em; text-transform:uppercase; color:var(--muted-2);
}
.link-back:hover{color:#fff}

/* review pane */
.review-box{display:grid; gap:var(--gut); grid-template-columns:1fr}
@media(min-width:900px){.review-box{grid-template-columns:1.15fr .85fr; align-items:start}}
.summary{border:1px solid var(--edge-2); border-radius:var(--r); background:var(--ink); overflow:hidden}
.summary-row{display:flex; justify-content:space-between; gap:16px; padding:14px 18px; border-bottom:1px solid var(--edge); font-size:14.5px}
.summary-row:last-child{border-bottom:0}
.summary-row dt{color:var(--muted); flex:none}
.summary-row dd{margin:0; text-align:right; font-weight:600}
.summary-row.total{background:var(--steel-3)}
.summary-row.total dt,.summary-row.total dd{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:17.5px; letter-spacing:.02em; color:#fff}
.summary-row.due dd{color:var(--accent); font-weight:700}
.field{display:block; margin-bottom:15px; min-width:0}
.field span{
  display:block; font-family:var(--f-display); font-size:10.5px; letter-spacing:.18em;
  text-transform:uppercase; font-weight:700; color:var(--muted-2); margin-bottom:8px;
}
.field input,.field select,.field textarea{
  width:100%; padding:14px 15px; background:var(--ink); color:var(--text);
  border:1px solid var(--edge-2); border-radius:var(--r); font:inherit; font-size:15.5px;
}
.field input:focus,.field select:focus,.field textarea:focus{outline:none; border-color:var(--accent)}
.field input::placeholder,.field textarea::placeholder{color:#575C65}
/* minmax(0,1fr): inputs carry an intrinsic min-width that blows out a plain 1fr */
.two-up{display:grid; gap:0 14px; grid-template-columns:repeat(2,minmax(0,1fr))}
/* SMS consent: two separate optional boxes, unchecked by default (A2P 10DLC). */
.consent{margin:4px 0 14px; padding:13px 14px; border:1px solid var(--line); border-radius:8px; background:rgba(255,255,255,.02)}
.consent .chk{display:flex; gap:10px; align-items:flex-start; font-size:12.5px; line-height:1.5; color:var(--muted); margin-bottom:9px; cursor:pointer}
.consent .chk input{flex:none; width:16px; height:16px; margin-top:2px; accent-color:var(--accent)}
.consent .chk b{color:#DCDAD6; font-weight:600}
.consent-note{font-size:11.5px; line-height:1.5; color:var(--muted-2); margin:0}
.consent-note a{color:var(--accent); text-decoration:none}

/* ============================================================
   REEL BAND
   ============================================================ */
.reel-band{background:var(--ink); border-top:1px solid var(--edge)}
.reel-grid{display:grid; gap:var(--gut); grid-template-columns:1fr; align-items:center}
@media(min-width:880px){.reel-grid{grid-template-columns:minmax(0,290px) 1fr}}
.reel-frame{
  position:relative; width:min(290px,100%); margin-inline:auto;
  aspect-ratio:9/16; border-radius:var(--r); overflow:hidden;
  border:1px solid var(--edge-2); background:var(--steel-3);
  box-shadow:0 36px 80px -40px #000;
}
.reel-frame video{width:100%; height:100%; object-fit:cover; display:block}

/* paged carousel — the track slides, the <video> elements never remount */
.reel-track{display:flex; height:100%; will-change:transform;
  transition:transform .46s cubic-bezier(.22,.61,.36,1)}
.reel-slide{flex:0 0 100%; height:100%; position:relative}
.reel-arw{
  position:absolute; top:50%; transform:translateY(-50%); z-index:2;
  width:34px; height:34px; display:grid; place-items:center; cursor:pointer;
  border:1px solid var(--edge-2); border-radius:999px;
  background:rgba(8,10,13,.56); color:#fff; padding:0;
  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
  opacity:0; transition:opacity .22s, background .22s;
}
.reel-arw svg{width:17px; height:17px}
.reel-arw.prev{left:9px} .reel-arw.next{right:9px}
.reel-arw:hover{background:rgba(8,10,13,.82)}
.reel-arw:disabled{opacity:0 !important; pointer-events:none}
.reel-frame:hover .reel-arw, .reel-arw:focus-visible{opacity:1}
@media(hover:none){.reel-arw{opacity:1}}
.reel-dots{position:absolute; left:0; right:0; bottom:11px; z-index:2;
  display:flex; gap:7px; justify-content:center}
.reel-dots button{
  width:6px; height:6px; padding:0; border-radius:999px; cursor:pointer;
  border:0; background:rgba(255,255,255,.42); transition:background .22s, width .22s;
}
.reel-dots button.on{background:var(--accent); width:17px}
@media(prefers-reduced-motion:reduce){.reel-track{transition:none}}
/* play badge: shown only when autoplay was refused (iOS Low Power Mode); a tap on the clip plays it */
.reel-frame.needs-tap{cursor:pointer}
.reel-frame.needs-tap::after{
  content:""; position:absolute; left:50%; top:50%; z-index:2; width:64px; height:64px; margin:-32px 0 0 -32px;
  border-radius:999px; border:1px solid rgba(255,255,255,.38); pointer-events:none;
  background:rgba(8,10,13,.62) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M8 5v14l11-7z'/%3E%3C/svg%3E") 55% 50%/30px no-repeat;
  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
}

/* ============================================================
   PROCESS — photo band + one subtle mark per card
   ============================================================ */
.how{position:relative; border-top:1px solid var(--edge); border-bottom:1px solid var(--edge); background:var(--steel); overflow:hidden}
.how-bg{position:absolute; inset:0; z-index:0}
.how-bg img{width:100%; height:100%; object-fit:cover; object-position:50% 40%}
.how-bg::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg,rgba(10,10,12,.80),rgba(10,10,12,.86) 55%,rgba(10,10,12,.90));
}
.how .wrap{position:relative; z-index:2}
.how-grid{display:grid; gap:clamp(16px,2.2vw,24px); grid-template-columns:1fr}
@media(min-width:880px){.how-grid{grid-template-columns:repeat(3,1fr)}}
.how-card{
  position:relative; overflow:hidden; padding:clamp(30px,3.2vw,40px) clamp(24px,2.6vw,32px);
  background:rgba(14,16,20,.84); border:1px solid var(--edge-2); border-radius:var(--r);
  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
}
.how-card .idx{font-size:25px; display:block; margin-bottom:20px}
.how-card h3{font-size:22px; margin-bottom:11px; position:relative; z-index:2}
.how-card p{color:var(--muted); font-size:15px; position:relative; z-index:2}
/* the subtle mark, one per step */
.how-mark{
  position:absolute; right:-18px; bottom:-22px; z-index:0;
  width:150px; height:150px; color:var(--accent); opacity:.075;
  pointer-events:none;
}
.how-mark svg{width:100%; height:100%; stroke-width:1.15}

/* ============================================================
   TEAM
   ============================================================ */
.team-grid{display:grid; gap:clamp(16px,2.2vw,24px); grid-template-columns:1fr}
@media(min-width:740px){.team-grid{grid-template-columns:repeat(3,1fr)}}
.person{border:1px solid var(--edge); border-radius:var(--r); overflow:hidden; background:var(--steel)}
.person-img{position:relative; aspect-ratio:4/5; overflow:hidden; background:var(--steel-3)}
.person-img img{width:100%; height:100%; object-fit:cover; transition:transform .6s ease}
.person:hover .person-img img{transform:scale(1.045)}
.person-img::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg,transparent 44%,rgba(10,10,12,.94) 100%)}
.person-body{padding:24px}
.person-role{
  font-family:var(--f-display); font-size:10px; letter-spacing:.2em; text-transform:uppercase;
  color:var(--accent); font-weight:700; margin-bottom:8px; display:block;
}
.person h3{font-size:22px; margin-bottom:12px}
.person p{color:var(--muted); font-size:14.5px; line-height:1.6}

/* ============================================================
   PROOF
   ============================================================ */
.proof{background:var(--steel); border-top:1px solid var(--edge)}
.rev-grid{display:grid; gap:clamp(16px,2.2vw,24px); grid-template-columns:1fr}
@media(min-width:880px){.rev-grid{grid-template-columns:repeat(3,1fr)}}
.rev{padding:30px; background:var(--ink); border:1px solid var(--edge); border-radius:var(--r); display:flex; flex-direction:column; position:relative}
.rev-quote{
  font-family:var(--f-fig); font-stretch:125%; font-weight:900;
  font-size:50px; line-height:.62;
  color:var(--accent); opacity:.3; margin-bottom:12px; display:block;
}
.rev p{font-size:16.5px; line-height:1.62; color:#D8D6D2; margin-bottom:20px}
.rev-who{margin-top:auto; padding-top:18px; border-top:1px solid var(--edge); display:flex; align-items:center; gap:12px}
.rev-who svg{width:17px; height:17px; color:#7C93C9; flex:none}
.rev-who b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:15.5px; letter-spacing:.022em}
.rev-who span{font-size:12px; color:var(--muted-2); display:block}

.gal{display:grid; gap:13px; grid-template-columns:repeat(2,1fr); margin-top:clamp(20px,2.6vw,28px)}
@media(min-width:780px){.gal{grid-template-columns:repeat(4,1fr)}}
.gal figure{margin:0; position:relative; border:1px solid var(--edge); border-radius:var(--r); overflow:hidden; background:var(--steel-3)}
.gal img{width:100%; aspect-ratio:3/4; object-fit:cover; transition:transform .6s ease}
.gal figure:hover img{transform:scale(1.05)}
.gal figcaption{
  position:absolute; inset:auto 0 0 0; padding:30px 15px 13px;
  background:linear-gradient(180deg,transparent,rgba(10,10,12,.96));
  font-family:var(--f-display); font-size:11px; font-weight:700; letter-spacing:.13em;
  text-transform:uppercase; color:#E2E0DC;
}

/* ---- "how we teach": editorial rows ----
   Each demonstration photo sits beside its own explanation rather than under a
   caption, so the photos zig-zag down the page on desktop and stack on phones. */
.teach-rows{margin-top:clamp(32px,4.4vw,60px); display:grid; gap:clamp(40px,5.6vw,88px)}
.teach-row{display:grid; gap:clamp(18px,2.8vw,38px); grid-template-columns:1fr; align-items:center}
@media(min-width:900px){
  .teach-row{grid-template-columns:minmax(0,.8fr) minmax(0,1fr); gap:clamp(34px,4.6vw,74px)}
  /* the photo swaps sides on even rows, so the narrow column has to swap with it
     or the photos come out two different widths down the page */
  .teach-row:nth-child(even){grid-template-columns:minmax(0,1fr) minmax(0,.8fr)}
  .teach-row:nth-child(even)>.teach-shot{order:2}
}
.teach-shot{
  position:relative; margin:0; overflow:hidden; cursor:zoom-in;
  border:1px solid var(--edge); border-radius:var(--r); background:var(--steel-3);
}
.teach-shot img{width:100%; height:auto; aspect-ratio:4/5; object-fit:cover; display:block; transition:transform .6s ease}
.teach-shot:hover img{transform:scale(1.04)}
.teach-shot figcaption{
  position:absolute; inset:auto 0 0 0; padding:34px 16px 14px;
  background:linear-gradient(180deg,transparent,rgba(10,10,12,.96));
  font-family:var(--f-display); font-size:11px; font-weight:700; letter-spacing:.13em;
  text-transform:uppercase; color:#E2E0DC;
}
/* the zoom badge is injected by the shared lightbox, which styles it for .gal */
.teach-shot:hover .gal-zoom,.teach-shot:focus-within .gal-zoom{opacity:1; transform:translateY(0)}
.teach-copy .idx{display:block; font-size:13px; margin-bottom:13px}
.teach-copy h3{font-family:var(--f-display); font-size:clamp(23px,2.45vw,33px); line-height:1.08; margin:0 0 15px}
.teach-copy p{color:var(--muted); font-size:clamp(15.5px,1.15vw,17.5px); line-height:1.74; margin:0 0 15px}
.teach-copy p:last-child{margin-bottom:0}
.teach-close{
  margin:clamp(38px,5vw,70px) auto 0; max-width:720px; text-align:center;
  color:var(--muted); font-size:clamp(16px,1.35vw,19px); line-height:1.7;
}

/* ---- lightbox ---- */
.gal figure{cursor:zoom-in}
.gal-zoom{
  position:absolute; top:10px; right:10px; z-index:3;
  width:31px; height:31px; display:grid; place-items:center;
  background:rgba(8,8,10,.62); -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
  border:1px solid rgba(255,255,255,.18); border-radius:2px;
  opacity:0; transform:translateY(-5px);
  transition:opacity .2s ease, transform .2s ease;
}
.gal figure:hover .gal-zoom,.gal figure:focus-within .gal-zoom{opacity:1; transform:translateY(0)}
.gal-zoom svg{width:14px; height:14px; color:#fff}

.lb{
  position:fixed; inset:0; z-index:200; display:none;
  align-items:center; justify-content:center; padding:clamp(16px,3vw,46px);
  background:rgba(6,6,8,.945); -webkit-backdrop-filter:blur(16px) saturate(1.1); backdrop-filter:blur(16px) saturate(1.1);
}
.lb.open{display:flex; animation:lbin .22s ease}
@keyframes lbin{from{opacity:0}to{opacity:1}}
.lb-fig{margin:0; max-width:min(1080px,100%); display:flex; flex-direction:column; align-items:center}
.lb-fig img{
  max-width:100%; max-height:calc(100svh - 200px); width:auto; height:auto;
  object-fit:contain; border:1px solid var(--edge); border-radius:var(--r);
  animation:lbpop .3s cubic-bezier(.2,.7,.3,1);
}
@keyframes lbpop{from{opacity:0; transform:scale(.975)}to{opacity:1; transform:scale(1)}}
.lb-cap{
  display:flex; align-items:center; gap:13px; margin-top:20px; text-align:center;
  font-family:var(--f-display); font-weight:700; font-size:11px;
  letter-spacing:.16em; text-transform:uppercase; color:#D2D0CC;
}
.lb-cap .idx{font-size:12px; letter-spacing:.06em}
.lb-cap em{font-style:normal; color:var(--muted-2); letter-spacing:.06em}
.lb-cap i{width:1px; height:13px; background:var(--edge-2); flex:none}
.lb-x,.lb-nav{
  position:fixed; z-index:2; display:grid; place-items:center;
  /* iOS Safari gives <button> its own padding/appearance, which shoves the
     glyph off-centre inside the box — zero it all out. */
  -webkit-appearance:none; appearance:none; padding:0; margin:0; font:inherit; line-height:0;
  width:46px; height:46px; border:1px solid var(--edge-2); border-radius:2px;
  background:rgba(16,16,19,.82); -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px); color:#fff;
  transition:background .16s, border-color .16s, color .16s;
}
.lb-x:hover,.lb-nav:hover{background:var(--accent); border-color:var(--accent); color:#04161F}
.lb-x{top:clamp(14px,2.4vw,28px); right:clamp(14px,2.4vw,28px)}
.lb-nav{top:50%; transform:translateY(-50%)}
.lb-prev{left:clamp(12px,2vw,28px)}
.lb-next{right:clamp(12px,2vw,28px)}
.lb-x svg,.lb-nav svg{width:19px; height:19px}
@media(max-width:700px){
  .lb-nav{width:42px; height:42px; top:auto; bottom:20px; transform:none}
  .lb-prev{left:calc(50% - 52px)}
  .lb-next{right:calc(50% - 52px)}
  .lb-fig img{max-height:calc(100svh - 250px)}
}

/* ============================================================
   FINANCING
   ============================================================ */
.fin{background:var(--ink)}
/* The eyebrow centres itself on mobile but the heading under it didn't,
   because this head isn't wrapped in .sec-head. Match every other section. */
@media(max-width:899px){
  .fin-wrap>.rv:first-child{text-align:center}
  .fin-wrap>.rv:first-child .lede{margin-inline:auto}
  .fin-wrap>.rv:first-child .fin-note{text-align:left}
}
.fin-wrap{display:grid; gap:var(--gut); grid-template-columns:1fr}
@media(min-width:960px){.fin-wrap{grid-template-columns:.92fr 1.08fr; align-items:start}}
.fin-cards{display:grid; gap:13px; grid-template-columns:1fr}
@media(min-width:560px){.fin-cards{grid-template-columns:repeat(2,1fr)}}
.fin-card{padding:26px; border:1px solid var(--edge); border-radius:var(--r); background:var(--steel)}
.fin-card .idx{font-size:16px; display:block; margin-bottom:14px}
.fin-card b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:19px; margin-bottom:9px; letter-spacing:.012em}
.fin-card span{font-size:14px; color:var(--muted); line-height:1.58; display:block}
.fin-note{
  margin-top:22px; padding:18px 20px; border-left:2px solid var(--accent);
  background:var(--accent-dim); font-size:14.5px; color:#DEDCD8; border-radius:0 var(--r) var(--r) 0;
}

/* ============================================================
   FAQ — editorial numbered list
   ============================================================ */
.faq-list{max-width:920px; margin-inline:auto; border-top:1px solid var(--edge-2)}
.faq-item{border-bottom:1px solid var(--edge)}
.faq-q{
  width:100%; display:grid; grid-template-columns:auto 1fr auto; align-items:baseline; gap:20px;
  text-align:left; padding:26px 4px; transition:color .16s;
}
.faq-q .idx{font-size:14px; color:var(--muted-2); transition:color .18s; align-self:start; padding-top:4px}
.faq-item.open .faq-q .idx,.faq-q:hover .idx{color:var(--accent)}
.faq-q .qt{
  font-family:var(--f-head); font-weight:400; text-transform:uppercase;
  font-size:clamp(17px,2.05vw,21px); letter-spacing:.014em; line-height:1.2;
}
.faq-q:hover .qt{color:var(--accent)}
.faq-q i{flex:none; width:20px; height:20px; position:relative; font-style:normal; align-self:center}
.faq-q i::before,.faq-q i::after{
  content:""; position:absolute; inset:50% 0 auto 0; height:2px; background:var(--accent);
  transform:translateY(-50%); transition:transform .28s ease;
}
.faq-q i::after{transform:translateY(-50%) rotate(90deg)}
.faq-item.open .faq-q i::after{transform:translateY(-50%) rotate(0)}
.faq-a{max-height:0; overflow:hidden; transition:max-height .36s cubic-bezier(.3,.7,.3,1)}
.faq-a p{
  padding:0 44px 28px 0; color:var(--muted); font-size:15.5px; line-height:1.68;
  max-width:68ch;
}
@media(min-width:700px){.faq-a p{padding-left:37px}}

/* ============================================================
   LOCATION
   ============================================================ */
.loc{background:var(--steel); border-top:1px solid var(--edge)}
.loc-grid{display:grid; gap:var(--gut); grid-template-columns:1fr}
@media(min-width:960px){.loc-grid{grid-template-columns:.82fr 1.18fr}}
.loc-list{list-style:none; margin:0 0 28px; padding:0; display:grid; border-top:1px solid var(--edge)}
.loc-list li{display:grid; grid-template-columns:auto 1fr; gap:16px; padding:18px 0; border-bottom:1px solid var(--edge); align-items:start}
.loc-list svg{width:18px; height:18px; color:var(--accent); flex:none; margin-top:5px}
.loc-list b{
  display:block; font-family:var(--f-display); font-weight:700; text-transform:uppercase;
  font-size:10.5px; letter-spacing:.2em; color:var(--muted-2); margin-bottom:6px;
}
.loc-list span{font-size:16px; color:#DCDAD6; display:block; line-height:1.5}
.loc-list a{font-size:16px; color:#DCDAD6}
.loc-list a:hover{color:var(--accent)}
.loc-list em{color:var(--muted-2); font-size:13.5px; font-style:italic}
.map{border:1px solid var(--edge-2); border-radius:var(--r); overflow:hidden; background:var(--steel-3); min-height:400px}
.map iframe{width:100%; height:100%; min-height:400px; border:0; display:block; filter:grayscale(.4) contrast(1.06)}
.storefront{margin-top:16px; border:1px solid var(--edge); border-radius:var(--r); overflow:hidden}
/* height:auto is load-bearing: the width/height attributes build.py stamps on every
   image land as presentational hints, and a definite height:1350px silently beats
   aspect-ratio (the photo rendered 350x1350 on a phone). */
.storefront img{width:100%; height:auto; aspect-ratio:16/9; object-fit:cover; object-position:center 42%}

/* ============================================================
   CTA BAND — golden-hour crane photo
   ============================================================ */
.band{position:relative; overflow:hidden; background:var(--ink); border-top:1px solid var(--edge)}
.band-bg{position:absolute; inset:0; z-index:0}
.band-bg img{width:100%; height:100%; object-fit:cover; object-position:50% 42%}
.band-bg::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(180deg,rgba(10,10,12,.92),rgba(10,10,12,.80) 45%,rgba(10,10,12,.95));
}
.band-in{position:relative; z-index:2; text-align:center; padding:clamp(72px,9vw,124px) 0}
.band h2{font-size:clamp(32px,5.2vw,58px); max-width:20ch; margin:0 auto 20px}
.band p{color:#BFBDB9; max-width:54ch; margin:0 auto 34px; font-size:17.5px}
.band-cta{display:flex; flex-wrap:wrap; gap:13px; justify-content:center}

/* ============================================================
   FOOTER
   ============================================================ */
.foot{background:#08080A; border-top:1px solid var(--edge); padding:64px 0 44px}
.foot-grid{display:grid; gap:40px var(--gut); grid-template-columns:1fr; margin-bottom:44px}
@media(min-width:820px){.foot-grid{grid-template-columns:1.5fr 1fr 1fr}}
.foot img.fl{height:76px; width:auto; margin-bottom:20px}
.foot p{color:var(--muted-2); font-size:14.5px; max-width:40ch}
.foot h4{font-family:var(--f-display); font-size:10.5px; letter-spacing:.2em; color:var(--muted-2); margin-bottom:18px; font-weight:700}
.foot ul{list-style:none; margin:0; padding:0; display:grid; gap:11px}
.foot ul a{font-size:14.5px; color:var(--muted)}
.foot ul a:hover{color:var(--accent)}
.socials{display:flex; gap:10px; margin-top:22px}
.socials a{
  width:40px; height:40px; display:grid; place-items:center;
  border:1px solid var(--edge); border-radius:var(--r); color:var(--muted); transition:.18s;
}
.socials a:hover{border-color:var(--accent); color:var(--accent)}
.socials svg{width:17px; height:17px}
.foot-base{
  padding-top:28px; border-top:1px solid var(--edge);
  display:flex; flex-wrap:wrap; gap:10px 20px; justify-content:space-between;
  font-size:12.5px; color:var(--muted-2);
}
.foot-base a:hover{color:var(--accent)}

/* ============================================================
   STICKY CALL BAR
   ============================================================ */
/* the fixed call bar would otherwise cover the last inch of the page */
@media(max-width:900px){body{padding-bottom:calc(58px + env(safe-area-inset-bottom))}}
.callbar{
  position:fixed; left:0; right:0; bottom:0; z-index:60;
  display:none; gap:0; background:var(--steel-2);
  transform:translateY(110%); transition:transform .3s ease;
  padding-bottom:env(safe-area-inset-bottom); border-top:1px solid var(--edge-2);
}
.callbar.show{transform:none}
@media(max-width:900px){.callbar{display:flex}}
.callbar a{
  flex:1; display:flex; align-items:center; justify-content:center; gap:9px;
  padding:17px 8px; background:var(--steel-2);
  font-family:var(--f-head); font-weight:400; text-transform:uppercase;
  font-size:15px; letter-spacing:.055em;
}
.callbar a.pri{background:var(--accent); color:#04161F}
.callbar svg{width:17px; height:17px}

/* ============================================================
   CHECKOUT MODAL
   ============================================================ */
.modal{
  position:fixed; inset:0; z-index:120; display:none;
  align-items:center; justify-content:center; padding:16px;
  background:rgba(4,4,6,.88); -webkit-backdrop-filter:blur(7px); backdrop-filter:blur(7px);
}
.modal.open{display:flex; animation:fade .22s ease}
.sheet{
  width:100%; max-width:920px; max-height:92svh; overflow:auto;
  background:var(--steel); border:1px solid var(--edge-2); border-radius:var(--r);
  box-shadow:0 50px 120px -30px #000;
}
.sheet-top{
  position:sticky; top:0; z-index:3; display:flex; align-items:center; gap:12px;
  padding:16px 22px; background:var(--steel-3); border-bottom:1px solid var(--edge-2);
}
.sheet-top b{font-family:var(--f-display); font-weight:700; text-transform:uppercase; letter-spacing:.14em; font-size:12.5px}
.sheet-top .lockrow{display:flex; align-items:center; gap:7px; font-family:var(--f-display); font-size:10.5px; color:var(--muted-2); letter-spacing:.14em; text-transform:uppercase; font-weight:700}
.sheet-top .lockrow svg{width:13px; height:13px; color:var(--ok)}
.x{margin-left:auto; width:32px; height:32px; display:grid; place-items:center; border-radius:var(--r); color:var(--muted); font-size:22px; line-height:1}
.x:hover{background:rgba(255,255,255,.07); color:#fff}
.demo-ribbon{
  display:flex; align-items:center; gap:11px; padding:12px 22px;
  background:var(--accent-dim); border-bottom:1px solid rgba(41,182,232,.28);
  font-size:12.5px; color:#EFC5A0; font-weight:600;
}
.demo-ribbon svg{width:15px; height:15px; color:var(--accent); flex:none}
.sheet-grid{display:grid; grid-template-columns:1fr}
@media(min-width:780px){.sheet-grid{grid-template-columns:.88fr 1.12fr}}
.sheet-left{padding:28px 26px; background:var(--ink); border-bottom:1px solid var(--edge)}
@media(min-width:780px){.sheet-left{border-bottom:0; border-right:1px solid var(--edge)}}
.sheet-right{padding:28px 26px}
.sl-course{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:24px; letter-spacing:.012em; margin-bottom:7px}
.sl-sub{font-size:13.5px; color:var(--muted); margin-bottom:22px}
.paytabs{display:grid; grid-template-columns:repeat(2,1fr); gap:8px; margin-bottom:22px}
@media(min-width:560px){.paytabs{grid-template-columns:none; grid-auto-flow:column; grid-auto-columns:1fr}}  /* N visible tabs share the row; /book/ hides In-House for assessments */
.paytab{
  padding:13px 8px; border:1px solid var(--edge); border-radius:var(--r);
  background:var(--ink); font-family:var(--f-display); font-size:11px; font-weight:700;
  letter-spacing:.1em; text-transform:uppercase; color:var(--muted); text-align:center; transition:.16s;
}
.paytab:hover{border-color:var(--edge-2); color:#fff}
.paytab.on{border-color:var(--accent); background:rgba(41,182,232,.1); color:#fff}
.payform{display:none}
.payform.on{display:block}
.alt-pay{padding:22px; border:1px solid var(--edge); border-radius:var(--r); background:var(--ink); font-size:14.5px; color:var(--muted)}
.alt-pay b{display:block; color:#fff; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:18px; margin-bottom:10px; letter-spacing:.014em}
.alt-pay ul{margin:13px 0 0; padding-left:18px; display:grid; gap:7px}
.pay-legal{margin-top:15px; font-size:12px; color:var(--muted-2); line-height:1.55}
.co-success{padding:48px 28px; text-align:center}
.co-success-ico{
  width:64px; height:64px; margin:0 auto 22px; border-radius:50%;
  display:grid; place-items:center; background:rgba(95,208,138,.14); border:1px solid rgba(95,208,138,.4);
}
.co-success-ico svg{width:28px; height:28px; color:var(--ok)}
.co-success h3{font-size:27px; margin-bottom:12px}
.co-success p{color:var(--muted); font-size:15.5px; max-width:44ch; margin-inline:auto}
.co-success-box{
  margin:24px auto 0; max-width:470px; padding:20px; text-align:left;
  border:1px solid rgba(41,182,232,.32); background:var(--accent-dim); border-radius:var(--r);
}
.co-success-box b{display:block; font-family:var(--f-display); font-weight:700; text-transform:uppercase; font-size:12px; letter-spacing:.16em; color:var(--accent); margin-bottom:9px}
.co-success-box p{color:#DEDCD8; font-size:14px; margin:0; max-width:none}
.spin{width:16px; height:16px; border:2px solid rgba(24,8,0,.3); border-top-color:#04161F; border-radius:50%; animation:sp .7s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}

/* ============================================================
   CHAT
   ============================================================ */
.chat-fab{
  position:fixed; right:20px; bottom:20px; z-index:90;
  width:62px; height:62px; border-radius:50%;
  background:var(--accent); display:grid; place-items:center;
  box-shadow:0 16px 38px -12px rgba(41,182,232,.8);
  transition:transform .2s ease;
  animation:pulse 3.4s ease-out 2.4s 3;
}
/* On phones the launcher lands in the same corner as the hero's flag band.
   Hold it until the hero is behind you — same rule the call bar follows. */
@media(max-width:900px){
  .chat-fab{
    bottom:calc(16px + 58px); width:54px; height:54px;
    opacity:0; visibility:hidden; transform:translateY(14px) scale(.9);
    transition:opacity .3s ease, transform .3s ease, visibility .3s;
  }
  body.past-hero .chat-fab,body.chat-open .chat-fab{opacity:1; visibility:visible; transform:none}
  body:not(.past-hero) .chat-nudge{display:none}
}
.chat-fab:hover{transform:scale(1.07)}
.chat-fab img{width:19px; height:auto; filter:brightness(0) saturate(100%)}
@media(max-width:900px){.chat-fab img{width:17px}}
.chat-fab .close-i{display:none; font-size:27px; color:#04161F; line-height:1; font-family:var(--f-body)}
.chat-open .chat-fab img{display:none}
.chat-open .chat-fab .close-i{display:block}
@keyframes pulse{
  0%{box-shadow:0 16px 38px -12px rgba(41,182,232,.8),0 0 0 0 rgba(41,182,232,.5)}
  70%{box-shadow:0 16px 38px -12px rgba(41,182,232,.8),0 0 0 24px rgba(41,182,232,0)}
  100%{box-shadow:0 16px 38px -12px rgba(41,182,232,.8),0 0 0 0 rgba(41,182,232,0)}
}

/* nudge — a real speech bubble with a tail, not a grey box */
.chat-nudge{
  position:fixed; right:96px; bottom:30px; z-index:89; width:262px;
  padding:16px 18px 15px; background:var(--steel-2);
  border:1px solid var(--edge-2); border-radius:var(--r);
  box-shadow:0 24px 54px -22px #000, 0 0 0 1px rgba(41,182,232,.14);
  opacity:0; transform:translateY(8px) scale(.97); pointer-events:none;
  transition:opacity .34s cubic-bezier(.3,.7,.3,1), transform .34s cubic-bezier(.3,.7,.3,1);
}
.chat-nudge.show{opacity:1; transform:none; pointer-events:auto}
.chat-nudge::after,.chat-nudge::before{
  content:""; position:absolute; right:-9px; bottom:20px;
  width:0; height:0; border-top:9px solid transparent; border-bottom:9px solid transparent;
  border-left:9px solid var(--steel-2);
}
.chat-nudge::before{right:-10px; border-left-color:var(--edge-2)}
.chat-nudge .nudge-lab{
  display:flex; align-items:center; gap:8px; margin-bottom:9px;
  font-family:var(--f-display); font-size:9.5px; font-weight:700;
  letter-spacing:.18em; text-transform:uppercase; color:var(--accent);
}
.chat-nudge .nudge-lab::after{content:""; flex:1; height:1px; background:var(--edge-2)}
.chat-nudge p{font-size:14px; line-height:1.5; color:#DAD8D4; margin:0}
.chat-nudge .nudge-x{
  position:absolute; top:6px; right:8px; width:20px; height:20px;
  color:var(--muted-2); font-size:16px; line-height:1; border-radius:3px;
}
.chat-nudge .nudge-x:hover{color:#fff; background:rgba(255,255,255,.07)}
@media(max-width:900px){.chat-nudge{bottom:calc(30px + 58px); right:88px; width:238px}}
@media(max-width:480px){.chat-nudge{display:none}}

.chat-panel{
  position:fixed; right:20px; bottom:94px; z-index:95;
  width:min(378px,calc(100vw - 40px)); height:min(566px,calc(100svh - 134px));
  background:var(--steel); border:1px solid var(--edge-2); border-radius:var(--r);
  display:flex; flex-direction:column; overflow:hidden;
  box-shadow:0 44px 96px -34px #000;
  opacity:0; transform:translateY(14px) scale(.98); pointer-events:none;
  transition:opacity .26s ease, transform .26s ease;
}
@media(max-width:900px){.chat-panel{bottom:calc(86px + 58px); height:min(520px,calc(100svh - 204px))}}
.chat-open .chat-panel{opacity:1; transform:none; pointer-events:auto}
.chat-head{display:flex; align-items:center; gap:13px; padding:16px 17px; background:var(--steel-3); border-bottom:1px solid var(--edge-2)}
.chat-head .av{
  width:40px; height:40px; border-radius:50%; background:var(--ink);
  border:1px solid rgba(41,182,232,.4); display:grid; place-items:center; flex:none;
}
.chat-head .av img{width:13px; height:auto}
.chat-head b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:15.5px; letter-spacing:.03em}
.chat-head span{display:flex; align-items:center; gap:6px; font-size:11.5px; color:var(--muted-2); font-weight:600}
.chat-head span::before{content:""; width:7px; height:7px; border-radius:50%; background:var(--ok)}
.chat-log{flex:1; overflow-y:auto; padding:19px 17px; display:flex; flex-direction:column; gap:13px; scroll-behavior:smooth}
.msg{max-width:87%; padding:12px 15px; border-radius:12px; font-size:14.5px; line-height:1.55; white-space:pre-line; animation:fade .26s ease}
.msg.bot{background:var(--steel-2); border:1px solid var(--edge); border-bottom-left-radius:3px; align-self:flex-start; color:#DCDAD6}
.msg.me{background:var(--accent); color:#04161F; border-bottom-right-radius:3px; align-self:flex-end; font-weight:500}
.msg b{font-weight:700; color:#fff}
.msg.me b{color:#04161F}
.typing{display:flex; gap:4px; align-self:flex-start; padding:14px 16px; background:var(--steel-2); border:1px solid var(--edge); border-radius:12px; border-bottom-left-radius:3px}
.typing i{width:6px; height:6px; border-radius:50%; background:var(--muted-2); animation:bob 1.15s infinite}
.typing i:nth-child(2){animation-delay:.16s}
.typing i:nth-child(3){animation-delay:.32s}
@keyframes bob{0%,60%,100%{transform:translateY(0); opacity:.45}30%{transform:translateY(-4px); opacity:1}}
.chat-chips{display:flex; flex-wrap:wrap; gap:7px; padding:0 17px 12px}
.chat-chips button{
  padding:9px 13px; border:1px solid var(--edge-2); border-radius:100px;
  background:var(--steel-2); font-size:12.5px; font-weight:600; color:#C9C7C3; transition:.16s;
}
.chat-chips button:hover{border-color:var(--accent); color:#fff}
.chat-in{display:flex; gap:9px; padding:13px 15px; border-top:1px solid var(--edge); background:var(--steel-2)}
.chat-in input{
  flex:1; min-width:0; padding:12px 15px; background:var(--ink); border:1px solid var(--edge-2);
  border-radius:100px; color:var(--text); font:inherit; font-size:14.5px;
}
.chat-in input:focus{outline:none; border-color:var(--accent)}
.chat-in button{width:43px; height:43px; flex:none; border-radius:50%; background:var(--accent); display:grid; place-items:center; color:#04161F; transition:.16s}
.chat-in button:hover{background:var(--accent-2)}
.chat-in svg{width:17px; height:17px}
.chat-foot{
  padding:9px 17px 11px; text-align:center; font-family:var(--f-display); font-size:9.5px;
  letter-spacing:.14em; text-transform:uppercase; color:var(--muted-2);
  background:var(--steel-2); border-top:1px solid var(--edge); font-weight:700;
}

/* reveal */
.rv{opacity:0; transform:translateY(24px); transition:opacity .7s cubic-bezier(.3,.7,.3,1), transform .7s cubic-bezier(.3,.7,.3,1)}
.rv.in{opacity:1; transform:none}
@media(prefers-reduced-motion:reduce){.rv{opacity:1; transform:none; transition:none}}
.sr{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap}

/* ============================================================
   V3 SKIN — built from their own flyers: hard-edged plates, one diagonal cut,
   distressed display type, real people up top, the price where they print it.
   ============================================================ */

/* distressed print on the big display type and the accent plates */
.hero h1,.h-sec,.phero h1,.band h2,.plate,.fin-flyer{
  -webkit-mask-image:var(--grunge); mask-image:var(--grunge);
  -webkit-mask-size:640px; mask-size:640px;
}

/* one diagonal cut, alternating direction, on the sections that change ground */
.diag-t{position:relative; margin-top:-3vw; padding-top:calc(var(--sec) + 3vw); clip-path:polygon(0 3vw,100% 0,100% 100%,0 100%)}
/* "flip" not "rev": .rev is the review card (padding 30px, border, flex column,
   .rev p 16.5px) and the two sections that carried it inherited all of that:
   an extra 30px inset each side, a 30px bottom, and 16.5px eyebrows */
.diag-t.flip{clip-path:polygon(0 0,100% 3vw,100% 100%,0 100%)}

/* ---- hero: copy left, a graduate right, the price on a plate ---- */
.hero{align-items:flex-end}
.hero-in{padding-block:150px 0}
@media(max-width:640px){.hero-in{padding-block:128px 0}}
@media(min-width:900px){
  .hero-in{
    display:grid; grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);
    gap:clamp(28px,4vw,64px); align-items:end; padding-block:170px 0;
  }
  .hero-copy{padding-bottom:clamp(48px,6vw,84px)}
}
.hero .eyebrow{margin-bottom:18px}
.hero h1{font-size:clamp(46px,6.6vw,88px); max-width:none}
@media(max-width:640px){.hero h1{font-size:clamp(50px,13.6vw,66px)}}
.hero-sub{max-width:46ch}
.hero-cta{margin-top:26px}

.plate{
  display:inline-grid; grid-template-columns:auto auto; gap:2px 20px; align-items:end;
  margin:30px 0 0; padding:16px 24px 14px 20px; text-align:left;
  background:var(--accent); color:#04161F;
  transform:skewX(-7deg); transform-origin:left bottom;
}
.plate>*{transform:skewX(7deg)}
.plate-p{grid-row:1/3; font-family:var(--f-head); font-size:clamp(50px,5.4vw,74px); line-height:.86; letter-spacing:.005em}
.plate-k{font-family:var(--f-display); font-weight:700; font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; align-self:start; padding-top:4px}
.plate-s{font-family:var(--f-display); font-weight:700; font-size:13px; line-height:1.3; letter-spacing:.01em}
.plate-s b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:17px; letter-spacing:.03em; margin-top:5px}
.plate-s i{display:block; font-style:normal; font-weight:600; font-size:11px; opacity:.75; letter-spacing:.02em}
/* financing rides on the price plate: the first thing a visitor sees next to "$1,000"
   is that it can be split. Full-width row under the price, links to /financing/. */
.plate-fin{
  grid-column:1/-1; display:flex; align-items:center; gap:10px;
  margin-top:12px; padding-top:11px; border-top:1px solid rgba(4,22,31,.22);
  font-family:var(--f-display); font-weight:600; font-size:12.5px; letter-spacing:.01em; line-height:1.3;
  color:#04161F; text-decoration:none; transition:opacity .16s ease;
}
.plate-fin:hover{opacity:.78}
.plate-fin svg{width:16px; height:16px; flex:none}
.plate-fin b{font-weight:800}
.plate-fin em{margin-left:auto; font-style:normal; font-family:var(--f-head); font-size:22px; line-height:1; padding-left:6px}
@media(max-width:400px){.plate{padding:14px 18px 12px 16px; gap:2px 14px} .plate-p{font-size:46px}}

.hero-fig{position:relative; margin:44px auto 0; max-width:420px; z-index:2}
@media(min-width:900px){.hero-fig{margin:0; max-width:none; align-self:end}}
.hero-photo{margin:0; position:relative; overflow:hidden; background:var(--steel-3); clip-path:polygon(0 0,100% 0,100% 100%,0 100%)}
@media(min-width:900px){.hero-photo{clip-path:polygon(11% 0,100% 0,100% 100%,0 100%)}}
.hero-photo img{width:100%; height:auto; aspect-ratio:4/5; object-fit:cover; object-position:50% 12%; display:block}
.hero-photo figcaption{
  position:absolute; inset:auto 0 0 0; padding:90px 22px 22px;
  background:linear-gradient(180deg,transparent,rgba(10,10,12,.94) 70%);
}
@media(min-width:900px){.hero-photo figcaption{padding-left:calc(11% + 22px)}}
.hero-photo figcaption b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:26px; letter-spacing:.02em; line-height:1}
.hero-photo figcaption span{display:block; margin-top:6px; font-family:var(--f-display); font-weight:700; font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--accent)}
.hero-fig q{
  quotes:none; position:absolute; left:-14px; top:26px; max-width:min(262px,78%);
  padding:13px 16px; background:var(--accent); color:#04161F;
  font-family:var(--f-display); font-weight:700; font-size:13px; line-height:1.42; text-align:left;
  transform:skewX(-7deg); transform-origin:left bottom;
}
.hero-fig q::before{content:"\201C"} .hero-fig q::after{content:"\201D"}
@media(min-width:900px){.hero-fig q{left:-8px; top:34px; font-size:13.5px}}

/* ---- graduates ---- */
.gradwall{background:var(--steel)}
.gw-head{display:grid; gap:26px var(--gut); min-width:0; margin-bottom:clamp(30px,4vw,44px)}
@media(min-width:900px){.gw-head{grid-template-columns:minmax(0,1fr) minmax(0,.86fr); align-items:end}}
@media(max-width:899px){.gw-head{text-align:center}}
.gw-quote{margin:0; padding-left:20px; border-left:3px solid var(--accent); text-align:left}
.gw-quote p{margin:0 0 12px; font-size:clamp(16.5px,1.5vw,20px); line-height:1.45; font-weight:500; color:#E9E7E3}
.gw-quote cite{font-style:normal; display:flex; gap:10px; align-items:baseline; flex-wrap:wrap}
.gw-quote b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:15px; letter-spacing:.03em}
.gw-quote span{font-size:12px; color:var(--muted-2)}
.gw-strip{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:6px; margin-top:0}
@media(min-width:760px){
  /* 12 columns so a 6-up row can be built from span-2 cells; that is what lets an
     incomplete last row be nudged half a cell and sit centred instead of left-hung. */
  .gw-strip{grid-template-columns:repeat(12,minmax(0,1fr))}
  .gw-strip figure{grid-column:span 2}
  /* 7th of exactly 9: centre the orphan row of three under the row of six. */
  .gw-strip figure:nth-child(7):nth-last-child(3){grid-column:4/span 2}
  /* 7th of exactly 10: centre the orphan row of four under the row of six. */
  .gw-strip figure:nth-child(7):nth-last-child(4){grid-column:3/span 2}
  /* 13 tiles = two full rows of six plus a single orphan; centre it. */
  .gw-strip figure:nth-child(13):last-child{grid-column:6/span 2}
}
/* phones: the wall is ONE drifting marquee row (JS in index.html clones the
   set for a seamless wrap). Desktop keeps the 6-up grid above untouched. */
@media(max-width:759px){
  .gw-strip{display:flex; gap:6px; overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; touch-action:pan-x pan-y}
  .gw-strip::-webkit-scrollbar{display:none}
  .gw-strip figure{flex:0 0 44vw}
}
/* safety net: if the viewport crosses to desktop before the JS strips its
   clones, they must never appear in the grid */
@media(min-width:760px){ .gw-clone{display:none} }
.gw-strip figure{margin:0; position:relative; overflow:hidden; min-width:0; background:var(--steel-3); border:0; border-radius:0}
.gw-strip img{width:100%; height:auto; aspect-ratio:3/4; object-fit:cover; object-position:50% 14%; transition:transform .6s ease}
.gw-strip figure:hover img{transform:scale(1.05)}
.gw-strip figcaption{
  position:absolute; inset:auto 0 0 0; padding:34px 12px 11px; background:linear-gradient(180deg,transparent,rgba(10,10,12,.95));
  font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:15px; letter-spacing:.03em; line-height:1.05; color:#fff;
}
.gw-strip figcaption small{display:block; font-family:var(--f-display); font-weight:700; font-size:8.5px; letter-spacing:.16em; color:var(--accent); margin-top:4px}
.gw-marks{
  list-style:none; margin:26px 0 0; padding:0; display:flex; flex-wrap:wrap; gap:10px 28px; justify-content:center;
  font-family:var(--f-display); font-weight:700; font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted);
}
@media(min-width:900px){.gw-marks{justify-content:flex-start}}
.gw-marks li{display:flex; align-items:center; gap:9px}
.gw-marks li::before{content:""; width:8px; height:8px; background:var(--accent); transform:skewX(-12deg); flex:none}

/* ---- courses: plates, not cards ---- */
.course{border:0; border-top:3px solid var(--steel-3); background:var(--steel)}
.course.is-feature{border-top-color:var(--accent)}
.course:hover{border-color:var(--steel-3); border-top-color:var(--accent)}
.course-num{display:none}
.price{font-size:54px; color:var(--accent)}
.assess{border:0; background:var(--steel-2)}
.chip{border:0; border-radius:0; background:var(--steel-3); padding:11px 15px}
.chip:hover{background:var(--ink)}
.chip-more{color:var(--accent); background:transparent; box-shadow:inset 0 0 0 1px var(--edge-2)}
.chip-more:hover{background:transparent; color:#fff}

/* ---- booking ---- */
.sched{background:var(--steel)}
.sched-shell{border:0; background:var(--ink)}
.prog,.date,.summary,.field input,.field select,.field textarea{background:var(--steel)}

/* ---- reel + how it runs ---- */
.steps{list-style:none; margin:26px 0 0; padding:0; counter-reset:s; border-top:1px solid var(--edge-2)}
.steps li{display:grid; grid-template-columns:auto 1fr; gap:16px; padding:16px 0; border-bottom:1px solid var(--edge); text-align:left}
.steps li::before{counter-increment:s; content:counter(s,decimal-leading-zero); font-family:var(--f-head); font-size:26px; color:var(--accent); line-height:1; padding-top:2px}
.steps b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:19px; letter-spacing:.015em; margin-bottom:4px}
.steps span{display:block; font-size:14.5px; color:var(--muted); line-height:1.5}
.reel-frame{border:0}
@media(max-width:879px){.reel-copy{text-align:center} .reel-copy .lede{margin-inline:auto}}

/* ---- team ---- */
.team-sec{border-top:1px solid var(--edge)}
.person{border:0; background:transparent}
.person-body{padding:20px 0 0}
.person-img{border-bottom:3px solid var(--accent)}

/* ---- reviews in their own layout: photo, big first name, the quote ---- */
.proof{background:var(--steel)}
.rev3{display:grid; grid-template-columns:minmax(0,1fr)}
@media(min-width:820px){.rev3{grid-template-columns:repeat(3,minmax(0,1fr))}}
.rv-panel{position:relative; display:flex; flex-direction:column; min-width:0; padding-bottom:30px; min-height:100%}
.rv-panel img{width:100%; height:auto; aspect-ratio:4/5; object-fit:cover; object-position:50% 12%; display:block}
.rv-panel.blue img{clip-path:polygon(0 0,100% 0,100% 100%,0 91%)}
.rv-panel.paper img{clip-path:polygon(0 0,100% 0,100% 91%,0 100%)}
.rv-panel.ink img{clip-path:polygon(0 0,100% 0,100% 100%,0 91%); margin-top:-26px}
.rv-panel .who{padding:24px 26px 0}
.rv-panel .who b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:clamp(30px,2.8vw,40px); line-height:.95; letter-spacing:.01em}
.rv-panel .who p{margin:14px 0 0; font-size:15.5px; line-height:1.5; font-weight:500}
.rv-panel .who small{display:block; margin-top:14px; font-family:var(--f-display); font-weight:700; font-size:10px; letter-spacing:.16em; text-transform:uppercase; opacity:.7}
.rv-panel.blue{background:var(--accent); color:#04161F}
.rv-panel.paper{background:var(--paper); color:#0A0A0C}
.rv-panel.ink{background:#050506; color:#fff; padding-top:26px}
.rv-panel.ink .who p{color:var(--accent); text-transform:uppercase; font-family:var(--f-display); font-weight:700; font-size:14.5px; letter-spacing:.02em; line-height:1.5}
.big-q{font-family:var(--f-fig); font-stretch:125%; font-weight:900; font-size:150px; line-height:.55; color:var(--accent); opacity:.28; padding:40px 26px 0; display:block}
.rev-list{display:grid; gap:0 var(--gut); grid-template-columns:1fr; margin-top:clamp(28px,4vw,48px); border-top:1px solid var(--edge-2)}
@media(min-width:820px){.rev-list{grid-template-columns:1fr 1fr}}
.rev-list article{display:grid; grid-template-columns:auto 1fr; gap:14px; align-items:start; padding:22px 0; border-bottom:1px solid var(--edge)}
.rev-list svg{width:16px; height:16px; color:#7C93C9; margin-top:5px; flex:none}
.rev-list p{margin:0 0 7px; font-size:15.5px; line-height:1.55; color:#D8D6D2}
.rev-list b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:14px; letter-spacing:.03em}
.rev-list small{font-size:12px; color:var(--muted-2); margin-left:9px}

/* ---- financing as their flyer: a paper poster on the dark page ---- */
.fin{background:var(--ink)}
.fin-flyer{
  display:grid; gap:clamp(26px,4vw,56px); grid-template-columns:1fr;
  padding:clamp(34px,5vw,72px) clamp(24px,4vw,64px);
  background:var(--paper); color:var(--ink);
}
@media(min-width:960px){.fin-flyer{grid-template-columns:1.05fr .95fr; align-items:center}}
@media(max-width:959px){.fin-copy{text-align:center}}
.fin-flyer .eyebrow{color:var(--accent-deep)}
.fin-flyer .eyebrow::before,.fin-flyer .eyebrow::after{background-image:linear-gradient(var(--accent-deep),var(--accent-deep)),linear-gradient(var(--accent-deep),var(--accent-deep))}
.fin-flyer h2{font-size:clamp(52px,7.4vw,108px); line-height:.86; margin:4px 0 20px; color:var(--ink)}
.fin-flyer h2 em{font-style:normal; color:var(--accent-deep)}
.fin-lede{font-size:clamp(16.5px,1.45vw,19.5px); line-height:1.5; max-width:44ch; color:#2A2C31; margin:0 0 26px}
@media(max-width:959px){.fin-lede{margin-inline:auto}}
.fin-list{list-style:none; margin:0; padding:0; border-top:2px solid var(--ink)}
.fin-list li{padding:15px 0; border-bottom:1px solid rgba(10,10,12,.16)}
.fin-list b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:20px; letter-spacing:.015em; margin-bottom:3px}
.fin-list span{display:block; font-size:14.5px; color:#3A3D44; line-height:1.5}
.fin-fine{grid-column:1/-1; margin:0; font-size:13px; color:#55585F; line-height:1.5}
.btn-dark{background:var(--ink); color:#fff}
.btn-dark:hover{background:#26282E; transform:translateY(-2px)}

/* ---- faq / location ---- */
.faq-sec{background:var(--steel)}
.faq-more{text-align:center; margin:26px 0 0}
.faq-more a{font-family:var(--f-display); font-weight:700; font-size:11.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--accent); border-bottom:1px solid rgba(41,182,232,.4); padding-bottom:6px}
.faq-more a:hover{color:#fff; border-bottom-color:#fff}
.loc{background:var(--ink)}
.map,.storefront{border:0}

/* ---- closing band: their line, in their hand ---- */
.band h2{font-size:clamp(48px,7.4vw,100px); line-height:.9; max-width:none}
.band h2 .mk{
  display:block; font-family:var(--marker); text-transform:none; font-size:.66em;
  letter-spacing:0; color:var(--accent); line-height:1.1; transform:rotate(-2.5deg); margin-top:.02em;
}
.band .eyebrow{margin-bottom:24px}
/* centered heads keep both wings on desktop too */
@media(min-width:900px){
  .sec-head.is-center .eyebrow,.band .eyebrow{justify-content:center; text-align:center}
  .sec-head.is-center .eyebrow::before,.band .eyebrow::before{display:block}
}
.band .eyebrow{white-space:nowrap}
@media(max-width:560px){.band .eyebrow{white-space:normal}}
/* phones: the plate is a compact price tag (figure left, three short lines right)
   so the CTA lands inside the first screen instead of under a 190px blue block.
   The "next class" line rides inline; the class-name sub-line is desktop only. */
@media(max-width:640px){
  .hero-sub{font-size:16px; line-height:1.5; max-width:34ch; margin-inline:auto}
  .plate{
    display:grid; grid-template-columns:auto minmax(0,1fr); gap:0 16px; width:100%; text-align:left; align-items:center;
    padding:13px 16px 12px 15px; transform:skewX(-4deg); margin-top:22px;
  }
  .plate>*{transform:skewX(4deg)}
  .hero-in{padding-top:116px}
  .plate{margin-top:18px}
  .plate-p{grid-row:1/3; font-size:44px; line-height:.9; margin:0}
  .plate-k{padding-top:0; font-size:9.5px; letter-spacing:.13em; align-self:end; line-height:1.3}
  .plate-s{font-size:12px; line-height:1.35; align-self:start; margin-top:3px}
  .plate-s b{display:inline; font-family:var(--f-display); font-weight:700; text-transform:none; font-size:12px; letter-spacing:0; margin:0}
  .plate-s b::before{content:" · "}
  .plate-s i{display:none}
  .plate-fin{margin-top:10px; padding-top:9px; font-size:11.5px; gap:8px}
  .plate-fin em{font-size:20px}
  .hero-cta{margin-top:18px}
}
/* phones: centered CTA under the Find Us list, centered footer, bigger menu buttons */
@media(max-width:959px){
  .loc-grid .btn{display:flex; width:100%; max-width:360px; margin-inline:auto}
}
@media(max-width:719px){
  .foot{text-align:center}
  .foot img.fl{display:block; margin-inline:auto}
  .foot p{margin-inline:auto}
  .foot .foot-h{margin-inline:auto; max-width:none}   /* pages.css sets margin:0 0 16px on it, which would pin the 40ch box left */
  .socials{justify-content:center}
  .foot ul{justify-items:center}
  .foot-base{flex-direction:column; align-items:center; gap:8px; text-align:center}
}
.mnav-cta .btn{font-size:18px; padding:21px 20px; letter-spacing:.06em}
.mnav-cta .btn svg{width:19px; height:19px}
/* 3-up strip on phones: name only, the credential line would wrap to three */
@media(max-width:759px){
  .gw-strip figcaption{font-size:13px; padding:24px 8px 8px; letter-spacing:.02em}
  .gw-strip figcaption small{display:none}
}
@media(max-width:560px){
  .gw-marks{flex-direction:column; align-items:flex-start; gap:10px; margin-top:22px}
  .band .eyebrow{font-size:10px; letter-spacing:.16em}
}
/* the graduate panel floats above the hero's bottom edge instead of sitting on it,
   so the next section's diagonal never slices through the photo's fade */
.hero-fig{margin-bottom:36px}
@media(min-width:900px){
  .hero-fig{margin-bottom:clamp(48px,5.6vw,84px)}
  .hero-copy{padding-bottom:clamp(64px,7.4vw,108px)}
  .hero-fig q{top:22px}
}
.hero-photo figcaption{
  padding:62px 22px 20px;
  background:linear-gradient(180deg,transparent 0%,rgba(10,10,12,.5) 34%,rgba(10,10,12,.97) 100%);
}
/* subject sits at 39% 12% of the frame; keep him centred whatever the crop */
.hero-photo img{object-position:50% 12%}
/* phones: the quote sits centred above the photo, the name plate centres too */
@media(max-width:899px){
  .hero-fig{display:flex; flex-direction:column; align-items:center}
  .hero-fig q{
    position:static; order:-1; display:block; margin:0 auto 14px; max-width:96%;
    text-align:center; transform:skewX(-4deg);
  }
  .hero-photo{width:100%}
  .hero-photo figcaption{text-align:center}
}
/* body headlines a notch bigger, more so on phones */
.h-sec{font-size:clamp(40px,6vw,70px)}
/* grad-strip captions: the lighter label face at a readable size; Anton crowded at this scale */
.gw-strip figcaption{
  font-family:var(--f-display); font-weight:600; font-size:14px; letter-spacing:.08em;
  line-height:1.15; padding:38px 12px 12px; text-shadow:0 1px 10px rgba(0,0,0,.6);
}
.gw-strip figcaption small{font-size:9px; font-weight:700; letter-spacing:.16em; margin-top:5px}
@media(max-width:759px){
  .gw-strip figcaption{font-size:15px; letter-spacing:.06em; padding:30px 10px 10px}
}
/* four-line offer headline: pull the scale in a touch so the CTAs stay above the fold at 900px */
@media(min-width:900px){
  .hero h1{font-size:clamp(44px,5.9vw,80px)}
  .hero-copy{padding-bottom:clamp(44px,5.4vw,76px)}
  .hero-sub{margin-top:18px}
  .plate{margin-top:24px}
}
@media(min-width:900px){.hero-in{padding-top:148px}}
/* hero graduates rotate: slides stack, JS holds the container at the tallest slide */
.hero-fig{position:relative; cursor:pointer}
/* photo, name and quote fade as one: the slide's own opacity carries all three;
   hidden slides also drop out of the tab order so their instructor links can't be focused */
.hero-slide{position:absolute; inset:0 0 auto 0; opacity:0; visibility:hidden; pointer-events:none; transition:opacity .35s ease, visibility 0s linear .35s}
/* the first slide stays in flow so the panel has its height before JS measures it (was a 0.13 CLS on desktop) */
.hero-slide:first-child{position:relative}
.hero-slide.on{opacity:1; visibility:visible; pointer-events:auto; transition:opacity .35s ease, visibility 0s}
.hero-slide .hero-photo{width:100%}
@media(max-width:899px){
  .hero-slide{display:flex; flex-direction:column; align-items:center}
  .hero-slide q{position:static; order:-1; display:block; margin:0 auto 14px; max-width:96%; text-align:center; transform:skewX(-4deg)}
}
@media(prefers-reduced-motion:reduce){.hero-slide{transition:none}}

/* ---- home #schedule band: next start dates per format, deep-linked into /book/.
   The booking flow itself lives on /book/ (build.py), not in a widget here. ---- */
.launch{display:grid; gap:14px; align-items:start}
@media(min-width:1000px){.launch{grid-template-columns:minmax(0,1.45fr) minmax(0,1fr)} .ln-group:first-child{grid-row:1/3}}
.ln-group{border:1px solid var(--edge-2); background:var(--ink)}
.ln-gh{display:flex; align-items:baseline; gap:14px; padding:20px 24px; border-bottom:1px solid var(--edge-2); background:var(--steel-2)}
.ln-gh b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:clamp(24px,2.4vw,30px); letter-spacing:.012em; line-height:1}
.ln-gh em{font-style:normal; font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-size:18px; color:var(--accent)}
.ln-gh a{margin-left:auto; font-family:var(--f-display); font-size:11.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--accent); white-space:nowrap; transition:color .16s}
.ln-gh a:hover{color:#fff}
.ln-row{display:grid; grid-template-columns:minmax(0,250px) minmax(0,1fr); align-items:center; gap:12px 22px; padding:18px 24px}
.ln-row+.ln-row{border-top:1px solid var(--edge)}
/* format labels set like the section's "Book Online" eyebrow (same face, weight
   and tracking, in white) so the row reads as a tag, not a third headline size */
.ln-row b{display:block; font-family:var(--f-display); font-weight:700; text-transform:uppercase; font-size:13px; letter-spacing:.18em; line-height:1.35; color:#fff}
.ln-row small{display:block; font-size:13.5px; color:var(--muted); line-height:1.45; margin-top:4px}
.ln-dates{display:flex; gap:8px; overflow-x:auto; scrollbar-width:none; -webkit-overflow-scrolling:touch}
.ln-dates::-webkit-scrollbar{display:none}
.ln-date{flex:none; padding:13px 16px; border:1px solid var(--edge-2); font-family:var(--f-fig); font-stretch:115%; font-weight:600; font-variant-numeric:tabular-nums; font-size:15px; white-space:nowrap; color:var(--text); transition:.16s}
.ln-date:hover{border-color:var(--accent); color:#fff; background:rgba(41,182,232,.08)}
/* desktop: the swipe strip clipped the 3rd/4th date at the column edge. Label sits
   above a fixed grid of equal chips instead: 4 across in the wide Advanced Rigger
   group, 3 across in the two narrow groups (their 4th date is dropped). */
@media(min-width:1000px){
  .ln-row{grid-template-columns:1fr; gap:12px; align-items:start}
  .ln-dates{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:8px; overflow:visible}
  .ln-date{flex:auto; min-width:0; text-align:center; padding:12px 6px; font-size:14.5px}
  .ln-group:not(:first-child) .ln-dates{grid-template-columns:repeat(3,minmax(0,1fr))}
  .ln-group:not(:first-child) .ln-date:nth-child(n+4){display:none}
}
@media(min-width:1000px) and (max-width:1199px){.ln-date{font-size:13px; padding:12px 4px}}  /* "Wed, Sep 2" in a 91px chip */
@media(max-width:640px){
  .ln-gh{padding:16px 16px}
  .ln-gh b{font-size:23px}
  .ln-gh a span{display:none}
  .ln-row{grid-template-columns:1fr; gap:10px; padding:16px 16px}
  .ln-row b{font-size:12px; letter-spacing:.16em}
  .ln-dates{margin-inline:-16px; padding-inline:16px}
  .ln-date{padding:13px 15px; font-size:15px}
}

/* ---- instructor names inside student reviews link to that instructor's page ---- */
a.iname{color:inherit; text-decoration:underline; text-decoration-thickness:2px; text-underline-offset:3px; text-decoration-color:var(--accent); transition:color .18s ease, text-decoration-color .18s ease}
a.iname:hover{color:var(--accent); text-decoration-color:currentColor}
.hero-fig q a.iname, .rv-panel.blue a.iname{text-decoration-color:rgba(4,22,31,.5)}
.hero-fig q a.iname:hover, .rv-panel.blue a.iname:hover{color:#fff; text-decoration-color:#fff}
.rv-panel.ink a.iname{text-decoration-color:rgba(41,182,232,.45)}
.rv-panel.ink a.iname:hover{color:#fff; text-decoration-color:#fff}

/* ---- this week's special (fed by the Weekly Updates sheet; injected by site.js
        right after the hero, so it's the first thing under the fold) ---- */
/* the section that follows pulls itself up 57.6px with a diagonal clip (the
   site's seam device), so the band carries that much extra ink below its
   content and lets the diagonal slice through the empty part */
.spx{background:linear-gradient(180deg,var(--steel),var(--ink)); border-top:1px solid rgba(41,182,232,.32); padding-bottom:58px; animation:spxin .5s ease both}
.spx-in{display:flex; align-items:center; justify-content:center; gap:12px 22px; flex-wrap:wrap; padding-block:16px; text-align:center}
.spx-k{font-family:var(--f-display); font-weight:700; text-transform:uppercase; font-size:11.5px; letter-spacing:.22em; color:var(--accent); white-space:nowrap; display:inline-flex; align-items:center; gap:10px}
.spx-k::before{content:""; width:22px; height:1px; background:var(--accent); opacity:.7}
.spx-t{font-size:16px; line-height:1.45; color:var(--text); max-width:62ch}
.spx-cta{font-family:var(--f-display); font-weight:700; font-size:13.5px; letter-spacing:.04em; color:var(--accent); text-decoration:none; white-space:nowrap; border-bottom:2px solid rgba(41,182,232,.45); padding-bottom:1px; transition:color .18s ease, border-color .18s ease}
.spx-cta:hover{color:var(--accent-2); border-color:currentColor}
@keyframes spxin{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.spx{animation:none}}
@media(max-width:640px){
  .spx-in{padding-block:14px; gap:8px 16px}
  .spx-t{font-size:15px}
}

/* ============================================================
   PAGES — components for the generated inner pages (build.py)
   and the mobile menu, which the home page shares.
   ============================================================ */

/* ---- mobile nav ---- */
.nav-burger{display:none; width:44px; height:44px; flex-direction:column; justify-content:center; gap:5px; align-items:center; border-radius:var(--r)}
.nav-burger span{display:block; width:22px; height:2px; background:#fff; transition:transform .25s ease, opacity .2s}
@media(max-width:999px){.nav-burger{display:flex}}
body.mnav-open .nav-burger span:nth-child(1){transform:translateY(7px) rotate(45deg)}
body.mnav-open .nav-burger span:nth-child(2){opacity:0}
body.mnav-open .nav-burger span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
/* .mnav lives INSIDE header.nav, so these three only stack against each other:
   the sheet (1), the opaque lid that hides rows scrolling past the top (2), and
   the logo + close button row (3), which has to stay on top or the menu can't
   be dismissed. */
.nav-in{position:relative; z-index:3}
/* The open menu is a solid ink sheet that drops out from under a solid header bar.
   It used to be a blurred translucent overlay fading in while the header cross-faded
   to ink on its own timer: two surfaces, two timings, one seam at the logo, and a
   full-screen backdrop-filter animating on a phone GPU (the stutter). Now: the
   header snaps solid with a hairline the instant the menu opens, the sheet starts
   exactly below the bar (whichever height the bar is in) and slides down 12px. */
.mnav{
  position:fixed; inset:0; z-index:1; display:none; overflow:auto;
  /* plain ink sheet; the hairline at the bar's edge belongs to the lid below,
     which is opaque and does not scroll with the menu */
  background:var(--ink);
  padding-top:calc(110px - 22px * var(--navp) + 6px); -webkit-overflow-scrolling:touch;
}
@keyframes mnavIn{from{opacity:0; transform:translateY(-12px)}to{opacity:1; transform:none}}
body.mnav-open .mnav{display:block; animation:mnavIn .28s cubic-bezier(.2,.7,.2,1) both}
@media(prefers-reduced-motion:reduce){body.mnav-open .mnav{animation:none}}
body.mnav-open{overflow:hidden}
body.mnav-open .nav{z-index:80}   /* the sheet (z-index:1) already covers the glass (z-index:0) */
/* The bar is an opaque lid while the menu is open. Without it the sheet's
   padding-top only sets the RESTING position of the first row: scroll the menu
   and every row travels up through the bar, colliding with the logo and the
   close button (rows appeared to float over the logo). The lid is painted
   between the sheet and the logo row, so rows now disappear cleanly under it.
   Height comes from .nav itself, so it tracks the scroll-driven bar height. */
body.mnav-open .nav::after{
  content:""; position:absolute; inset:0; z-index:2; pointer-events:none;
  background:var(--ink); border-bottom:1px solid var(--edge);
}
.mnav-in{padding:0 var(--pad) 40px; max-width:560px; margin-inline:auto}
/* rows: top-level links, the two accordion triggers (Courses / Academy) and the links inside them */
.mnav-in>a,.macc-t,.macc-p a{display:grid; grid-template-columns:1fr auto; align-items:center; gap:2px 12px; padding:14px 4px; border-bottom:1px solid var(--edge); color:inherit}
.mnav-in>a b,.macc-t b,.macc-p a b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:21px; letter-spacing:.012em; line-height:1.05; text-align:left}
.mnav-in>a span,.macc-t span,.macc-p a span{grid-column:1; font-size:13px; color:var(--muted-2); line-height:1.4; text-align:left}
.mnav-in>a em,.macc-p a em{grid-column:2; grid-row:1/3; font-style:normal; font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-size:14px; color:var(--accent)}
.macc-t{appearance:none; -webkit-appearance:none; width:100%; background:none; border:0; border-bottom:1px solid var(--edge); border-radius:0; font:inherit; cursor:pointer; -webkit-tap-highlight-color:transparent}
.macc-t svg{grid-column:2; grid-row:1/3; width:18px; height:18px; color:var(--accent); transition:transform .25s ease}
.macc.open .macc-t svg{transform:rotate(180deg)}
.macc-p{display:none; margin:0 0 4px 6px; padding-left:16px; border-left:2px solid rgba(41,182,232,.35)}
.macc.open .macc-p{display:block; animation:fade .2s ease}
.macc-p a{padding:12px 4px}
.macc-p a b{font-size:18px}
.mnav-cta{display:grid; gap:10px; margin-top:28px}
.nm-h{margin:8px 0 2px; padding:12px 13px 6px; border-top:1px solid var(--edge); font-family:var(--f-display); font-weight:700; font-size:10px; letter-spacing:.22em; text-transform:uppercase; color:var(--accent)}
.nm-all+.nm-all{margin-top:0}
.nm-narrow{width:330px}
.nm-narrow .nm-item{grid-template-columns:24px minmax(0,1fr)}
.nm-narrow .nm-p{display:none}
@media(max-width:999px){.nav-cta .btn{display:none} .nav-cta{margin-left:auto}}
/* mobile-only line break: lets a headline stack on purpose instead of wrapping mid-phrase */
.mbr{display:none}
@media(max-width:639px){.mbr{display:inline}}
/* hero flag chips: two columns at phone width, so tighten the caps to keep each on one line */
@media(max-width:480px){.flag{font-size:9.5px; letter-spacing:.1em; gap:8px; padding-inline:10px}}
@media(min-width:1000px){.mnav{display:none!important}}

/* ---- page hero ---- */
.phero{position:relative; min-height:clamp(560px,78svh,820px); display:flex; align-items:flex-end; overflow:hidden; background:var(--ink)}
.phero-bg{position:absolute; inset:0; z-index:0}
.phero-bg img{width:100%; height:100%; object-fit:cover; object-position:50% 40%; transform:scale(1.1); animation:zoomout 30s cubic-bezier(.2,.5,.3,1) forwards}
@media(prefers-reduced-motion:reduce){.phero-bg img{animation:none; transform:none}}
.phero-bg::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg,rgba(10,10,12,.62) 0%,rgba(10,10,12,.5) 38%,rgba(10,10,12,.9) 72%,var(--ink) 100%)}
.phero-in{position:relative; z-index:2; width:100%; padding-block:150px 64px; text-align:center}
@media(min-width:900px){.phero-in{text-align:left; padding-block:180px 84px}}
.phero h1{font-size:clamp(46px,11.5vw,92px); line-height:.92; margin-inline:auto}
/* phone width: the hero eyebrows are long enough that the chevron rules squeeze them onto two lines */
@media(max-width:559px){
  .hero .eyebrow::before,.hero .eyebrow::after,.phero .eyebrow::before,.phero .eyebrow::after,.band .eyebrow::before,.band .eyebrow::after,.person-copy .eyebrow::before,.person-copy .eyebrow::after{display:none}
  .hero .eyebrow,.phero .eyebrow,.band .eyebrow,.person-copy .eyebrow{letter-spacing:.2em}
}
@media(min-width:900px){.phero h1{margin-inline:0; max-width:18ch}}
.phero h1 em{font-style:normal; color:var(--accent); display:block}
.phero-craft h1{font-size:clamp(36px,8.6vw,76px); max-width:none}
@media(min-width:900px){.phero-craft h1{max-width:18ch}}
.phero .lede{margin:22px auto 0; max-width:58ch}
@media(min-width:900px){.phero .lede{margin-inline:0}}
.phero .eyebrow{justify-content:center}
@media(min-width:900px){.phero .eyebrow{justify-content:flex-start}}
.crumbs{display:flex; flex-wrap:wrap; justify-content:center; gap:8px; margin-bottom:22px; font-family:var(--f-display); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--muted-2); font-weight:700}
@media(min-width:900px){.crumbs{justify-content:flex-start}}
.crumbs a:hover{color:#fff}
.crumbs i{font-style:normal; color:var(--edge-3)}
.crumbs span{color:var(--accent)}

/* ---- spec bar (under a page hero) ---- */
.specbar{background:var(--steel); border-top:1px solid var(--edge); border-bottom:1px solid var(--edge)}
.specbar-in{display:grid; grid-template-columns:repeat(2,minmax(0,1fr))}
@media(min-width:900px){.specbar-in{grid-template-columns:repeat(4,minmax(0,1fr))}}
.spec{padding:20px 14px; border-left:1px solid var(--edge); text-align:center}
.spec:first-child{border-left:0}
@media(max-width:899px){.spec:nth-child(3){border-left:0} .spec:nth-child(-n+2){border-bottom:1px solid var(--edge)}}
/* phone: one fact per row so no value ever breaks mid-phrase */
@media(max-width:559px){
  .specbar-in{grid-template-columns:1fr}
  .spec{display:block; text-align:left; padding:13px 0; border:0; border-bottom:1px solid var(--edge)}
  .spec:last-child{border-bottom:0}
  .spec span{margin:0 0 5px}
  .spec b{font-size:15px}
}
.spec span{display:block; font-family:var(--f-display); font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--muted-2); font-weight:700; margin-bottom:8px}
.spec b{display:block; font-family:var(--f-fig); font-stretch:115%; font-weight:600; font-size:15.5px; color:#fff; letter-spacing:.01em; line-height:1.3}
.spec b .was,.cta-price .was,.was{font-family:var(--f-fig); font-weight:500; color:var(--muted-2); text-decoration:line-through; font-size:.78em; margin-left:6px}

/* ---- content layouts ---- */
.section.alt{background:var(--steel); border-top:1px solid var(--edge); border-bottom:1px solid var(--edge)}
.split{display:grid; gap:var(--gut); grid-template-columns:1fr; align-items:start}
@media(min-width:960px){.split{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}}
.split .sec-head{margin-bottom:26px}
.prose .lede{margin:0 0 18px}
.prose p{color:var(--muted); font-size:16.5px; line-height:1.7}
.h-sub{font-size:clamp(22px,2.6vw,28px); margin:30px 0 14px}
.checks{list-style:none; margin:0; padding:0; display:grid; gap:11px}
.checks li{display:flex; gap:12px; align-items:flex-start; font-size:15.5px; color:var(--text); line-height:1.5}
.checks svg{width:18px; height:18px; flex:none; color:var(--accent); margin-top:3px}
.center-note{text-align:center; color:var(--muted); font-size:15px; margin-top:34px}
.more{display:inline-flex; align-items:center; gap:8px; font-family:var(--f-display); font-weight:700; font-size:11.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted); border-bottom:1px solid var(--edge-2); padding-bottom:4px; transition:.18s}
.more svg{width:14px; height:14px; color:var(--accent); transition:transform .2s}
.more:hover{color:#fff; border-bottom-color:var(--accent)}
.more:hover svg{transform:translateX(4px)}

/* sticky CTA card */
.cta-box{position:sticky; top:96px; padding:28px; border:1px solid var(--edge-2); border-top:2px solid var(--accent); border-radius:var(--r); background:var(--steel); display:grid; gap:12px}
.cta-box b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:22px; letter-spacing:.012em; line-height:1.05}
.cta-box p{font-size:14px; color:var(--muted); line-height:1.55; margin:0}
.cta-price{font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-size:34px; color:var(--accent); line-height:1}
.cta-box .btn{margin-top:4px}
@media(max-width:959px){.cta-box{position:static}}

/* format cards */
.fmt-grid{display:grid; gap:14px; grid-template-columns:1fr}
@media(min-width:760px){.fmt-grid{grid-template-columns:repeat(3,1fr)}}
.fmt-card{padding:26px; border:1px solid var(--edge); border-radius:var(--r); background:var(--ink); display:flex; flex-direction:column; gap:8px}
.fmt-card .idx{font-size:16px}
.fmt-card b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:22px; letter-spacing:.012em; line-height:1.05}
.fmt-when{font-family:var(--f-fig); font-stretch:115%; font-weight:600; font-size:13.5px; color:#fff}
.fmt-card p{font-size:14.5px; color:var(--muted); margin:0}
.fmt-card .more{margin-top:auto; padding-top:12px; align-self:flex-start}
.who-grid{display:grid; gap:14px; grid-template-columns:1fr}
@media(min-width:640px){.who-grid{grid-template-columns:repeat(2,1fr)}}
.who-card{padding:26px; border:1px solid var(--edge); border-radius:var(--r); background:var(--steel)}
.who-card b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:21px; letter-spacing:.012em; margin-bottom:9px}
.who-card p{font-size:14.5px; color:var(--muted); margin:0; line-height:1.6}

/* craft lists */
.cgroups{display:grid; gap:26px 32px; grid-template-columns:1fr}
@media(min-width:700px){.cgroups{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1100px){.cgroups{grid-template-columns:repeat(4,1fr)}}
.cgroup h3{font-size:19px; margin-bottom:12px; padding-bottom:10px; border-bottom:1px solid var(--edge-2)}
.craft-list{list-style:none; margin:0; padding:0; display:grid; gap:2px}
.craft-list a{display:flex; align-items:center; gap:9px; padding:9px 6px; border-radius:2px; font-size:14.5px; color:var(--muted); transition:.16s}
.craft-list a svg{width:13px; height:13px; color:var(--accent); flex:none; transition:transform .2s}
.craft-list a:hover,.craft-list a[aria-current]{background:rgba(41,182,232,.08); color:#fff}
.craft-list a:hover svg{transform:translateX(3px)}

/* team cards as links */
a.person{display:block; color:inherit}
.person-more{display:inline-flex; align-items:center; gap:7px; margin-top:14px; font-family:var(--f-display); font-weight:700; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--accent)}
.person-more svg{width:13px; height:13px}
.person-hero{padding:132px 0 var(--sec); background:var(--steel); border-bottom:1px solid var(--edge)}
@media(min-width:900px){.person-hero{padding-top:170px}}
.person-hero-in{display:grid; gap:var(--gut); grid-template-columns:1fr; align-items:center}
@media(min-width:900px){.person-hero-in{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr)}}
.person-portrait{aspect-ratio:4/5; max-width:420px; margin-inline:auto; width:100%; border:1px solid var(--edge-2); border-radius:var(--r); overflow:hidden}
.person-portrait img{width:100%; height:100%; object-fit:cover}
.person-copy{text-align:center}
@media(min-width:900px){.person-copy{text-align:left} .person-copy .eyebrow{justify-content:flex-start} .person-copy .crumbs{justify-content:flex-start}}
.person-copy h1{font-size:clamp(46px,11vw,84px); line-height:.92; margin-bottom:22px}
.person-copy h1 em{font-style:normal; color:var(--accent); display:block}
.person-copy .lede{margin:0 0 14px}
.person-copy .craft-list{display:flex; flex-wrap:wrap; gap:6px 14px; justify-content:center}
@media(min-width:900px){.person-copy .craft-list{justify-content:flex-start}}

/* reviews page: graduate photo panels above the text grid; centred orphan row */
.rev3 + .rev-grid{margin-top:clamp(28px,4vw,48px)}
@media(min-width:820px){
  .rev3[data-orphan="2"]{grid-template-columns:repeat(6,minmax(0,1fr))}
  .rev3[data-orphan="2"] .rv-panel{grid-column:span 2}
  .rev3[data-orphan="2"] .rv-panel:nth-last-child(2){grid-column:2/span 2}
  .rev3[data-orphan="2"] .rv-panel:nth-last-child(1){grid-column:4/span 2}
}
/* reviews: stars + centred orphan row */
.stars{display:flex; gap:2px; margin-bottom:12px; color:#F5B301}
.stars svg{width:15px; height:15px}
.rev-who svg{color:var(--muted)}
@media(min-width:880px){
  .rev-grid{grid-template-columns:repeat(6,1fr)}
  .rev-grid .rev{grid-column:span 2}
  .rev-grid[data-orphan="2"] .rev:nth-last-child(2){grid-column:2/span 2}
  .rev-grid[data-orphan="2"] .rev:nth-last-child(1){grid-column:4/span 2}
  .rev-grid[data-orphan="1"] .rev:nth-last-child(1){grid-column:3/span 2}
}

/* schedule page */
.sched-list{display:grid; gap:34px}
.sched-head{display:flex; align-items:center; gap:16px; margin-bottom:16px}
.sched-head .idx{font-size:18px}
.sched-head b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:clamp(21px,2.6vw,26px); letter-spacing:.012em; line-height:1.05}
.sched-head span{font-size:13.5px; color:var(--muted)}
a.date{color:inherit}

/* financing */
.fin-cards-3{grid-template-columns:1fr}
@media(min-width:640px){.fin-cards-3{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1000px){.fin-cards-3{grid-template-columns:repeat(3,1fr)} .fin-cards-3 .fin-card:nth-last-child(2):nth-child(3n+1){grid-column:auto}}
.fin-tag{display:inline-block; margin-top:14px; font-style:normal; font-family:var(--f-display); font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--accent); font-weight:700}

/* contact */
.contact-grid{display:grid; gap:var(--gut); grid-template-columns:1fr}
@media(min-width:960px){.contact-grid{grid-template-columns:.9fr 1.1fr}}
.contact-links{display:flex; flex-wrap:wrap; gap:10px; margin-top:24px}
.contact-links .btn svg{width:15px; height:15px}
.cform{padding:28px; border:1px solid var(--edge-2); border-top:2px solid var(--accent); border-radius:var(--r); background:var(--ink)}
.cform .btn{margin-top:8px}

/* 404 + misc */
body.sub .callbar{display:none}
@media(max-width:900px){body.sub .callbar{display:flex}}
/* a11y: footer column labels are not headings; contrast bumps on the smallest labels */
.foot .foot-h{font-family:var(--f-display); font-weight:700; text-transform:uppercase; letter-spacing:.2em; font-size:11px; color:var(--muted); margin:0 0 16px}
.foot p{color:var(--muted)}
.spec span,.was,.crumbs,.foot-base{color:var(--muted)}
.foot-grid-4{grid-template-columns:1fr}
@media(min-width:720px){.foot-grid-4{grid-template-columns:1.6fr 1fr 1fr 1.2fr}}

/* ---- next start dates strip (course pages, under the specbar) ---- */
.nextdates{background:var(--ink); border-bottom:1px solid var(--edge)}
.nextdates-in{display:flex; flex-wrap:wrap; align-items:center; gap:14px 30px; padding-block:18px}
.nd-h{margin:0; font-family:var(--f-display); font-weight:700; font-size:10.5px; letter-spacing:.2em; text-transform:uppercase; color:var(--accent); white-space:nowrap}
.nd-row{display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px}
.nd-row b{font-family:var(--f-fig); font-stretch:115%; font-weight:600; font-size:13.5px; color:#fff; white-space:nowrap}
.nd-dates{display:flex; flex-wrap:wrap; gap:6px}
.nd-date{display:inline-block; padding:7px 11px; border:1px solid var(--edge-2); border-radius:2px; font-family:var(--f-fig); font-stretch:115%; font-weight:600; font-variant-numeric:tabular-nums; font-size:13px; color:var(--text); white-space:nowrap; transition:.16s}
.nd-date:hover{border-color:var(--accent); color:#fff}
.nd-paused{margin:0; font-size:14px; line-height:1.5; color:var(--text)}
.nd-paused a{color:var(--accent); font-weight:600; white-space:nowrap}
.nd-all{margin-left:auto}
@media(max-width:899px){.nextdates-in{display:grid; gap:14px} .nd-all{margin-left:0; justify-self:start}}

/* ---- home "Why Train Here" cards (index.html) ---- */
.why-grid{display:grid; gap:14px; grid-template-columns:1fr}
@media(min-width:640px){.why-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1000px){.why-grid{grid-template-columns:repeat(3,1fr)}}
.why-grid .who-card b{font-size:19px}
@media(max-width:399px){.why-grid .who-card b{font-size:17.5px; letter-spacing:.005em}}

/* ---- employers: checkbox group + optional stat row ---- */
.chkgroup{border:0; padding:0; margin:0 0 15px; min-width:0}
.chkgroup legend{padding:0; display:block; width:100%}
.chkgroup legend span{display:block; font-family:var(--f-display); font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; font-weight:700; color:var(--muted-2); margin-bottom:8px}
.chkgroup-in{display:grid; gap:2px 14px; grid-template-columns:repeat(2,minmax(0,1fr))}
.chkgroup .chk{display:flex; gap:10px; align-items:center; font-size:15px; color:var(--text); padding:8px 0; cursor:pointer}
.chkgroup .chk input{flex:none; width:18px; height:18px; accent-color:var(--accent); margin:0}
.stat-row{display:grid; gap:14px; grid-template-columns:repeat(3,minmax(0,1fr)); margin-top:30px}
.stat{padding:20px; border:1px solid var(--edge); border-radius:var(--r); background:var(--steel); text-align:center}
.stat b{display:block; font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-size:32px; color:var(--accent); line-height:1}
.stat span{display:block; font-size:13px; color:var(--muted); margin-top:8px}
.foot-lang{display:inline-block; margin-top:20px; font-family:var(--f-display); font-weight:700; font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted); border-bottom:1px solid var(--edge-2); padding-bottom:4px}
.foot-lang:hover{color:var(--accent); border-bottom-color:var(--accent)}

/* ---- guides ---- */
.ghead{padding:132px 0 clamp(36px,5vw,56px); background:var(--steel); border-bottom:1px solid var(--edge); text-align:center}
.ghead-in{max-width:860px; margin-inline:auto}
.ghead .crumbs{justify-content:center}
.ghead .eyebrow{justify-content:center}
.ghead h1{font-size:clamp(31px,6vw,58px); line-height:1.02; margin:0 auto}
.ghead .lede{margin:20px auto 0; max-width:60ch}
.gmeta{margin:18px 0 0; font-family:var(--f-display); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted-2); font-weight:700}
@media(min-width:900px){.ghead{padding-top:170px}}
.guide-wrap{max-width:780px; margin-inline:auto}
.guide-body p,.guide-body li{color:var(--muted); font-size:17px; line-height:1.72}
.guide-body p{margin:0 0 20px}
.guide-body h2{font-size:clamp(24px,3vw,32px); line-height:1.05; margin:38px 0 14px}
.guide-body ul{margin:0 0 22px; padding-left:22px; display:grid; gap:8px}
.guide-body a:not(.btn){color:var(--accent)}
.guide-body strong{color:#DCDAD6}
.guide-cta{margin:34px 0; padding:26px; border:1px solid var(--edge-2); border-left:3px solid var(--accent); border-radius:var(--r); background:var(--steel)}
.guide-cta b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:22px; margin-bottom:8px; letter-spacing:.012em}
.guide-cta p{margin:0 0 16px; font-size:15px; line-height:1.6}
.guide-cta .hero-cta{justify-content:flex-start; margin:0}
.guide-grid{display:grid; gap:14px; grid-template-columns:1fr}
@media(min-width:760px){.guide-grid{grid-template-columns:repeat(3,1fr)}}
a.guide-card{display:flex; flex-direction:column; gap:10px; padding:26px; border:1px solid var(--edge); border-radius:var(--r); background:var(--steel); color:inherit; transition:border-color .18s}
a.guide-card:hover{border-color:var(--accent)}
.guide-card .idx{font-size:16px}
.guide-card b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:21px; line-height:1.05; letter-spacing:.012em}
.guide-card p{font-size:14.5px; color:var(--muted); margin:0; line-height:1.6}
.guide-card .person-more{margin-top:auto; padding-top:8px}

/* ---- /book/: the booking page. Steps stack; the finished ones collapse to a
   one-line summary with a Change link, the current one is open, later ones wait. ---- */
.bk-head{padding:124px 0 30px; background:var(--steel); border-bottom:1px solid var(--edge)}
@media(min-width:900px){.bk-head{padding:160px 0 40px}}
.bk-head .crumbs,.bk-head .eyebrow{justify-content:flex-start}
.bk-head .eyebrow::before{display:none}
.bk-head h1{font-size:clamp(42px,9vw,76px); line-height:.94; max-width:none}
.bk-head h1 em{font-style:normal; color:var(--accent); display:block}
.bk-head .lede{margin:18px 0 0; max-width:58ch}
.bk-marks{display:flex; flex-wrap:wrap; gap:8px 22px; margin:22px 0 0; padding:0; list-style:none; font-family:var(--f-display); font-size:11px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--muted)}
.bk-marks li{display:flex; align-items:center; gap:8px}
.bk-marks svg{width:14px; height:14px; color:var(--accent); flex:none}
.bk-main{padding:clamp(26px,4vw,52px) 0 var(--sec)}
.bk-flash{margin:0 0 18px; padding:13px 16px; border-left:3px solid var(--accent); background:rgba(41,182,232,.08); font-size:14.5px; line-height:1.55; color:#D8D6D2}
.bk-flash a{color:var(--accent); font-weight:600}
.bk-retry{max-width:640px; margin:0 auto 8px; padding:30px 28px; border:1px solid var(--edge-2); border-top:2px solid var(--accent); background:var(--steel)}
.bk-retry h2{font-size:28px; margin:0 0 12px}
.bk-retry p{font-size:15.5px; line-height:1.6; color:#D8D6D2; margin:0}
.payamt{display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:0 0 14px}
.payamt-o{padding:12px 8px; border:1px solid var(--edge); border-radius:var(--r); background:var(--ink); color:var(--muted); font-size:14px; font-weight:600; text-align:center; transition:.16s; cursor:pointer}
.payamt-o:hover{border-color:var(--edge-2); color:#fff}
.payamt-o.on{border-color:var(--accent); background:rgba(41,182,232,.1); color:#fff}
.bk-retry-btns{display:grid; grid-template-columns:minmax(0,1fr); gap:12px; margin:22px 0 18px}
.bk-retry-btns .btn{white-space:normal; min-width:0; text-align:center; line-height:1.25}
.bk-retry .bk-retry-foot{font-size:14px; color:#A7A5A0}
.bk-retry-foot a{color:var(--accent); font-weight:600}
.bk-retry-fresh{margin-top:16px; background:none; border:0; padding:0; color:var(--accent); font:inherit; font-size:14px; font-weight:600; text-decoration:underline; text-underline-offset:3px; cursor:pointer}
@media (max-width:600px){ .bk-retry{padding:24px 18px} .bk-retry h2{font-size:24px} }
.bk-grid{display:grid; gap:var(--gut); grid-template-columns:minmax(0,1fr); align-items:start}
@media(min-width:1000px){.bk-grid{grid-template-columns:minmax(0,1fr) 336px}}
.bk-steps{display:grid; gap:10px}
.bk-step{border:1px solid var(--edge); background:var(--steel)}
.bk-step-h{display:grid; grid-template-columns:auto minmax(0,1fr) auto; align-items:center; gap:14px; width:100%; padding:17px 20px; text-align:left; cursor:default}
.bk-step.is-done .bk-step-h{cursor:pointer}
.bk-step.is-done .bk-step-h:hover{background:rgba(255,255,255,.02)}
.bk-step-h .idx{font-size:15px}
.bk-step-h b{display:block; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:clamp(19px,2.2vw,23px); letter-spacing:.012em; line-height:1.05}
.bk-pick{display:none; font-size:13.5px; color:#fff; line-height:1.4; margin-top:3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.bk-change{display:none; font-family:var(--f-display); font-size:10.5px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--accent); white-space:nowrap}
.bk-step.is-done .bk-pick,.bk-step.is-done .bk-change{display:block}
.bk-step.is-done .idx{color:var(--ok)}
.bk-step.is-locked{opacity:.4}
.bk-step.is-open{border-color:var(--edge-2)}
.bk-step-b{display:none; padding:2px 20px 24px; border-top:1px solid var(--edge); animation:fade .3s ease}
.bk-step.is-open .bk-step-b{display:block}
.bk-q{margin:20px 0 16px; font-family:var(--f-display); font-weight:700; font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--muted-2)}
.bk-q span{color:var(--accent); margin-left:8px}
.bk-step .field input,.bk-step .field select,.bk-step .field textarea,.bk-step .summary{background:var(--ink)}
.bk-step .consent{margin-top:6px}
.bk-step .paytabs{margin-bottom:14px}
.bk-step #coLegal{margin:10px 0 0}
@media(max-width:560px){.bk-step-h{padding:14px 14px; gap:12px} .bk-step-b{padding:2px 14px 20px}}
/* certification cards: photo left on phones, photo on top from tablet up */
.bp-grid{display:grid; gap:10px; grid-template-columns:1fr}
@media(min-width:760px){.bp-grid{grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px}}
.bp{display:grid; grid-template-columns:110px minmax(0,1fr); text-align:left; border:1px solid var(--edge); background:var(--ink); overflow:hidden; transition:border-color .18s; padding:0}
@media(min-width:760px){.bp{grid-template-columns:1fr; grid-template-rows:auto 1fr}}
.bp:hover{border-color:rgba(41,182,232,.5)}
.bp.sel{border-color:var(--accent); box-shadow:inset 0 0 0 1px var(--accent)}
.bp-shot{position:relative; overflow:hidden; background:var(--steel-3); min-height:112px}
@media(min-width:760px){.bp-shot{aspect-ratio:16/9; min-height:0}}
.bp-shot img{position:absolute; inset:0; width:100%; height:100%; object-fit:cover}
.bp-shot::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg,transparent 50%,rgba(10,10,12,.55))}
.bp-body{display:flex; flex-direction:column; min-width:0; padding:13px 15px 14px}
.bp b{font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:19px; letter-spacing:.01em; line-height:1.05}
.bp-blurb{display:block; margin-top:5px; font-size:13px; line-height:1.45; color:var(--muted)}
.bp-price{display:flex; flex-wrap:wrap; align-items:baseline; gap:3px 8px; margin-top:auto; padding-top:10px; font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-size:18px; color:var(--accent); line-height:1}
.bp-price .was{margin-left:0}
.bp-price small{font-family:var(--f-display); font-stretch:100%; font-weight:600; font-size:10px; color:var(--muted-2); letter-spacing:.08em; text-transform:uppercase}
.bp-paused{align-self:flex-start; margin:7px 0 0; padding:3px 8px; border:1px solid var(--edge-2); border-radius:2px; font-family:var(--f-display); font-weight:700; font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:var(--accent); line-height:1.3}
@media(max-width:400px){.bp{grid-template-columns:92px minmax(0,1fr)} .bp-shot{min-height:100px} .bp-blurb{display:none} .bp-body{padding:12px 13px}}
/* start dates: a calendar tile per date */
.bd-grid{display:grid; gap:8px; grid-template-columns:repeat(3,minmax(0,1fr))}
@media(min-width:480px){.bd-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(min-width:700px){.bd-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}
@media(min-width:1000px){.bd-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(min-width:1180px){.bd-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}
.bd{display:flex; flex-direction:column; align-items:center; padding:12px 4px; border:1px solid var(--edge); background:var(--ink); text-align:center; transition:.16s}
.bd:hover:not(:disabled){border-color:rgba(41,182,232,.5); transform:translateY(-2px)}
.bd.sel{border-color:var(--accent); background:rgba(41,182,232,.09)}
.bd:disabled{opacity:.32; cursor:not-allowed}
.bd em{font-style:normal; font-family:var(--f-display); font-weight:700; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--muted)}
.bd.sel em{color:var(--accent)}
.bd b{font-family:var(--f-fig); font-stretch:125%; font-weight:700; font-variant-numeric:tabular-nums; font-size:26px; line-height:1; margin:6px 0 3px; color:#fff}
.bd span{font-family:var(--f-display); font-size:11px; font-weight:600; color:var(--muted)}
.bd i{font-style:normal; margin-top:6px; font-family:var(--f-display); font-size:9px; letter-spacing:.12em; text-transform:uppercase; color:var(--muted-2); font-weight:700}
.bd i.left{color:var(--accent)}
/* live seat counts on date chips (home band, course strips): "· 2 left" / "· full" */
.ln-date .left,.nd-date .left{color:var(--accent); font-weight:600}
.ln-date.is-full,.nd-date.is-full{opacity:.38; pointer-events:none; text-decoration:line-through}
.ln-date.is-full .left,.nd-date.is-full .left{text-decoration:none; color:var(--muted-2)}
.bk-note{margin:16px 0 0; font-size:13px; color:var(--muted-2); line-height:1.55}
.bk-note a{color:var(--accent)}
.bk-err{margin:0 0 12px; padding:11px 14px; border-left:3px solid #E86A5A; background:rgba(232,106,90,.09); font-size:14px; color:#F1D7D2}
/* desktop: the running order sticks beside the steps */
.bk-side{display:none}
@media(min-width:1000px){
  .bk-side{display:block; position:sticky; top:96px; border:1px solid var(--edge-2); border-top:2px solid var(--accent); background:var(--steel)}
  .bk-side-shot{position:relative; aspect-ratio:16/9; background:var(--steel-3); overflow:hidden}
  .bk-side-shot img{width:100%; height:100%; object-fit:cover}
  .bk-side-shot::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg,transparent 30%,rgba(10,10,12,.88))}
  .bk-side-shot b{position:absolute; left:18px; right:18px; bottom:14px; z-index:1; font-family:var(--f-head); font-weight:400; text-transform:uppercase; font-size:24px; letter-spacing:.012em; line-height:1.05}
  .bk-side .summary{border:0; background:none; margin:0}
  .bk-side .summary-row{padding:12px 18px}
  .bk-side .summary-row.total{background:var(--steel-3)}
  .bk-side-call{padding:14px 18px; border-top:1px solid var(--edge); font-size:13px; line-height:1.55; color:var(--muted); margin:0}
  .bk-side-call a{color:#fff; font-weight:600; white-space:nowrap}
}
.bk-done{max-width:720px; margin-inline:auto; border:1px solid var(--edge-2); border-top:2px solid var(--ok); background:var(--steel)}
.bk-done .co-success h2{font-size:30px; margin-bottom:12px}

/* ---- desktop cursor ----
   The site's own arrow: the lucide pointer the icon set already comes from, white
   with an ink edge everywhere, accent blue over anything clickable. SVG serves
   Firefox and Chrome; the image-set PNGs (1x/2x) cover Safari (no SVG cursors)
   and keep HiDPI Chrome crisp. Every rule keeps the native cursor as its
   fallback, and phones/tablets never see any of it. Last in the bundle on
   purpose: it has to outrank every component's own cursor:pointer. */
@media (hover:hover) and (pointer:fine){
  html{cursor:url(/img/cur-arrow.svg) 2 2, auto}
  html{cursor:-webkit-image-set(url(/img/cur-arrow.png) 1x, url(/img/cur-arrow@2x.png) 2x) 2 2, auto}
  :is(p, li, dd, dt, td, th, blockquote, figcaption, small, input, textarea){cursor:text}
  :is(a, button, select, label, summary, [role=button], .btn, .macc-t, .faq-q, .hero-fig, .reel-arw, .consent .chk, .chkgroup .chk, .bk-step.is-done .bk-step-h, .reel-frame.needs-tap, input[type=submit], input[type=button], input[type=checkbox], input[type=radio]):not(:disabled),
  :is(a, button, label, summary, [role=button], .btn, .macc-t, .faq-q, .hero-fig, .consent .chk, .chkgroup .chk) *{cursor:url(/img/cur-link.svg) 2 2, pointer}
  :is(a, button, select, label, summary, [role=button], .btn, .macc-t, .faq-q, .hero-fig, .reel-arw, .consent .chk, .chkgroup .chk, .bk-step.is-done .bk-step-h, .reel-frame.needs-tap, input[type=submit], input[type=button], input[type=checkbox], input[type=radio]):not(:disabled),
  :is(a, button, label, summary, [role=button], .btn, .macc-t, .faq-q, .hero-fig, .consent .chk, .chkgroup .chk) *{cursor:-webkit-image-set(url(/img/cur-link.png) 1x, url(/img/cur-link@2x.png) 2x) 2 2, pointer}
  /* booking steps that are not finished yet are not clickable: plain arrow */
  .bk-step:not(.is-done) .bk-step-h, .bk-step:not(.is-done) .bk-step-h *{cursor:inherit}
  /* gallery tiles are role=button (so the link rule catches them); the native
     zoom glass says more than a blue arrow does */
  .gal figure, .gal figure *{cursor:zoom-in !important}
}
