@scope (.gl-skincare-reference) {/**
 * The approved design's stylesheet, ported verbatim from
 * design/bao-laboratory-ai_10.html so the rendering is identical.
 *
 * Two deliberate substitutions:
 *  - `.brand .logo` masked the platform-stack illustration (a 396 KB PNG
 *    embedded twice); it now masks the real BAO wordmark.
 *  - Google Fonts is replaced by self-hosted faces in fonts.css.
 *
 * Edit the design file and re-port rather than diverging here.
 */
/* ============================================================
   BAO LABORATORY — PHYSICAL AI
   Design system: "Porcelain & Instrument"
   Ink machine-bay bands bookend a cleanroom-porcelain body.
   One accent: serum amber, used as instrument light.
   ============================================================ */
:scope {
  --ink: #0c0d10;
  --ink-2: #13151b;
  --ink-3: #1b1e26;
  --porcelain: #f1efea;
  --porcelain-2: #e7e4dc;
  --paper: #faf9f6;
  --steel: #6e747e;
  --steel-2: #9ba0a8;
  --amber: #e8a03c;
  --amber-hi: #f2b961;
  --amber-deep: #8a5d14;
  --t-dark: #16171b;
  --t-dark-2: #4b4f57;
  --t-light: #edeae2;
  --t-light-2: #a9adb4;
  --line-d: rgba(13, 14, 17, 0.16);
  --line-d-soft: rgba(13, 14, 17, 0.09);
  --line-l: rgba(237, 234, 226, 0.17);
  --line-l-soft: rgba(237, 234, 226, 0.09);
  --disp: 'Archivo', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --mono: 'Fragment Mono', 'SFMono-Regular', Menlo, Consolas, monospace;
  --nav-h: 76px;
  --gutter: clamp(20px, 4.5vw, 72px);
  --max: 1520px;
  --ease: cubic-bezier(0.65, 0.05, 0.18, 1);
}
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}
body {
  font-family: var(--disp);
  font-size: 16.5px;
  line-height: 1.6;
  background: var(--ink);
  color: var(--t-light);
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
}
::selection {
  background: var(--amber);
  color: var(--ink);
}
img,
svg {
  display: block;
  max-width: 100%;
}
a {
  color: inherit;
  text-decoration: none;
}
button {
  font: inherit;
  color: inherit;
  background: none;
  border: 0;
  cursor: pointer;
}
:focus {
  outline: none;
}
:focus-visible {
  outline: 2px solid var(--amber);
  outline-offset: 3px;
  border-radius: 2px;
}
.skip-link {
  position: fixed;
  top: -60px;
  left: 16px;
  z-index: 400;
  background: var(--amber);
  color: var(--ink);
  padding: 0.7rem 1.2rem;
  border-radius: 4px;
  font-family: var(--mono);
  font-size: 0.75rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  transition: top 0.25s;
}
.skip-link:focus {
  top: 14px;
}

/* ---------- type utilities ---------- */
.disp {
  font-family: var(--disp);
  font-stretch: 116%;
  font-weight: 590;
  letter-spacing: -0.015em;
  line-height: 1.02;
}
.mono {
  font-family: var(--mono);
  font-weight: 400;
}
.eyebrow {
  display: flex;
  align-items: center;
  gap: 14px;
  font-family: var(--mono);
  font-size: 0.68rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--steel);
  white-space: nowrap;
}
.eyebrow::before {
  content: '';
  width: 26px;
  height: 1px;
  background: var(--amber);
  flex: none;
}
.dark .eyebrow {
  color: var(--steel-2);
}
.h-xl {
  font-size: clamp(2.7rem, 6.6vw, 6.4rem);
}
.h-lg {
  font-size: clamp(2.1rem, 4.4vw, 3.9rem);
}
.h-md {
  font-size: clamp(1.4rem, 2.4vw, 2rem);
}
.lede {
  font-size: clamp(1.02rem, 1.35vw, 1.22rem);
  line-height: 1.66;
  font-weight: 420;
  max-width: 56ch;
}
.dark .lede {
  color: var(--t-light-2);
}
.light .lede {
  color: var(--t-dark-2);
}
.line {
  display: block;
  overflow: hidden;
}
.line-in {
  display: block;
  will-change: transform;
}

/* ---------- layout ---------- */
.wrap {
  max-width: var(--max);
  margin: 0 auto;
  padding-left: var(--gutter);
  padding-right: var(--gutter);
}
section {
  position: relative;
  z-index: 2;
}
.light {
  background: var(--porcelain);
  color: var(--t-dark);
}
.dark {
  background: transparent;
  color: var(--t-light);
}
.dark.solid {
  background: var(--ink);
}
.sec-head {
  display: grid;
  gap: 26px;
  margin-bottom: clamp(44px, 6vw, 84px);
}
.sec-head .h-lg {
  max-width: 22ch;
}

/* ---------- grain + fixed stage ---------- */
#stage {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.9s ease;
}
#stage.on {
  opacity: 1;
}
#stage video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 62% 50%;
  display: block;
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 32%);
  mask-image: linear-gradient(90deg, transparent 0, #000 32%);
}
@media (max-width: 980px) {
  #stage video {
    height: 58svh;
    object-fit: contain;
    object-position: 50% 38%;
    opacity: 0.95;
    -webkit-mask-image: linear-gradient(180deg, #000 60%, transparent 98%);
    mask-image: linear-gradient(180deg, #000 60%, transparent 98%);
  }
}
.grain {
  position: fixed;
  inset: -40px;
  z-index: 60;
  pointer-events: none;
  opacity: 0.05;
  mix-blend-mode: overlay;
  background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="180" height="180"><filter id="n"><feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="2"/></filter><rect width="100%" height="100%" filter="url(%23n)"/></svg>');
}
.no-webgl #stage {
  display: none;
}
.webgl-fallback {
  display: none;
  position: absolute;
  right: 6vw;
  top: 50%;
  transform: translateY(-50%);
  width: min(44vw, 520px);
  opacity: 0.5;
}
.no-webgl .webgl-fallback {
  display: block;
  animation: spin 40s linear infinite;
}
@keyframes spin {
  to {
    transform: translateY(-50%) rotate(360deg);
  }
}

/* ---------- preloader ---------- */
#boot {
  position: fixed;
  inset: 0;
  z-index: 300;
  background: var(--ink);
  display: none;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 26px;
}
.js #boot {
  display: flex;
}
#boot .glyph {
  width: 74px;
  height: 74px;
}
#boot .glyph circle {
  stroke-dasharray: 132;
  stroke-dashoffset: 132;
  animation: draw 1.1s var(--ease) forwards;
}
#boot .glyph path {
  opacity: 0;
  animation: tick 0.4s 0.8s forwards;
}
@keyframes draw {
  to {
    stroke-dashoffset: 0;
  }
}
@keyframes tick {
  to {
    opacity: 1;
  }
}
#boot .boot-word {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.5em;
  text-transform: uppercase;
  color: var(--steel-2);
  padding-left: 0.5em;
}

/* ---------- nav ---------- */
#nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 120;
  height: var(--nav-h);
  transition:
    transform 0.45s var(--ease),
    background 0.4s,
    border-color 0.4s;
  border-bottom: 1px solid transparent;
}
#nav.scrolled {
  background: color-mix(in srgb, var(--ink) 82%, transparent);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-color: var(--line-l-soft);
}
#nav.on-light.scrolled {
  background: color-mix(in srgb, var(--porcelain) 84%, transparent);
  border-color: var(--line-d-soft);
}
#nav.hid {
  transform: translateY(-100%);
}
#nav .nav-in {
  max-width: var(--max);
  margin: 0 auto;
  height: 100%;
  padding: 0 var(--gutter);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}
.brand {
  display: flex;
  align-items: center;
  gap: 13px;
  color: var(--t-light);
  transition: color 0.4s;
}
#nav.on-light .brand {
  color: var(--t-dark);
}
.brand .glyph {
  width: 30px;
  height: 30px;
  flex: none;
  transition: transform 0.8s var(--ease);
}
.brand:hover .glyph {
  transform: rotate(180deg);
}
.brand b {
  font-stretch: 120%;
  font-weight: 660;
  font-size: 1.16rem;
  letter-spacing: 0.02em;
  line-height: 1;
}
.brand .logo {
  display: block;
  height: 30px;
  aspect-ratio: 1.961;
  background: currentColor;
  mask: url('../assets/brand/wordmark.webp') center/contain no-repeat;
}
footer .brand .logo {
  height: 46px;
}
.nav-links {
  display: flex;
  align-items: center;
  gap: clamp(16px, 2.4vw, 34px);
  list-style: none;
}
.nav-links a:not(.btn) {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--t-light-2);
  position: relative;
  padding: 6px 0;
  transition: color 0.3s;
}
#nav.on-light .nav-links a:not(.btn) {
  color: var(--t-dark-2);
}
.nav-links a:not(.btn)::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  height: 1px;
  width: 100%;
  background: var(--amber);
  transform: scaleX(0);
  transform-origin: right;
  transition: transform 0.4s var(--ease);
}
.nav-links a:not(.btn):hover {
  color: var(--amber);
}
.nav-links a:not(.btn):hover::after {
  transform: scaleX(1);
  transform-origin: left;
}
.ext::after {
  content: '↗';
  margin-left: 0.45em;
  font-family: var(--disp);
}
#progress {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  z-index: 130;
  background: var(--amber);
  transform: scaleX(0);
  transform-origin: left;
}
.burger {
  display: none;
  width: 44px;
  height: 44px;
  position: relative;
  z-index: 220;
}
.burger i {
  position: absolute;
  left: 11px;
  right: 11px;
  height: 1.6px;
  background: currentColor;
  transition: 0.35s var(--ease);
}
.burger i:nth-child(1) {
  top: 17px;
}
.burger i:nth-child(2) {
  top: 26px;
}
.burger.open i:nth-child(1) {
  top: 21.5px;
  transform: rotate(45deg);
}
.burger.open i:nth-child(2) {
  top: 21.5px;
  transform: rotate(-45deg);
}
#nav .burger {
  color: var(--t-light);
}
#nav.on-light .burger {
  color: var(--t-dark);
}
#nav.menu-open .burger {
  color: var(--t-light) !important;
}
#mmenu {
  position: fixed;
  inset: 0;
  z-index: 200;
  background: var(--ink);
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 0 var(--gutter);
  visibility: hidden;
  opacity: 0;
  transition:
    opacity 0.4s,
    visibility 0s 0.4s;
}
#mmenu.open {
  visibility: visible;
  opacity: 1;
  transition: opacity 0.4s;
}
#mmenu a {
  font-stretch: 118%;
  font-weight: 600;
  font-size: clamp(2rem, 9vw, 3.4rem);
  line-height: 1.28;
  color: var(--t-light);
  display: flex;
  align-items: baseline;
  gap: 18px;
  transform: translateY(26px);
  opacity: 0;
  transition:
    transform 0.6s var(--ease),
    opacity 0.6s,
    color 0.3s;
}
#mmenu.open a {
  transform: none;
  opacity: 1;
}
#mmenu a:hover {
  color: var(--amber);
}
#mmenu a small {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.2em;
  color: var(--steel);
}
#mmenu .mm-foot {
  margin-top: 9vh;
  display: flex;
  gap: 26px;
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--steel-2);
}

/* ---------- buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 0.7rem;
  padding: 1rem 1.7rem;
  border-radius: 999px;
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  line-height: 1;
  position: relative;
  overflow: hidden;
  transition:
    transform 0.35s var(--ease),
    box-shadow 0.35s,
    color 0.35s,
    border-color 0.35s;
  white-space: nowrap;
}
.btn .arr {
  transition: transform 0.35s var(--ease);
}
.btn:hover .arr {
  transform: translateX(4px);
}
.btn-solid {
  background: var(--amber);
  color: var(--ink);
}
.btn-solid::before {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--t-light);
  transform: translateY(102%);
  transition: transform 0.45s var(--ease);
  border-radius: inherit;
}
.btn-solid:hover::before {
  transform: translateY(0);
}
.btn-solid > * {
  position: relative;
  z-index: 1;
}
.btn-solid:hover {
  box-shadow: 0 14px 34px -12px rgba(232, 160, 60, 0.55);
}
.btn-line {
  border: 1px solid;
  color: inherit;
}
.dark .btn-line,
#nav .btn-line {
  border-color: var(--line-l);
  color: var(--t-light);
}
.light .btn-line {
  border-color: var(--line-d);
  color: var(--t-dark);
}
#nav.on-light .btn-line {
  border-color: var(--line-d);
  color: var(--t-dark);
}
.btn-line:hover {
  border-color: var(--amber);
  color: var(--amber);
}
#nav .btn {
  padding: 0.8rem 1.3rem;
}

/* ---------- hero ---------- */
#hero {
  min-height: 100svh;
  display: flex;
  align-items: center;
  padding-top: calc(var(--nav-h) + 4vh);
  padding-bottom: 12vh;
}
#hero .hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.06fr) minmax(0, 0.94fr);
  gap: 40px;
  align-items: center;
  width: 100%;
}
#hero h1 {
  margin: 26px 0 30px;
  max-width: 12ch;
}
.hl {
  color: var(--amber);
}
.hero-ctas {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px;
  margin-top: 40px;
}
.hero-shop {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--steel-2);
  border-bottom: 1px solid var(--line-l);
  padding-bottom: 4px;
  transition:
    color 0.3s,
    border-color 0.3s;
}
.hero-shop:hover {
  color: var(--amber);
  border-color: var(--amber);
}
.hero-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 52px;
}
.chip {
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--t-light-2);
  border: 1px solid var(--line-l);
  border-radius: 999px;
  padding: 0.55rem 0.95rem;
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
}
.chip::before {
  content: '';
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--amber);
  box-shadow: 0 0 8px rgba(232, 160, 60, 0.9);
}
.scroll-cue {
  position: absolute;
  left: var(--gutter);
  bottom: 34px;
  display: flex;
  align-items: center;
  gap: 14px;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--steel);
}
.scroll-cue .tick {
  width: 1px;
  height: 44px;
  background: var(--line-l);
  position: relative;
  overflow: hidden;
}
.scroll-cue .tick::after {
  content: '';
  position: absolute;
  left: 0;
  top: -50%;
  width: 100%;
  height: 50%;
  background: var(--amber);
  animation: fall 2.1s var(--ease) infinite;
}
@keyframes fall {
  0% {
    top: -50%;
  }
  70%,
  100% {
    top: 110%;
  }
}

/* ---------- gap (light ledger) ---------- */
#gap {
  padding: clamp(90px, 13vw, 170px) 0;
}
#gap .cols {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: clamp(40px, 6vw, 110px);
  align-items: start;
}
#gap .sticky {
  position: sticky;
  top: calc(var(--nav-h) + 32px);
  display: grid;
  gap: 26px;
}
.ledger {
  border-top: 1px solid var(--line-d);
}
.ledger-row {
  display: grid;
  grid-template-columns: 118px 1fr;
  gap: 20px;
  padding: clamp(22px, 2.6vw, 34px) 0;
  border-bottom: 1px solid var(--line-d);
  transition: background 0.3s;
}
.ledger-row .tag {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--amber-deep);
  padding-top: 0.5em;
  transition: color 0.3s;
}
.ledger-row h3 {
  font-stretch: 112%;
  font-weight: 580;
  font-size: clamp(1.15rem, 1.7vw, 1.5rem);
  letter-spacing: -0.01em;
  margin-bottom: 0.45rem;
  transition: transform 0.45s var(--ease);
}
.ledger-row p {
  color: var(--t-dark-2);
  font-size: 0.95rem;
  max-width: 52ch;
}
.ledger-row:hover h3 {
  transform: translateX(8px);
}
.ledger-row:hover .tag {
  color: var(--amber);
}
.gap-turn {
  margin-top: clamp(54px, 7vw, 96px);
  padding-top: 34px;
  border-top: 1px solid var(--line-d);
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 22px;
  align-items: start;
}
.gap-turn .glyph {
  width: 44px;
  height: 44px;
  color: var(--amber-deep);
}
.gap-turn p {
  font-stretch: 110%;
  font-weight: 540;
  font-size: clamp(1.25rem, 2.2vw, 1.9rem);
  line-height: 1.28;
  letter-spacing: -0.01em;
  max-width: 30ch;
}

/* ---------- the loop (pinned machine sequence) ---------- */
#technology {
  color: var(--t-light);
}
.loop-stage {
  position: relative;
  min-height: 100svh;
  display: flex;
  align-items: center;
  padding: calc(var(--nav-h) + 20px) 0 40px;
}
.loop-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.98fr) minmax(0, 1.02fr);
  gap: 40px;
  width: 100%;
  align-items: center;
}
.loop-left {
  position: relative;
  min-height: min(66svh, 620px);
}
.loop-intro,
.loop-phase {
  max-width: 560px;
}
.loop-intro h2 {
  margin: 24px 0 18px;
  max-width: 14ch;
}
.loop-hint {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 34px;
  font-family: var(--mono);
  font-size: 0.64rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--steel);
}
.loop-hint::after {
  content: '';
  width: 44px;
  height: 1px;
  background: var(--line-l);
  flex: none;
}
.phase-idx {
  display: flex;
  align-items: baseline;
  gap: 18px;
  margin-bottom: 18px;
}
.phase-idx .n {
  font-family: var(--mono);
  font-size: 0.78rem;
  letter-spacing: 0.2em;
  color: var(--amber);
}
.phase-idx .of {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.2em;
  color: var(--steel);
}
.loop-phase h3 {
  font-stretch: 122%;
  font-weight: 640;
  font-size: clamp(2.6rem, 5.4vw, 4.6rem);
  line-height: 0.98;
  letter-spacing: -0.01em;
  text-transform: uppercase;
}
.loop-phase .tagline {
  font-stretch: 108%;
  font-weight: 520;
  font-size: clamp(1.1rem, 1.7vw, 1.45rem);
  color: var(--amber-hi);
  margin: 18px 0 14px;
  letter-spacing: -0.005em;
}
.loop-phase .body {
  color: var(--t-light-2);
  max-width: 46ch;
}
.phase-specs {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1px;
  background: var(--line-l);
  border: 1px solid var(--line-l);
  margin-top: 30px;
  border-radius: 8px;
  overflow: hidden;
}
.phase-specs .kv {
  background: var(--ink);
  padding: 14px 16px;
  display: grid;
  gap: 6px;
}
.phase-specs .k {
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--steel);
}
.phase-specs .v {
  font-stretch: 112%;
  font-weight: 600;
  font-size: clamp(0.92rem, 1.25vw, 1.12rem);
  letter-spacing: -0.01em;
}
/* pinned-mode overrides applied by JS */
.js-pin .loop-intro,
.js-pin .loop-phase {
  position: absolute;
  top: 50%;
  left: 0;
  width: 100%;
}
.js-pin .loop-phase {
  opacity: 0;
  visibility: hidden;
}
body:not(.js-pin) .loop-left {
  display: grid;
  gap: 64px;
  min-height: 0;
}
body:not(.js-pin) .loop-stage {
  padding-bottom: 110px;
}
body:not(.js-pin) .loop-hint {
  display: none;
}
/* dial */
.loop-right {
  display: flex;
  justify-content: center;
  pointer-events: none;
}
.dial {
  position: relative;
  width: min(340px, 64vw);
  aspect-ratio: 1;
}
.dial::before {
  content: '';
  position: absolute;
  inset: -9%;
  border-radius: 50%;
  background: radial-gradient(
    circle,
    rgba(12, 13, 16, 0.78) 0%,
    rgba(12, 13, 16, 0.66) 62%,
    rgba(12, 13, 16, 0) 74%
  );
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}
.dial svg,
.dial-read {
  position: relative;
}
.dial svg {
  width: 100%;
  height: 100%;
  overflow: visible;
}
.dial .track {
  stroke: rgba(237, 234, 226, 0.22);
  fill: none;
  stroke-width: 1.4;
}
.dial .prog {
  stroke: var(--amber);
  fill: none;
  stroke-width: 2.6;
  stroke-linecap: round;
  filter: drop-shadow(0 0 7px rgba(232, 160, 60, 0.7));
}
.dial .tickline {
  stroke: rgba(155, 160, 168, 0.8);
  stroke-width: 1.2;
}
.dial .stn {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  fill: rgba(200, 203, 210, 0.85);
  transition: fill 0.3s;
  paint-order: stroke;
  stroke: rgba(12, 13, 16, 0.85);
  stroke-width: 3px;
}
.dial .stn.act {
  fill: var(--amber);
}
.dial .needle {
  stroke: var(--amber);
  stroke-width: 2;
  stroke-linecap: round;
}
.dial .hub {
  fill: var(--amber);
}
.dial-read {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  text-align: center;
}
.dial-read .dr-n {
  font-family: var(--mono);
  font-size: 0.7rem;
  letter-spacing: 0.3em;
  color: var(--t-light-2);
}
.dial-read .dr-name {
  font-stretch: 122%;
  font-weight: 680;
  font-size: clamp(1.3rem, 2.1vw, 1.8rem);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--t-light);
}
.dial-read .dr-sub {
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--steel-2);
}
.loop-outro {
  text-align: center;
  padding: 0 0 clamp(90px, 12vw, 150px);
}
.loop-outro p {
  font-stretch: 114%;
  font-weight: 560;
  font-size: clamp(1.4rem, 2.6vw, 2.3rem);
  letter-spacing: -0.01em;
  line-height: 1.25;
  max-width: 26ch;
  margin: 0 auto;
}
.loop-outro em {
  font-style: normal;
  color: var(--amber);
}

/* ---------- platform ---------- */
#platform {
  padding: clamp(90px, 13vw, 170px) 0;
}
.plat-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(44px, 6vw, 100px);
  align-items: center;
  margin-bottom: clamp(70px, 9vw, 130px);
}
.stack-scene {
  perspective: 1300px;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 420px;
}
.stack3d {
  position: relative;
  width: min(340px, 72vw);
  aspect-ratio: 1;
  transform-style: preserve-3d;
  transform: rotateX(57deg) rotateZ(-42deg);
}
.plate {
  position: absolute;
  inset: 0;
  border: 1px solid var(--line-d);
  border-radius: 12px;
  background: linear-gradient(135deg, rgba(250, 249, 246, 0.92), rgba(231, 228, 220, 0.88));
  transition:
    transform 0.6s var(--ease),
    border-color 0.4s,
    box-shadow 0.6s,
    background 0.4s;
  box-shadow: 0 2px 0 rgba(13, 14, 17, 0.05);
}
.plate::before {
  content: '';
  position: absolute;
  inset: 14px;
  border-radius: 8px;
  background:
    repeating-linear-gradient(0deg, var(--line-d-soft) 0 1px, transparent 1px 26px),
    repeating-linear-gradient(90deg, var(--line-d-soft) 0 1px, transparent 1px 26px);
  opacity: 0.7;
}
.plate .plabel {
  position: absolute;
  left: 18px;
  bottom: 14px;
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--steel);
}
.plate .pdot {
  position: absolute;
  right: 16px;
  top: 14px;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--line-d);
  transition:
    background 0.3s,
    box-shadow 0.3s;
}
.plate.p0 {
  transform: translateZ(0);
}
.plate.p1 {
  transform: translateZ(58px);
}
.plate.p2 {
  transform: translateZ(116px);
}
.plate.act {
  border-color: var(--amber);
  background: linear-gradient(135deg, #fdf6e9, #f5e6c8);
}
.plate.act .pdot {
  background: var(--amber);
  box-shadow: 0 0 10px rgba(232, 160, 60, 0.8);
}
.plate.p0.act {
  transform: translateZ(26px);
}
.plate.p1.act {
  transform: translateZ(84px);
}
.plate.p2.act {
  transform: translateZ(142px);
}
#heroRobot {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  transition: opacity 0.8s ease;
}
#heroRobot.hid {
  opacity: 0;
}
.stage-scrim {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
  background:
    linear-gradient(
      90deg,
      rgba(12, 13, 16, 0.9) 0%,
      rgba(12, 13, 16, 0.5) 24%,
      rgba(12, 13, 16, 0) 40%,
      rgba(12, 13, 16, 0) 60%,
      rgba(12, 13, 16, 0.42) 78%,
      rgba(12, 13, 16, 0.8) 100%
    ),
    linear-gradient(0deg, rgba(12, 13, 16, 0.55) 0%, rgba(12, 13, 16, 0) 26%);
}
#hud {
  position: absolute;
  left: 50%;
  top: 13%;
  transform: translateX(-50%);
  display: grid;
  gap: 8px;
  justify-items: center;
  text-align: center;
}
.hud-i {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.14em;
  color: rgba(237, 234, 226, 0.92);
  opacity: 0;
  white-space: nowrap;
  text-shadow: 0 1px 10px rgba(12, 13, 16, 0.9);
}
@media (max-width: 980px) {
  #hud {
    display: none;
  }
}
#heroRobot canvas {
  width: 100%;
  height: 100%;
  display: block;
  opacity: 0;
  transition: opacity 1s ease 0.15s;
}
#heroRobot.is-ready canvas {
  opacity: 1;
}
.hr-load {
  position: absolute;
  right: 30px;
  bottom: 24px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  color: var(--steel);
}
#heroRobot.is-ready .hr-load {
  display: none;
}
.hr-telemetry {
  position: absolute;
  right: 30px;
  bottom: 24px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  color: rgba(110, 116, 126, 0.9);
  opacity: 0;
  transition: opacity 0.6s ease 0.6s;
  white-space: pre;
}
#heroRobot.is-ready .hr-telemetry {
  opacity: 1;
}
.hr-stage {
  position: absolute;
  right: 30px;
  bottom: 42px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.16em;
  color: var(--amber);
  opacity: 0;
  transition: opacity 0.5s;
}
#heroRobot.is-ready .hr-stage {
  opacity: 0.9;
}
@media (max-width: 560px) {
  .hr-load,
  .hr-telemetry {
    right: 16px;
    bottom: 14px;
    font-size: 9px;
  }
  .hr-stage {
    right: 16px;
    bottom: 30px;
    font-size: 9px;
  }
}
/* scan portrait card */
#scanSymbol {
  position: absolute;
  left: 6vw;
  top: calc(var(--nav-h) + 26px);
  width: 206px;
  z-index: 2;
  pointer-events: none;
  opacity: 0;
  color: var(--t-light);
  will-change: opacity;
}
.ss-kicker {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 11px;
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.22em;
  color: var(--amber);
}
.ss-kicker::before {
  content: '';
  width: 22px;
  height: 1px;
  background: var(--amber);
}
.ss-portrait {
  position: relative;
  width: 100%;
  aspect-ratio: 1;
  background: var(--ink);
  isolation: isolate;
}
.ss-photo {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  mix-blend-mode: lighten;
  filter: saturate(0.72) brightness(0.86) contrast(1.04);
  -webkit-mask-image: radial-gradient(
    ellipse 76% 84% at 48% 49%,
    #000 44%,
    rgba(0, 0, 0, 0.96) 59%,
    rgba(0, 0, 0, 0.48) 79%,
    transparent 100%
  );
  mask-image: radial-gradient(
    ellipse 76% 84% at 48% 49%,
    #000 44%,
    rgba(0, 0, 0, 0.96) 59%,
    rgba(0, 0, 0, 0.48) 79%,
    transparent 100%
  );
}
.ss-graphic {
  position: absolute;
  inset: 0;
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
  z-index: 2;
}
.ss-frame {
  fill: rgba(232, 160, 60, 0.018);
  stroke: rgba(232, 160, 60, 0.5);
  stroke-width: 0.28;
  stroke-dasharray: 1.2 1.8;
}
.ss-layer {
  fill: none;
  stroke: rgba(237, 234, 226, 0.48);
  stroke-width: 0.2;
}
.ss-layer:nth-child(even) {
  stroke: rgba(200, 203, 210, 0.28);
}
.ss-node {
  fill: var(--amber);
}
.ss-node-muted {
  fill: rgba(237, 234, 226, 0.42);
}
.ss-sweep-line {
  stroke: var(--amber);
  stroke-width: 0.42;
}
.ss-sweep-glow {
  fill: url(#ssGlow);
}
.ss-label {
  font-family: var(--mono);
  font-size: 2.55px;
  letter-spacing: 0.12em;
  fill: rgba(200, 203, 210, 0.76);
  paint-order: stroke;
  stroke: rgba(12, 13, 16, 0.9);
  stroke-width: 0.6px;
}
.ss-copy {
  display: grid;
  gap: 5px;
  margin-top: 11px;
}
.ss-title {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  color: var(--t-light);
}
.ss-sub {
  font-family: var(--mono);
  font-size: 8.5px;
  letter-spacing: 0.1em;
  line-height: 1.5;
  color: var(--steel-2);
}
@media (max-width: 900px) {
  #scanSymbol {
    left: 16px;
    top: calc(var(--nav-h) + 14px);
    width: 150px;
  }
  .ss-sub,
  .ss-label {
    display: none;
  }
  .ss-kicker {
    margin-bottom: 7px;
    font-size: 7.5px;
    gap: 6px;
  }
  .ss-kicker::before {
    width: 14px;
  }
  .ss-copy {
    margin-top: 5px;
  }
}
#hero .wrap {
  position: relative;
  z-index: 2;
}
@media (pointer: fine) {
  #hero {
    cursor: none;
  }
  #hero a,
  #hero button {
    cursor: pointer;
  }
}
.kch {
  display: inline-block;
  font-variation-settings: 'wdth' 116;
  will-change: font-variation-settings, transform;
}
#lensCv {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
}
#lensFinding {
  position: absolute;
  z-index: 3;
  pointer-events: none;
  opacity: 0;
  transform: translateY(6px);
  transition:
    opacity 0.3s,
    transform 0.3s;
  max-width: 300px;
}
#lensFinding.on {
  opacity: 1;
  transform: none;
}
#lensFinding .fh {
  font-size: 15px;
  font-weight: 600;
  line-height: 1.4;
  letter-spacing: -0.01em;
  color: var(--t-light);
}
#lensFinding .fh b {
  color: var(--amber);
  font-weight: 600;
}
#lensFinding .ft {
  margin-top: 6px;
  font-family: var(--mono);
  font-size: 9.5px;
  letter-spacing: 0.12em;
  color: var(--steel-2);
}
#lensTray {
  position: absolute;
  right: 6vw;
  bottom: 12vh;
  z-index: 3;
  width: 262px;
  background: rgba(16, 18, 24, 0.82);
  border: 1px solid rgba(237, 234, 226, 0.14);
  border-radius: 14px;
  padding: 15px 17px;
  backdrop-filter: blur(10px);
}
#lensTray .th {
  font-family: var(--mono);
  font-size: 8.5px;
  letter-spacing: 0.2em;
  color: var(--steel-2);
  margin-bottom: 11px;
}
#lensTray .chips {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  min-height: 28px;
}
#lensTray .chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  border: 1px solid rgba(237, 234, 226, 0.25);
  border-radius: 99px;
  padding: 4px 11px;
  font-size: 12px;
  color: var(--t-light);
  animation: chipIn 0.45s cubic-bezier(0.2, 0.9, 0.3, 1.2);
}
#lensTray .chip i {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--amber);
  box-shadow: 0 0 8px rgba(232, 160, 60, 0.8);
}
@keyframes chipIn {
  from {
    opacity: 0;
    transform: scale(0.6) translateY(6px);
  }
}
#lensTray .tf {
  display: block;
  margin-top: 11px;
  font-family: var(--mono);
  font-size: 9px;
  letter-spacing: 0.14em;
  color: var(--steel);
  text-decoration: none;
  pointer-events: none;
}
#lensTray .tf.done {
  color: var(--amber);
  pointer-events: auto;
  animation: trayPulse 1.6s ease-in-out infinite;
}
@keyframes trayPulse {
  0%,
  100% {
    opacity: 0.75;
  }
  50% {
    opacity: 1;
  }
}
#lensCap {
  position: absolute;
  left: 50%;
  bottom: 15vh;
  transform: translateX(-50%);
  z-index: 3;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: 0.24em;
  color: var(--t-light);
  opacity: 0;
  transition: opacity 0.5s;
  white-space: nowrap;
  text-shadow: 0 1px 12px rgba(12, 13, 16, 0.9);
}
#lensCap.on {
  opacity: 0.95;
}
#lensCap b {
  color: var(--amber);
  font-weight: 400;
}
.kch {
  display: inline-block;
  transform-origin: 50% 82%;
  will-change: font-variation-settings, transform;
}
@media (max-width: 760px) {
  #lensTray {
    right: 14px;
    left: 14px;
    width: auto;
    bottom: 76px;
  }
  #lensCap {
    display: none;
  }
}
.stack-scene {
  position: relative;
}
.plate .schem {
  position: absolute;
  left: 16px;
  right: 16px;
  top: 16px;
  bottom: 38px;
  width: calc(100% - 32px);
  height: calc(100% - 54px);
  opacity: 0.45;
  transition: opacity 0.45s;
}
.plate.act .schem {
  opacity: 1;
}
#pulseCv {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 6;
}
.rack {
  width: min(460px, 88vw);
}
.rack canvas {
  display: block;
  width: 100%;
  aspect-ratio: 0.82;
  height: auto;
  filter: drop-shadow(0 24px 60px rgba(12, 13, 16, 0.28));
}
/* blueprint (technical cutaway) */
.bp {
  width: min(660px, 100%);
  background:
    repeating-linear-gradient(0deg, rgba(12, 13, 16, 0.026) 0 1px, transparent 1px 24px),
    repeating-linear-gradient(90deg, rgba(12, 13, 16, 0.026) 0 1px, transparent 1px 24px),
    var(--paper);
  border: 1px solid var(--line-d);
  border-radius: 14px;
  padding: 18px;
  position: relative;
  overflow: hidden;
  isolation: isolate;
}
.bp::before,
.bp::after {
  content: '';
  position: absolute;
  width: 14px;
  height: 14px;
  border: 1px solid rgba(12, 13, 16, 0.3);
  z-index: 2;
}
.bp::before {
  left: 10px;
  top: 10px;
  border-right: 0;
  border-bottom: 0;
}
.bp::after {
  right: 10px;
  bottom: 10px;
  border-left: 0;
  border-top: 0;
}
.bp svg {
  width: 100%;
  height: auto;
  display: block;
  shape-rendering: geometricPrecision;
}
.bp .s {
  fill: none;
  stroke: #2a2d35;
  stroke-width: 1.2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.bp .thin {
  stroke-width: 0.75;
}
.bp .dl {
  fill: none;
  stroke: #2a2d35;
  stroke-width: 0.75;
}
.bp .cl {
  stroke-dasharray: 8 4 1.5 4;
  stroke-width: 0.7;
  opacity: 0.5;
}
.bp .hid {
  stroke-dasharray: 4 3;
  opacity: 0.6;
}
.bp .amb {
  stroke: #c9891f;
}
.bp .ambf {
  fill: #e8a03c;
}
.bp .s,
.bp .dl,
.bp .hz {
  vector-effect: non-scaling-stroke;
}
.bp text {
  font-family: var(--mono);
  font-size: 8.8px;
  letter-spacing: 0.075em;
  fill: #343740;
}
.bp .fl {
  opacity: 0;
}
.bp .fl1 {
  fill: rgba(89, 99, 111, 0.11);
}
.bp .fl2 {
  fill: rgba(154, 107, 39, 0.105);
}
.bp .fl3 {
  fill: rgba(232, 160, 60, 0.1);
}
.bp g.g3,
.bp g.g2,
.bp g.g1 {
  opacity: 1;
}
.bp[data-f='2'] g.g2,
.bp[data-f='2'] g.g1 {
  opacity: 0.78;
}
.bp[data-f='1'] g.g3,
.bp[data-f='1'] g.g1 {
  opacity: 0.78;
}
.bp[data-f='0'] g.g3,
.bp[data-f='0'] g.g2 {
  opacity: 0.78;
}
.bp[data-f='2'] g.g3 .s,
.bp[data-f='2'] g.g3 .dl {
  stroke: #b0741b;
}
.bp[data-f='1'] g.g2 .s,
.bp[data-f='1'] g.g2 .dl {
  stroke: #9a6b27;
}
.bp[data-f='0'] g.g1 .s,
.bp[data-f='0'] g.g1 .dl {
  stroke: #59636f;
}
.bp[data-f='2'] g.g3 text {
  fill: #8a5d14;
}
.bp[data-f='1'] g.g2 text {
  fill: #805719;
}
.bp[data-f='0'] g.g1 text {
  fill: #4d5661;
}
.bp[data-f='2'] .fl3,
.bp[data-f='1'] .fl2,
.bp[data-f='0'] .fl1 {
  opacity: 1;
}
.bp .g1 .amb {
  stroke: #59636f;
}
.bp .g1 .ambf {
  fill: #59636f;
}
.bp .g2 .amb {
  stroke: #9a6b27;
}
.bp .g2 .ambf {
  fill: #9a6b27;
}
.bp #l1Fx .cartridge-live {
  fill: rgba(89, 99, 111, 0.16);
  stroke: #59636f;
}
.bp #l1Fx .calibration {
  fill: #4d5661;
}
.bp #l2Fx .signal-packet,
.bp #l2Fx .dose {
  fill: #9a6b27;
}
.bp #l2Fx .batch-response {
  fill: rgba(154, 107, 39, 0.14);
  stroke: #9a6b27;
}
.bp #l2Fx .calibration {
  fill: #805719;
}
.bp .hover-r {
  fill: transparent;
  pointer-events: all;
}
.bp g.ann {
  pointer-events: all;
}
.bp g.ann:hover text {
  fill: #8a5d14;
}
.bp g.ann:hover .dl {
  stroke: #b0741b;
  opacity: 1;
}
.bp .pring {
  fill: none;
  stroke: #c9891f;
  stroke-width: 1;
  opacity: 0;
  transform-box: fill-box;
  transform-origin: center;
}
.bp .motion-fx {
  pointer-events: none;
}
.bp .scan-wash {
  fill: url(#scanFade);
  opacity: 0;
}
.bp .scan-line {
  stroke: #c9891f;
  stroke-width: 1.1;
  opacity: 0;
  filter: url(#softGlow);
}
.bp .sensor-ray {
  stroke: #c9891f;
  stroke-width: 0.7;
  stroke-dasharray: 3 4;
  opacity: 0;
}
.bp .compute-pulse {
  fill: none;
  stroke: #c9891f;
  stroke-width: 1;
  opacity: 0;
  transform-box: fill-box;
  transform-origin: center;
}
.bp .signal-path {
  fill: none;
  stroke: #c9891f;
  stroke-width: 1;
  stroke-dasharray: 4 5;
  opacity: 0;
}
.bp .signal-packet {
  fill: #e8a03c;
  opacity: 0;
  filter: url(#softGlow);
}
.bp .cartridge-live {
  fill: rgba(232, 160, 60, 0.16);
  stroke: #c9891f;
  stroke-width: 0.8;
  opacity: 0;
}
.bp .dose {
  fill: #e8a03c;
  opacity: 0;
  filter: url(#softGlow);
}
.bp .batch-response {
  fill: rgba(232, 160, 60, 0.13);
  stroke: #c9891f;
  stroke-width: 0.7;
  opacity: 0;
}
.bp .calibration {
  font-size: 7.6px;
  fill: #8a5d14;
  opacity: 0;
}
.bp[data-running='true'] #bpLive {
  position: absolute;
  left: 18px;
  bottom: 13px;
  z-index: 3;
  font-family: var(--mono);
  font-size: 8px;
  letter-spacing: 0.13em;
  color: #8a5d14;
  opacity: 0.8;
  pointer-events: none;
}
@media (prefers-reduced-motion: reduce) {
  .bp .s {
    stroke-dasharray: none !important;
    stroke-dashoffset: 0 !important;
  }
  .bp .dl,
  .bp .hz,
  .bp text {
    opacity: 0.88 !important;
  }
  .bp .motion-fx {
    display: none;
  }
}
@media (max-width: 560px) {
  .bp {
    padding: 10px;
    border-radius: 10px;
  }
  .bp text {
    font-size: 9.2px;
    letter-spacing: 0.045em;
  }
  #bpLive {
    left: 12px;
    bottom: 9px;
    font-size: 7px;
  }
  .chips {
    width: 100%;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
  }
  .chips button {
    padding: 7px 4px;
    font-size: 7.5px;
    letter-spacing: 0.08em;
  }
}

.software-accent {
  color: var(--amber-deep);
}
.pillars {
  display: grid;
  gap: 14px;
}
.pillar {
  --layer-color: #59636f;
  --layer-ink: #4d5661;
  --layer-shadow: rgba(89, 99, 111, 0.34);

  position: relative;
  overflow: hidden;
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 18px;
  text-align: left;
  padding: clamp(18px, 2vw, 26px);
  border: 1px solid var(--line-d);
  border-radius: 12px;
  background: var(--paper);
  transition:
    border-color 0.35s,
    transform 0.35s var(--ease),
    box-shadow 0.35s;
  align-items: start;
}
.pillar[data-pillar='1'] {
  --layer-color: #9a6b27;
  --layer-ink: #805719;
  --layer-shadow: rgba(154, 107, 39, 0.34);
}
.pillar[data-pillar='2'] {
  --layer-color: #c9891f;
  --layer-ink: #8a5d14;
  --layer-shadow: rgba(138, 93, 20, 0.42);
}
.pillar::before {
  content: '';
  position: absolute;
  inset: 0 auto 0 0;
  width: 3px;
  background: var(--layer-color);
  opacity: 0.38;
  transition:
    opacity 0.35s,
    width 0.35s var(--ease);
}
.pillar:hover {
  transform: translateX(6px);
}
.pillar[aria-pressed='true'] {
  border-color: var(--layer-color);
  box-shadow: 0 18px 40px -26px var(--layer-shadow);
}
.pillar[aria-pressed='true']::before {
  width: 4px;
  opacity: 1;
}
.pillar .pk {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.18em;
  color: var(--layer-ink);
  padding-top: 0.35em;
}
.pillar h3 {
  font-stretch: 112%;
  font-weight: 600;
  font-size: clamp(1.05rem, 1.5vw, 1.3rem);
  margin-bottom: 0.4rem;
  letter-spacing: -0.01em;
}
.pillar p {
  color: var(--t-dark-2);
  font-size: 0.92rem;
}
/* datasheet */
.sheet {
  position: relative;
  border: 1px solid var(--line-d);
  border-radius: 14px;
  background: var(--paper);
  padding: clamp(26px, 3.4vw, 48px);
  margin-bottom: clamp(70px, 9vw, 130px);
}
.sheet .corner {
  position: absolute;
  width: 14px;
  height: 14px;
  border-color: var(--amber);
  border-style: solid;
}
.sheet .c1 {
  top: -1px;
  left: -1px;
  border-width: 2px 0 0 2px;
  border-radius: 14px 0 0 0;
}
.sheet .c2 {
  top: -1px;
  right: -1px;
  border-width: 2px 2px 0 0;
  border-radius: 0 14px 0 0;
}
.sheet .c3 {
  bottom: -1px;
  left: -1px;
  border-width: 0 0 2px 2px;
  border-radius: 0 0 0 14px;
}
.sheet .c4 {
  bottom: -1px;
  right: -1px;
  border-width: 0 2px 2px 0;
  border-radius: 0 0 14px 0;
}
.sheet-top {
  display: flex;
  justify-content: space-between;
  gap: 20px;
  align-items: baseline;
  margin-bottom: 26px;
  flex-wrap: wrap;
}
.sheet-top .doc {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--steel);
}
.sheet-rows {
  border-top: 1px solid var(--line-d);
}
.srow {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: baseline;
  gap: 18px;
  padding: clamp(16px, 1.8vw, 22px) 0;
  border-bottom: 1px solid var(--line-d-soft);
  transition:
    background 0.25s,
    padding-left 0.35s var(--ease);
}
.srow:hover {
  padding-left: 12px;
  background: linear-gradient(90deg, rgba(232, 160, 60, 0.07), transparent 60%);
}
.srow .sk {
  font-family: var(--mono);
  font-size: 0.66rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--t-dark-2);
}
.srow .sv {
  font-stretch: 116%;
  font-weight: 620;
  font-size: clamp(1.15rem, 2vw, 1.7rem);
  letter-spacing: -0.015em;
  text-align: right;
}
.badge-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 26px;
}
.badge {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  border: 1px solid var(--line-d);
  border-radius: 999px;
  padding: 0.5rem 0.9rem;
  color: var(--t-dark-2);
}
/* deployment */
.deploy {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1px;
  background: var(--line-d);
  border: 1px solid var(--line-d);
  border-radius: 14px;
  overflow: hidden;
}
.dep {
  background: var(--porcelain);
  padding: clamp(24px, 3vw, 40px);
  display: grid;
  gap: 16px;
  align-content: start;
  transition: background 0.35s;
}
.dep:hover {
  background: var(--paper);
}
.dep .ic {
  width: 44px;
  height: 44px;
  color: var(--amber-deep);
}
.dep h3 {
  font-stretch: 112%;
  font-weight: 600;
  font-size: 1.15rem;
  letter-spacing: -0.01em;
}
.dep p {
  color: var(--t-dark-2);
  font-size: 0.93rem;
}
.dep .dtag {
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--steel);
}

/* ---------- science ---------- */
#science {
  padding: clamp(90px, 13vw, 170px) 0;
  background: var(--porcelain-2);
}
.sci-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.94fr) minmax(0, 1.06fr);
  gap: clamp(44px, 6vw, 100px);
  align-items: center;
  margin-bottom: clamp(64px, 8vw, 110px);
}
.sci-copy {
  display: grid;
  gap: 22px;
}
.sci-copy .principle {
  font-stretch: 110%;
  font-weight: 550;
  font-size: clamp(1.2rem, 1.9vw, 1.6rem);
  line-height: 1.34;
  letter-spacing: -0.01em;
  border-left: 2px solid var(--amber);
  padding-left: 22px;
  max-width: 34ch;
}
.mol-card {
  position: relative;
  background: var(--ink-2);
  border-radius: 16px;
  padding: 18px;
  border: 1px solid rgba(13, 14, 17, 0.3);
  overflow: hidden;
}
.mol-card canvas {
  width: 100%;
  height: 320px;
  display: block;
  border-radius: 8px;
}
.mol-legend {
  display: flex;
  justify-content: space-between;
  gap: 14px;
  padding: 14px 6px 2px;
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--steel-2);
  flex-wrap: wrap;
}
.mol-legend b {
  color: var(--amber);
  font-weight: 400;
}
.mol-legend i {
  font-style: normal;
  color: var(--t-light-2);
}
.sci-freedom {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(40px, 6vw, 100px);
  align-items: start;
  padding-top: clamp(50px, 6vw, 80px);
  border-top: 1px solid var(--line-d);
}
.sci-freedom h3 {
  font-stretch: 114%;
  font-weight: 590;
  font-size: clamp(1.5rem, 2.6vw, 2.3rem);
  letter-spacing: -0.015em;
  line-height: 1.12;
  max-width: 18ch;
}
.sci-freedom .fr-copy {
  display: grid;
  gap: 16px;
  color: var(--t-dark-2);
}
.founder-note {
  margin-top: clamp(56px, 7vw, 90px);
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 24px;
  align-items: center;
  background: var(--paper);
  border: 1px solid var(--line-d);
  border-radius: 16px;
  padding: clamp(22px, 3vw, 36px);
}
.founder-note .m-tile {
  width: 78px;
  height: 78px;
  flex: none;
}
.founder-note blockquote {
  font-stretch: 110%;
  font-weight: 540;
  font-size: clamp(1.05rem, 1.7vw, 1.4rem);
  line-height: 1.35;
  letter-spacing: -0.01em;
  max-width: 44ch;
}
.founder-note cite {
  display: block;
  margin-top: 10px;
  font-style: normal;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--steel);
}
.mol-foot {
  padding: 14px 6px 4px;
  font-size: 0.86rem;
  line-height: 1.6;
  color: var(--steel-2);
  border-top: 1px solid rgba(237, 234, 226, 0.08);
  margin-top: 12px;
}
.stack-scene {
  flex-direction: column;
  gap: 18px;
}
.bp-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: center;
}
.fc-intro {
  display: none;
}
.form-card.collapsed .fc-intro {
  display: grid;
  gap: 22px;
  justify-items: start;
}
.fc-intro p {
  color: var(--t-light-2);
  font-size: 0.95rem;
  line-height: 1.6;
  max-width: 46ch;
}
.form-card.collapsed form {
  display: none;
}
.std-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 26px;
}

/* ---------- company ---------- */
#company {
  padding: clamp(90px, 13vw, 170px) 0;
}
.stats {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 1px;
  background: var(--line-d);
  border: 1px solid var(--line-d);
  border-radius: 14px;
  overflow: hidden;
  margin-bottom: clamp(64px, 8vw, 110px);
}
.stat {
  background: var(--porcelain);
  padding: clamp(22px, 2.6vw, 34px);
  display: grid;
  gap: 8px;
  align-content: start;
}
.stat .sv {
  font-stretch: 120%;
  font-weight: 640;
  font-size: clamp(1.7rem, 3.4vw, 2.9rem);
  letter-spacing: -0.02em;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}
.stat .sk {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--t-dark-2);
}
.team-block {
  margin-bottom: clamp(56px, 7vw, 92px);
}
.team-block .tb-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 18px;
  margin-bottom: 26px;
  flex-wrap: wrap;
}
.team-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(14px, 1.6vw, 22px);
}
.person {
  border: 1px solid var(--line-d);
  border-radius: 14px;
  background: var(--paper);
  padding: clamp(16px, 1.8vw, 22px);
  display: grid;
  gap: 14px;
  transition:
    transform 0.4s var(--ease),
    box-shadow 0.4s,
    border-color 0.35s;
}
.person:hover {
  transform: translateY(-5px);
  border-color: rgba(138, 93, 20, 0.45);
  box-shadow: 0 24px 44px -30px rgba(13, 14, 17, 0.4);
}
.m-tile {
  width: 64px;
  height: 64px;
  border-radius: 12px;
  background: var(--ink-2);
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.m-tile::before {
  content: '';
  position: absolute;
  inset: -40%;
  background: repeating-conic-gradient(
    from 0deg,
    rgba(237, 234, 226, 0.07) 0 1deg,
    transparent 1deg 7deg
  );
}
.m-tile b {
  position: relative;
  font-stretch: 122%;
  font-weight: 640;
  font-size: 1.1rem;
  letter-spacing: 0.05em;
  color: var(--amber);
}
.person h3 {
  font-stretch: 110%;
  font-weight: 600;
  font-size: 1.02rem;
  letter-spacing: -0.005em;
}
.person .role {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--amber-deep);
  margin-top: 4px;
}
.person p {
  color: var(--t-dark-2);
  font-size: 0.86rem;
  line-height: 1.5;
}
/* timeline */
.tl {
  position: relative;
  border-top: 1px solid var(--line-d);
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: clamp(18px, 2.4vw, 32px);
  padding-top: 34px;
  margin-bottom: clamp(64px, 8vw, 110px);
}
.tl-item {
  position: relative;
  display: grid;
  gap: 10px;
  align-content: start;
}
.tl-item::before {
  content: '';
  position: absolute;
  top: -39px;
  left: 2px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--porcelain);
  border: 2px solid var(--amber);
  transition: background 0.3s;
}
.tl-item:hover::before {
  background: var(--amber);
}
.tl-item .yr {
  font-family: var(--mono);
  font-size: 0.72rem;
  letter-spacing: 0.24em;
  color: var(--amber-deep);
}
.tl-item h3 {
  font-stretch: 112%;
  font-weight: 600;
  font-size: 1.1rem;
  letter-spacing: -0.01em;
}
.tl-item p {
  color: var(--t-dark-2);
  font-size: 0.9rem;
}
/* press marquee */
.press {
  border-top: 1px solid var(--line-d);
  border-bottom: 1px solid var(--line-d);
  padding: 24px 0 32px;
  display: grid;
  gap: 30px;
}
.press-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 20px;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--steel);
}
.press-index {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 18px 34px;
  flex-wrap: wrap;
}
.press-index li {
  display: flex;
  align-items: baseline;
  gap: 13px;
}
.press-index li i {
  font-style: normal;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.14em;
  color: var(--steel);
  transition: color 0.35s;
}
.press-index li i.lit {
  color: var(--amber);
}
.pname {
  font-stretch: 120%;
  font-weight: 650;
  font-size: clamp(1.5rem, 2.9vw, 2.5rem);
  letter-spacing: 0.04em;
  white-space: nowrap;
  color: rgba(23, 24, 28, 0.86);
}
html.js .press.ghost .pname {
  color: rgba(23, 24, 28, 0.08);
  -webkit-text-stroke: 1px rgba(42, 45, 53, 0.5);
}
@media (max-width: 760px) {
  .press-index {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }
}

/* ---------- partner ---------- */
#partner {
  background: var(--ink);
  color: var(--t-light);
  padding: clamp(96px, 13vw, 180px) 0;
  position: relative;
  overflow: hidden;
}
#partner::before {
  content: '';
  position: absolute;
  inset: 0;
  background: radial-gradient(900px 480px at 82% 8%, rgba(232, 160, 60, 0.09), transparent 62%);
  pointer-events: none;
}
.part-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(44px, 6vw, 110px);
  align-items: start;
  position: relative;
}
.tracks {
  display: grid;
  margin-top: 38px;
  border-top: 1px solid var(--line-l);
}
.track {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 20px;
  align-items: center;
  padding: 22px 0;
  border-bottom: 1px solid var(--line-l);
  transition: padding-left 0.35s var(--ease);
}
.track:hover {
  padding-left: 10px;
}
.track .tk {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.2em;
  color: var(--amber);
}
.track h3 {
  font-stretch: 112%;
  font-weight: 590;
  font-size: clamp(1.05rem, 1.6vw, 1.35rem);
  letter-spacing: -0.01em;
}
.track p {
  color: var(--t-light-2);
  font-size: 0.9rem;
  margin-top: 4px;
  max-width: 44ch;
}
.track .arr {
  color: var(--steel-2);
  transition:
    transform 0.35s var(--ease),
    color 0.3s;
}
.track:hover .arr {
  transform: translateX(6px);
  color: var(--amber);
}
.form-card {
  background: var(--ink-2);
  border: 1px solid var(--line-l);
  border-radius: 18px;
  padding: clamp(24px, 3vw, 42px);
}
.form-card .fc-head {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--steel-2);
  display: flex;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 26px;
}
.chiprow {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 26px;
}
.chiprow label {
  cursor: pointer;
}
.chiprow input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
.chiprow .c {
  display: inline-block;
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  border: 1px solid var(--line-l);
  border-radius: 999px;
  padding: 0.62rem 1rem;
  color: var(--t-light-2);
  transition: all 0.3s;
}
.chiprow input:checked + .c {
  background: var(--amber);
  border-color: var(--amber);
  color: var(--ink);
}
.chiprow input:focus-visible + .c {
  outline: 2px solid var(--amber);
  outline-offset: 3px;
}
.field {
  display: grid;
  gap: 8px;
  margin-bottom: 20px;
}
.field label {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--steel-2);
}
.field input,
.field textarea {
  width: 100%;
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--line-l);
  color: var(--t-light);
  font-family: var(--disp);
  font-size: 1rem;
  padding: 0.65rem 2px;
  transition: border-color 0.3s;
  border-radius: 0;
}
.field textarea {
  resize: vertical;
  min-height: 110px;
  line-height: 1.55;
}
.field input:focus,
.field textarea:focus {
  outline: none;
  border-color: var(--amber);
}
.field .err {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.12em;
  color: #e4795a;
  display: none;
}
.field.bad input,
.field.bad textarea {
  border-color: #e4795a;
}
.field.bad .err {
  display: block;
}
.f2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
}
.form-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  margin-top: 8px;
  flex-wrap: wrap;
}
.form-foot small {
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.1em;
  color: var(--steel);
  max-width: 30ch;
  line-height: 1.6;
}
.form-foot small a {
  color: var(--steel-2);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.form-ok {
  display: none;
  text-align: center;
  padding: 40px 10px;
  gap: 18px;
}
.form-ok .glyph {
  width: 56px;
  height: 56px;
  margin: 0 auto 18px;
  color: var(--amber);
}
.form-ok h3 {
  font-stretch: 114%;
  font-weight: 600;
  font-size: 1.4rem;
  margin-bottom: 10px;
}
.form-ok p {
  color: var(--t-light-2);
  font-size: 0.95rem;
}
.form-card.sent form {
  display: none;
}
.form-card.sent .form-ok {
  display: block;
}

/* ---------- footer ---------- */
footer {
  background: var(--ink);
  color: var(--t-light);
  position: relative;
  z-index: 2;
  border-top: 1px solid var(--line-l-soft);
}
.shop-bridge {
  margin: 0 auto;
  max-width: var(--max);
  padding: clamp(64px, 8vw, 110px) var(--gutter) 0;
}
.shop-card {
  position: relative;
  border: 1px solid var(--line-l);
  border-radius: 20px;
  padding: clamp(30px, 4.5vw, 64px);
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 30px;
  align-items: center;
  overflow: hidden;
  background: linear-gradient(120deg, var(--ink-2), var(--ink) 70%);
}
.shop-card::before {
  content: '';
  position: absolute;
  right: -90px;
  top: -90px;
  width: 300px;
  height: 300px;
  border-radius: 50%;
  border: 1px dashed rgba(232, 160, 60, 0.35);
  animation: spin2 34s linear infinite;
}
@keyframes spin2 {
  to {
    transform: rotate(360deg);
  }
}
.shop-card h2 {
  font-stretch: 116%;
  font-weight: 610;
  font-size: clamp(1.6rem, 3.2vw, 2.7rem);
  letter-spacing: -0.015em;
  line-height: 1.1;
  max-width: 20ch;
  margin: 14px 0 12px;
}
.shop-card p {
  color: var(--t-light-2);
  max-width: 52ch;
}
.foot-cta {
  max-width: var(--max);
  margin: 0 auto;
  padding: clamp(60px, 8vw, 110px) var(--gutter) clamp(40px, 5vw, 70px);
}
.fc-eyebrow {
  font-family: var(--mono);
  font-size: 0.62rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: var(--steel);
  margin-bottom: 18px;
}
.fc-link {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  text-decoration: none;
  line-height: 1.02;
}
.fcg {
  font-stretch: 122%;
  font-weight: 720;
  font-size: clamp(2.4rem, 7vw, 5.4rem);
  letter-spacing: -0.015em;
  color: rgba(237, 234, 226, 0.92);
  white-space: nowrap;
}
html.js .fc-link.ghost .fcg {
  color: rgba(237, 234, 226, 0.05);
  -webkit-text-stroke: 1px rgba(237, 234, 226, 0.4);
}
.fc-arr {
  font-size: clamp(2rem, 5.4vw, 4.2rem);
  color: var(--amber);
  transform: translateX(0);
  transition: transform 0.45s var(--ease);
}
.fc-link:hover .fc-arr {
  transform: translateX(0.25em);
}
.tblock {
  max-width: var(--max);
  margin: 0 auto clamp(36px, 5vw, 60px);
  width: calc(100% - 2 * var(--gutter));
  border: 1px solid var(--line-l);
}
.tb-spec {
  display: flex;
  justify-content: space-between;
  gap: 18px;
  flex-wrap: wrap;
  padding: 12px 22px;
  border-bottom: 1px solid var(--line-l);
  font-family: var(--mono);
  font-size: 0.58rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--steel);
}
.tb-cells {
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) repeat(3, minmax(0, 0.8fr));
}
.tb-cell {
  padding: 26px 22px 30px;
}
.tb-cell + .tb-cell {
  border-left: 1px solid var(--line-l-soft);
}
.tb-cell h4 {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--steel);
  margin-bottom: 18px;
  font-weight: 400;
}
.tb-cell ul {
  list-style: none;
  display: grid;
  gap: 12px;
  margin: 0;
  padding: 0;
}
.tb-cell ul a {
  color: var(--t-light-2);
  font-size: 0.92rem;
  transition:
    color 0.3s,
    padding-left 0.3s;
}
.tb-cell ul a:hover {
  color: var(--amber);
  padding-left: 6px;
}
.tb-brand .brand {
  color: var(--porcelain);
  display: inline-block;
}
.tb-brand .logo {
  width: 132px;
}
.tb-brand p {
  color: var(--steel-2);
  font-size: 0.9rem;
  max-width: 30ch;
  margin-top: 18px;
}
.foot-loop {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.2em;
  color: var(--steel);
  margin-top: 22px;
}
.foot-loop i {
  font-style: normal;
  color: var(--amber);
  padding: 0 2px;
}
.foot-bottom {
  max-width: var(--max);
  margin: 0 auto;
  padding: 22px var(--gutter) 30px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--steel);
  border-top: 1px solid var(--line-l-soft);
}
.fb-links {
  display: inline-flex;
  align-items: center;
  gap: 14px;
}
.fb-links i {
  font-style: normal;
  opacity: 0.5;
}
.foot-bottom a {
  color: var(--steel);
  transition: color 0.3s;
}
.foot-bottom a:hover {
  color: var(--amber);
}
.foot-mega {
  max-width: var(--max);
  margin: 0 auto;
  padding: clamp(20px, 4vw, 44px) var(--gutter) 26px;
  user-select: none;
}
.mega-svg {
  display: block;
  width: 100%;
  height: auto;
}
.mega-svg text {
  font-family: var(--disp);
  font-weight: 700;
  font-stretch: 125%;
  font-size: 118px;
  letter-spacing: 0.01em;
}
.mg-ghost {
  fill: none;
  stroke: rgba(237, 234, 226, 0.2);
  stroke-width: 1.1;
  vector-effect: non-scaling-stroke;
}
.mg-fill {
  fill: rgba(237, 234, 226, 0.36);
  stroke: none;
}

/* ---------- reveal defaults (JS enhances) ---------- */
[data-reveal] {
  will-change: transform, opacity;
}

/* ---------- responsive ---------- */
@media (max-width: 1100px) {
  .tb-cells {
    grid-template-columns: 1fr 1fr;
  }
  .tb-cell:nth-child(3) {
    border-left: 0;
  }
  .tb-cell {
    border-top: 1px solid var(--line-l-soft);
  }
  .tb-cell:nth-child(-n + 2) {
    border-top: 0;
  }
  .team-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .stats {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .tl {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    row-gap: 44px;
  }
}
@media (max-width: 980px) {
  .nav-links {
    display: none;
  }
  .burger {
    display: block;
  }
  #hero .hero-grid,
  .loop-grid,
  .plat-grid,
  .sci-grid,
  .sci-freedom,
  .part-grid,
  #gap .cols {
    grid-template-columns: 1fr;
  }
  #gap .sticky {
    position: static;
  }
  #hero {
    padding-bottom: 16vh;
  }
  #hero .hero-grid {
    align-content: start;
    gap: 0;
  }
  .loop-right {
    order: -1;
    margin-bottom: 10px;
  }
  .dial {
    width: min(220px, 58vw);
  }
  .loop-left {
    min-height: min(60svh, 560px);
  }
  .stack-scene {
    min-height: 340px;
  }
  .deploy {
    grid-template-columns: 1fr;
  }
  .shop-card {
    grid-template-columns: 1fr;
  }
  .fcg {
    white-space: normal;
  }
  .f2 {
    grid-template-columns: 1fr;
  }
  .phase-specs {
    grid-template-columns: 1fr;
    border-radius: 10px;
  }
  .ledger-row {
    grid-template-columns: 1fr;
    gap: 6px;
  }
  .founder-note {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 980px) {
  .js-pin .dial {
    width: min(176px, 46vw);
  }
  .js-pin .loop-left {
    min-height: min(58svh, 540px);
  }
  .js-pin .loop-stage {
    padding-top: calc(var(--nav-h) + 8px);
  }
  .js-pin .loop-right {
    margin-bottom: 0;
  }
  .js-pin .phase-specs {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .js-pin .phase-specs .kv {
    padding: 10px 9px;
  }
  .js-pin .phase-specs .v {
    font-size: 0.82rem;
  }
  .js-pin .loop-phase h3 {
    font-size: clamp(2rem, 9vw, 2.6rem);
  }
  .js-pin .loop-phase .tagline {
    font-size: 1.05rem;
    margin: 12px 0 10px;
  }
  .js-pin .loop-phase .body {
    font-size: 0.92rem;
  }
  .js-pin .loop-intro h2 {
    font-size: clamp(1.7rem, 7vw, 2.4rem);
  }
}
@media (max-width: 560px) {
  :scope {
    --nav-h: 64px;
  }
  .stats {
    grid-template-columns: 1fr;
  }
  .tl {
    grid-template-columns: 1fr;
  }
  .team-grid {
    grid-template-columns: 1fr;
  }
  .tb-cells {
    grid-template-columns: 1fr;
  }
  .tb-cell + .tb-cell {
    border-left: 0;
  }
  .scroll-cue {
    display: none;
  }
  .loop-phase h3 {
    font-size: clamp(2.2rem, 11vw, 2.8rem);
  }
}
/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  #stage {
    transition: none;
  }
}

/* JS-era helpers */
section,
footer {
  scroll-margin-top: calc(var(--nav-h) - 10px);
}
#technology {
  scroll-margin-top: 0;
}
body.menu-lock {
  overflow: hidden;
}

/**
 * Corrections to measured defects in the ported design.
 *
 * design.css is a verbatim copy of the approved design and must stay that way
 * so it can be re-ported when the design file changes. Everything in THIS file
 * is a correction to a defect in that copy, kept separate so it is obvious
 * what deviates and trivially removable if the design team disagrees.
 *
 * Nothing here changes an intended visual decision. Each rule is a bug fix
 * with the measurement that motivated it. That promise is the whole point of
 * the file, so work that is not a bug fix does not belong here: post-design
 * feature work lives in instruments.css, which is loaded after this one.
 */

/* ------------------------------------------------------------------
   1. Horizontal overflow on every phone width.

   `.eyebrow` is pinned to `white-space: nowrap`, so the 40-character
   Technology eyebrow has a min-content width wider than a phone. That widens
   its grid track, the document, and every section: the document measured a
   constant 527px against a 390–412px viewport. Visible damage — the burger
   sat off-screen and could not be tapped, and section backgrounds stopped
   short of the text sitting on them.

   These lines wrap instead. On wide screens they fit on one line anyway, so
   nothing changes there.
   ------------------------------------------------------------------ */
.eyebrow {
  white-space: normal;
  text-wrap: balance;
}

@media (max-width: 760px) {
  /* A grid track's automatic minimum is its content's min-content width, so
     `nowrap` press names refuse to shrink. Both rules are needed: min-width
     releases the track, wrapping releases the text. */
  .press-index li {
    min-width: 0;
  }

  .pname {
    white-space: normal;
    overflow-wrap: anywhere;
  }
}

/* A fixed overlay escapes body's overflow-x, so oversized content inside it
   widens the whole document even while the menu is closed and invisible. */
#mmenu {
  overflow: hidden auto;
}

#mmenu a {
  flex-wrap: wrap;
  max-width: 100%;
}

@media (max-width: 420px) {
  #mmenu a {
    font-size: clamp(1.7rem, 8vw, 3.4rem);
  }
}
/* ------------------------------------------------------------------
   2. Contrast below WCAG AA.

   --steel (#6E747E) fails on BOTH grounds for the small mono labels it is used
   for: 4.12:1 on --ink and 4.10:1 on --porcelain, against AA's 4.5:1. No single
   grey clears 4.5:1 on both an almost-black and an almost-white ground, so the
   token is redefined per ground and inherits to every use.

   Measured replacements: #868C95 gives 5.74:1 on ink, #5A5F68 gives 5.59:1 on
   porcelain. Both stay a tonal step away from --steel-2, so the hierarchy the
   design draws between the two greys survives.
   ------------------------------------------------------------------ */
:scope {
  --steel: #868c95;
}

.light {
  --steel: #5a5f68;
}

/* #E4795A on ink is 3.8:1 — the one colour that has to be readable when a
   form goes wrong. */
.field .err {
  color: #f0937a;
}

.field.bad input,
.field.bad textarea {
  border-color: #f0937a;
}
/* ------------------------------------------------------------------
   3. Keyboard and assistive-technology support.

   The honeypot is added by the enhancement script; it must be imperceptible
   without being `display: none`, which bots skip.
   ------------------------------------------------------------------ */
.hp-field {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* The footer's column headings were <h4> directly after an <h2>, skipping a
   level. They are now <h3>; this keeps their original appearance. */
.tb-cell h3 {
  font-family: var(--mono);
  font-size: 0.6rem;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--steel);
  margin-bottom: 18px;
  font-weight: 400;
}
/* ------------------------------------------------------------------
   4. Headline amplifier typography.

   The reference splits the h1 into per-character spans styled
   `display: inline-block`. Inline-blocks suppress kerning, render word
   spaces ambiguously, and are legal line-break points — so the headline
   rendered "Althatma / kes things." at rest, with a break inside "makes".

   `display: inline` restores native shaping: kerning applies, spaces are
   real spaces, and breaks can only happen at them. `font-variation-settings`
   (the amplifier's actual effect) works on inline boxes; only the 7% scale
   pop is lost, since transforms don't apply to inline — an accepted trade.
   Pairs with [patch:headline-split-on-intent] in design-motion.js.
   ------------------------------------------------------------------ */
.kch {
  display: inline;
}
/* ------------------------------------------------------------------
   6. Mobile hero — the formula tray buried the chips.

   The reference absolute-positions the tray full-width at bottom: 76px on
   small screens, directly over the chips row ("<5 MIN PER BATCH" was
   completely hidden behind it). The hero already grows with its content, so
   reserving real vertical space for the tray and dropping it into that
   reserve keeps every element visible. The scroll cue would now sit inside
   the tray's band (it only rendered between 560–760px anyway), and the tray
   itself invites the same gesture — so it is retired on those widths.
   ------------------------------------------------------------------ */
@media (max-width: 760px) {
  #hero {
    padding-bottom: 250px;
  }

  #lensTray {
    bottom: 18px;
  }

  .scroll-cue {
    display: none;
  }
}
/* ------------------------------------------------------------------
   7. Ghost type contrast.

   The press names and the footer CTA rest at rgba alpha .08/.05 — measured
   1.17:1 and 1.09:1, effectively invisible without their outline stroke,
   which contrast tooling cannot evaluate. Both are large text, so AA asks
   3:1. Resting fills rise to computed-passing values (3.09:1+); the
   pointer-proximity swell to full strength is unchanged, and the JS that
   drives it per-frame is patched to the same floor ([patch:ghost-contrast]).
   The outline stroke stays for crispness.
   ------------------------------------------------------------------ */
html.js .press.ghost .pname {
  color: rgb(23 24 28 / 52%);
}

html.js .fc-link.ghost .fcg {
  color: rgb(237 234 226 / 42%);
}
/* ------------------------------------------------------------------
   8. Manufacturing-cell fallback poster.

   The reference styles a `.no-webgl` state but never sets the class and
   ships no fallback element — a failed WebGL context meant an empty stage
   and a stranded "INITIALIZING CELL" label. main.ts now detects context
   failure, and this poster (17 KB, captured from the real scene at its
   settled loop pose) stands in behind the loop text. It appears ONLY under
   .no-webgl: with WebGL running, the hero deliberately shows no robot until
   the loop begins, and a permanent background would contradict that.
   ------------------------------------------------------------------ */
/* `cell-poster` is a deliberate substitution rather than a capability
   failure: reduced-motion, Save-Data and low-memory visitors are shown the
   same still of the machine instead of paying a ~1s main-thread stall to
   render it at rest. It shares this fallback with the genuine no-WebGL case;
   only the reason differs. See main.ts. */
html.cell-poster #heroRobot,
html.no-webgl #heroRobot {
  background: url('/poster/robot-poster.webp') 62% 50% / cover no-repeat;
}

html.cell-poster .hr-load,
html.no-webgl .hr-load {
  display: none;
}
/* ------------------------------------------------------------------
   9. Press wall logos (staging only — see PROVENANCE.md).

   When a logo replaces its wordmark, the row's typographic sizing no longer
   applies: heights are set per logo in press-logos.ts, because the four have
   different cap-height-to-box ratios and equal box heights read as unequal
   type. The proximity fill that animates the wordmarks has nothing to grab on
   an SVG, so the logo gets the equivalent treatment via opacity instead.
   ------------------------------------------------------------------ */
/* Visually hidden but exposed to assistive technology. The reference had no
   such utility; the press swap needs one to keep the wordmark as the
   accessible name once the logo replaces it visually. */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* No opacity of its own: the design's proximity tick writes an rgba `color`
   on .pname every frame, and the logo inherits it through `currentColor` —
   so the fill-on-approach interaction carries over to the artwork intact. */
.pname-logo {
  display: inline-flex;
  align-items: center;
}

/* Resting state before the proximity tick has run (out of view, no pointer
   yet, or reduced motion). Logo artwork has thinner strokes than the wordmark
   type it replaces, so it needs a higher floor than the text does to read as
   equally present — matched to the JS floor in [patch:ghost-contrast]. */
html.js .press.ghost .pname-logo {
  color: rgb(23 24 28 / 74%);
}

.pname-logo svg {
  height: var(--logo-h, 30px);
  width: auto;
  display: block;
}

@media (max-width: 760px) {
  .pname-logo svg {
    height: calc(var(--logo-h, 30px) * 0.8);
  }
}

/* ============================================================================
   §13  Footer CTA overflows the document below ~350px
   ============================================================================
   `.fc-link` is `display: inline-flex` and `.fcg` is a flex item, so it
   inherits `min-width: auto` and refuses to shrink below its content width —
   `white-space` already computes to `normal`, but the text still cannot wrap.
   Meanwhile `font-size: clamp(2.4rem, 7vw, 5.4rem)` stops responding below
   ~343px, where the 7vw term falls under the 2.4rem floor, so the type holds at
   38.4px while the viewport keeps narrowing.

   Measured at 320px: the CTA is 325px wide at x=20, taking the document to
   345px against a 320px viewport — a 25px horizontal scroll. It overflows at
   320px and 340px, and is clear from 360px up.

   This is the same defect class as §1: a `nowrap`-style constraint widening the
   whole document. It only surfaced now because the old partner CTA label is two
   characters longer than the "Partner with BAO" it replaced, which means the
   reference was one short word away from the same bug.

   Releasing the flex minimum lets the label wrap to two lines when it must, and
   changes nothing at any width where it already fits.

   The container itself deliberately does NOT get `flex-wrap: wrap`: that let
   the arrow break onto a third line on its own, stranded under the text. Only
   `.fcg` wraps, so the arrow stays beside the label and `align-items: center`
   keeps it centred against the two lines. */
.fc-link {
  max-width: 100%;
}

.fcg {
  min-width: 0;
}

/* ============================================================================
   §14  Reveal elements should not hold compositor layers for the page's life
   ============================================================================
   design.css sets `will-change: transform, opacity` on every `[data-reveal]`
   element — 31 of them on the homepage. `will-change` is a promise the browser
   keeps: each one is promoted to its own compositor layer immediately and holds
   that memory until the declaration goes away, which here is never.

   The property exists to be applied just before an animation and removed after,
   and GSAP already does exactly that for the tweens it runs. A permanent
   blanket declaration is the documented misuse, and on a page that also runs a
   WebGL scene the memory is not free.

   Not a design change: nothing about how the reveals look or move is affected. */
[data-reveal] {
  will-change: auto;
}

/* Same misuse on the split headline: design.css declares `will-change:
   font-variation-settings, transform` on every character span — one pinned
   compositor layer per letter, ~40 on this headline, held for the page's
   life. The variation-settings writes are style/layout work that a compositor
   layer cannot help with anyway. */
.kch {
  will-change: auto;
}

/* ============================================================================
   §15  Loop phases must stay readable to assistive technology
   ============================================================================
   The reference animates the four phase articles with GSAP's `autoAlpha`,
   which is opacity plus `visibility`. `visibility: hidden` removes an element
   from the accessibility tree, so a screen reader found at most one of the
   four — and the four carry the product's central claims. They are animated
   with plain `opacity` now (see [patch:phases-stay-in-the-tree]).

   The phases are stacked in one grid cell, so a faded-out one would otherwise
   intercept clicks and text selection meant for the visible one. `visibility`
   used to do that job as a side effect; this does it deliberately, without
   taking the content out of the tree. */
.loop-phase[data-phase-hidden] {
  pointer-events: none;
}

/* ============================================================================
   §16  Focus and control boundaries below the contrast minimum
   ============================================================================
   Measured against the actual token values:

   - The single `:focus-visible` outline is --amber (#E8A03C). On --ink that is
     8.81:1, but on the porcelain sections (#F1EFEA) it is 1.92:1 against a 3:1
     minimum for non-text — so on the platform pillars and the nav over light
     sections, the focus ring was effectively invisible. WCAG 2.2 SC 1.4.11.

   - Form inputs and radio chips draw their only boundary with --line-l
     composited on ink: #323334, which is 1.53:1. The native radio is hidden,
     so the chip border is the only thing marking an option as an option.

   - Amber hover on light grounds is 1.92:1 as text (needs 4.5:1).

   --amber-deep (#8A5D14) measures 5.00:1 on porcelain and is already in the
   palette, so the light-ground states use it rather than introducing a colour.
   The dark-ground states are untouched: they already pass comfortably. */
:focus-visible {
  outline-color: var(--amber);
}

.light :focus-visible,
#nav.on-light :focus-visible {
  outline-color: #8a5d14;
  /* A second ring in the opposite tone keeps the indicator visible over the
     mixed grounds inside a section (cards, images, the press wall). */
  box-shadow: 0 0 0 4px rgb(255 255 255 / 72%);
}

.field input,
.field textarea {
  border-bottom-color: rgb(237 234 226 / 42%);
}

/* The native radio is `position: absolute; opacity: 0`, so `.c` is the only
   thing that marks an option as an option. */
.chiprow .c {
  border-color: rgb(237 234 226 / 42%);
}

.light .nav-links a:not(.btn):hover,
#nav.on-light .nav-links a:not(.btn):hover {
  color: #8a5d14;
}

.press-index li i.lit {
  color: #8a5d14;
}

/* ------------------------------------------------------------------
   The loop's closing line sat underneath the WebGL stage.

   `#heroRobot` is `position: fixed; z-index: 0`. A positioned element paints
   above in-flow content regardless of document order, so every unpositioned
   block in the loop section rendered beneath the cell. The pinned columns were
   already handled — `.js-pin .loop-left` and `.loop-right` both take
   `z-index: 3` — but `.loop-outro`, which sits outside `.loop-grid`, was
   missed: the cobot's arm crossed the sentence mid-word.

   Same treatment as the left column: lift it over the stage, and carry a soft
   ground so the line stays readable whatever the cell is doing behind it.
   ------------------------------------------------------------------ */
.loop-outro {
  position: relative;
  z-index: 3;
}

/* The ground bleeds vertically but never horizontally: an earlier version put
   this on the <p> with a -64px horizontal inset, which at 320-412px pushed the
   document wider than the viewport — the whole page then scrolled sideways and
   the nav burger went off-screen with it. Nothing here may exceed the wrap's
   content box. */
.loop-outro::before {
  content: '';
  position: absolute;
  z-index: -1;
  inset: -44px 0 auto;
  height: 260px;
  background: radial-gradient(
    ellipse 42% 58% at 50% 42%,
    rgb(12 13 16 / 92%) 0%,
    rgb(12 13 16 / 80%) 45%,
    rgb(12 13 16 / 0%) 78%
  );
  pointer-events: none;
}

/* The lens reading's fallback ground. design-motion.js adds `.shielded` only
   when no placement around the lens clears both the tray and the copy column —
   which happens when the lens is deep inside the headline, exactly where the
   tray invites you to move it. White analysis text over white display type is
   unreadable; this gives it something to sit on without moving it. */
#lensFinding.shielded {
  padding: 9px 12px;
  margin: -9px -12px;
  border-radius: 10px;
  background: rgb(12 13 16 / 82%);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}

/* ------------------------------------------------------------------
   The footer's utility row could not wrap, so a fifth item broke phones.

   `.foot-bottom` wraps, but the `.fb-links` group inside it is an
   `inline-flex` row with no wrapping of its own: the clock, the separators and
   every link are locked onto one line. The design shipped four items, which
   just fit. Adding "Investor portal" (2026-08-23) made five, and the group
   measured 394px against a 320px viewport — 74px of horizontal overflow on the
   whole document, which also pushes the nav burger off-screen.

   Measured before/after at 320px: overflow 74px → 0px. The separators are
   hidden once the row wraps, because a leading "·" on a new line reads as a
   bullet rather than a divider.
   ------------------------------------------------------------------ */
.fb-links {
  flex-wrap: wrap;
  justify-content: flex-end;
  row-gap: 8px;
}

@media (max-width: 560px) {
  .foot-bottom {
    justify-content: flex-start;
  }

  .fb-links {
    justify-content: flex-start;
    gap: 12px;
  }

  .fb-links i {
    display: none;
  }
}
}