/* ==================================================================
   HIS — Academics / Admissions page

   Layout measurements come from the PDF artboard (445 units wide), so
   positions are in vw to keep the composition identical at any desktop
   width. Below 900px the page reflows into a stacked layout and the
   scroll-drawn line system is switched off.

   Colours follow the HIS admissions design: royal-blue hero, navy and
   gold accents, light grey, white.
   ================================================================== */

:root {
  --ink: #17181c;
  --grey-text: #85868c;
  --navy: #1f2b73;
  --navy-deep: #18225c;
  --gold: #c4921d;
  --gold-soft: #e3b54a;
  --blue: #3346c8;
  --light-grey: #d9d9db;

  --title: clamp(26px, 2.95vw, 48px);
  --body: clamp(13px, 0.98vw, 16px);

  --radius: 20px;          /* one radius for every card, photo and line corner */
  --ph: #cdcdd1;           /* image placeholder on light sections */
  --ph-dark: #7d8197;      /* image placeholder on navy sections */

  --ease-out: cubic-bezier(0.19, 1, 0.22, 1);
  --ease-spring: cubic-bezier(0.34, 1.45, 0.64, 1);
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; }
/* soft snap so the pillars section settles fully into view */
@media (min-width: 901px) { html { scroll-snap-type: y proximity; } }
body {
  font-family: "Raleway", system-ui, sans-serif;
  color: var(--ink);
  background: #fff;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
}
img { display: block; width: 100%; height: 100%; object-fit: cover; }
a { color: inherit; }
button { font: inherit; color: inherit; }
main { position: relative; }

/* ---------- shared type ---------- */
.cap-title {
  font-weight: 400;
  font-size: var(--title);
  line-height: 1.08;
  text-transform: uppercase;
  letter-spacing: 0.01em;
}
.cap-title.light { color: #fff; font-weight: 300; }
.body { font-size: var(--body); line-height: 1.7; color: var(--grey-text); }
.body.light { color: rgba(255, 255, 255, 0.72); }
.body + .body { margin-top: 1.4em; }

/* split-line mask reveal for every section title */
.ln { display: block; overflow: hidden; padding-bottom: 0.06em; }
.ln > span { display: block; transform: translateY(105%); transition: transform 1.1s var(--ease-out); }
.split.in .ln > span { transform: none; }
.split.in .ln:nth-child(2) > span { transition-delay: 0.09s; }
.split.in .ln:nth-child(3) > span { transition-delay: 0.18s; }

.reveal { opacity: 0; transform: translateY(26px); transition: opacity 1s var(--ease-out), transform 1s var(--ease-out); }
.reveal.in { opacity: 1; transform: none; }
.reveal.in + .reveal.in { transition-delay: 0.12s; }

/* content sits above the line layer; backgrounds sit below it */
.hero-title, .intro-copy, .shapes, .pillar, .fhead, .collage, .journey-pin,
.approach-body, .assess-row, .bc-row, .growth-top, .stats, .faq-head, .faq-list, .cta-row,
.f-marquee, .f-grid, .f-bottom {
  z-index: 2;
}
.fhead, .approach-body, .assess-row, .bc-row, .growth-top, .stats, .faq-head, .faq-list, .cta-row,
.f-marquee, .f-grid, .f-bottom { position: relative; }

/* ==================================================================
   LINE SYSTEM — one SVG over the page; paths are generated in JS and
   drawn by scroll position (they undraw when you scroll back up).
   ================================================================== */
.lines {
  position: absolute; left: 0; top: 0;
  z-index: 1; pointer-events: none; overflow: visible;
  display: none;
}
.lines-on .lines { display: block; }
.lines path { fill: none; stroke: url(#lineGrad); stroke-width: 1; stroke-linecap: round; stroke-linejoin: round; }
.lines .tip { fill: url(#lineGrad); transition: opacity 0.3s; }
.lines .tip-halo { fill: none; stroke: url(#lineGrad); stroke-width: 1; opacity: 0.5; }

.end-dot {
  position: absolute; z-index: 3; width: 12px; height: 12px; margin: -6px 0 0 -6px;
  border-radius: 50%; background: var(--gold);
  opacity: 0; scale: 0; transition: opacity 0.4s, scale 0.6s var(--ease-spring);
  display: none;
}
.end-dot::after {
  content: ""; position: absolute; inset: -8px; border-radius: 50%;
  border: 1px solid var(--gold); animation: ping 2.2s var(--ease-out) infinite;
}
@keyframes ping { 0% { transform: scale(0.4); opacity: 1; } 100% { transform: scale(2.2); opacity: 0; } }
.lines-on .end-dot { display: block; }
.end-dot.on { opacity: 1; scale: 1; }
.tip-dot { display: none; }

/* ==================================================================
   NAV + MENU
   ================================================================== */
.nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 60;
  display: flex; justify-content: space-between; align-items: center;
  padding: 26px 3.4vw;
  color: var(--ink);
  transition: color 0.4s, background 0.4s, padding 0.4s;
}
.nav.solid { background: rgba(255,255,255,0.86); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); padding-top: 16px; padding-bottom: 16px; }
.nav.on-dark { color: #fff; background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; }
.brand { font-weight: 600; font-size: 20px; letter-spacing: 0.18em; text-decoration: none; }
.menu-btn { display: grid; grid-template-columns: repeat(2, 7px); gap: 5px; background: none; border: 0; cursor: pointer; padding: 8px; }
.menu-btn span { width: 7px; height: 7px; border-radius: 50%; border: 1.5px solid currentColor; transition: transform 0.4s var(--ease-spring), background 0.3s; }
.menu-btn:hover span:nth-child(1) { transform: translate(-2px,-2px); }
.menu-btn:hover span:nth-child(2) { transform: translate(2px,-2px); }
.menu-btn:hover span:nth-child(3) { transform: translate(-2px,2px); }
.menu-btn:hover span:nth-child(4) { transform: translate(2px,2px); }
.menu-open .menu-btn span { background: currentColor; }

.menu {
  position: fixed; inset: 0; z-index: 55; background: var(--navy);
  display: flex; align-items: center; padding-left: 15vw;
  clip-path: circle(0% at calc(100% - 3.4vw - 14px) 40px);
  transition: clip-path 0.9s var(--ease-out); pointer-events: none;
}
.menu-open .menu { clip-path: circle(150% at calc(100% - 3.4vw - 14px) 40px); pointer-events: auto; }
.menu-open .nav { color: #fff; background: transparent; backdrop-filter: none; }
.menu nav { display: flex; flex-direction: column; gap: 6px; }
.menu a {
  color: #fff; text-decoration: none; text-transform: uppercase;
  font-size: clamp(30px, 4.4vw, 64px); font-weight: 300;
  opacity: 0; transform: translateY(30px);
  transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out), color 0.2s;
}
.menu a:hover { color: var(--gold-soft); }
.menu-open .menu a { opacity: 1; transform: none; }
.menu-open .menu a:nth-child(1) { transition-delay: 0.20s; }
.menu-open .menu a:nth-child(2) { transition-delay: 0.25s; }
.menu-open .menu a:nth-child(3) { transition-delay: 0.30s; }
.menu-open .menu a:nth-child(4) { transition-delay: 0.35s; }
.menu-open .menu a:nth-child(5) { transition-delay: 0.40s; }
.menu-open .menu a:nth-child(6) { transition-delay: 0.45s; }
.menu-open .menu a:nth-child(7) { transition-delay: 0.50s; }

/* ==================================================================
   1. HERO
   ================================================================== */
.hero { position: relative; height: 100vh; min-height: 560px; overflow: hidden; background: #fff; }
.hero-media, .hero-tint {
  position: absolute; inset: 0; z-index: 0;
  -webkit-mask-image: linear-gradient(to bottom, #000 70%, rgba(0,0,0,0.55) 85%, transparent 100%);
          mask-image: linear-gradient(to bottom, #000 70%, rgba(0,0,0,0.55) 85%, transparent 100%);
}
.hero-media { background: #8f9096; }
.hero-tint { background: var(--blue); mix-blend-mode: multiply; opacity: 0; animation: fadeTo 1.6s ease 0.1s forwards; }
@keyframes fadeTo { to { opacity: 0.9; } }
.hero-title {
  position: absolute; left: 14.6vw; top: 36%;
  color: #fff; font-weight: 300; font-size: clamp(34px, 4.9vw, 82px); line-height: 1.12;
  will-change: transform, opacity;
}
.hero-title .ln > span { animation: lineUp 1.3s var(--ease-out) 0.5s forwards; }
.hero-title .ln:nth-child(2) > span { animation-delay: 0.64s; }
@keyframes lineUp { to { transform: none; } }

/* ==================================================================
   2. INTRO — copy + gold square / navy triangle / grey circle
   ================================================================== */
.intro { position: relative; height: 50vw; }
.intro-frame { position: absolute; top: 0; bottom: 0; left: 11.7vw; right: 12.4vw; }
.intro-copy { position: absolute; left: 4.5vw; top: 14.6vw; width: 37.5vw; }
.intro-copy .cap-title { margin-bottom: 2.2vw; font-size: clamp(24px, 2.85vw, 46px); }
.intro-copy .body { max-width: 34vw; }

.shapes { position: absolute; inset: 0; pointer-events: none; }
.shape { position: absolute; display: block; will-change: transform; }
.shape.sq   { left: 51.7vw; top: 20vw;   width: 10.8vw; height: 10.8vw; background: var(--gold); z-index: 2; }
.shape.tri  { left: 47.4vw; top: 30.4vw; width: 13.3vw; height: 12.4vw; background: var(--navy); clip-path: polygon(0 0, 100% 0, 36% 100%); z-index: 3; }
.shape.circ { left: 58.9vw; top: 30vw;   width: 12.6vw; height: 12.6vw; background: var(--light-grey); border-radius: 50%; z-index: 1; }
.shape { opacity: 0; transition: opacity 0.8s ease, translate 1.4s var(--ease-spring), rotate 1.4s var(--ease-spring), scale 1.4s var(--ease-spring); }
.shape.sq   { translate: 0 -12vw; rotate: -35deg; }
.shape.tri  { translate: -10vw 4vw; rotate: 28deg; transition-delay: 0.12s; }
.shape.circ { scale: 0.2; translate: 6vw 0; transition-delay: 0.24s; }
.shapes.in .shape { opacity: 1; translate: 0 0; rotate: 0deg; scale: 1; }

/* ==================================================================
   3. PILLARS — the section snaps into place and pins for a while.
   While pinned, lines drop into the tabs, the column outlines draw
   down, then the content appears. JS drives --tp (tab) and --xp (text)
   per pillar and draws the local #plines SVG.
   ================================================================== */
.pillars-wrap { position: relative; height: 240vh; scroll-snap-align: start; }
.pillars { position: sticky; top: 0; height: 100vh; min-height: 620px; overflow: visible; }
.pillars-band {
  position: absolute; left: 0; right: 0; top: 22%; height: 70%;
  background: var(--gold); z-index: 0;
}
.plines { position: absolute; left: 0; top: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; z-index: 1; }
.plines path { fill: none; stroke: url(#pGrad); stroke-width: 1; stroke-linecap: round; stroke-linejoin: round; }
.pillar { position: absolute; top: 0; bottom: 0; width: 25.2vw; --tp: 1; --xp: 1; }
.pillar:nth-of-type(1) { left: 9vw; }
.pillar:nth-of-type(2) { left: 37.3vw; }
.pillar:nth-of-type(3) { left: 65.6vw; }

.tab {
  position: relative; z-index: 2; margin-top: 10vh; height: 16%;
  background: #fff; border-radius: var(--radius);
  border: 1px dashed #cdcdcd;
  box-shadow: 0 10px 30px rgba(0,0,0,0.08), inset 0 0 0 5px #fff;
  display: grid; place-items: center;
  opacity: var(--tp);
  transform: translateY(calc((1 - var(--tp)) * -2.4vw)) scaleX(calc(0.15 + var(--tp) * 0.85)) scaleY(calc(0.4 + var(--tp) * 0.6));
  transform-origin: 50% 0;
}
.tab svg {
  width: 3.4vw; height: 3.4vw; min-width: 34px; min-height: 34px;
  fill: none; stroke: var(--navy); stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round;
  stroke-dasharray: 160; stroke-dashoffset: calc(160 - var(--tp) * 160);
}

.col {
  position: absolute; top: calc(10vh + 16% + 1%); bottom: 3%; left: 50%; width: 16.4vw;
  translate: -50% 0;
  padding: 20vh 1.6vw 0;
  text-align: center; color: #fff;
}
.col h3 {
  font-weight: 700; text-transform: uppercase;
  font-size: clamp(13px, 1.32vw, 22px); line-height: 1.12; letter-spacing: 0.02em;
  margin-bottom: 1.2vw;
}
.col p { font-size: clamp(12px, 0.9vw, 15px); line-height: 1.5; color: rgba(255,255,255,0.92); }
.col h3 { opacity: var(--xp); transform: translateY(calc((1 - var(--xp)) * 20px)); }
.col p  { opacity: clamp(0, calc(var(--xp) * 1.6 - 0.6), 1); transform: translateY(calc((1 - var(--xp)) * 30px)); }

/* ==================================================================
   FRAMED HEAD — the narrow, line-framed title block used by several
   sections (matches "Why the American Curriculum?" in the PDF)
   ================================================================== */
/* edges line up exactly with the inner sides of pillar columns 1 and 3 */
.fhead { margin-left: 29.8vw; width: 40.2vw; padding: 11vw 2.7vw 3vw; }
.fhead .cap-title { margin-bottom: 2vw; }
.fhead .sub { font-size: clamp(13px, 1vw, 17px); font-weight: 600; color: var(--ink); margin-bottom: 1.1vw; }

/* ==================================================================
   4. WHY THE AMERICAN CURRICULUM — tilted-card collage
   ================================================================== */
.curriculum { position: relative; padding-bottom: 12vw; }
.collage { position: relative; height: 55vw; }
.photo { position: absolute; margin: 0; overflow: hidden; background: var(--ph); will-change: transform; transition: clip-path 1.2s var(--ease-out); }
.ph-left  { left: 0;      top: 3.4vw;  width: 29.9vw; height: 32.6vw; border-radius: 0 var(--radius) var(--radius) 0; clip-path: inset(0 100% 0 0); }
.ph-right { left: 70.1vw; top: 11.9vw; width: 29.9vw; height: 38.6vw; border-radius: var(--radius) 0 0 var(--radius); clip-path: inset(0 0 0 100%); }
.collage.in .photo { clip-path: inset(0 0 0 0); }
.collage.in .ph-right { transition-delay: 0.1s; }

.tcard {
  position: absolute; z-index: 3;
  padding: 2vw 2.1vw 2.3vw; border-radius: var(--radius); color: #fff;
  box-shadow: 0 30px 60px rgba(16, 22, 60, 0.28);
  --r: 0deg; rotate: var(--r);
  opacity: 0; translate: 0 18vw; scale: 0.92;
  transition: opacity 0.9s var(--ease-out), translate 1.5s var(--ease-spring), rotate 1.5s var(--ease-spring), scale 1.5s var(--ease-spring), box-shadow 0.4s;
  will-change: transform;
}
.tcard.navy { background: var(--navy); }
.tcard.gold { background: var(--gold); }
.tcard.c1 { left: 26.5vw; top: 0.7vw; width: 22.5vw; --r: 11deg; rotate: calc(var(--r) - 24deg); }
.tcard.c2 { left: 52.1vw; top: 13.7vw; width: 19.8vw; --r: -5deg; rotate: calc(var(--r) + 20deg); transition-delay: 0.14s; }
.tcard.c3 { left: 32.1vw; top: 34vw;  width: 20.7vw; --r: 5deg;  rotate: calc(var(--r) - 16deg); transition-delay: 0.28s; }
.collage.in .tcard { opacity: 1; translate: 0 0; scale: 1; rotate: var(--r); }
.collage.in .tcard:hover { rotate: 0deg; scale: 1.04; box-shadow: 0 40px 80px rgba(16, 22, 60, 0.34); transition-delay: 0s; transition-duration: 0.6s; z-index: 5; }
.tcard h4 { font-weight: 700; text-transform: uppercase; font-size: clamp(12px, 1.12vw, 18px); line-height: 1.15; letter-spacing: 0.03em; }
.tcard .ico { width: 2.6vw; height: 2.6vw; min-width: 26px; min-height: 26px; margin: 1.2vw 0 1vw; fill: none; stroke: #fff; stroke-width: 1.3; stroke-linecap: round; stroke-linejoin: round; }
.tcard p { font-size: clamp(11px, 0.92vw, 15px); line-height: 1.5; color: rgba(255,255,255,0.9); }

/* ==================================================================
   5. LEARNING JOURNEY — navy band, pinned, scrolls horizontally
   ================================================================== */
.journey { position: relative; background: var(--navy); color: #fff; }
.journey-pin { position: sticky; top: 0; height: 100vh; overflow: hidden; }
.journey-track { position: absolute; top: 0; left: 0; height: 100%; will-change: transform; }
.journey-title { position: absolute; left: 3.4vw; top: max(12vh, 4.5vw); z-index: 3; }

.wave { position: absolute; left: 0; top: 0; height: 100%; overflow: visible; pointer-events: none; }
.wave path { fill: none; stroke: #fff; stroke-linecap: round; }
.wave-brush { stroke-width: 7; opacity: 0.3; }
.wave-line, .j-drop { stroke-width: 1.2; opacity: 0.75; }

.stage { position: absolute; top: 0; height: 100%; left: calc(22vw + var(--x) * 68vw); width: 1px; }
.stage-text { position: absolute; left: 0; top: calc(40% - 14px); width: 25vw; min-width: 260px; }
.stage-no { display: block; font-size: 11px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--gold-soft); margin-bottom: 18px; }
.stage-text h3 { font-weight: 400; font-size: clamp(18px, 1.75vw, 30px); line-height: 1.2; margin-bottom: 0.8vw; }
.stage-text p { font-size: clamp(12px, 0.88vw, 15px); line-height: 1.6; color: rgba(255,255,255,0.72); }

.sphoto { position: absolute; margin: 0; overflow: hidden; border-radius: var(--radius); background: var(--ph-dark); box-shadow: 0 24px 50px rgba(0,0,0,0.3); left: var(--dx); will-change: transform; }
.sphoto.up   { top: 5%;  height: 34%; width: 30.5vw; }
.sphoto.down { top: 56%; height: 40%; width: 31.7vw; }

.stage-text > * { opacity: 0; transform: translateY(24px); transition: opacity 0.9s var(--ease-out), transform 0.9s var(--ease-out); }
.stage-text h3 { transition-delay: 0.08s; }
.stage-text p  { transition-delay: 0.16s; }
.sphoto { opacity: 0; rotate: calc(var(--tilt, 0deg) + 8deg); scale: 0.86; transition: opacity 0.9s var(--ease-out), rotate 1.4s var(--ease-spring), scale 1.4s var(--ease-spring); }
.sphoto.down { transition-delay: 0.15s; }
.stage.in .stage-text > * { opacity: 1; transform: none; }
.stage.in .sphoto { opacity: 1; rotate: var(--tilt, 0deg); scale: 1; }


/* ==================================================================
   6. TEACHING APPROACH — photo + numbered list with drawn dividers
   ================================================================== */
.approach { position: relative; padding-bottom: 9vw; }
.approach-body { margin: 2vw 9vw 0; display: grid; grid-template-columns: 1fr 1.15fr; gap: 6vw; align-items: center; padding: 3vw 3.5vw; }
.approach-photo { margin: 0; aspect-ratio: 4 / 5; border-radius: var(--radius); background: var(--ph); overflow: hidden; clip-path: inset(100% 0 0 0 round var(--radius)); transition: clip-path 1.2s var(--ease-out); }
.approach-photo.in { clip-path: inset(0 0 0 0 round var(--radius)); }

.approach-list { list-style: none; }
.arow { position: relative; display: grid; grid-template-columns: 4.2vw 1fr; gap: 1.5vw; padding: 2.1vw 0; }
.arow::before, .arow:last-child::after {
  content: ""; position: absolute; left: 0; right: 0; height: 1px; background: rgba(20,20,20,0.16);
  transform: scaleX(0); transform-origin: left; transition: transform 1.3s var(--ease-out);
}
.arow::before { top: 0; }
.arow:last-child::after { bottom: 0; transition-delay: 0.3s; }
.ano { font-size: clamp(24px, 2.4vw, 40px); font-weight: 300; color: var(--gold); line-height: 1; }
.arow h4 { font-size: clamp(14px, 1.2vw, 20px); font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 0.6vw; }
.arow p { font-size: var(--body); line-height: 1.6; color: var(--grey-text); }
.arow > * { opacity: 0; transform: translateX(-20px); transition: opacity 0.9s var(--ease-out) 0.25s, transform 0.9s var(--ease-out) 0.25s; }
.arow.in::before, .arow.in:last-child::after { transform: scaleX(1); }
.arow.in > * { opacity: 1; transform: none; }
.arow:hover .ano { transform: translateX(6px); transition: transform 0.4s var(--ease-out); }

/* ==================================================================
   7. ASSESSMENT — card outlines draw, then navy fills upward (--f)
   ================================================================== */
.assessment { position: relative; padding-bottom: 10vw; }
.assess-row { display: grid; grid-template-columns: repeat(3, 21.5vw); gap: 2.3vw; justify-content: center; }
.acard { position: relative; min-height: 22vw; border-radius: var(--radius); color: #fff; --f: 1; --ft: 1; }
.acard::before {
  content: ""; position: absolute; inset: 0; border-radius: var(--radius); background: var(--navy);
  clip-path: inset(calc((1 - var(--f)) * 100%) 0 0 0 round var(--radius));
}
.acard-in {
  position: relative; height: 100%; min-height: 22vw; padding: 2.2vw;
  display: flex; flex-direction: column; justify-content: space-between;
  opacity: var(--ft); transform: translateY(calc((1 - var(--ft)) * 16px));
}
.acard h4 { font-weight: 700; text-transform: uppercase; font-size: clamp(13px, 1.2vw, 20px); line-height: 1.15; letter-spacing: 0.03em; }
.acard p { font-size: clamp(12px, 0.92vw, 15px); line-height: 1.55; color: rgba(255,255,255,0.82); max-width: 90%; }
.acard::after {
  content: ""; position: absolute; right: 1.6vw; top: 1.8vw; width: 2.2vw; height: 2.2vw; border-radius: 50%;
  border: 1px solid var(--gold-soft); opacity: calc(var(--ft) * 0.9);
  transition: transform 0.6s var(--ease-spring);
}
.acard:hover::after { transform: scale(1.4); }

/* ==================================================================
   8. BEYOND THE CLASSROOM — photos revealed as the drop lines arrive
   ================================================================== */
.beyond { position: relative; padding-bottom: 10vw; }
.bc-row { margin: 4vw 5vw 0; display: grid; grid-template-columns: repeat(5, 1fr); gap: 1.6vw; align-items: start; }
.bc-card { --r: 1; }
.bc-card:nth-child(2), .bc-card:nth-child(4) { margin-top: 5vw; }
.bc-card figure { margin: 0; aspect-ratio: 3 / 4; border-radius: var(--radius); background: var(--ph); overflow: hidden; clip-path: inset(0 0 calc((1 - var(--r)) * 100%) 0 round var(--radius)); transition: background 0.4s; }
.bc-card:hover figure { background: #c2c2c7; }
.bc-label { padding-top: 1.2vw; opacity: clamp(0, calc(var(--r) * 2 - 1), 1); transform: translateY(calc((1 - var(--r)) * 20px)); }
.bc-label h4 { font-size: clamp(13px, 1.05vw, 18px); font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.4vw; }
.bc-label p { font-size: clamp(12px, 0.88vw, 15px); line-height: 1.5; color: var(--grey-text); }

/* ==================================================================
   9. STUDENT GROWTH — navy band, rotating testimonials, counters
   ================================================================== */
.growth { position: relative; background: var(--navy); color: #fff; padding: 10vw 0 7vw; }
.growth-top { display: grid; grid-template-columns: 1fr 1fr; gap: 6vw; margin: 0 9vw; }
.growth-left .cap-title { margin-bottom: 2vw; }
.growth-photo { margin: 3vw 0 0; aspect-ratio: 16 / 10; border-radius: var(--radius); background: var(--ph-dark); overflow: hidden; clip-path: inset(0 100% 0 0 round var(--radius)); transition: clip-path 1.2s var(--ease-out); }
.growth-photo.in { clip-path: inset(0 0 0 0 round var(--radius)); }

.growth-right { display: flex; flex-direction: column; justify-content: center; padding-left: 2vw; }
.quotes { position: relative; min-height: 18vw; }
.quote { position: absolute; inset: 0; opacity: 0; transform: translateY(24px); transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); pointer-events: none; }
.quote.is-active { opacity: 1; transform: none; pointer-events: auto; transition-delay: 0.2s; }
.quote p { font-size: clamp(20px, 2vw, 34px); font-weight: 300; line-height: 1.35; font-style: italic; }
.quote cite { display: block; margin-top: 1.6vw; font-style: normal; font-size: 12px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--gold-soft); }
.quote-nav { display: flex; gap: 1.6vw; margin-top: 2.5vw; }
.qbtn { flex: 1; background: none; border: 0; cursor: pointer; text-align: left; color: rgba(255,255,255,0.5); font-size: 12px; font-weight: 600; letter-spacing: 0.1em; padding: 6px 0; transition: color 0.3s; }
.qbtn.is-active, .qbtn:hover { color: #fff; }
.qbtn i { display: block; margin-top: 8px; height: 1px; background: rgba(255,255,255,0.22); position: relative; overflow: hidden; }
.qbtn i::after { content: ""; position: absolute; inset: 0; background: var(--gold-soft); transform: scaleX(0); transform-origin: left; }
.qbtn.is-active i::after { animation: qfill var(--qdur, 6s) linear forwards; }
@keyframes qfill { to { transform: scaleX(1); } }

.stats { display: grid; grid-template-columns: repeat(4, 1fr); margin: 7vw 9vw 0; padding-top: 3.2vw; }
.stat { text-align: center; padding: 0 1.5vw; }
.stat .num { font-size: clamp(36px, 4.4vw, 74px); font-weight: 300; line-height: 1; }
.stat p { margin-top: 1vw; font-size: 12px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: rgba(255,255,255,0.65); }

/* ==================================================================
   10. FAQ — accordion with drawn dividers
   ================================================================== */
.faq { position: relative; display: grid; grid-template-columns: 27vw 1fr; gap: 6vw; padding: 10vw 9vw; }
.faq-head .cap-title { margin-bottom: 1.6vw; }
.faq-item { position: relative; }
.faq-item::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: rgba(20,20,20,0.16); transform: scaleX(0); transform-origin: left; transition: transform 1.2s var(--ease-out); }
.faq-item.in::after { transform: scaleX(1); }
.faq-q { width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 20px; background: none; border: 0; cursor: pointer; text-align: left; padding: 1.7vw 0; font-size: clamp(15px, 1.2vw, 20px); font-weight: 500; }
.faq-q i { position: relative; flex: none; width: 16px; height: 16px; }
.faq-q i::before, .faq-q i::after { content: ""; position: absolute; left: 0; top: 50%; width: 100%; height: 1.5px; background: var(--navy); transition: transform 0.5s var(--ease-out); }
.faq-q i::after { transform: rotate(90deg); }
.faq-item.open .faq-q i::after { transform: rotate(0deg); }
.faq-q span { transition: color 0.3s, transform 0.5s var(--ease-out); }
.faq-q:hover span { color: var(--navy); transform: translateX(6px); }
.faq-a { display: grid; grid-template-rows: 0fr; transition: grid-template-rows 0.6s var(--ease-out); }
.faq-a > div { overflow: hidden; }
.faq-a p { padding-bottom: 1.6vw; font-size: var(--body); line-height: 1.7; color: var(--grey-text); max-width: 60ch; }
.faq-item.open .faq-a { grid-template-rows: 1fr; }
.faq-item { opacity: 0; transform: translateY(18px); transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); }
.faq-item.in { opacity: 1; transform: none; }

/* ==================================================================
   11. CTA — three shapes, three steps
   Each step card carries one brand shape. JS drives --s (shape lands)
   and --t (content appears) once the card's drawn outline has closed.
   On hover the card fills with its shape's colour.
   ================================================================== */
.cta { position: relative; padding-bottom: 9vw; }
.cta-row { display: grid; grid-template-columns: repeat(3, 21.5vw); gap: 2.3vw; justify-content: center; }
.step-card {
  --s: 1; --t: 1; --c: var(--light-grey); --on: var(--ink);
  position: relative; isolation: isolate; overflow: hidden;
  min-height: 27vw; padding: 2.2vw;
  display: flex; flex-direction: column; justify-content: space-between;
  border-radius: var(--radius); text-decoration: none; color: var(--ink);
  transition: color 0.5s var(--ease-out);
}
.step-card.c-navy { --c: var(--navy); --on: #fff; }
.step-card.c-gold { --c: var(--gold); --on: #fff; }

/* hover fill rises from the bottom in the shape's colour */
.sc-fill {
  position: absolute; inset: 0; z-index: -1; background: var(--c);
  clip-path: inset(100% 0 0 0 round var(--radius));
  transition: clip-path 0.7s var(--ease-out);
}
.step-card:hover { color: var(--on); }
.step-card:hover .sc-fill { clip-path: inset(0 0 0 0 round var(--radius)); }

.sc-top { display: flex; justify-content: space-between; align-items: flex-start; }
.sc-shape {
  display: block; width: 5.4vw; height: 5.4vw; min-width: 48px; min-height: 48px;
  background: var(--c);
  opacity: var(--s);
  transform: translateY(calc((1 - var(--s)) * -3vw)) rotate(calc((1 - var(--s)) * -60deg)) scale(calc(0.4 + var(--s) * 0.6));
  transition: background 0.5s, scale 0.6s var(--ease-spring), rotate 0.6s var(--ease-spring);
}
.sc-shape.circ { border-radius: 50%; }
.sc-shape.tri  { clip-path: polygon(0 0, 100% 0, 36% 100%); }
.step-card:hover .sc-shape { background: #fff; scale: 0.82; rotate: 12deg; }
.step-card.c-grey:hover .sc-shape { background: var(--navy); }

.sc-no {
  font-size: 11px; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--grey-text); opacity: var(--t); transition: color 0.5s;
}
.step-card:hover .sc-no { color: currentColor; }

.sc-body { opacity: var(--t); transform: translateY(calc((1 - var(--t)) * 20px)); }
.sc-body h4 {
  font-size: clamp(16px, 1.45vw, 24px); font-weight: 600; text-transform: uppercase;
  line-height: 1.12; letter-spacing: 0.02em; margin-bottom: 0.9vw;
}
.sc-body p { font-size: clamp(12px, 0.9vw, 15px); line-height: 1.6; color: var(--grey-text); margin-bottom: 1.6vw; transition: color 0.5s; }
.step-card:hover .sc-body p { color: currentColor; opacity: 0.85; }
.sc-go {
  display: inline-flex; align-items: center; gap: 12px;
  font-size: 12px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
}
.sc-go i {
  display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%;
  border: 1px solid currentColor; font-style: normal; font-size: 15px;
  transition: transform 0.5s var(--ease-spring);
}
.step-card:hover .sc-go i { transform: translateX(6px) rotate(-45deg); }

.cta-note {
  margin-top: 3vw; text-align: center;
  font-size: 12px; font-weight: 600; letter-spacing: 0.16em; text-transform: uppercase; color: var(--grey-text);
}

/* ==================================================================
   FOOTER — the destination
   ================================================================== */
.footer { position: relative; background: var(--navy-deep); color: rgba(255,255,255,0.68); padding-top: 6vw; overflow: hidden; }

.f-marquee { overflow: hidden; padding-bottom: 5vw; }
.f-track { display: flex; width: max-content; will-change: transform; }
.f-run { display: flex; align-items: center; flex: none; }
.f-word {
  font-size: clamp(56px, 8.6vw, 150px); font-weight: 300; line-height: 1; text-transform: uppercase;
  letter-spacing: -0.01em; color: #fff; white-space: nowrap; padding: 0 2.4vw;
}
.f-word.outline { color: transparent; -webkit-text-stroke: 1px rgba(255,255,255,0.45); }
.fs { flex: none; display: block; width: clamp(34px, 4vw, 66px); height: clamp(34px, 4vw, 66px); margin: 0 1.2vw; }
.fs.sq { background: var(--gold); }
.fs.tri { background: #fff; clip-path: polygon(0 0, 100% 0, 36% 100%); }
.fs.circ { background: var(--light-grey); border-radius: 50%; }

.f-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1.2fr; gap: 4vw; padding: 0 9vw 5vw; }
.f-brand p { max-width: 30ch; font-size: 14px; line-height: 1.7; }

.f-col { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; font-size: 14px; line-height: 1.6; }
.f-col h5 { font-size: 11px; font-weight: 600; letter-spacing: 0.18em; text-transform: uppercase; color: var(--gold-soft); margin-bottom: 8px; }
.f-col a, .f-legal a { position: relative; color: rgba(255,255,255,0.78); text-decoration: none; transition: color 0.3s; }
.f-col a::after, .f-legal a::after { content: ""; position: absolute; left: 0; right: 0; bottom: -2px; height: 1px; background: var(--gold-soft); transform: scaleX(0); transform-origin: left; transition: transform 0.5s var(--ease-out); }
.f-col a:hover, .f-legal a:hover { color: #fff; }
.f-col a:hover::after, .f-legal a:hover::after { transform: scaleX(1); }
.f-hours { margin-top: 6px; color: rgba(255,255,255,0.5); }
.f-grid .reveal:nth-child(2) { transition-delay: 0.08s; }
.f-grid .reveal:nth-child(3) { transition-delay: 0.16s; }
.f-grid .reveal:nth-child(4) { transition-delay: 0.24s; }

/* the horizon rule sits above all footer text; the line system lands
   on it and spreads to both edges (drawn by JS on desktop) */
.f-rule { height: 1px; margin: 0 3.4vw 5vw; background: rgba(255,255,255,0.22); }
.lines-on .f-rule { background: transparent; }
.f-divider { height: 1px; margin: 0 3.4vw; background: rgba(255,255,255,0.14); }

.f-bottom { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 20px; padding: 26px 3.4vw 30px; font-size: 13px; }
.f-legal { display: flex; gap: 26px; }
.to-top { justify-self: end; display: inline-flex; align-items: center; gap: 14px; color: #fff; text-decoration: none; font-size: 12px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; }
.to-top i {
  display: grid; place-items: center; width: 48px; height: 48px; border-radius: 50%;
  border: 1px solid rgba(255,255,255,0.4); font-style: normal; font-size: 16px;
  transition: background 0.4s, border-color 0.4s, color 0.4s, transform 0.5s var(--ease-spring);
}
.to-top:hover i { background: var(--gold-soft); border-color: var(--gold-soft); color: var(--navy); transform: translateY(-4px); }

/* ==================================================================
   Reduced motion: final states, no movement
   ================================================================== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; animation-delay: 0s !important; transition-delay: 0s !important; }
}

/* ==================================================================
   Tablet / mobile: stacked layout; CSS borders replace drawn lines
   ================================================================== */
@media (max-width: 900px) {
  :root { --title: clamp(26px, 7vw, 40px); --body: 15px; }
  .hero-title { left: 7vw; right: 7vw; top: 34%; font-size: clamp(32px, 9vw, 54px); }

  .intro { height: auto; padding: 90px 7vw 60px; }
  .intro-frame { position: relative; inset: auto; }
  .intro-copy { position: relative; left: auto; top: auto; width: auto; }
  .intro-copy .cap-title { font-size: var(--title); margin-bottom: 24px; }
  .intro-copy .body { max-width: none; }
  .shapes { position: relative; height: 62vw; margin-top: 40px; }
  .shape.sq   { left: 26vw; top: 0;    width: 26vw; height: 26vw; }
  .shape.tri  { left: 14vw; top: 25vw; width: 32vw; height: 30vw; }
  .shape.circ { left: 44vw; top: 25vw; width: 30vw; height: 30vw; }

  .pillars-wrap { height: auto; }
  .pillars { position: relative; height: auto; min-height: 0; background: var(--gold); padding: 60px 7vw; display: grid; gap: 22px; }
  .pillars-band, .plines { display: none; }
  .pillar { position: relative; left: auto !important; width: auto; }
  .tab { height: 110px; margin-top: 0; }
  .col { position: relative; translate: none; left: auto; width: auto; padding: 36px 24px 40px; border: 1px solid rgba(255,255,255,0.55); border-top: 0; border-radius: 0 0 var(--radius) var(--radius); }
  .col h3 { margin-bottom: 14px; }

  .fhead { margin: 0; width: auto; padding: 80px 7vw 30px; }
  .fhead .cap-title { margin-bottom: 20px; }
  .collage { height: auto; display: grid; gap: 18px; padding: 0 7vw; }
  .photo, .tcard { position: relative; left: auto !important; top: auto !important; width: auto !important; }
  .photo { height: 56vw; border-radius: var(--radius); }
  .tcard { padding: 26px; --r: 0deg !important; }
  .tcard .ico { margin: 16px 0 12px; }

  .journey { height: auto !important; }
  .journey-pin { position: relative; height: auto; overflow: visible; padding: 80px 7vw 60px; }
  .journey-track { position: relative; transform: none !important; width: auto !important; height: auto; display: grid; gap: 56px; }
  .journey-title { position: relative; left: auto; top: auto; margin-bottom: 10px; }
  .wave { display: none; }
  .stage { position: relative; left: auto; width: auto; height: auto; display: grid; gap: 18px; }
  .stage-text { position: relative; top: auto; width: auto; min-width: 0; }
  .sphoto { position: relative; left: auto; top: auto !important; width: auto !important; height: 52vw !important; }
  .sphoto.down { display: none; }

  .approach-body { margin: 10px 7vw 0; grid-template-columns: 1fr; gap: 30px; padding: 0; }
  .arow { grid-template-columns: 48px 1fr; gap: 14px; padding: 22px 0; }
  .arow h4 { margin-bottom: 6px; }

  .assess-row { grid-template-columns: 1fr; padding: 0 7vw; gap: 16px; }
  .acard, .acard-in { min-height: 200px; }
  .acard-in { padding: 28px; gap: 30px; }
  .acard::after { right: 22px; top: 24px; width: 26px; height: 26px; }

  .bc-row { grid-template-columns: repeat(2, 1fr); gap: 16px; margin: 20px 7vw 0; }
  .bc-card:nth-child(2), .bc-card:nth-child(4) { margin-top: 0; }
  .bc-label { padding-top: 12px; }
  .bc-label h4 { margin-bottom: 4px; }

  .growth { padding: 80px 0 60px; }
  .growth-top { grid-template-columns: 1fr; margin: 0 7vw; gap: 40px; }
  .growth-right { padding-left: 0; }
  .quotes { min-height: 220px; }
  .quote cite { margin-top: 18px; }
  .quote-nav { gap: 14px; margin-top: 24px; }
  .stats { grid-template-columns: repeat(2, 1fr); gap: 36px 0; margin: 60px 7vw 0; padding-top: 30px; border-top: 1px solid rgba(255,255,255,0.2); }
  .stat p { margin-top: 10px; }

  .faq { grid-template-columns: 1fr; gap: 24px; padding: 80px 7vw; }
  .faq-q { padding: 20px 0; }
  .faq-a p { padding-bottom: 20px; }

  .cta { padding-bottom: 80px; }
  .cta-row { grid-template-columns: 1fr; padding: 0 7vw; gap: 16px; }
  .step-card { min-height: 240px; padding: 28px; border: 1px solid #dcdce0; }
  .sc-body h4 { margin-bottom: 10px; }
  .sc-body p { margin-bottom: 18px; }
  .cta-note { margin-top: 30px; padding: 0 7vw; }

  .footer { padding-top: 60px; }
  .f-marquee { padding-bottom: 50px; }
  .f-grid { grid-template-columns: 1fr 1fr; gap: 40px 24px; padding: 0 7vw 50px; }
  .f-brand { grid-column: 1 / -1; }
  .f-rule { margin: 0 7vw 40px; }
  .f-divider { margin: 0 7vw; }
  .f-bottom { grid-template-columns: 1fr; padding: 24px 7vw 30px; gap: 18px; }
  .to-top { justify-self: start; }
}

/* ==================================================================
   PHOTOS — every slot holds an <img> that fills it (global img rule
   above). Cut-out artwork sits inside on a soft paper tone instead.
   ================================================================== */
img.cut { object-fit: contain; padding: 10%; background: #efeee9; }
.hero-media img { filter: grayscale(0.35) contrast(1.05); }
.photo img, .sphoto img, .approach-photo img, .growth-photo img, .bc-card figure img { transition: transform 1.2s var(--ease-out); }
.bc-card:hover figure img, .approach-photo:hover img { transform: scale(1.05); }
