/* KYUL — 회사소개 (About) pages
   Pages 6 (Mission & Vision), 7 (History), 8 (Partners) */

/* ===========================================================
   Shared about section paddings
   =========================================================== */

/* ===========================================================
   PAGE 6 — 미션 및 비전
   =========================================================== */
.about-hero {
  padding-block: var(--section-y-sm);
  position: relative;
  min-height: calc(100vh - 76px); /* 76px = sticky nav height */
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.about-hero__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  align-items: start;
}
.about-hero__grid > div:first-child {
  max-width: 50%;
}
.about-hero h1 {
  font-size: clamp(36px, 4.2vw, 52px);
  line-height: 1.2;
  font-weight: 400;
  letter-spacing: -0.028em;
  margin: 24px 0 0;
}
.about-hero h1 .cursor {
  display: inline-block;
  width: 0.1em;
  height: 0.525em;
  background: currentColor;
  margin-left: 0.05em;
  vertical-align: baseline; /* sit at text baseline, same as Coder block cursor */
  animation: cursor-blink 1s steps(2) infinite;
}

@keyframes cursor-blink { 50% { opacity: 0; } }
@keyframes history-cursor-blink {
  0%, 50%, 100% { opacity: 1; }
  25%, 75%      { opacity: 0; }
}

.about-hero__labels {
  font-family: var(--f-mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-4);
  margin-top: 16px;
  line-height: 1.35;
}
.about-hero__labels span { display: block; }
.about-hero__labels span:nth-child(1),
.about-hero__labels span:nth-child(2) {
  color: #000;
  font-size: 13px;
}

/* ---- Coder-style hero tiles ---- */
/* Bypass the global .reveal fade-up; only .ph__inner animates */
.about-hero__tiles.reveal,
.about-hero__tiles.reveal.is-in {
  opacity: 1;
  transform: none;
  transition: none;
}
.about-hero__tiles {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 2;
}
/* Text below tiles for overlap effect */
.about-hero__grid {
  position: relative;
  z-index: 1;
}
/* Outer frame: always full-size, overflow hidden so scale stays inside.
   Override global .ph styles (background, border, hatch ::before) */
.about-hero__tiles .ph {
  position: absolute;
  aspect-ratio: 6 / 7;
  overflow: hidden;
  background: transparent;
  border: none;
  display: block;
}
.about-hero__tiles .ph::before {
  display: none;
}
/* Positions: images 1+2 deep into title area, 3-5 on the right */
.about-hero__tiles .ph:nth-child(1) { top: 5%;    right: 70%; width: 20%; max-width: 128px; }
.about-hero__tiles .ph:nth-child(2) { bottom: 24%; right: 60%; width: 20%; max-width: 140px; }
.about-hero__tiles .ph:nth-child(3) { top: 18%;   right: 26%; width: 25%; max-width: 182px; }
.about-hero__tiles .ph:nth-child(4) { bottom: 12%; right: 9%;  width: 20%; max-width: 157px; }
.about-hero__tiles .ph:nth-child(5) { top: 6%;    right: 7%;  width: 17%; max-width: 125px; }
/* Inner scaler: starts at scale(0), transitions to scale(1) on reveal */
.about-hero__tiles .ph__inner {
  width: 100%;
  height: 100%;
  transform-origin: top left;
  transform: scale(0);
  transition: transform 0.8s cubic-bezier(.56,.37,.42,.99);
  position: relative;
}
.about-hero__tiles .ph:nth-child(1) .ph__inner { transition-delay: 0.5s; }
.about-hero__tiles .ph:nth-child(2) .ph__inner { transition-delay: 0.6s; }
.about-hero__tiles .ph:nth-child(3) .ph__inner { transition-delay: 0.7s; }
.about-hero__tiles .ph:nth-child(4) .ph__inner { transition-delay: 0.8s; }
.about-hero__tiles .ph:nth-child(5) .ph__inner { transition-delay: 0.9s; }
.about-hero__tiles.is-in .ph .ph__inner { transform: scale(1); }
/* Dots: stop blinking and fade out after each image fully reveals */
.about-hero__tiles.is-in .about-hero__dot {
  animation: none;
  opacity: 0;
  transition: opacity 0.3s ease-out;
}
.about-hero__tiles.is-in .ph:nth-child(1) .about-hero__dot { transition-delay: 1.3s; } /* 0.5 + 0.8 */
.about-hero__tiles.is-in .ph:nth-child(2) .about-hero__dot { transition-delay: 1.4s; }
.about-hero__tiles.is-in .ph:nth-child(3) .about-hero__dot { transition-delay: 1.5s; }
.about-hero__tiles.is-in .ph:nth-child(4) .about-hero__dot { transition-delay: 1.6s; }
.about-hero__tiles.is-in .ph:nth-child(5) .about-hero__dot { transition-delay: 1.7s; }
/* Image fills the inner scaler */
.about-hero__tiles .ph img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* Blinking dot — visible in top-left corner before image scales in */
.about-hero__dot {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 5;
  width: 9px;
  height: 10px;
  background: #000;
  animation: about-dot-blink 1s step-start infinite;
}
.about-hero__tiles .ph:nth-child(1) .about-hero__dot { animation-delay: 0s; }
.about-hero__tiles .ph:nth-child(2) .about-hero__dot { animation-delay: 0.1s; }
.about-hero__tiles .ph:nth-child(3) .about-hero__dot { animation-delay: 0.2s; }
.about-hero__tiles .ph:nth-child(4) .about-hero__dot { animation-delay: 0.3s; }
.about-hero__tiles .ph:nth-child(5) .about-hero__dot { animation-delay: 0.4s; }
@keyframes about-dot-blink {
  0%, 49% { opacity: 1; }
  50%, 100% { opacity: 0; }
}

/* ===========================================================
   About statement — reveal animation (task ba511124)
   Reset wrapper so only children animate, not the whole block
   =========================================================== */
/* about-statement: animated by about-typewriter.js — no CSS transitions */
.about-statement .reveal,
.about-statement .reveal.is-in {
  opacity: 1;
  transform: none;
  transition: none;
}
.about-statement__text,
.about-statement__caption {
  opacity: 0;
}

/* intro paragraph block — pinned while the typing scrubs through.
   The pin wrapper's height beyond 100vh IS the animation timeline: you cannot
   reach the next section until the text has finished typing. Native sticky, so
   scrolling is never blocked and momentum/back-scroll behave normally. */
.about-statement-pin {
  height: 250vh;
}
/* Sticks BELOW the header, not under it — .nav is sticky at top:0 and overlays
   whatever pins at the same offset, which clipped the first line on mobile. */
.about-statement {
  position: sticky;
  top: var(--nav-h);
  min-height: calc(100vh - var(--nav-h));
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding-block: 48px 60px;
}
.about-statement__text {
  max-width: 100%;
  margin-top: 22px;
  margin-bottom: 0;
  font-size: clamp(28px, 3.2vw, 42px);
  line-height: 1.5;
  font-weight: 600;
  letter-spacing: -0.018em;
  color: var(--ink);
}
.about-statement__text em {
  font-style: normal;
  color: var(--ink-3);
  font-weight: 500;
}
.about-statement__caption {
  margin-top: 0;
  font-size: clamp(28px, 3.2vw, 42px);
  font-weight: 600;
  color: var(--ink-3);
  line-height: 1.5;
  max-width: 100%;
}

/* dark pillar cards section */
.pillars {
  background: var(--bg-dark);
  color: var(--on-dark-1);
  padding: var(--section-y-sm) 0 var(--section-y-md);
}
.pillar {
  display: grid;
  grid-template-columns: 1fr 1fr;
  align-items: stretch;
  gap: 48px;
  padding: 32px 0;
}
.pillar > div:not(.pillar__art) {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: 280px;
  padding: 8px 0;
}

.pillar h3 {
  color: #fff;
  font-size: clamp(24px, 2.2vw, 30px);
  font-weight: 600;
  letter-spacing: -0.018em;
  margin: 0 0 16px;
}
.pillar p {
  color: var(--on-dark-2);
  font-size: 14px;
  line-height: 1.8;
  max-width: 44ch;
  margin: 0 0 24px;
}
.pillar > div:not(.pillar__art) > div:first-child { flex: 1; }
.pillar .chips { margin-top: auto; padding-top: 24px; border-top: none; }

.pillar__art {
  aspect-ratio: 5/4;
  background: #141414;
  border: 1px solid #1f1f1f;
  border-radius: 0;
  position: relative;
  overflow: hidden;
}

/* Stone/monolith-style abstract "sculptures" — pure CSS, match ref tone */
.pillar__art--waves {
  background:
    radial-gradient(100% 70% at 50% 100%, #1c1c1c 0%, #0c0c0c 60%),
    #0a0a0a;
}
.pillar__art--waves::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    radial-gradient(ellipse 80% 45% at 50% 70%, rgba(255,255,255,.08) 0%, transparent 55%),
    repeating-radial-gradient(ellipse 120% 60% at 50% 110%, rgba(255,255,255,.05) 0 2px, transparent 2px 22px);
  opacity: .9;
}
.pillar__art--waves::after {
  content: '';
  position: absolute;
  inset: auto 0 0 0;
  height: 58%;
  background:
    radial-gradient(120% 90% at 50% 120%, rgba(40,40,40,.9) 0%, transparent 70%);
  filter: blur(2px);
}

.pillar__art--stairs {
  background: #0a0a0a;
}
.pillar__art--stairs .step {
  position: absolute;
  left: 50%;
  background: linear-gradient(180deg, #262626, #0e0e0e);
  border: 1px solid #2c2c2c;
  border-radius: 0;
  transform: translateX(-50%);
  box-shadow: 0 8px 24px rgba(0,0,0,.5);
}
.pillar__art--stairs .step:nth-child(1) { width: 40%; height: 14%; bottom: 16%;  }
.pillar__art--stairs .step:nth-child(2) { width: 30%; height: 14%; bottom: 30%; }
.pillar__art--stairs .step:nth-child(3) { width: 22%; height: 14%; bottom: 44%; }
.pillar__art--stairs .step:nth-child(4) { width: 14%; height: 14%; bottom: 58%; }

.pillar__art--poly {
  background: radial-gradient(80% 60% at 50% 50%, #1a1a1a, #0a0a0a);
}
.pillar__art--poly .gem {
  position: absolute;
  left: 50%; top: 50%;
  width: 58%; aspect-ratio: 1/1;
  transform: translate(-50%, -50%);
  background: conic-gradient(
    from 210deg,
    #2a2a2a 0deg, #121212 60deg,
    #333 120deg, #0a0a0a 180deg,
    #242424 240deg, #151515 300deg,
    #2a2a2a 360deg
  );
  clip-path: polygon(50% 0, 92% 28%, 95% 72%, 50% 100%, 5% 72%, 8% 28%);
  filter: drop-shadow(0 14px 30px rgba(0,0,0,.6));
}
.pillar__art--poly .gem::before {
  content:''; position: absolute; inset: 0;
  clip-path: polygon(50% 0, 92% 28%, 50% 50%, 50% 0);
  background: rgba(255,255,255,.06);
}

.pillar__art--sphere {
  background: radial-gradient(80% 60% at 50% 55%, #1a1a1a, #0a0a0a);
}
.pillar__art--sphere .ball {
  position: absolute;
  left: 50%; top: 50%;
  transform: translate(-50%, -50%);
  width: 60%; aspect-ratio: 1/1;
  border-radius: 0;
  background:
    radial-gradient(circle at 35% 30%, #3a3a3a 0%, #1a1a1a 40%, #080808 80%);
  box-shadow:
    inset -20px -30px 60px rgba(0,0,0,.8),
    inset 12px 14px 30px rgba(255,255,255,.05),
    0 30px 50px rgba(0,0,0,.6);
}

/* "Our Scope" blush 4-card grid */
/* ===========================================================
   "Our Scope" — centered title + 2x2 card grid
   =========================================================== */
.scope {
  background: transparent;
  /* Extra top padding — the pinned statement above ends flush, so the section
     needs its own breathing room to read as a separate block. */
  padding: clamp(88px, 10vw, 132px) 0 var(--section-y);
}
.scope__head {
  text-align: center;
  margin-bottom: 56px;
  max-width: none;
}
.scope__title {
  font-size: clamp(38px, 4.6vw, 62px);
  font-weight: 500;
  letter-spacing: -0.018em;
  line-height: 1.1;
  margin: 0 0 20px;
  color: var(--ink);
}
.scope__sub {
  font-size: 13.5px;
  color: var(--ink-3);
  line-height: 1.85;
  max-width: 56ch;
  margin: 0 auto;
}
.scope-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 24px;
}
.scope-card {
  background: #F6F6F6;
  border: none;
  padding: 36px 36px 40px;
  min-height: 240px;
}
/* 30px was an inline style on every <img> in page-about.php — moved here so the
   mobile override below can actually reach it. */
.scope-card__thumb {
  display: block;
  width: 56px;
  height: 56px;
  margin-bottom: 30px;
}
.scope-card h3 {
  font-size: 21px;
  font-weight: 600;
  letter-spacing: -0.012em;
  margin: 0 0 20px;
  color: var(--ink);
}
.scope-card__en {
  font-size: 17px;
}
.scope-card p {
  font-size: 13px;
  color: var(--ink-3);
  line-height: 1.85;
  margin: 0;
}
@media (max-width: 900px) {
  .scope-grid { grid-template-columns: 1fr; gap: 16px; }
  .scope-card { padding: 20px 18px 22px; min-height: 0; }
  .scope-card__thumb { margin-bottom: 20px; }
}

/* ===========================================================
   PAGE 7 — 주요 연혁 및 성과 (dark hero + achievements)
   =========================================================== */
.history-hero {
  background-color: transparent;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  color: var(--on-dark-1);
  padding: clamp(80px, 9.5vw, 164px) 0 0; /* 64px nav + 100px original */
  position: relative;
  overflow: hidden;
  height: 100vh;
  height: 100dvh; /* modern: matches visible viewport on mobile */
}
.history-hero__head {
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 var(--gutter);
  position: relative;
  z-index: 2;
}
.history-hero h1 {
  color: #fff;
  font-size: clamp(36px, 4.4vw, 54px);
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.026em;
  margin: 0 0 28px;
}
.history-hero h1 .cursor {
  display: inline-block;
  width: 0.42em;
  height: 0.525em;
  background: currentColor;
  margin-left: 0.08em;
  vertical-align: -0.04em;
  border-radius: 0;
  animation: history-cursor-blink 1s steps(2) infinite;
}
.history-hero__since {
  font-family: var(--f-mono);
  font-size: 12px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--on-dark-3);
}

/* floating squares over the dark earth-glow scene */
.history-hero__stage {
  position: relative;
  height: clamp(480px, 60vh, 700px);
  max-width: var(--container);
  margin: -170px auto 0;
  padding: 0 var(--gutter);
  isolation: isolate;
}
.history-hero__stage::after { content: none; }
.history-hero__stage::before { content: none; }
.history-hero__earth { display: none; }

.history-square {
  position: absolute;
  background: #F2EFEA;
  border-radius: 0;
  box-shadow: 0 16px 40px rgba(0,0,0,.4);
  z-index: 2;
}
/* Organic scatter — spread to fill stage; upper-left clear for heading overlay */
.history-square--s1 { top: 35%; left:  4%; width: 205px; aspect-ratio: 1/1; } /* large, mid-left */
.history-square--s2 { top: 72%; left:  6%; width: 165px; aspect-ratio: 1/1; } /* medium, lower-left */
.history-square--s3 { top:  6%; left: 78%; width: 210px; aspect-ratio: 1/1; } /* large, upper-right */
.history-square--s4 { top: 68%; left: 82%; width:  95px; aspect-ratio: 1/1; } /* small, lower-right */
.history-square--s5 { top: 38%; left: 28%; width:  82px; aspect-ratio: 1/1; } /* small, mid-left-center */
.history-square--s6 { top: 65%; left: 38%; width: 155px; aspect-ratio: 1/1; } /* medium, lower-center */
.history-square--s7 { top: 42%; left: 56%; width:  98px; aspect-ratio: 1/1; } /* small, mid-center */
.history-square--s8 { top:  5%; left: 56%; width: 160px; aspect-ratio: 1/1; } /* medium, upper-center (right of title) */

@keyframes history-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(0.8rem); }
}
/* history-hero__stage fade-in on reveal */
.history-hero__stage.reveal {
  opacity: 0;
  transition: opacity 0.8s ease-out;
}
.history-hero__stage.reveal.is-in {
  opacity: 1;
}
.history-square { animation: history-float 7s ease-in-out infinite; }
.history-square--s2 { animation-delay: -1s;   animation-duration: 6s;   }
.history-square--s3 { animation-delay: -2s;   animation-duration: 8s;   }
.history-square--s4 { animation-delay: -3s;   animation-duration: 7s;   }
.history-square--s5 { animation-delay: -4s;   animation-duration: 6.5s; }
.history-square--s6 { animation-delay: -1.5s; animation-duration: 7.5s; }
.history-square--s7 { animation-delay: -2.5s; animation-duration: 8.5s; }
.history-square--s8 { animation-delay: -3.5s; animation-duration: 7.8s; }

/* Large viewports: bump squares to native image resolution
   Sources: s1 250×290 · s2 110×125 · s3 300×350 · s4 220×260
            s5 105×120 · s6 135×160 · s7 180×210 · s8 160×180
   Squares display at native height (the larger native dim) so the
   1:1 crop never upscales. Stage height fixed at 720px so the
   bigger squares lay out without overlap. */
@media (min-width: 1200px) {
  .history-hero__stage { height: 820px; }
  .history-square--s1 { top: 55%; left:  2%; width: 290px; }
  .history-square--s2 { top: 65%; left: 30%; width: 165px; }
  .history-square--s3 { top:  0%; left: 70%; width: 350px; }
  .history-square--s4 { top: 55%; left: 75%; width: 260px; }
  .history-square--s5 { top: 32%; left: 14%; width: 120px; }
  .history-square--s6 { top: 60%; left: 48%; width: 160px; }
  .history-square--s7 { top: 18%; left: 28%; width: 210px; }
  .history-square--s8 { top:  5%; left: 50%; width: 180px; }
}

/* achievements body */
.achievements {
  padding: var(--section-y-sm) 0 var(--section-y-md);
}
.achievements__head {
  margin-bottom: 40px;
}
.achievements__head h2 {
  font-size: clamp(28px, 3.2vw, 38px);
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -0.022em;
  max-width: 22ch;
}

/* New achievements stack — alternating two-up FACT rows */
.achievements-stack {
  display: flex; flex-direction: column;
  border-top: 1px solid var(--line);
}

/* 3-column FACT layout (thumbnail on top, label, title, body) */
.achievements-stack--cols {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 40px;
  border-top: 0;
}
.ach-col {
  display: flex;
  flex-direction: column;
}
.ach-col__art {
  width: 100%;
  aspect-ratio: 1 / 1;
  background: #ececec;
  border-radius: 0;
  margin-bottom: 28px;
  position: relative;
  overflow: hidden;
}
.ach-col__num {
  font-family: var(--f-mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ink-3);
  margin-bottom: 14px;
}
.ach-col h3 {
  font-size: clamp(18px, 1.6vw, 22px);
  font-weight: 600;
  line-height: 1.4;
  letter-spacing: -0.012em;
  color: var(--ink);
  margin: 0 0 16px;
}
.ach-col p {
  font-size: 13.5px;
  line-height: 1.85;
  color: var(--ink-3);
  margin: 0;
}
@media (max-width: 900px) {
  .achievements-stack--cols { grid-template-columns: 1fr; gap: 24px; }
}

.achievements__line--primary { color: var(--ink); }
.achievements__line--muted { color: var(--ink-4); }

/* History page: keep achievement card backgrounds light, not dark */
#page-history .ach-col__art { background: #ffffff; }

/* Achievements head — disable parent reveal, animate children instead */
.achievements__head.reveal,
.achievements__head.reveal.is-in {
  opacity: 1;
  transform: none;
  transition: none;
}
/* Line-by-line reveal for achievements h2 spans */
.achievements__head h2 .achievements__line {
  display: block;
  opacity: 0;
  transform: translateY(12px);
  transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}
.achievements__head.is-in h2 .achievements__line:nth-child(1) { opacity: 1; transform: none; transition-delay: 0s; }
.achievements__head.is-in h2 .achievements__line:nth-child(2) { opacity: 1; transform: none; transition-delay: .1s; }
.achievements__head.is-in h2 .achievements__line:nth-child(3) { opacity: 1; transform: none; transition-delay: .2s; }

/* Ach-col stagger reveal */
.achievements-stack .ach-col {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.7s ease-out, transform 0.7s ease-out;
}
.achievements-stack.reveal-stagger.is-in .ach-col:nth-child(1) { opacity: 1; transform: none; transition-delay: 0s; }
.achievements-stack.reveal-stagger.is-in .ach-col:nth-child(2) { opacity: 1; transform: none; transition-delay: .14s; }
.achievements-stack.reveal-stagger.is-in .ach-col:nth-child(3) { opacity: 1; transform: none; transition-delay: .28s; }

/* ===========================================================
   PAGE 8 — 파트너사 / 협력기관
   =========================================================== */
.partners-hero {
  padding-block: clamp(56px, 7vw, 96px) clamp(48px, 6vw, 72px);
  position: relative;
  overflow: hidden;
}
.partners-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(0,0,0,.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(0,0,0,.04) 1px, transparent 1px);
  background-size: 40px 40px;
  mask-image: linear-gradient(180deg, transparent 0%, #000 30%, #000 70%, transparent 100%);
  -webkit-mask-image: linear-gradient(180deg, transparent 0%, #000 30%, #000 70%, transparent 100%);
  pointer-events: none;
  animation: partnersGridDrift 20s linear infinite;
}
@keyframes partnersGridDrift {
  to { background-position: 40px 40px, 40px 40px; }
}
.partners-hero__grid {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  position: relative;
  z-index: 1;
  gap: 48px;
  align-items: start;
}
.partners-hero h1 {
  font-size: clamp(34px, 4vw, 46px);
  font-weight: 600;
  line-height: 1.25;
  letter-spacing: -0.024em;
  margin: 0 0 24px;
}
.partners-hero p {
  max-width: 44ch;
  font-size: 14.5px;
  color: var(--ink-3);
  line-height: 1.8;
  margin: 0;
}
.partners-hero__big {
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  gap: 14px;
  font-weight: 500;
  letter-spacing: -0.03em;
  line-height: 1;
}
.partners-hero__big svg {
  width: 54px; height: 54px;
  margin-top: 12px;
  color: var(--ink);
  animation: heroArrow 2.4s ease-in-out infinite;
}
@keyframes heroArrow {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-12px); }
}
.partners-hero__big b {
  font-size: clamp(80px, 11vw, 144px);
  font-weight: 500;
  letter-spacing: -0.04em;
  line-height: .9;
  color: var(--ink);
  background: linear-gradient(120deg, var(--ink) 0%, var(--ink) 40%, #c9b88a 50%, var(--ink) 60%, var(--ink) 100%);
  background-size: 200% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: heroBigShine 4.5s ease-in-out infinite;
}
@keyframes heroBigShine {
  0%, 100% { background-position: 100% 0; }
  50% { background-position: 0 0; }
}

/* Rolling stat in partners hero */
.partners-hero__rolling {
  font-size: clamp(100px, 14vw, 180px);
  font-weight: 400;
  letter-spacing: -0.04em;
  line-height: .9;
  display: inline-flex;
  align-items: baseline;
  color: var(--ink);
}
.partners-hero__rolling .rolling-number {
  font-size: clamp(100px, 14vw, 180px);
  font-weight: 400;
  letter-spacing: -0.04em;
  line-height: 1; /* clip window must equal the 1em digit height — .9 clipped the "00" by 0.1em */
  display: inline-block;
}
.partners-hero__rolling .rn-ghost {
  font-size: clamp(100px, 14vw, 180px);
  font-weight: 400;
  letter-spacing: -0.04em;
  line-height: 1; /* ghost is the in-flow child that sizes the clip window — keep at 1em to match digits */
  display: inline-block;
}
.partners-hero__plus {
  font-size: clamp(72px, 10vw, 140px);
  font-weight: 400;
  letter-spacing: -0.04em;
  line-height: .9;
  color: var(--ink);
}

/* partner logo grid */
.partners-grid {
  padding: clamp(40px, 5vw, 60px) 0 var(--section-y-md);
}
/* border-top + border-left removed 2026-07-29. They were the outer two edges of
   a hairline grid whose per-cell borders were never authored; more.css (loaded
   later) then replaced gap:0 with gap:18px and 6 columns with 4, so the cards
   float free and those two lines survived as a stray rule along the top and
   left of the section. Nothing else drew them, so they just delete. */
.partners-grid__grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 0;
}

/* placeholder partner "logos" — alternating between wordmark + icon */

/* cta section on partners page is the shared ctaband */

/* ===========================================================
   Cases section (Page 6 — Our Scope) — already above
   =========================================================== */

/* ===========================================================
   RESPONSIVE
   =========================================================== */
@media (max-width: 900px) {
  .about-hero__grid,
  .partners-hero__grid { grid-template-columns: 1fr; gap: 32px; }
  .about-hero__grid > div:first-child { max-width: 55%; }
  .about-hero__tiles .ph:nth-child(1) { width: 28%; max-width: none; }
  .about-hero__tiles .ph:nth-child(2) { width: 28%; max-width: none; }
  .about-hero__tiles .ph:nth-child(3) { width: 35%; max-width: none; }
  .about-hero__tiles .ph:nth-child(4) { width: 28%; max-width: none; }
  .about-hero__tiles .ph:nth-child(5) { width: 24%; max-width: none; }
  .pillar { grid-template-columns: 1fr; gap: 24px; }

  .partners-hero { padding-top: 0; padding-bottom: 0; }
  .partners-grid__grid { grid-template-columns: repeat(3, 1fr); }
  /* Stage fills the ENTIRE hero so squares scatter across the whole screen
     (like desktop) instead of crammed into a short box below the title.
     isolation:isolate (base rule) keeps it a stacking context at z-auto, so
     .history-hero__head (z-index:2) always paints above the squares — the
     title stays readable even where a square sits behind it. */
  .history-hero__stage { position: absolute; inset: 0; height: auto; margin: 0; }
  /* Organic scatter (NOT a grid). Two coupled constraints, opposite ends of
     this <=900px range:
       • Narrow phones (~320px): squares hit their clamp FLOOR (~90-110px) =
         up to 34% of width, so columns must stay well apart horizontally.
       • Wide tablets (~900px): squares hit their clamp MAX, and at 800px tall
         a 160px square is 20% of height — so row bands (~38/58/80%, ~20% gap)
         only stay clear if maxes are capped (s3/s6 → 120-128px) and the
         ±0.8rem history-float wobble (~3.2% of 800) still has headroom.
     Columns chosen disjoint at 320px; the tightest vertical pairs are made
     x-disjoint where possible (s2@left4 clears s1@left22; s4@top82 clears
     s6). Verified float-safe (5 sampled frames) at 320/375/500/768/900px.
     Top ~0-14% stays clear of the fixed nav (s8 has a px floor so it never
     slides under the nav's px padding on short screens); the upper-left title
     zone is kept clear. */
  .history-square--s8 { width: clamp(100px, 25vw, 156px); top: max(96px, 14%); left: 64%; }
  .history-square--s5 { width: clamp(96px,  24vw, 150px); top: 37%; left:  4%; }
  .history-square--s7 { width: clamp(90px,  23vw, 140px); top: 37%; left: 40%; }
  .history-square--s3 { width: clamp(100px, 26vw, 120px); top: 40%; left: 70%; }
  .history-square--s1 { width: clamp(110px, 27vw, 150px); top: 58%; left: 22%; }
  .history-square--s6 { width: clamp(104px, 26vw, 128px); top: 60%; left: 60%; }
  .history-square--s2 { width: clamp(96px,  24vw, 150px); top: 80%; left:  4%; }
  .history-square--s4 { width: clamp(92px,  23vw, 144px); top: 82%; left: 55%; }
}

/* ===== Bridge edits 2026-05-04 ===== */
/* Hide the first achievements__head inside #section-history only */
#section-history > .achievements__head {
  display: none;
}

/* ==========================================================================
   v6 Drawbridge reference patches — About page
   ========================================================================== */

/* TASK 4cf3567e — About hero layout */
#page-about .about-hero__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  align-items: center;
}
#page-about .about-hero__grid > div:first-child {
  display: flex;
  flex-direction: column;
  justify-content: center;
}
#page-about .about-hero h1 {
  font-size: clamp(44px, 5.5vw, 68px);
  font-weight: 400;
  line-height: 1.1;
  letter-spacing: -0.02em;
}
#page-about .about-hero p.subtitle {
  font-size: clamp(16px, 1.6vw, 20px);
  line-height: 1.5;
  color: #4a4a52;
  margin-top: 24px;
}

/* TASK 8499a2f6 — About statement section */
#page-about .about-statement .container {
  max-width: var(--container);
  padding: 0 var(--gutter);
  margin: 0 auto;
}
#page-about .about-statement .micro {
  font-family: var(--f-mono, monospace);
  font-size: 14px;
  opacity: 0.6;
  margin-bottom: 40px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
#page-about .about-statement h2 {
  font-size: clamp(32px, 4vw, 48px);
  font-weight: 500;
  line-height: 1.2;
  max-width: 1000px;
}
#page-about .community-band .container {
  max-width: var(--container);
  margin: 0 auto;
}

@media (max-width: 1024px) {
  #page-about .about-hero__grid { grid-template-columns: 1fr; gap: 0; }
  #page-about .about-hero__grid > div:first-child { max-width: 60%; }
}
@media (max-width: 768px) {
  #page-about .about-hero h1 { font-size: clamp(32px, 8vw, 44px); }
  #page-about .about-statement h2 { font-size: clamp(24px, 6vw, 32px); }
}

/* ============================================================
   TASK a323019d — Remove gap between hero (dark tiles) and
   about-statement grey text. Tighten section padding so it
   matches the consistent section-to-section rhythm on the page.
   ============================================================ */
#page-about .about-statement {
  padding-top: 0;
  padding-bottom: var(--section-y-sm);
}

/* ============================================================
   TASK 78db0f32 — Make pillar chips pill-shaped and smaller.
   Scoped to .pillar so we don't affect chips elsewhere.
   ============================================================ */
.pillar .chips .chip,
.pillar .chips .chip.chip--on-dark {
  border-radius: 9999px;
  padding: 6px 14px;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.02em;
}

/* ============================================================
   TASK 2d6f3991 — Remove outer outline/border on the about
   page contact CTA pill. Keep background, color, and pill
   shape; just kill the 1px ring set in pages.css.
   ============================================================ */
#page-about .dark-cta .btn--on-dark-primary,
#page-about .dark-cta a.btn--on-dark-primary[href*="/contact/"] {
  border: 0;
  outline: 0;
  box-shadow: none;
}
#page-about .dark-cta .btn--on-dark-primary:hover {
  border: 0;
}

/* Transparent nav — history page */
body.page-template-page-history .nav {
  position: fixed;
  width: 100%;
  background: transparent;
  border-bottom-color: transparent;
}
/* .recruit excluded — it's a self-contained white pill, not a nav link; it owns its --ink text (pages.css) */
body.page-template-page-history .nav .brand,
body.page-template-page-history .nav .nav__menu a,
body.page-template-page-history .nav .mobile-toggle {
  color: rgba(255,255,255,.9);
}
body.page-template-page-history .nav .brand::after { color: rgba(255,255,255,.9); }
body.page-template-page-history .nav.is-scrolled {
  background: rgba(247,245,242,.88);
  -webkit-backdrop-filter: saturate(1.4) blur(10px);
  backdrop-filter: saturate(1.4) blur(10px);
}
body.page-template-page-history .nav.is-scrolled .brand { color: var(--ink); }
body.page-template-page-history .nav.is-scrolled .brand::after { color: var(--accent); }
body.page-template-page-history .nav.is-scrolled .nav__menu a { color: var(--ink-2); }
/* Drawer open — match the white drawer panel exactly. Restated here because the
   `.is-scrolled` rule above is equal-specificity and loads after styles.css, so
   its cream translucency would otherwise win while the drawer is down. */
body.page-template-page-history .nav.nav--drawer-open {
  background: #fff;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}
body.page-template-page-history .nav.nav--drawer-open .brand { color: var(--ink); }
body.page-template-page-history .nav.nav--drawer-open .brand::after { color: var(--accent); }
body.page-template-page-history .nav.nav--drawer-open .mobile-toggle { color: var(--ink-2); }

/* ===========================================================
   MOBILE — about hero
   =========================================================== */
@media (max-width: 900px) {
  /* Restore full-height section — gives tiles their positioning context */
  .about-hero { min-height: calc(100svh - 64px); }
  /* Allow heading to use full width (desktop caps at 50%) */
  #page-about .about-hero__grid > div:first-child,
  .about-hero__grid > div:first-child { max-width: 100%; }

  /* Restore absolute-positioned scattered overlay */
  .about-hero__tiles {
    position: absolute;
    inset: 0;
    display: block;
    pointer-events: none;
  }
  /* Mobile tile positions — kept scattered, but cleared of the vertically
     centered title/subtitle band: top cluster pulled up, lower tiles dropped
     to the bottom edge so nothing sits over the text. */
  .about-hero__tiles .ph:nth-child(1) { top: 4%;    right: 75%; width: 20%; max-width: none; }
  .about-hero__tiles .ph:nth-child(2) { bottom: 6%;  right: 66%; width: 20%; max-width: none; }
  .about-hero__tiles .ph:nth-child(3) { top: 12%;   right: 38%; width: 25%; max-width: none; }
  .about-hero__tiles .ph:nth-child(4) { bottom: 6%;  right: 9%;  width: 20%; max-width: none; }
  .about-hero__tiles .ph:nth-child(5) { top: 7%;    right: 7%;  width: 17%; max-width: none; }
  /* Desktop scale animation is inherited — no overrides needed */
  .about-hero__tiles .about-hero__dot { display: block; }

  /* Pillar: always show art/image first in single-column mobile layout */
  .pillar {
    display: flex;
    flex-direction: column;
  }
  .pillar .pillar__art {
    order: -1;
    width: 100%;
    aspect-ratio: 5 / 3;
  }
  .pillar > div:not(.pillar__art) {
    min-height: 0;
  }
  /* Reduce excess space between body text and chips on mobile */
  .pillar .chips {
    padding-top: 12px;
    margin-top: 0;
  }
}

/* Partners grid: 3 cols crams to ~109px cells on phones — drop to 2 cols.
   Later source order than the max-width:900px rule, so this wins below 600px. */
@media (max-width: 600px) {
  .partners-grid__grid { grid-template-columns: repeat(2, 1fr); }
}

/* ===========================================================
   ZOOM COMPENSATION (pairs with `html { zoom: 1.25 }` in styles.css)
   Only the vh/dvh term is divided by 1.25 — px offsets are already scaled by zoom.
   =========================================================== */
@media (min-width: 1152px) {
  .about-hero    { min-height: calc(80vh - 76px); }
  .history-hero  { height: 80dvh; }
}
