/* ==========================================================================
   Falcon Electrical — design system
   Ink (navy-black) + paper, Falcon navy as depth tone, Falcon red as the single
   signal accent. One typeface (Archivo variable): expanded width for display,
   normal width for text. Chamfered corners = nameplate / cable-tray motif,
   used on primary actions and specimen plates only.
   ========================================================================== */

@font-face {
  font-family: "Nunito";
  src: url("../fonts/nunito-var-latin.woff2") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}
@font-face {
  font-family: "Archivo";
  src: url("../fonts/archivo-var-latin.woff2") format("woff2");
  font-weight: 100 900;
  font-stretch: 62% 125%;
  font-display: swap;
}

:root {
  --ink: #0b1026;
  --ink-2: #121935;
  --ink-3: #1c2448;
  --navy: #2e3192;
  --signal: #d7191f;        /* AA on white for text & white-on-red buttons */
  --signal-hi: #ff4a50;     /* AA on ink for small text */
  --paper: #f2f3f0;
  --white: #ffffff;
  --mist: #e4e6e8;
  --mist-2: #d6d9dd;
  --text: var(--ink);
  --muted: #535a6f;
  --muted-d: #a5acc2;
  --line: rgba(11, 16, 38, 0.14);
  --line-d: rgba(255, 255, 255, 0.14);

  --font: "Archivo", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  --wide: 116%;
  --fs-hero: clamp(2.5rem, 9vw + 0.6rem, 7.5rem);
  --fs-d1: clamp(2.125rem, 4.4vw + 0.7rem, 4.75rem);      /* closing calls to action only */
  --fs-page: clamp(2.125rem, 3.4vw + 1rem, 4.25rem);     /* every inner-page title */
  --fs-sec: clamp(1.75rem, 2.4vw + 0.95rem, 3.25rem);    /* every section heading */
  --fs-d2: clamp(1.875rem, 3.6vw + 0.8rem, 4rem);
  --fs-h3: clamp(1.3rem, 1.1vw + 0.9rem, 1.75rem);
  --fs-lead: clamp(1.0625rem, 0.3vw + 1rem, 1.1875rem);
  --fs-body: 1.0625rem;
  --fs-sm: 0.9375rem;
  --fs-xs: 0.8125rem;

  --gutter: clamp(20px, 4vw, 56px);
  --maxw: 1520px;
  --section: clamp(80px, 10vw, 168px);
  --hh: 76px;
  --hh-compact: 64px;
  --cham: 14px;
  --ease: cubic-bezier(0.23, 1, 0.32, 1);          /* strong ease-out (animate skill) */
  --ease-io: cubic-bezier(0.77, 0, 0.175, 1);      /* strong ease-in-out for on-screen movement */
  /* critically damped spring (Apple damping 1.0); shape is response-independent, so durations vary per use */
  --spring: linear(0, 0.0189, 0.066, 0.13, 0.2029, 0.2792, 0.3549, 0.4277, 0.4958, 0.5586, 0.6156, 0.6667, 0.7122, 0.7524, 0.7876, 0.8183, 0.845, 0.8681, 0.888, 0.905, 0.9196, 0.9321, 0.9427, 0.9518, 0.9594, 0.9659, 0.9714, 0.976, 0.9799, 0.9832, 0.9859, 0.9882, 0.9902, 0.9918, 0.9932, 0.9943, 0.9953, 0.9961, 0.9967, 0.9973, 0.9977, 0.9981, 0.9984, 0.9987, 0.9989, 0.9991, 0.9993, 0.9994, 1);
  --spring-soft: linear(0, 0.0168, 0.06, 0.1203, 0.1908, 0.2662, 0.3427, 0.4175, 0.4888, 0.5552, 0.6162, 0.6714, 0.7208, 0.7644, 0.8027, 0.8359, 0.8645, 0.889, 0.9098, 0.9273, 0.942, 0.9541, 0.9642, 0.9724, 0.9791, 0.9844, 0.9887, 0.9921, 0.9947, 0.9967, 0.9982, 0.9994, 1.0002, 1.0008, 1.0011, 1.0014, 1.0015, 1.0015, 1.0015, 1.0014, 1.0013, 1.0012, 1.0011, 1.001, 1.0009, 1.0008, 1.0007, 1.0006, 1);  /* damping 0.9, response .5s: 0.15% overshoot */
  --d-press: 120ms;     /* press feedback */
  --d-hover: 220ms;     /* hover state */
  --d-settle: 640ms;    /* spring settle, response .4s */
  --d-reveal: 650ms;    /* scroll reveals (marketing tier) */
  --stagger: 45ms;
  color-scheme: light;
}
@media (max-width: 400px) { :root { --wide: 106%; } }
.hero-body > *, .sec-head > *, .sol-index > *, .intro-grid > *, .split > *, .detail-grid > *, .contact-grid > *, .why-grid > *, .hero-grid > * { min-width: 0; }

/* ---------- reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  -webkit-tap-highlight-color: transparent;
  scroll-padding-top: calc(var(--hh-compact) + 16px);
}
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
body {
  margin: 0;
  font-family: var(--font);
  font-size: var(--fs-body);
  line-height: 1.65;
  font-kerning: normal;
  font-variant-ligatures: common-ligatures contextual;
  color: var(--text);
  background: var(--paper);
  font-optical-sizing: auto;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: clip;
}
img, svg, video { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: 0; padding: 0; }
a, button, [role="button"], summary, label { touch-action: manipulation; }
h1, h2, h3, h4, p, ul, ol, dl, figure { margin: 0; }
ul[role="list"], ol[role="list"] { list-style: none; padding: 0; }
::selection { background: var(--signal); color: #fff; }
:focus-visible { outline: 2px solid var(--signal); outline-offset: 3px; }
.dark :focus-visible, .on-dark :focus-visible { outline-color: var(--signal-hi); }

.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip-link { position: fixed; left: 12px; top: -60px; z-index: 200; background: var(--ink); color: #fff; padding: 12px 18px; font-weight: 600; transition: top .2s; }
.skip-link:focus { top: 12px; }

/* ---------- type ---------- */
.display, .h-hero, .h-d1, .h-d2, .h-page, .h-sec {
  font-stretch: var(--wide);
  font-weight: 760;
  text-transform: uppercase;
  font-kerning: normal;
  letter-spacing: -0.022em;
  word-spacing: 0.08em;
  overflow-wrap: break-word;
  line-height: 0.93;
  text-wrap: balance;
}
/* tracking tightens and leading closes as size grows; small text opens up */
.h-hero { --fs-own: var(--fs-hero); line-height: 0.88; letter-spacing: -0.034em; }
.h-d1 { --fs-own: var(--fs-d1); line-height: 0.91; letter-spacing: -0.028em; }
.h-d2 { --fs-own: var(--fs-d2); line-height: 0.95; letter-spacing: -0.02em; }
.h-page { --fs-own: var(--fs-page); line-height: 0.95; letter-spacing: -0.026em; }
.h-sec { --fs-own: var(--fs-sec); line-height: 0.97; letter-spacing: -0.02em; }
.h-hero, .h-d1, .h-d2, .h-page, .h-sec { font-size: var(--fs-own); }
.h3 { font-size: var(--fs-h3); font-weight: 650; line-height: 1.16; letter-spacing: -0.014em; text-wrap: balance; }
.h4 { font-size: 1.125rem; font-weight: 650; line-height: 1.3; letter-spacing: -0.006em; }
.lead { font-size: var(--fs-lead); line-height: 1.45; letter-spacing: -0.008em; color: var(--muted); max-width: 40ch; text-wrap: pretty; }
.dark .lead, .on-dark .lead { color: var(--muted-d); }
.prose { max-width: 66ch; }
.prose p + p { margin-top: 1.1em; }
.prose p { text-wrap: pretty; }
.muted { color: var(--muted); }
.dark .muted { color: var(--muted-d); }
.kicker { font-size: var(--fs-sm); font-weight: 600; color: var(--muted); display: flex; gap: 10px; align-items: center; }
.kicker::before { content: ""; width: 22px; height: 2px; background: var(--signal); flex: none; }
.dark .kicker { color: var(--muted-d); }
.num { font-variant-numeric: tabular-nums; }
.idx { font-size: var(--fs-xs); font-weight: 600; font-variant-numeric: tabular-nums; color: var(--muted); letter-spacing: .02em; }

/* ---------- layout ---------- */
.wrap { width: min(100% - 2 * var(--gutter), var(--maxw)); margin-inline: auto; }
.section { padding-block: var(--section); }
.section--tight { padding-block: calc(var(--section) * 0.6); }
.dark { background: var(--ink); color: #fff; }
.dark-2 { background: var(--ink-2); color: #fff; }
.mist { background: var(--mist); }
.white { background: var(--white); }
.grid { display: grid; gap: var(--gutter); }
.stack > * + * { margin-top: var(--stack, 1.25rem); }
.sec-head { display: grid; gap: 28px; margin-bottom: clamp(40px, 6vw, 88px); }
@media (min-width: 900px) {
  .sec-head { grid-template-columns: 1.7fr 1fr; align-items: end; }
  .sec-head > :last-child:not(:first-child) { justify-self: end; }
}
.sec-head .lead { max-width: 44ch; }
.rule { height: 1px; background: var(--line); border: 0; margin: 0; }
.dark .rule { background: var(--line-d); }

/* ---------- buttons & links ---------- */
.btn {
  --bg: var(--signal); --fg: #fff;
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 14px;
  min-height: 54px; padding: 0 24px 0 26px;
  background: var(--bg); color: var(--fg);
  font-size: var(--fs-xs); font-weight: 650; letter-spacing: 0.09em; text-transform: uppercase;
  clip-path: polygon(0 0, calc(100% - var(--cham)) 0, 100% var(--cham), 100% 100%, 0 100%);
  transition: background-color .2s, transform .12s var(--ease), color .2s;
  user-select: none; -webkit-user-select: none; white-space: nowrap;
}
.btn:active { transform: scale(0.97); }
.btn .arr { width: 18px; height: 18px; transition: transform .35s var(--ease); flex: none; }
.btn--ink { --bg: var(--ink); }
.btn--white { --bg: #fff; --fg: var(--ink); }
.btn--ghost {
  --bg: transparent; --fg: currentColor; clip-path: none;
  box-shadow: inset 0 0 0 1px currentColor;
}
.btn--block { width: 100%; }

.btn-row { display: flex; flex-wrap: wrap; gap: 12px; }

.link {
  display: inline-flex; align-items: center; gap: 10px; font-weight: 650; font-size: var(--fs-sm);
  background: linear-gradient(currentColor, currentColor) 0 100% / 100% 1px no-repeat;
  padding-bottom: 4px; transition: background-size .35s var(--ease);
}
.link .arr { width: 16px; height: 16px; transition: transform .35s var(--ease); }
@media (hover: hover) and (pointer: fine) {
  .link:hover { background-size: 30% 1px; }
  .link:hover .arr { transform: translateX(4px); }
}
.u-link { background: linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat; transition: background-size .3s var(--ease); }
@media (hover: hover) and (pointer: fine) { .u-link:hover { background-size: 100% 1px; } }

/* ---------- header ---------- */
.site-header {
  position: fixed; inset: 0 0 auto 0; z-index: 60; height: var(--hh);
  color: var(--ink); background: rgba(242, 243, 240, 0.86);
  -webkit-backdrop-filter: saturate(1.4) blur(14px); backdrop-filter: saturate(1.4) blur(14px);
  border-bottom: 1px solid var(--line);
  transition: height .35s var(--ease), background-color .35s, color .35s, border-color .35s;
  view-transition-name: site-header;
}
.site-header > .wrap { height: 100%; display: flex; align-items: center; gap: 28px; }
.has-dark-hero .site-header.is-top:not(:has(.mega[data-open])) { background: transparent; color: #fff; border-color: transparent; -webkit-backdrop-filter: none; backdrop-filter: none; }
.site-header.is-compact { height: var(--hh-compact); }
.brand { display: block; flex: none; position: relative; }
.brand img { height: 70px; width: auto; transition: height .35s var(--ease), opacity .25s; }
.is-compact .brand img { height: 46px; }.brand img.brand img
.brand .logo-w { position: absolute; left: 0; top: 0; opacity: 0; }
.has-dark-hero .is-top:not(:has(.mega[data-open])) .brand .logo-c { opacity: 0; }
.has-dark-hero .is-top:not(:has(.mega[data-open])) .brand .logo-w { opacity: 1; }

.nav { margin-left: auto; display: none; align-items: center; gap: 4px; height: 100%; }
.nav > ul { display: flex; height: 100%; align-items: stretch; list-style: none; margin: 0; padding: 0; }
.nav > ul > li { display: flex; align-items: center; }
.nav-link {
  position: relative; display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 11px;
  font-size: 0.875rem; font-weight: 560; letter-spacing: 0.005em; white-space: nowrap;
}
.nav-link::after {
  content: ""; position: absolute; left: 11px; right: 11px; bottom: 4px; height: 2px; background: var(--signal);
  transform: scaleX(0); transform-origin: left; transition: transform .35s var(--ease);
}
.nav-link[aria-current="page"]::after, .nav-link[aria-current="true"]::after { transform: scaleX(1); }
@media (hover: hover) and (pointer: fine) { .nav-link:hover::after { transform: scaleX(1); } }
.nav-link .chev { width: 10px; height: 10px; transition: transform .25s var(--ease); }
.nav-link[aria-expanded="true"] .chev { transform: rotate(180deg); }
.nav .btn { min-height: 44px; margin-left: 14px; padding: 0 18px 0 20px; }
.menu-btn { margin-left: auto; width: 48px; height: 48px; display: grid; place-items: center; }
.menu-btn span { display: block; width: 24px; height: 2px; background: currentColor; box-shadow: 0 -7px 0 currentColor, 0 7px 0 currentColor; }
@media (min-width: 1280px) {
  .nav { display: flex; }
  .menu-btn { display: none; }
}

/* mega menu */
.mega {
  display: none; overflow: hidden;
  position: absolute; left: 0; right: 0; top: 100%;
  background: var(--paper); color: var(--ink); border-bottom: 1px solid var(--line);
  box-shadow: 0 30px 60px -30px rgba(11,16,38,.35);
  visibility: hidden; opacity: 0; transform: translateY(-8px);
  transition: opacity .22s var(--ease), transform .3s var(--ease), visibility 0s .3s;
}
.mega[data-open] { visibility: visible; opacity: 1; transform: none; transition: opacity .22s var(--ease), transform .3s var(--ease), visibility 0s; }
.mega-inner { display: grid; grid-template-columns: 300px 1fr; gap: 56px; padding-block: 44px 28px; }
.mega-aside .h-d2 { --fs-own: 2.6rem; }
.mega-aside p:not(.h-d2) { margin-top: 14px; color: var(--muted); font-size: var(--fs-sm); max-width: 30ch; }
.mega-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0 32px; list-style: none; margin: 0; padding: 0; }
.mega-list a { display: grid; grid-template-columns: 30px 1fr; gap: 2px 8px; padding: 14px 0; border-top: 1px solid var(--line); }
.mega-list .idx { grid-row: span 2; padding-top: 3px; }
.mega-list strong { font-weight: 620; font-size: 0.95rem; transition: color .2s, transform .3s var(--ease); }
.mega-list small { color: var(--muted); font-size: var(--fs-xs); line-height: 1.4; }
@media (hover: hover) and (pointer: fine) {
  .mega-list a:hover strong { color: var(--signal); transform: translateX(3px); }
}
.mega-foot { grid-column: 1 / -1; display: flex; justify-content: space-between; align-items: center; border-top: 1px solid var(--line); padding-top: 22px; }

/* mobile drawer */
.drawer {
  margin: 0; padding: 0; border: 0; max-width: none; max-height: none; width: 100%; height: 100dvh;
  background: var(--ink); color: #fff; overscroll-behavior: contain;
}
.drawer::backdrop { background: rgba(11, 16, 38, .6); }
.drawer[open] { display: flex; flex-direction: column; }
@media (prefers-reduced-motion: no-preference) {
  .drawer { transition: opacity .3s var(--ease), transform .4s var(--ease), overlay .4s allow-discrete, display .4s allow-discrete; opacity: 0; transform: translateY(12px); }
  .drawer[open] { opacity: 1; transform: none; }
  @starting-style { .drawer[open] { opacity: 0; transform: translateY(12px); } }
}
.drawer-top { display: flex; align-items: center; justify-content: space-between; height: var(--hh-compact); padding-inline: var(--gutter); border-bottom: 1px solid var(--line-d); flex: none; padding-top: env(safe-area-inset-top); box-sizing: content-box; }
.drawer-top img { height: 34px; width: auto; }
.drawer-close { width: 48px; height: 48px; display: grid; place-items: center; }
.drawer-body { flex: 1; overflow-y: auto; padding: 12px var(--gutter) 24px; }
.drawer nav > ul { list-style: none; margin: 0; padding: 0; }
.drawer nav > ul > li { border-bottom: 1px solid var(--line-d); }
.drawer .d-link, .drawer summary {
  display: flex; align-items: center; justify-content: space-between; min-height: 62px;
  font-stretch: var(--wide); font-weight: 680; font-size: 1.45rem; text-transform: uppercase; letter-spacing: -0.01em; list-style: none; cursor: pointer;
}
.drawer summary::-webkit-details-marker { display: none; }
.drawer summary .plus { width: 18px; height: 18px; position: relative; flex: none; }
.drawer summary .plus::before, .drawer summary .plus::after { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 2px; background: currentColor; transition: transform .3s var(--ease); }
.drawer summary .plus::after { transform: rotate(90deg); }
.drawer details[open] summary .plus::after { transform: rotate(0); }
.drawer .sub { list-style: none; margin: 0 0 16px; padding: 0; }
.drawer .sub a { display: flex; align-items: center; min-height: 46px; color: var(--muted-d); font-size: 1rem; gap: 12px; }
.drawer .sub .idx { color: var(--signal-hi); width: 22px; }
.drawer-foot { padding: 16px var(--gutter) calc(16px + env(safe-area-inset-bottom)); border-top: 1px solid var(--line-d); flex: none; display: grid; gap: 14px; }
.drawer-foot .meta { font-size: var(--fs-sm); color: var(--muted-d); display: flex; flex-wrap: wrap; gap: 6px 18px; }

/* mobile sticky CTA */
.m-cta {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 55;
  padding: 10px var(--gutter) calc(10px + env(safe-area-inset-bottom));
  background: rgba(11,16,38,.92); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px);
  display: flex; gap: 10px; transform: translateY(110%); transition: transform .4s var(--ease);
}
.m-cta.is-on { transform: none; }
.m-cta .btn { flex: 1; min-height: 50px; }
.m-cta .call { flex: none; width: 50px; min-height: 50px; display: grid; place-items: center; color: #fff; box-shadow: inset 0 0 0 1px var(--line-d); }
@media (min-width: 1280px) { .m-cta { display: none; } }

/* ---------- hero (home) ---------- */
.hero {
  position: relative; min-height: 100svh; display: grid; align-content: end; color: #fff; background: var(--ink); overflow: clip; isolation: isolate;
  padding-top: calc(var(--hh) + 40px);
}
.hero-media { position: absolute; inset: 0; z-index: -2; }
.hero-media img { width: 100%; height: 100%; object-fit: cover; object-position: 55% 50%; }
.hero::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background:
    linear-gradient(90deg, rgba(11,16,38,.92) 0%, rgba(11,16,38,.55) 48%, rgba(11,16,38,.15) 100%),
    linear-gradient(0deg, rgba(11,16,38,.95) 0%, rgba(11,16,38,0) 45%),
    rgba(46,49,146,.22);
}
.hero-body { padding-bottom: clamp(36px, 5vw, 64px); display: grid; gap: 30px; }
.hero .tagline { font-size: var(--fs-sm); font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted-d); display: flex; align-items: center; gap: 12px; }
.hero .tagline::before { content: ""; width: 8px; height: 8px; background: var(--signal-hi); }
.hero .copy .line { display: block; overflow: hidden; padding-bottom: .04em; }
.hero .copy .line > span { display: block; }
.hero .lead { color: rgba(255,255,255,.78); max-width: 46ch; }
.hero-metrics { border-top: 1px solid var(--line-d); display: grid; grid-template-columns: repeat(3, 1fr); }
.hero-metrics > div { padding: 22px 16px 28px 0; display: grid; gap: 4px; }
.hero-metrics > div + div { padding-left: 18px; border-left: 1px solid var(--line-d); }
.hero-metrics b { font-stretch: var(--wide); font-weight: 700; font-size: clamp(1.4rem, 2.6vw, 2.4rem); line-height: 1; letter-spacing: -0.02em; }
.hero-metrics span { font-size: var(--fs-xs); color: var(--muted-d); line-height: 1.35; }
@media (max-width: 599px) {
  .hero-metrics { grid-template-columns: 1fr 1fr; }
  .hero-metrics > div:nth-child(3) { grid-column: 1 / -1; border-left: 0; padding-left: 0; border-top: 1px solid var(--line-d); }
}
@media (prefers-reduced-motion: no-preference) {
  .hero-media img { animation: kenburns 20s var(--ease) 1 both; transform-origin: 60% 50%; }
  .hero .fade-in { animation: fade .9s .45s var(--ease) both; }
}
@keyframes kenburns { from { transform: scale(1.12); } to { transform: scale(1.02); } }
@keyframes rise { from { transform: translateY(105%); } to { transform: none; } }
@keyframes fade { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }

/* ---------- page hero (inner pages) ---------- */
.page-hero { position: relative; background: var(--ink); color: #fff; padding: calc(var(--hh) + clamp(48px, 7vw, 112px)) 0 clamp(48px, 6vw, 96px); overflow: clip; isolation: isolate; }
.page-hero .h-page { max-width: 16ch; }
.page-hero .lead { margin-top: 28px; color: rgba(255,255,255,.74); max-width: 52ch; }
.page-hero-media { position: absolute; inset: 0; z-index: -2; }
.page-hero-media img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(.4) brightness(.5) contrast(1.05); }
.page-hero--img::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(11,16,38,.95) 0%, rgba(11,16,38,.6) 60%, rgba(11,16,38,.35) 100%), rgba(46,49,146,.2); }
.page-hero .hero-grid { display: grid; gap: 40px; align-items: end; }
@media (min-width: 1000px) { .page-hero .hero-grid { grid-template-columns: 1.5fr 1fr; } }
.page-hero .facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 0; border-top: 1px solid var(--line-d); margin-top: clamp(40px, 5vw, 72px); }
.page-hero .facts > div { padding: 18px 18px 0 0; }
.page-hero .facts dt { font-size: var(--fs-xs); color: var(--muted-d); }
.page-hero .facts dd { margin: 4px 0 0; font-weight: 600; }

.crumbs { margin-bottom: 28px; }
.crumbs ol { display: flex; flex-wrap: wrap; gap: 6px 0; list-style: none; margin: 0; padding: 0; font-size: var(--fs-xs); color: var(--muted-d); }
.crumbs li + li::before { content: "/"; margin: 0 10px; opacity: .5; }
.crumbs a { transition: color .2s; }
@media (hover: hover) and (pointer: fine) { .crumbs a:hover { color: #fff; } }
.crumbs [aria-current] { color: #fff; }
.light .crumbs ol { color: var(--muted); }
.light .crumbs [aria-current] { color: var(--ink); }

/* ---------- specimen plate (product imagery at native size) ---------- */
.plate {
  position: relative; display: grid; place-items: center; background: var(--white); overflow: hidden;
  aspect-ratio: 4 / 3; padding: 12%;
  clip-path: polygon(0 0, calc(100% - var(--cham)) 0, 100% var(--cham), 100% 100%, 0 100%);
}
.plate--mist { background: var(--mist); }
.plate img { width: auto; max-height: 100%; object-fit: contain; mix-blend-mode: multiply; transition: transform .6s var(--ease); }
.plate--type { background: var(--ink-2); color: #fff; }
.plate--type .glyph { font-stretch: 125%; font-weight: 200; font-size: clamp(3rem, 7vw, 5.5rem); line-height: 1; letter-spacing: -0.04em; color: transparent; -webkit-text-stroke: 1px rgba(255,255,255,.45); }
.plate .tag { position: absolute; left: 14px; top: 12px; }

/* ---------- category cards ---------- */
.cat-grid { display: grid; gap: 1px; background: var(--line); border: 1px solid var(--line); }
@media (min-width: 640px) { .cat-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 640px) and (max-width: 1099px) { .cat-grid > :last-child:nth-child(odd) { grid-column: span 2; } .cat-grid > :last-child:nth-child(odd) .plate { aspect-ratio: 16 / 7.6; } }
@media (min-width: 1100px) { .cat-grid { grid-template-columns: repeat(4, 1fr); } .cat-grid .cat-card--wide { grid-column: span 2; } }
.cat-card { position: relative; display: grid; grid-template-rows: auto 1fr; background: var(--paper); padding: 18px 18px 22px; gap: 22px; }
.cat-card .plate { aspect-ratio: 16 / 10; }
.cat-card--wide .plate { aspect-ratio: 16 / 7.6; }
.cat-card .body { display: grid; gap: 8px; align-content: start; grid-template-columns: 1fr auto; }
.cat-card .h3 { grid-column: 1; }
.cat-card p { grid-column: 1; color: var(--muted); font-size: var(--fs-sm); line-height: 1.5; max-width: 42ch; }
.cat-card .go { grid-column: 2; grid-row: 1 / span 2; align-self: start; width: 40px; height: 40px; display: grid; place-items: center; box-shadow: inset 0 0 0 1px var(--line); transition: background .25s, color .25s, box-shadow .25s; }
.cat-card .go svg { width: 16px; height: 16px; transition: transform .35s var(--ease); }
.cat-card::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: var(--signal); transform: scaleX(0); transform-origin: left; transition: transform .5s var(--ease); }
.cat-card .count { font-size: var(--fs-xs); color: var(--muted); }
@media (hover: hover) and (pointer: fine) {
  .cat-card:hover::after, .cat-card:focus-visible::after { transform: scaleX(1); }
  .cat-card:hover .plate img { transform: scale(1.06); }
  .cat-card:hover .go { background: var(--ink); color: #fff; box-shadow: none; }
  .cat-card:hover .go svg { transform: translateX(3px); }
}
.cat-card:active { background: var(--white); }

/* ---------- product cards ---------- */
.prod-grid { display: grid; gap: clamp(16px, 2vw, 28px); grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr)); }
.prod-card { display: grid; gap: 14px; align-content: start; }
.prod-card .plate { aspect-ratio: 1; }
.prod-card .meta { display: flex; justify-content: space-between; gap: 12px; font-size: var(--fs-xs); color: var(--muted); }
.prod-card .h4 { transition: color .2s; }
.prod-card p { font-size: var(--fs-sm); color: var(--muted); line-height: 1.5; }
.prod-card .link { margin-top: 4px; justify-self: start; }
@media (hover: hover) and (pointer: fine) {
  .prod-card:hover .plate img { transform: scale(1.07); }
  .prod-card:hover .h4 { color: var(--signal); }
}

/* horizontal rail */
.rail-wrap { position: relative; }
.rail {
  display: grid; grid-auto-flow: column; grid-auto-columns: min(78vw, 340px); gap: 20px;
  overflow-x: auto; scroll-snap-type: x mandatory; overscroll-behavior-x: contain; scrollbar-width: none;
  padding-inline: var(--gutter); scroll-padding-inline: var(--gutter);
  margin-inline: calc(-1 * var(--gutter));
  touch-action: pan-x pan-y;
}
.rail::-webkit-scrollbar { display: none; }
.rail > * { scroll-snap-align: start; }
@media (min-width: 1100px) { .rail { grid-auto-columns: calc((min(100vw - 2 * var(--gutter), var(--maxw)) - 60px) / 4); } }
.rail-ctrl { display: flex; gap: 8px; }
.rail-ctrl button { width: 52px; height: 52px; display: grid; place-items: center; box-shadow: inset 0 0 0 1px var(--line); transition: background .2s, color .2s; }
.rail-ctrl button:disabled { opacity: .3; cursor: default; }
@media (hover: hover) and (pointer: fine) { .rail-ctrl button:not(:disabled):hover { background: var(--ink); color: #fff; } }
.rail-ctrl svg { width: 18px; height: 18px; }
.dark .rail-ctrl button { box-shadow: inset 0 0 0 1px var(--line-d); }

/* ---------- home: intro ---------- */
.intro-grid { display: grid; gap: clamp(40px, 6vw, 96px); align-items: center; }
@media (min-width: 1000px) { .intro-grid { grid-template-columns: 1.1fr .9fr; } }
.year-mark {
  font-stretch: 125%; font-weight: 200; font-size: clamp(6rem, 21vw, 19rem); line-height: .8; letter-spacing: -0.06em;
  color: transparent; -webkit-text-stroke: 1.5px var(--ink); margin-bottom: clamp(24px, 4vw, 48px);
}
.intro-media { position: relative; }
.intro-media img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; }
.intro-media figcaption { position: absolute; left: 0; bottom: 0; background: var(--paper); padding: 14px 18px 0 0; font-size: var(--fs-xs); color: var(--muted); max-width: 70%; }

/* ---------- home: solutions index ---------- */
.sol-index { display: grid; gap: clamp(32px, 5vw, 80px); }
@media (min-width: 1000px) { .sol-index { grid-template-columns: .85fr 1.15fr; } .sol-index .sticky { position: sticky; top: calc(var(--hh-compact) + 48px); align-self: start; } }
.sol-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line-d); }
.sol-row { border-bottom: 1px solid var(--line-d); }
.sol-row a { display: grid; grid-template-columns: 1fr auto; gap: 6px 24px; padding: clamp(22px, 3vw, 38px) 0; align-items: center; }
.sol-row .h-d2 { --fs-own: clamp(1.5rem, 2.6vw + .6rem, 3.4rem); transition: color .3s, transform .5s var(--ease); }
.sol-row p { grid-column: 1; color: var(--muted-d); font-size: var(--fs-sm); max-width: 48ch; }
.sol-row .go { grid-row: 1 / span 2; grid-column: 2; width: 56px; height: 56px; display: grid; place-items: center; box-shadow: inset 0 0 0 1px var(--line-d); transition: background .3s, box-shadow .3s; }
.sol-row .go svg { width: 18px; height: 18px; }
.sol-row .thumb { display: none; }
@media (hover: hover) and (pointer: fine) {
  .sol-row a:hover .h-d2 { color: var(--signal-hi); transform: translateX(10px); }
  .sol-row a:hover .go { background: var(--signal); box-shadow: none; }
}
.sol-preview { position: relative; aspect-ratio: 4 / 5; overflow: hidden; margin-top: 40px; display: none; }
.sol-preview img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .6s var(--ease), transform 1.2s var(--ease); transform: scale(1.06); filter: grayscale(.25); }
.sol-preview img.on { opacity: 1; transform: none; }
@media (min-width: 1000px) and (hover: hover) { .sol-preview { display: block; } }
@media (max-width: 599px) { .sol-row a { grid-template-columns: 1fr; } .sol-row .go { display: none; } }
@media (max-width: 999px) {
  .sol-row .thumb { display: block; grid-column: 1 / -1; order: -1; aspect-ratio: 16 / 9; overflow: hidden; margin-bottom: 12px; }
  .sol-row .thumb img { width: 100%; height: 100%; object-fit: cover; }
}

/* ---------- projects ---------- */
.proj-grid { display: grid; gap: clamp(28px, 3.5vw, 56px) clamp(20px, 2.5vw, 40px); }
@media (min-width: 760px) { .proj-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1100px) {
  .proj-grid--editorial { grid-template-columns: repeat(12, 1fr); }
  .proj-grid--editorial > :nth-child(5n+1) { grid-column: 1 / span 7; }
  .proj-grid--editorial > :nth-child(5n+2) { grid-column: 9 / span 4; margin-top: 18%; }
  .proj-grid--editorial > :nth-child(5n+3) { grid-column: 1 / span 4; }
  .proj-grid--editorial > :nth-child(5n+4) { grid-column: 6 / span 7; margin-top: -10%; }
  .proj-grid--editorial > :nth-child(5n+5) { grid-column: 3 / span 6; }
  .proj-grid--3 { grid-template-columns: repeat(3, 1fr); }
}
.proj-card { display: grid; gap: 16px; align-content: start; }
.proj-card .media { position: relative; overflow: hidden; aspect-ratio: 16 / 11; background: var(--ink-2); }
.proj-card .media img { width: 100%; height: 100%; object-fit: cover; transition: transform 1s var(--ease), filter .6s; }
.proj-card .media .badge { position: absolute; left: 0; top: 0; background: var(--paper); color: var(--ink); font-size: var(--fs-xs); font-weight: 600; padding: 7px 12px; }
.dark .proj-card .media .badge { background: var(--ink); color: #fff; }
.proj-card .meta { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: var(--fs-xs); color: var(--muted); }
.dark .proj-card .meta { color: var(--muted-d); }
.proj-card .h3 { transition: color .25s; }
.proj-card .link { justify-self: start; }
.proj-card .media--type { display: grid; place-items: center; padding: 10%; color: #fff; container-type: inline-size; }
.proj-card .media--type span:not(.badge) { font-stretch: 125%; font-weight: 200; font-size: 9.5cqi; line-height: 1; letter-spacing: -0.03em; text-align: center; color: transparent; -webkit-text-stroke: 1px rgba(255,255,255,.4); text-transform: uppercase; }
@media (hover: hover) and (pointer: fine) {
  .proj-card:hover .media img { transform: scale(1.045); }
  .proj-card:hover .h3 { color: var(--signal); }
  .dark .proj-card:hover .h3 { color: var(--signal-hi); }
}

/* filter chips */
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip {
  min-height: 42px; padding: 0 16px; display: inline-flex; align-items: center; gap: 8px;
  font-size: var(--fs-sm); font-weight: 560; box-shadow: inset 0 0 0 1px var(--line); transition: background .2s, color .2s, box-shadow .2s;
}
.chip .n { font-size: var(--fs-xs); color: var(--muted); font-variant-numeric: tabular-nums; }
.chip[aria-pressed="true"] { background: var(--ink); color: #fff; box-shadow: none; }
.chip[aria-pressed="true"] .n { color: var(--muted-d); }
@media (hover: hover) and (pointer: fine) { .chip:hover:not([aria-pressed="true"]) { box-shadow: inset 0 0 0 1px var(--ink); } }
.toolbar { display: flex; flex-wrap: wrap; gap: 16px 28px; justify-content: space-between; align-items: center; margin-bottom: clamp(32px, 4vw, 56px); }
.search { position: relative; flex: 1 1 280px; max-width: 460px; }
.search input {
  width: 100%; min-height: 54px; padding: 0 18px 0 50px; border: 0; background: var(--white);
  box-shadow: inset 0 0 0 1px var(--line); font-size: 1rem; border-radius: 0; -webkit-appearance: none; appearance: none;
}
.search input:focus { outline: none; box-shadow: inset 0 0 0 2px var(--ink); }
.search svg { position: absolute; left: 18px; top: 50%; translate: 0 -50%; width: 18px; height: 18px; color: var(--muted); pointer-events: none; }
[data-filter-item][hidden] { display: none !important; }
.empty-state { padding: 48px 0; color: var(--muted); }

/* ---------- stats (why falcon) ---------- */
.why-grid { display: grid; gap: clamp(40px, 6vw, 96px); }
@media (min-width: 1000px) { .why-grid { grid-template-columns: .9fr 1.1fr; } }
.stats { display: grid; grid-template-columns: 1fr; border-top: 1px solid var(--line-d); }
.stat { container-type: inline-size; padding: 28px 20px 32px 0; border-bottom: 1px solid var(--line-d); display: grid; gap: 10px; align-content: start; }
@media (min-width: 480px) { .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); } .stat:nth-child(even) { padding-left: 20px; border-left: 1px solid var(--line-d); } }
.stat b { font-stretch: 125%; font-weight: 250; font-size: clamp(2rem, 16cqi, 5rem); line-height: .9; letter-spacing: -0.04em; font-variant-numeric: tabular-nums; }
.stat b sup { font-size: .42em; vertical-align: top; position: relative; top: .25em; font-weight: 500; color: var(--signal-hi); margin-left: 2px; }
.stat span { font-size: var(--fs-sm); color: var(--muted-d); max-width: 26ch; line-height: 1.45; }
.reasons { list-style: none; margin: 40px 0 0; padding: 0; display: grid; gap: 0; }
.reasons li { display: grid; grid-template-columns: 20px 1fr; gap: 14px; padding: 18px 0; border-top: 1px solid var(--line-d); }
.reasons li::before { content: ""; width: 8px; height: 8px; background: var(--signal-hi); margin-top: 9px; }
.reasons strong { display: block; font-weight: 640; }
.reasons span { color: var(--muted-d); font-size: var(--fs-sm); }

/* ---------- brands ---------- */
.logo-wall { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--line-d); border-left: 1px solid var(--line-d); }

@media (min-width: 1000px) { .logo-wall { grid-template-columns: repeat(5, 1fr); } }
.logo-cell { position: relative; border-right: 1px solid var(--line-d); border-bottom: 1px solid var(--line-d); aspect-ratio: 1.25; display: grid; place-items: center; overflow: hidden; color: #fff; }
.logo-cell img { width: min(62%, 150px); height: auto; opacity: .62; transition: opacity .35s, transform .5s var(--ease); }
.logo-cell .wordmark { font-stretch: 125%; font-weight: 760; font-size: clamp(1.2rem, 2vw, 1.6rem); letter-spacing: .02em; opacity: .62; transition: opacity .35s, transform .5s var(--ease); }
.logo-cell .info {
  position: absolute; inset: auto 0 0 0; padding: 14px 16px; background: var(--signal); color: #fff; font-size: var(--fs-xs); line-height: 1.4;
  display: grid; gap: 2px; transform: translateY(101%); transition: transform .45s var(--ease);
}
.logo-cell .info strong { font-size: .9rem; }
.logo-cell .info .v { font-weight: 650; letter-spacing: .08em; text-transform: uppercase; margin-top: 4px; }
@media (hover: hover) and (pointer: fine) {
  .logo-cell:hover img, .logo-cell:hover .wordmark, .logo-cell:focus-visible img { opacity: 1; transform: translateY(-14px) scale(1.04); }
  .logo-cell:hover .info, .logo-cell:focus-visible .info { transform: none; }
}
.logo-cell .name-sm { position: absolute; bottom: 10px; left: 0; right: 0; text-align: center; font-size: 11px; color: var(--muted-d); }
@media (hover: hover) and (pointer: fine) { .logo-cell .name-sm { display: none; } }
.logo-plate { background: var(--ink); display: grid; place-items: center; aspect-ratio: 1.4; clip-path: polygon(0 0, calc(100% - var(--cham)) 0, 100% var(--cham), 100% 100%, 0 100%); }
.logo-plate img { width: min(55%, 200px); }   /* logo files are 200 px bitmaps: never enlarge past native size */
.logo-plate .wordmark { color: #fff; font-stretch: 125%; font-weight: 760; font-size: 2rem; }
.logo-dark { filter: brightness(0); opacity: .75; }

/* ---------- certifications ---------- */
.bodies { display: flex; flex-wrap: wrap; gap: 0; border-top: 1px solid var(--line); }
.bodies li { list-style: none; flex: 1 1 auto; padding: 18px 22px 18px 0; border-bottom: 1px solid var(--line); font-stretch: var(--wide); font-weight: 650; font-size: clamp(1rem, 1.4vw, 1.25rem); text-transform: uppercase; letter-spacing: -.005em; display: flex; gap: 10px; align-items: baseline; }
.bodies li small { font-stretch: 100%; font-weight: 500; text-transform: none; font-size: var(--fs-xs); color: var(--muted); }
.cert-cards { display: grid; gap: 20px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 240px), 1fr)); }
.cert-card { display: grid; gap: 12px; align-content: start; }
.cert-card .plate { aspect-ratio: 1; padding: 14%; }
.cert-card .plate img { mix-blend-mode: normal; }
.cert-card button { text-align: left; }

/* approvals register */
.reg-scroll { position: relative; overflow-x: auto; overscroll-behavior-x: contain; border: 1px solid var(--line); background: var(--white); }
.reg { border-collapse: separate; border-spacing: 0; font-size: var(--fs-xs); min-width: 1100px; width: 100%; }
.reg th, .reg td { padding: 10px 8px; border-bottom: 1px solid var(--line); text-align: center; white-space: nowrap; }
.reg thead th { position: sticky; top: 0; z-index: 2; background: var(--ink); color: #fff; font-weight: 600; vertical-align: bottom; }
.reg thead th.v { writing-mode: vertical-rl; transform: rotate(180deg); height: 150px; padding: 12px 6px; text-align: left; }
.reg tbody th, .reg thead th:first-child, .reg thead th:nth-child(2) { position: sticky; left: 0; z-index: 1; text-align: left; background: var(--white); }
.reg thead th:first-child, .reg thead th:nth-child(2) { z-index: 3; background: var(--ink); }
.reg tbody th { font-weight: 600; font-size: var(--fs-sm); min-width: 250px; white-space: normal; }
.reg tbody th small { display: block; font-weight: 500; color: var(--muted); font-size: var(--fs-xs); }
.reg tbody tr:hover td, .reg tbody tr:hover th { background: #f7f7f5; }
.reg .y::before { content: ""; display: inline-block; width: 10px; height: 10px; background: var(--signal); }
.reg-list { display: grid; gap: 0; border-top: 1px solid var(--line); }
.reg-item { padding: 18px 0; border-bottom: 1px solid var(--line); display: grid; gap: 10px; }
.reg-item .tags { display: flex; flex-wrap: wrap; gap: 6px; }
.tag { display: inline-flex; align-items: center; min-height: 28px; padding: 0 10px; font-size: var(--fs-xs); font-weight: 560; background: var(--mist); }
.tag--red { background: var(--signal); color: #fff; }
.dark .tag { background: var(--ink-3); color: #fff; }
@media (min-width: 900px) { .reg-list { display: none; } }
@media (max-width: 899px) { .reg-scroll { display: none; } }

/* ---------- detail pages ---------- */
.detail-grid { display: grid; gap: clamp(32px, 5vw, 80px); }
@media (min-width: 1000px) { .detail-grid { grid-template-columns: 1.05fr .95fr; align-items: start; } .detail-grid .sticky { position: sticky; top: calc(var(--hh-compact) + 32px); } }
.gallery-main .plate { aspect-ratio: 1; }
.thumbs { display: grid; grid-template-columns: repeat(auto-fill, minmax(76px, 1fr)); gap: 8px; margin-top: 8px; }
.thumbs button { aspect-ratio: 1; background: var(--white); display: grid; place-items: center; padding: 10px; box-shadow: inset 0 0 0 1px var(--line); }
.thumbs button[aria-pressed="true"] { box-shadow: inset 0 0 0 2px var(--ink); }
.thumbs img { max-height: 100%; width: auto; mix-blend-mode: multiply; }
.p-meta { display: flex; flex-wrap: wrap; gap: 8px 24px; font-size: var(--fs-sm); color: var(--muted); }
.p-meta a { color: var(--ink); font-weight: 600; }
.block { padding-block: clamp(36px, 4vw, 56px); border-top: 1px solid var(--line); display: grid; gap: 24px; }
@media (min-width: 900px) { .block { grid-template-columns: 280px 1fr; } }
.block > h2 { font-size: var(--fs-h3); font-weight: 650; letter-spacing: -.01em; }
.ticks { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; }
@media (min-width: 640px) { .ticks--2 { grid-template-columns: 1fr 1fr; column-gap: 32px; } }
.ticks li { padding: 12px 0 12px 26px; border-bottom: 1px solid var(--line); position: relative; line-height: 1.45; }
.ticks li::before { content: ""; position: absolute; left: 0; top: 19px; width: 10px; height: 2px; background: var(--signal); }
.dark .ticks li { border-color: var(--line-d); }
.spec { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
.spec th, .spec td { text-align: left; padding: 13px 16px 13px 0; border-bottom: 1px solid var(--line); vertical-align: top; }
.spec th { font-weight: 560; color: var(--muted); width: 38%; }
.spec td { font-variant-numeric: tabular-nums; }
.table-scroll { overflow-x: auto; overscroll-behavior-x: contain; }
.data { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); font-variant-numeric: tabular-nums; min-width: 560px; }
.data caption { text-align: left; font-weight: 650; padding-bottom: 12px; }
.data th { text-align: left; font-weight: 600; font-size: var(--fs-xs); color: var(--muted); padding: 10px 14px 10px 0; border-bottom: 2px solid var(--ink); }
.data td { padding: 12px 14px 12px 0; border-bottom: 1px solid var(--line); }
.note { font-size: var(--fs-xs); color: var(--muted); margin-top: 10px; }
.variants { display: grid; gap: 1px; background: var(--line); border: 1px solid var(--line); grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.variants div { background: var(--white); padding: 14px 16px; }
.variants small { display: block; color: var(--muted); font-size: var(--fs-xs); }
.enquire-box { background: var(--ink); color: #fff; padding: clamp(24px, 3vw, 36px); display: grid; gap: 18px; clip-path: polygon(0 0, calc(100% - 22px) 0, 100% 22px, 100% 100%, 0 100%); }
.enquire-box p { color: var(--muted-d); font-size: var(--fs-sm); }
.data-gap { font-size: var(--fs-sm); color: var(--muted); padding: 18px 20px; background: var(--white); border-left: 3px solid var(--mist-2); }

.photo-grid { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr)); }
.photo-grid button { overflow: hidden; aspect-ratio: 4 / 3; display: block; width: 100%; }
.photo-grid img { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease); }
@media (hover: hover) and (pointer: fine) { .photo-grid button:hover img { transform: scale(1.04); } }

.split { display: grid; gap: clamp(32px, 5vw, 80px); }
@media (min-width: 1000px) { .split { grid-template-columns: 1fr 1fr; } .split--wide { grid-template-columns: 1.3fr .7fr; } }

/* register */
.register details { border-top: 1px solid var(--line); }
.register details:last-child { border-bottom: 1px solid var(--line); }
.register summary { display: flex; justify-content: space-between; align-items: center; gap: 16px; min-height: 76px; cursor: pointer; list-style: none; }
.register summary::-webkit-details-marker { display: none; }
.register summary .h3 { font-stretch: var(--wide); text-transform: uppercase; font-weight: 700; }
.register summary .n { font-variant-numeric: tabular-nums; color: var(--muted); font-size: var(--fs-sm); margin-left: auto; }
.register summary .plus { width: 16px; height: 16px; position: relative; flex: none; }
.register summary .plus::before, .register summary .plus::after { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 2px; background: currentColor; transition: transform .3s var(--ease); }
.register summary .plus::after { transform: rotate(90deg); }
.register details[open] .plus::after { transform: none; }
.register table { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); margin-bottom: 28px; }
.register td { padding: 12px 16px 12px 0; border-top: 1px solid var(--line); vertical-align: top; }
.register td:last-child { color: var(--muted); width: 32%; }

/* timeline — horizontal scroll, staggered entrance per item */
.timeline { list-style: none; margin: 0; padding: 0; display: grid; grid-auto-flow: column; grid-auto-columns: min(55vw, 260px); gap: 0; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter); }
.timeline::-webkit-scrollbar { display: none; }

/* each item: constrain text inside its column */
.timeline li { scroll-snap-align: start; padding: 0 36px 0 0; position: relative; overflow: hidden; }

/* connector line — fills with signal colour as you scroll */
.timeline li::before { content: ""; display: block; height: 2px; margin-bottom: 24px;
  background: linear-gradient(to right, var(--signal-hi) calc(var(--tl-p, 0%) + .1%), var(--line-d) calc(var(--tl-p, 0%) + .1%)); }

/* dot */
.timeline li::after { content: ""; position: absolute; left: 0; top: -6px; width: 12px; height: 12px; border-radius: 50%;
  background: var(--signal-hi); box-shadow: 0 0 0 0 rgba(255,74,80,.5); transition: transform .3s var(--spring); }
@media (hover: hover) and (pointer: fine) { .timeline li:hover::after { transform: scale(1.5); box-shadow: 0 0 0 5px rgba(255,74,80,.15); } }

/* era label above the year */
.tl-era { display: block; font-size: .7rem; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; color: var(--signal-hi); margin-bottom: 10px; }

/* year */
.timeline b { display: block; font-stretch: 125%; font-weight: 250; font-size: clamp(2.4rem, 3.8vw, 3.6rem); line-height: .88; letter-spacing: -.04em; margin-bottom: 14px; }

/* description — hard-capped to column width */
.timeline p { color: var(--muted-d); font-size: var(--fs-sm); line-height: 1.65; max-width: 100%; }

/* last item (running totals): smaller year, dimmer dot */
.timeline li:last-child::after { background: var(--muted-d); box-shadow: none; }
.timeline li:last-child .tl-era { color: var(--muted-d); }
.timeline li:last-child b { font-size: clamp(2rem, 3.2vw, 3rem); }

/* staggered entrance — slides up + fades as item enters scroll view */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .timeline li { opacity: 0; transform: translateY(18px);
      animation: tl-in .5s calc(var(--ti, 0) * 55ms) var(--ease) both;
      animation-timeline: view(inline); animation-range: entry 0% entry 55%; }
  }
}
@keyframes tl-in { to { opacity: 1; transform: translateY(0); } }

/* values */
.values { display: grid; gap: 1px; background: var(--line); border: 1px solid var(--line); }
@media (min-width: 760px) { .values { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1100px) { .values { grid-template-columns: repeat(4, 1fr); } }
.values > div { background: var(--paper); padding: clamp(24px, 3vw, 40px); display: grid; gap: 12px; align-content: start; min-height: 220px; }
.values p { color: var(--muted); font-size: var(--fs-sm); }

.mv { display: grid; gap: 1px; background: var(--line-d); }
@media (min-width: 900px) { .mv { grid-template-columns: 1fr 1fr; } .mv > div:first-child { padding-left: 0; } }
.mv > div { background: var(--ink); padding: clamp(28px, 4vw, 56px) clamp(0px, 3vw, 48px) clamp(28px, 4vw, 56px) var(--gutter); display: grid; gap: 18px; }
.mv > div + div { padding-left: clamp(0px, 3vw, 48px); }
.mv p { font-size: clamp(1.4rem, 2.2vw, 2rem); line-height: 1.25; font-weight: 450; letter-spacing: -.01em; text-wrap: balance; }

/* media / articles */
.article-grid { display: grid; gap: clamp(28px, 3vw, 48px) clamp(20px, 2.5vw, 36px); grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); }
.art-card { display: grid; gap: 14px; align-content: start; }
.art-card .media { aspect-ratio: 3 / 2; overflow: hidden; background: var(--ink-2); }
.art-card .media img { width: 100%; height: 100%; object-fit: cover; transition: transform .9s var(--ease); }
.art-card .media--type { display: grid; align-content: end; padding: 22px; color: #fff; container-type: inline-size; }
.art-card .media--type span { font-stretch: 125%; font-weight: 700; text-transform: uppercase; font-size: 1.4rem; line-height: 1; letter-spacing: -.01em; max-width: 14ch; }
.art-card .meta { display: flex; gap: 14px; font-size: var(--fs-xs); color: var(--muted); }
.art-card .meta .cat { color: var(--signal); font-weight: 600; }
.art-card--lead { grid-column: 1 / -1; }
@media (min-width: 1000px) {
  .art-card--lead { grid-template-columns: 1.3fr 1fr; gap: 48px; align-items: end; }
  .art-card--lead .media { aspect-ratio: 16 / 10; }
}
@media (hover: hover) and (pointer: fine) { .art-card:hover .media img { transform: scale(1.04); } .art-card:hover .h3 { color: var(--signal); } }
.article-body { font-size: 1.125rem; line-height: 1.7; }
.article-body p + p { margin-top: 1.2em; }
.article-hero-img { aspect-ratio: 16 / 8; overflow: hidden; background: var(--ink-2); margin-top: calc(-1 * clamp(48px, 6vw, 96px)); position: relative; z-index: 1; }
.article-hero-img img { width: 100%; height: 100%; object-fit: cover; }

/* ---------- CTA bands ---------- */
.cta-band { position: relative; color: #fff; background: var(--ink); overflow: clip; isolation: isolate; }
.cta-band .bg { position: absolute; inset: 0; z-index: -2; }
.cta-band .bg img { width: 100%; height: 100%; object-fit: cover; filter: grayscale(.5) brightness(.45); }
.cta-band::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(0deg, rgba(11,16,38,.95), rgba(11,16,38,.55)), rgba(46,49,146,.2); }
.cta-band .inner { padding-block: clamp(96px, 13vw, 200px); display: grid; gap: 36px; }
.cta-band p { color: rgba(255,255,255,.75); font-size: var(--fs-lead); max-width: 40ch; }

.profile-cta { display: grid; gap: 0; background: var(--white); }
@media (min-width: 1000px) { .profile-cta { grid-template-columns: 1fr 1fr; } }
.profile-cta .txt { padding: clamp(32px, 5vw, 80px); display: grid; gap: 24px; align-content: center; }
.profile-cta .pages { background: var(--navy); display: grid; place-items: center; padding: clamp(32px, 5vw, 64px); overflow: hidden; min-height: 340px; }
.profile-cta .pages .stackp { position: relative; width: min(70%, 320px); aspect-ratio: 595 / 842; }
.profile-cta .pages img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; box-shadow: 0 30px 60px -20px rgba(0,0,0,.5); transition: transform .8s var(--ease); }
.profile-cta .pages img:nth-child(1) { transform: rotate(-7deg) translateX(-18%); }
.profile-cta .pages img:nth-child(2) { transform: rotate(4deg) translateX(14%); }
@media (hover: hover) and (pointer: fine) {
  .profile-cta:hover .pages img:nth-child(1) { transform: rotate(-10deg) translateX(-26%); }
  .profile-cta:hover .pages img:nth-child(2) { transform: rotate(7deg) translateX(22%); }
}
.file-meta { font-size: var(--fs-xs); color: var(--muted); }

/* contact preview & map */
.contact-grid { display: grid; gap: clamp(32px, 5vw, 80px); }
@media (min-width: 1000px) { .contact-grid { grid-template-columns: 1fr 1.2fr; } }
.contact-list { list-style: none; margin: 0; padding: 0; display: grid; }
.contact-list li { display: grid; grid-template-columns: 120px 1fr; gap: 16px; padding: 18px 0; border-top: 1px solid var(--line); }
.contact-list li:last-child { border-bottom: 1px solid var(--line); }
.contact-list dt, .contact-list .k { font-size: var(--fs-xs); color: var(--muted); padding-top: 3px; }
.contact-list a { font-weight: 600; }
.dark .contact-list li { border-color: var(--line-d); }
.dark .contact-list .k { color: var(--muted-d); }
.map { position: relative; min-height: 380px; background: var(--ink-2); color: #fff; display: grid; overflow: hidden; }
.map iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; filter: grayscale(.6) contrast(1.05); }
.map .map-face { position: relative; display: grid; align-content: space-between; padding: 28px; gap: 24px;
  background-image: linear-gradient(var(--line-d) 1px, transparent 1px), linear-gradient(90deg, var(--line-d) 1px, transparent 1px); background-size: 48px 48px; }
.map .pin { width: 18px; height: 18px; background: var(--signal-hi); box-shadow: 0 0 0 8px rgba(255,74,80,.18), 0 0 0 20px rgba(255,74,80,.08); position: absolute; left: 74%; top: 30%; }
.map .coords { font-size: var(--fs-xs); color: var(--muted-d); font-variant-numeric: tabular-nums; }

/* ---------- forms ---------- */
.form { display: grid; gap: 22px; }
.form fieldset { border: 0; padding: 0; margin: 0; display: grid; gap: 18px; }
.form legend { font-stretch: var(--wide); font-weight: 700; text-transform: uppercase; font-size: 1.1rem; letter-spacing: -.005em; padding: 0; margin-bottom: 6px; display: flex; gap: 12px; align-items: baseline; }
.form legend .idx { color: var(--signal); }
.fields { display: grid; gap: 18px; }
@media (min-width: 640px) { .fields--2 { grid-template-columns: 1fr 1fr; } .span-2 { grid-column: 1 / -1; } }
.field { display: grid; gap: 8px; align-content: start; }
.field label { font-size: var(--fs-sm); font-weight: 600; }
.field label .req { color: var(--signal); }
.field .hint { font-size: var(--fs-xs); color: var(--muted); }
.input {
  width: 100%; min-height: 56px; padding: 14px 16px; font-size: 16px; line-height: 1.4;
  background: var(--white); border: 0; border-radius: 0; box-shadow: inset 0 0 0 1px var(--mist-2);
  -webkit-appearance: none; appearance: none; transition: box-shadow .15s;
}
textarea.input { min-height: 150px; resize: vertical; }
select.input { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' fill='none' stroke='%230b1026' stroke-width='1.6'%3E%3Cpath d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 16px center; padding-right: 44px; }
.input:focus { outline: none; box-shadow: inset 0 0 0 2px var(--navy); }
.input:user-invalid, .input[aria-invalid="true"] { box-shadow: inset 0 0 0 2px var(--signal); }
.err { display: none; font-size: var(--fs-xs); color: var(--signal); font-weight: 600; }
.input:user-invalid ~ .err, .input[aria-invalid="true"] ~ .err { display: block; }
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.drop {
  position: relative; display: grid; gap: 6px; justify-items: center; text-align: center; padding: 34px 20px;
  background: var(--white); box-shadow: inset 0 0 0 1px var(--mist-2); outline: 1.5px dashed var(--mist-2); outline-offset: -10px; cursor: pointer;
  transition: background .2s, outline-color .2s;
}
.drop.is-over { background: #fafbff; outline-color: var(--navy); }
.drop input { position: absolute; inset: 0; opacity: 0; cursor: pointer; width: 100%; height: 100%; }
.drop:focus-within { box-shadow: inset 0 0 0 2px var(--navy); }
.drop svg { width: 26px; height: 26px; color: var(--signal); }
.drop strong { font-weight: 650; }
.drop span { font-size: var(--fs-xs); color: var(--muted); }
.file-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; font-size: var(--fs-sm); }
.file-list li { display: flex; justify-content: space-between; gap: 12px; padding: 10px 14px; background: var(--mist); }
.file-list li.bad { background: #fde8e8; color: var(--signal); }
.form-status { padding: 16px 18px; font-weight: 600; display: none; }
.form-status.ok { display: block; background: #e7f3ec; color: #0f5132; }
.form-status.fail { display: block; background: #fde8e8; color: #8a0c11; }
.form .consent { font-size: var(--fs-xs); color: var(--muted); }
.form [type="submit"][aria-busy="true"] { opacity: .7; pointer-events: none; }
.quote-shell { display: grid; gap: clamp(32px, 5vw, 72px); }
@media (min-width: 1100px) { .quote-shell { grid-template-columns: 1fr 340px; } .quote-shell aside { position: sticky; top: calc(var(--hh-compact) + 32px); align-self: start; } }
.quote-shell aside { display: grid; gap: 20px; align-content: start; }
.side-card { background: var(--ink); color: #fff; padding: 28px; display: grid; gap: 14px; }
.side-card p, .side-card li { color: var(--muted-d); font-size: var(--fs-sm); }
.side-card ol { margin: 0; padding-left: 20px; display: grid; gap: 8px; }

/* footer: see "Footer v2" at end of file */
/* lightbox */
.lightbox { padding: 0; border: 0; background: transparent; max-width: min(92vw, 1400px); max-height: 92dvh; overflow: visible; }
.lightbox::backdrop { background: rgba(11,16,38,.9); }
.lightbox img { max-width: min(92vw, 1400px); max-height: 84dvh; width: auto; margin-inline: auto; background: #fff; }
.lightbox .lb-close { position: fixed; top: calc(12px + env(safe-area-inset-top)); right: 12px; width: 52px; height: 52px; display: grid; place-items: center; background: var(--signal); color: #fff; }


/* ---------- reveal (scroll-driven, IO fallback) ---------- */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .rv { animation: rv-in linear both; animation-timeline: view(); animation-range: entry 0% entry 55%; }
    .rv-img { animation: rv-clip linear both; animation-timeline: view(); animation-range: entry 0% entry 70%; }
    .rv-img img { animation: rv-scale linear both; animation-timeline: view(); animation-range: entry 0% cover 50%; }
  }
  .js-io .rv:not(.is-in) { opacity: 0; transform: translateY(28px); }
  .js-io .rv { transition: opacity .9s var(--ease), transform .9s var(--ease); }
  .js-io .rv-img:not(.is-in) { clip-path: inset(0 0 100% 0); }
  .js-io .rv-img { transition: clip-path 1.1s var(--ease); }
}
@keyframes rv-in { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } }
@keyframes rv-clip { from { clip-path: inset(0 0 100% 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes rv-scale { from { transform: scale(1.15); } to { transform: scale(1); } }

/* ---------- view transitions (MPA) ---------- */
@view-transition { navigation: auto; }
::view-transition-old(root), ::view-transition-new(root) { animation-duration: .28s; animation-timing-function: var(--ease); }
::view-transition-group(site-header) { animation: none; }
@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
  *, *::before, *::after { transition-duration: .01ms !important; }
}

/* ---------- misc ---------- */
.section-link-row { display: flex; justify-content: space-between; align-items: center; gap: 20px; flex-wrap: wrap; margin-top: clamp(40px, 5vw, 72px); }
.cv { content-visibility: auto; contain-intrinsic-size: auto 900px; }
.legal { max-width: 72ch; }
.legal h2 { font-size: var(--fs-h3); margin: 2em 0 .6em; font-weight: 650; }
.legal p, .legal li { color: #2b3147; }
.legal ul { padding-left: 20px; }
.notfound { min-height: 80svh; display: grid; align-content: center; }
@media print {
  .site-header, .m-cta, .site-footer, .drawer { display: none !important; }
  .page-hero { padding-top: 24px; background: #fff; color: #000; }
}

/* spacing utilities (used instead of inline styles so CSP can stay strict) */
[data-sp="s"] { margin-top: 12px; }
[data-sp="m"] { margin-top: 24px; }
[data-sp="l"] { margin-top: 36px; }
[data-sp="xl"] { margin-top: clamp(48px, 6vw, 88px); }
[data-pt="hh"] { padding-top: calc(var(--hh) + clamp(28px, 4vw, 56px)); }
.addr { font-style: normal; }
.light .crumbs { margin-bottom: 36px; }
.profile-cta > *, .quote-shell > *, .foot-main > * { min-width: 0; }
.contact-list a, .contact-list span, .foot-brand a, .drawer-foot .meta a { overflow-wrap: anywhere; }
@media (max-width: 479px) {
  .btn { white-space: normal; text-align: left; line-height: 1.25; padding-block: 12px; }
  .contact-list li { grid-template-columns: 84px 1fr; gap: 12px; }
}

.proj-grid > *, .prod-grid > *, .article-grid > *, .cat-grid > *, .block > *, .proj-card > *, .art-card > *, .prod-card > * { min-width: 0; }
.proj-card > a:not(.link), .prod-card > a:not(.link), .art-card > a:not(.link) { display: block; }
aside .block { grid-template-columns: 1fr; gap: 14px; }

@media (max-width: 639px) {
  .cat-grid { grid-template-columns: 1fr 1fr; }
  .cat-grid .cat-card--wide { grid-column: span 2; }
  .cat-card { padding: 10px 10px 16px; gap: 12px; }
  .cat-card .plate { aspect-ratio: 1; padding: 14%; }
  .cat-card--wide .plate { aspect-ratio: 16 / 9; }
  .cat-card .body { grid-template-columns: 1fr; }
  .cat-card .h3 { font-size: 1rem; }
  .cat-card p, .cat-card .go { display: none; }
  .logo-cell .info { display: none; }
}

.white .plate:not(.plate--type), .white .thumbs button { background: var(--mist); }
.u { text-transform: none; }

/* must follow the base .mega rule in source order */
@media (min-width: 1280px) { .mega { display: block; } }

/* product titles sit in a half-width column and can be long single words (INSTRUMENTATION) */

/* ==========================================================================
   Motion layer (ui-ux-pro-max: user control for auto-rotation, honour
   reduced motion, compositor-only properties: transform + opacity)
   ========================================================================== */

/* ---- hero slider ---- */
.hero-slides, .hero-slides .slides { position: absolute; inset: 0; z-index: -2; }
.slide { position: absolute; inset: 0; margin: 0; opacity: 0; overflow: hidden; transition: opacity 1.4s var(--ease-io); }
.slide.is-active { opacity: 1; }
.slide img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 50%; }
@media (prefers-reduced-motion: no-preference) {
  .hero.is-live .slide.is-active img, .hero.is-live .slide.is-leaving img { animation: slide-zoom 9s var(--ease) both; }
  .slide.is-leaving img { animation-play-state: paused; }
}
@media (prefers-reduced-motion: reduce) { .slide { transition-duration: .2s; } }
@keyframes slide-zoom { from { transform: scale(1.12); } to { transform: scale(1); } }

/* ---- approval-body marquee ---- */
.marquee { position: relative; overflow: hidden; border-block: 1px solid var(--line); display: flex; align-items: center; }
.marquee::before, .marquee::after { content: ""; position: absolute; top: 0; bottom: 0; width: 8%; z-index: 1; pointer-events: none; }
.marquee::before { left: 0; background: linear-gradient(90deg, var(--paper), transparent); }
.marquee::after { right: 0; width: 14%; background: linear-gradient(270deg, var(--paper) 35%, transparent); }
.marquee-track { display: flex; width: max-content; }
.marquee ul { display: flex; list-style: none; margin: 0; padding: 0; }
.marquee li { padding: 26px 40px 26px 0; font-stretch: var(--wide); font-weight: 700; font-size: clamp(1.25rem, 2.2vw, 2rem); text-transform: uppercase; letter-spacing: -.01em; white-space: nowrap; display: flex; align-items: center; gap: 40px; }
.marquee li::after { content: ""; width: 8px; height: 8px; background: var(--signal); flex: none; }
.marquee-toggle { position: absolute; z-index: 2; right: 0; top: 50%; translate: 0 -50%; color: var(--ink); box-shadow: inset 0 0 0 1px var(--line); background: var(--paper); }
@media (prefers-reduced-motion: no-preference) {
  .marquee-track { animation: marquee 48s linear infinite; }
  .marquee:not(.is-visible) .marquee-track, .marquee:hover .marquee-track, .marquee:focus-within .marquee-track, .marquee.is-paused .marquee-track { animation-play-state: paused; }
}
@media (prefers-reduced-motion: reduce) {
  .marquee::before, .marquee::after { display: none; }
  .marquee-track { width: auto; } .marquee ul { flex-wrap: wrap; } .marquee ul[aria-hidden] , .marquee-toggle { display: none; }
}
@keyframes marquee { to { transform: translateX(-50%); } }

/* ---- scroll progress (header) ---- */
.scroll-progress { position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--signal); transform: scaleX(0); transform-origin: left; display: none; pointer-events: none; }
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: scroll()) {
    .scroll-progress { display: block; animation: grow-x linear both; animation-timeline: scroll(root block); }
  }
}
@keyframes grow-x { to { transform: scaleX(1); } }

/* ---- parallax (scroll-driven, compositor-only) ---- */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .parallax { overflow: hidden; }
    .parallax img { animation: parallax linear both; animation-timeline: view(); animation-range: cover; will-change: transform; }
  }
}
@keyframes parallax { from { transform: translateY(-7%) scale(1.16); } to { transform: translateY(7%) scale(1.16); } }

/* ---- staggered rise for grids entering view ---- */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .stagger > * { animation: rv-in linear both; animation-timeline: view(); animation-range: entry 5% entry 60%; }
    .stagger > :nth-child(3n+2) { animation-range: entry 12% entry 68%; }
    .stagger > :nth-child(3n) { animation-range: entry 19% entry 76%; }
  }
}


/* fit:start (generated by build.py) */
.fit { container-type: inline-size; }
.toolbar > .fit { container-type: normal; }
.fw-56 { font-size: min(var(--fs-own), calc(100cqi / 5.768)); }
.fw-57 { font-size: min(var(--fs-own), calc(100cqi / 5.871)); }
.fw-58 { font-size: min(var(--fs-own), calc(100cqi / 5.974)); }
.fw-59 { font-size: min(var(--fs-own), calc(100cqi / 6.077)); }
.fw-60 { font-size: min(var(--fs-own), calc(100cqi / 6.180)); }
.fw-61 { font-size: min(var(--fs-own), calc(100cqi / 6.283)); }
.fw-63 { font-size: min(var(--fs-own), calc(100cqi / 6.489)); }
.fw-64 { font-size: min(var(--fs-own), calc(100cqi / 6.592)); }
.fw-66 { font-size: min(var(--fs-own), calc(100cqi / 6.798)); }
.fw-67 { font-size: min(var(--fs-own), calc(100cqi / 6.901)); }
.fw-68 { font-size: min(var(--fs-own), calc(100cqi / 7.004)); }
.fw-69 { font-size: min(var(--fs-own), calc(100cqi / 7.107)); }
.fw-70 { font-size: min(var(--fs-own), calc(100cqi / 7.210)); }
.fw-71 { font-size: min(var(--fs-own), calc(100cqi / 7.313)); }
.fw-72 { font-size: min(var(--fs-own), calc(100cqi / 7.416)); }
.fw-73 { font-size: min(var(--fs-own), calc(100cqi / 7.519)); }
.fw-74 { font-size: min(var(--fs-own), calc(100cqi / 7.622)); }
.fw-75 { font-size: min(var(--fs-own), calc(100cqi / 7.725)); }
.fw-77 { font-size: min(var(--fs-own), calc(100cqi / 7.931)); }
.fw-78 { font-size: min(var(--fs-own), calc(100cqi / 8.034)); }
.fw-79 { font-size: min(var(--fs-own), calc(100cqi / 8.137)); }
.fw-82 { font-size: min(var(--fs-own), calc(100cqi / 8.446)); }
.fw-83 { font-size: min(var(--fs-own), calc(100cqi / 8.549)); }
.fw-84 { font-size: min(var(--fs-own), calc(100cqi / 8.652)); }
.fw-85 { font-size: min(var(--fs-own), calc(100cqi / 8.755)); }
.fw-86 { font-size: min(var(--fs-own), calc(100cqi / 8.858)); }
.fw-88 { font-size: min(var(--fs-own), calc(100cqi / 9.064)); }
.fw-95 { font-size: min(var(--fs-own), calc(100cqi / 9.785)); }
.fw-96 { font-size: min(var(--fs-own), calc(100cqi / 9.888)); }
.fw-100 { font-size: min(var(--fs-own), calc(100cqi / 10.300)); }
.fw-101 { font-size: min(var(--fs-own), calc(100cqi / 10.403)); }
.fw-110 { font-size: min(var(--fs-own), calc(100cqi / 11.330)); }
.fw-117 { font-size: min(var(--fs-own), calc(100cqi / 12.051)); }
/* fit:end */

/* small text opens up for legibility (apple-design §15) */
.idx, .kicker, .muted.small, .note, .file-meta, .crumbs ol, .hero-ctrl .cap .k, .proj-card .meta, .prod-card .meta, .art-card .meta { letter-spacing: 0.012em; }

/* accessibility preferences beyond motion */
@media (prefers-reduced-transparency: reduce) {
  .site-header, .m-cta { background: var(--paper) !important; -webkit-backdrop-filter: none !important; backdrop-filter: none !important; }
  .m-cta { background: var(--ink) !important; }
}
@media (prefers-contrast: more) {
  :root { --line: rgba(11, 16, 38, .45); --line-d: rgba(255, 255, 255, .5); --muted: #2e3346; --muted-d: #d3d7e4; }
  .site-header { background: var(--paper) !important; border-bottom-color: var(--ink) !important; }
}

/* ==========================================================================
   Motion v2 — typography, icons, product, buttons, header
   Rules (animate / motion / apple-design): transform + opacity only, one-shot,
   hover gated to fine pointers, reduced motion gets gentler fades not zero.
   ========================================================================== */

/* ---- word-masked headline reveal ---- */
.w { display: inline-block; overflow: clip; vertical-align: top; padding: .1em .02em .08em; margin: -.1em -.02em -.08em; }
.wi { display: inline-block; }
.d1 { --i: 0; } .d2 { --i: 1; } .d3 { --i: 2; } .d4 { --i: 3; } .d5 { --i: 4; } .d6 { --i: 5; }
.d7 { --i: 6; } .d8 { --i: 7; } .d9 { --i: 8; } .d10 { --i: 9; } .d11 { --i: 10; } .d12 { --i: 11; }
@media (prefers-reduced-motion: no-preference) {
  /* armed by JS only for headings below the fold: no-JS and crawlers see text */
  .wr.is-armed .wi { transform: translateY(108%); }
  .wr.is-armed.is-in .wi { transform: none; transition: transform var(--d-reveal) var(--ease); transition-delay: calc(var(--i) * var(--stagger)); }
  /* page-hero titles play once on load (above the fold, so no arming needed) */
  .wr-load .wi { animation: word-rise var(--d-reveal) var(--ease) both; animation-delay: calc(80ms + var(--i) * var(--stagger)); }
}
@media (prefers-reduced-motion: reduce) {
  .wr.is-armed { opacity: 0; }
  .wr.is-armed.is-in { opacity: 1; transition: opacity 200ms ease; }
}
@keyframes word-rise { from { transform: translateY(108%); } to { transform: none; } }

/* ---- scroll-lit statement: words brighten as they cross the viewport ---- */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .lit .sw { animation: lit linear both; animation-timeline: view(); animation-range: cover 8% cover 38%; }
  }
}
@keyframes lit { from { opacity: .6; } to { opacity: 1; } }   /* .6 keeps ink-on-paper at 4.81:1 (WCAG AA) */
.lit { color: var(--ink); }
.lit .sw { display: inline-block; }   /* view timelines need a box to track */

/* ---- capability band: oversized outline type drifting with scroll ---- */
.type-band { overflow: clip; padding-block: clamp(40px, 6vw, 88px); background: var(--white); border-block: 1px solid var(--line); }
.tb-row { display: flex; gap: .45em; width: max-content; font-stretch: 125%; font-weight: 760; text-transform: uppercase; letter-spacing: -0.03em;
  font-size: clamp(3rem, 9vw, 9.5rem); line-height: 1; white-space: nowrap; }
.tb-row span { display: inline-flex; align-items: center; gap: .45em; color: transparent; -webkit-text-stroke: 1.5px #7c8292; }   /* ≥3:1 for large text */
.tb-row span::after { content: ""; width: .14em; height: .14em; background: var(--signal); flex: none; }
.tb-b span { -webkit-text-stroke-color: transparent; color: var(--ink); }
.tb-b span:nth-child(odd) { color: transparent; -webkit-text-stroke: 1.5px var(--ink); }
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .tb-a { animation: tb-left linear both; animation-timeline: view(); animation-range: cover; }
    .tb-b { animation: tb-right linear both; animation-timeline: view(); animation-range: cover; }
  }
}
@keyframes tb-left { from { transform: translateX(0); } to { transform: translateX(-28%); } }
@keyframes tb-right { from { transform: translateX(-28%); } to { transform: translateX(0); } }

/* ---- section labels ---- */
.sec-head .kicker, .sol-index .kicker { margin-bottom: 18px; }

/* ---- line icons: draw on when their card enters view ---- */
.ico { display: inline-grid; place-items: center; width: 52px; height: 52px; color: var(--ink); box-shadow: inset 0 0 0 1px var(--line);
  transition: box-shadow var(--d-hover) ease, color var(--d-hover) ease, background-color var(--d-hover) ease; flex: none; }
.dark .ico, .dark-2 .ico { color: #fff; box-shadow: inset 0 0 0 1px var(--line-d); }
.ico svg { width: 26px; height: 26px; overflow: visible; }
.ico path { stroke-dasharray: 1; stroke-dashoffset: 0; }
@media (prefers-reduced-motion: no-preference) {
  .draw-armed .ico path { stroke-dashoffset: 1; }
  .draw-armed.is-in .ico path { stroke-dashoffset: 0; transition: stroke-dashoffset 900ms var(--ease); }
  .draw-armed.is-in .ico path:nth-child(2) { transition-delay: 160ms; }
  .draw-armed.is-in .ico path:nth-child(3) { transition-delay: 300ms; }
  .draw-armed.is-in .ico path:nth-child(4) { transition-delay: 420ms; }
  .draw-armed.is-in .ico path:nth-child(5) { transition-delay: 520ms; }
}
@media (hover: hover) and (pointer: fine) {
  .reasons li:hover .ico, .has-ico:hover .ico { color: var(--signal-hi); box-shadow: inset 0 0 0 1px currentColor; }
  .has-ico:hover .ico { color: var(--signal); }
}
.reasons li { grid-template-columns: 52px 1fr; gap: 18px; align-items: start; }
.reasons li::before { display: none; }
.has-ico .ico { margin-bottom: 8px; }

/* ---- arrows: travel out and re-enter on hover (feedback) ---- */
@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  .btn:hover .arr, .link:hover .arr, a:hover > .go svg, .cbtn[data-next]:hover svg { transform: none; animation: arrow-loop 520ms var(--ease) both; }
  .cbtn[data-prev]:hover svg { animation: arrow-loop-l 520ms var(--ease) both; }
}
@keyframes arrow-loop { 0% { transform: translateX(0); opacity: 1; } 45% { transform: translateX(110%); opacity: 0; } 46% { transform: translateX(-110%); opacity: 0; } 100% { transform: translateX(0); opacity: 1; } }
@keyframes arrow-loop-l { 0% { transform: translateX(0); opacity: 1; } 45% { transform: translateX(-110%); opacity: 0; } 46% { transform: translateX(110%); opacity: 0; } 100% { transform: translateX(0); opacity: 1; } }
.btn .arr, .link .arr { overflow: visible; }

/* ---- buttons: directional fill wipe + spring press ---- */
.btn { isolation: isolate; overflow: hidden; transition: color var(--d-hover) ease, transform var(--d-settle) var(--spring); }
.btn::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--wipe, #a8111a); transform: scaleX(0); transform-origin: right;
  transition: transform 380ms var(--ease); }
.btn--ink { --wipe: var(--navy); }
.btn--white { --wipe: var(--mist); }
.btn--ghost { --wipe: #fff; }
@media (hover: hover) and (pointer: fine) {
  .btn:hover::before { transform: scaleX(1); transform-origin: left; }
  .btn--ghost:hover { color: var(--ink); --bg: transparent; }
}
.btn:active { transform: scale(.97); transition: transform var(--d-press) var(--ease); }
@media (prefers-reduced-motion: reduce) { .btn::before { transition: none; } }

/* ---- icon micro-motions ---- */
.search svg { transition: transform var(--d-settle) var(--spring), color var(--d-hover) ease; }
.search:focus-within svg { transform: scale(1.12); color: var(--ink); }
.drop svg { transition: transform var(--d-settle) var(--spring); }
@media (hover: hover) and (pointer: fine) { .drop:hover svg { transform: translateY(-4px); } }
.drop.is-over svg { transform: translateY(-6px); }
@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  .m-cta .call:hover svg, .btn--ghost[href^="tel"]:hover { animation: ring 600ms var(--ease); }
}
@keyframes ring { 0%, 100% { transform: rotate(0); } 20% { transform: rotate(-12deg); } 40% { transform: rotate(10deg); } 60% { transform: rotate(-6deg); } 80% { transform: rotate(3deg); } }
.chip { transition: background-color var(--d-hover) ease, color var(--d-hover) ease, box-shadow var(--d-hover) ease, transform var(--d-settle) var(--spring); }
.chip:active { transform: scale(.96); transition-duration: var(--d-press); }

/* ---- product motion: pointer tilt (1:1 while tracking, spring settle on leave) ---- */
.tilt { transform-style: preserve-3d; }
.tilt img { transition: transform var(--d-settle) var(--spring-soft); }
.tilt.is-tracking img { transition: none; will-change: transform; }   /* layer only while tracking */
.tilt .sheen { position: absolute; inset: -40%; pointer-events: none; opacity: 0; z-index: 1;
  background: radial-gradient(circle at 50% 50%, rgba(255,255,255,.55), rgba(255,255,255,0) 42%);
  transition: opacity var(--d-hover) ease; mix-blend-mode: soft-light; }
.tilt.is-tracking .sheen { opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
  /* specimen settles in on product pages (transform only: no LCP delay) */
  .gallery-main .plate img { animation: specimen-in 760ms var(--ease) both; }
}
@keyframes specimen-in { from { transform: translateY(18px) scale(.94); } to { transform: none; } }

/* ---- header: hides while reading down, returns on scroll up ---- */
.site-header { transition: height .35s var(--ease), background-color .35s, color .35s, border-color .35s, transform 360ms var(--ease); }
.site-header.is-hidden { transform: translateY(-100%); }
@media (prefers-reduced-motion: reduce) { .site-header.is-hidden { transform: none; } }

/* ---- stats: tick in as they count ---- */
@media (prefers-reduced-motion: no-preference) {
  .stat { position: relative; }
  .stat::before { content: ""; position: absolute; left: 0; top: -1px; height: 2px; width: 48px; background: var(--signal-hi); transform: scaleX(0); transform-origin: left; transition: transform 900ms var(--ease); }
  .stat.is-counted::before { transform: scaleX(1); }
}
/* dark-2 surfaces share the dark text palette */
.dark-2 .lead, .dark-2 .muted, .dark-2 .kicker { color: var(--muted-d); }

/* ==========================================================================
   Hero v3 — rotating titles synced to backgrounds
   ========================================================================== */
.hero { --slide-dur: 8s; }
.hero-copy { display: grid; }
.hero-copy > .copy { grid-area: 1 / 1; display: grid; gap: 30px; align-content: end; min-width: 0;
  opacity: 0; visibility: hidden; pointer-events: none; transition: opacity 320ms ease, visibility 0s linear 320ms; }
.hero-copy > .copy.is-active { opacity: 1; visibility: visible; pointer-events: auto; transition: opacity 240ms ease, visibility 0s; }
.hero .copy .tagline { margin: 0; }
.hero .copy h1, .hero .copy h2 { margin: 0; }
@media (prefers-reduced-motion: no-preference) {
  /* entrance plays whenever a title becomes active (keyframes restart; exit is a plain fade) */
  .copy.is-active .line > span { animation: rise 900ms var(--ease) both; }
  .copy.is-active .line:nth-child(2) > span { animation-delay: 90ms; }
  .copy.is-active .line:nth-child(3) > span { animation-delay: 180ms; }
  .copy.is-active .tagline { animation: fade 700ms 60ms var(--ease) both; }
  .copy.is-active .lead { animation: fade 800ms 260ms var(--ease) both; }
  .copy.is-active .btn-row { animation: fade 800ms 360ms var(--ease) both; }
}

/* controls: labelled tabs with per-slide progress + transport buttons */
.hero-ctrl { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; }
.tabs { display: flex; gap: clamp(8px, 1.6vw, 24px); flex: 1; max-width: 640px; }
.tab { flex: 1 1 0; min-width: 0; text-align: left; padding: 6px 0 0; display: grid; gap: 10px; color: rgba(255,255,255,.55); transition: color var(--d-hover) ease; }
.tab .tl { font-size: var(--fs-xs); font-weight: 600; letter-spacing: .04em; text-transform: uppercase; display: flex; gap: 8px; align-items: baseline; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-height: 36px; align-items: center; }
.tab .num { color: var(--signal-hi); font-weight: 650; }
.tab .tp { display: block; height: 2px; background: rgba(255,255,255,.24); position: relative; overflow: hidden; }
.tab .tp::after { content: ""; position: absolute; inset: 0; background: #fff; transform: scaleX(0); transform-origin: left; }
.tab.is-done .tp::after { transform: scaleX(1); }
.tab.is-active { color: #fff; }
.tab.is-active .tp::after { animation: bar-fill var(--slide-dur) linear forwards; }
.hero.is-paused .tab.is-active .tp::after { animation-play-state: paused; }
@keyframes bar-fill { to { transform: scaleX(1); } }
@media (hover: hover) and (pointer: fine) { .tab:hover { color: #fff; } }
.btns { display: flex; gap: 6px; flex: none; }
.cbtn { width: 44px; height: 44px; display: grid; place-items: center; color: #fff; box-shadow: inset 0 0 0 1px var(--line-d); transition: background-color var(--d-hover) ease, transform var(--d-settle) var(--spring); }
.cbtn svg { width: 16px; height: 16px; }
.cbtn .i-play, .rail-ctrl .i-play { display: none; }
.is-user-paused .cbtn[data-toggle] .i-play, .marquee.is-paused .i-play, .rail-ctrl.is-user-paused .i-play { display: block; }
.is-user-paused .cbtn[data-toggle] .i-pause, .marquee.is-paused .i-pause, .rail-ctrl.is-user-paused .i-pause { display: none; }
@media (hover: hover) and (pointer: fine) { .cbtn:hover { background: rgba(255,255,255,.12); } }
.cbtn:active { transform: scale(.94); transition-duration: var(--d-press); }
@media (max-width: 679px) {
  .btns [data-prev], .btns [data-next] { display: none; }
  .tab.is-active { flex-grow: 3; }                 /* active tab shows its label; the others collapse to their number */
  .tab:not(.is-active) .tt { display: none; }
}

/* ==========================================================================
   Featured rail: continuous auto-scroll
   ========================================================================== */
.rail-wrap { position: relative; }
.rail.is-auto { scroll-snap-type: none; }
.rail-wrap[data-auto]::before, .rail-wrap[data-auto]::after { content: ""; position: absolute; top: 0; bottom: 0; width: clamp(28px, 6vw, 96px); z-index: 2; pointer-events: none; }
.rail-wrap[data-auto]::before { left: calc(-1 * var(--gutter)); background: linear-gradient(90deg, var(--paper) 25%, transparent); }
.rail-wrap[data-auto]::after { right: calc(-1 * var(--gutter)); background: linear-gradient(270deg, var(--paper) 25%, transparent); }
.rail-ctrl button svg { width: 16px; height: 16px; }
.rail-ctrl [data-rail-toggle] svg { width: 14px; height: 14px; }
@media (hover: hover) and (pointer: fine) { .rail-ctrl [data-rail-next]:hover svg { animation: arrow-loop 520ms var(--ease) both; } .rail-ctrl [data-rail-prev]:hover svg { animation: arrow-loop-l 520ms var(--ease) both; } }

/* ==========================================================================
   Footer v2 — corporate, with the Falcon bird and live current
   ========================================================================== */
.site-footer { background: var(--ink); color: #fff; position: relative; overflow: clip; }
.foot-cta .wrap { padding-block: clamp(72px, 10vw, 148px) clamp(48px, 6vw, 88px); display: grid; gap: clamp(28px, 4vw, 56px); align-items: end; }
@media (min-width: 1000px) { .foot-cta .wrap { grid-template-columns: 1.5fr 1fr; } }
.foot-cta .kicker { margin-bottom: 18px; }
.foot-cta-side { display: grid; gap: 22px; }
.foot-cta-side p { color: var(--muted-d); font-size: var(--fs-lead); line-height: 1.45; max-width: 36ch; }

/* electric current: a pulse travelling along each divider */
.bus { position: relative; height: 1px; background: var(--line-d); container-type: inline-size; overflow: hidden; }
.bus::after { content: ""; position: absolute; left: 0; top: 0; width: 240px; height: 2px; margin-top: -.5px;
  background: linear-gradient(90deg, transparent, var(--signal-hi) 55%, #fff 92%, transparent); transform: translateX(-240px); }
@media (prefers-reduced-motion: no-preference) {
  .is-live .bus::after { animation: current 2.8s var(--ease-io) infinite; }
  .is-live .bus:nth-of-type(2n)::after { animation-delay: 0.7s; }
  .is-live .bus:nth-of-type(3n)::after { animation-delay: 1.4s; }
  .is-live .bus:nth-of-type(4n)::after { animation-delay: 2.1s; }
}
@keyframes current { 0% { transform: translateX(-240px); } 55%, 100% { transform: translateX(100cqw); } }

/* contact bar */
.fc-grid { display: grid; }
@media (min-width: 900px) { .fc-grid { grid-template-columns: repeat(3, 1fr); } }
.fc { position: relative; display: grid; grid-template-columns: 1fr auto; gap: 4px 20px; align-items: center; padding: clamp(22px, 3vw, 36px) 0; border-top: 1px solid var(--line-d); overflow: hidden; isolation: isolate; }
.fc:first-child { border-top: 0; }
@media (min-width: 900px) { .fc { border-top: 0; padding-inline: clamp(0px, 2vw, 32px); } .fc + .fc { border-left: 1px solid var(--line-d); } .fc:first-child { padding-left: 0; } }
.fc .k { grid-column: 1; font-size: var(--fs-xs); color: var(--muted-d); }
.fc .v { grid-column: 1; font-stretch: var(--wide); font-weight: 700; font-size: clamp(1.05rem, 1.55vw, 1.5rem); letter-spacing: -.012em; line-height: 1.2; overflow-wrap: anywhere; }
.fc .arr { grid-column: 2; grid-row: 1 / span 2; width: 22px; height: 22px; color: var(--signal-hi); }
.fc::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--ink-2); transform: scaleY(0); transform-origin: bottom; transition: transform 420ms var(--ease); }
@media (hover: hover) and (pointer: fine) {
  .fc:hover::before { transform: scaleY(1); }
  .fc:hover .arr { animation: arrow-loop 520ms var(--ease) both; }
}

/* link grid */
.foot-main { padding-block: clamp(56px, 7vw, 104px); display: grid; gap: 48px; }
@media (min-width: 1100px) { .foot-main { grid-template-columns: 1.15fr 2fr; gap: clamp(32px, 6vw, 96px); } }
.foot-brand { display: grid; gap: 22px; align-content: start; justify-items: start; }
.foot-brand img { height: 44px; width: auto; }
.foot-brand p { color: var(--muted-d); font-size: var(--fs-sm); max-width: 38ch; line-height: 1.6; }
.foot-brand address { font-style: normal; color: rgba(255,255,255,.8); font-size: var(--fs-sm); line-height: 1.75; }
.foot-cols { display: grid; grid-template-columns: repeat(2, 1fr); gap: 36px 24px; }
@media (min-width: 760px) { .foot-cols { grid-template-columns: repeat(4, 1fr); } }
.foot-col h2 { font-size: var(--fs-xs); font-weight: 600; color: var(--muted-d); margin-bottom: 16px; letter-spacing: .03em; }
.foot-col ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.foot-col a { font-size: var(--fs-sm); display: inline-block; padding: 6px 0; color: rgba(255,255,255,.86); transition: color var(--d-hover) ease, transform var(--d-settle) var(--spring); }
@media (hover: hover) and (pointer: fine) { .foot-col a:hover { color: #fff; transform: translateX(4px); } }

/* stage: oversized wordmark + the Falcon bird */
.stage { position: relative; padding-top: clamp(96px, 16vw, 230px); }
.stage .wrap { position: relative; }
.wm-wrap { container-type: inline-size; position: relative; padding-bottom: clamp(12px, 2vw, 28px); }
.fwm { font-family: "Nunito", sans-serif; font-weight: 600; letter-spacing: -0.01em; line-height: 1; white-space: nowrap; user-select: none;
  font-size: calc(100cqi / var(--wm-one, 8.11)); color: transparent; -webkit-text-stroke: 1px rgba(255,255,255,.3); }
.fwm span { display: inline; }
.wm-fill { position: absolute; left: 0; top: 0; color: transparent; -webkit-text-stroke: 0;
  background: var(--navy); -webkit-background-clip: text; background-clip: text; }   /* decorative graphic: painted as a shape, not as text */
@media (max-width: 759px) { .fwm { font-size: calc(100cqi / var(--wm-two, 4.54)); } .fwm span { display: block; } }
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .wm-fill { animation: wm-fill linear both; animation-timeline: view(); animation-range: entry 15% cover 40%; }
  }
}
@keyframes wm-fill { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }

.bird { position: absolute; z-index: 1; right: 0; bottom: 40%; width: min(42%, 540px); aspect-ratio: 566 / 303; overflow: hidden;
  -webkit-mask: var(--bird) center / contain no-repeat; mask: var(--bird) center / contain no-repeat; background: rgba(255,255,255,.34); }
.bird-spark { position: absolute; inset: 0; background: linear-gradient(100deg, transparent 38%, var(--signal-hi) 46%, #fff 50%, var(--signal-hi) 54%, transparent 62%); transform: translateX(-110%); }
@media (max-width: 759px) { .bird { width: 72%; bottom: 96%; } .stage { padding-top: clamp(150px, 46vw, 210px); } }
@media (prefers-reduced-motion: no-preference) {
  .site-footer.is-live .bird-spark { animation: spark 5.6s var(--ease-io) infinite; }
  @supports (animation-timeline: view()) {
    .bird { animation: bird-fly linear both; animation-timeline: view(); animation-range: entry 0% cover 45%; }
  }
}
@keyframes spark { 0% { transform: translateX(-110%); } 55%, 100% { transform: translateX(110%); } }
@keyframes bird-fly { from { transform: translate(-34%, 46%) rotate(-7deg); opacity: 0; } to { transform: none; opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .bird-spark { transform: translateX(0); background: linear-gradient(100deg, transparent 20%, rgba(255,255,255,.35) 50%, transparent 80%); } }

/* bottom bar */
.foot-bottom { position: relative; z-index: 2; border-top: 1px solid var(--line-d); padding-block: 22px calc(22px + env(safe-area-inset-bottom)); display: flex; flex-wrap: wrap; gap: 12px 28px; align-items: center; font-size: var(--fs-xs); color: var(--muted-d); }
.foot-bottom ul { display: flex; gap: 22px; list-style: none; margin: 0 auto 0 0; padding: 0; }
.totop { width: 48px; height: 48px; display: grid; place-items: center; color: #fff; box-shadow: inset 0 0 0 1px var(--line-d); margin-left: auto; margin-right: 76px; transition: background-color var(--d-hover) ease, transform var(--d-settle) var(--spring); }
.totop svg { width: 18px; height: 18px; }
@media (hover: hover) and (pointer: fine) { .totop:hover { background: var(--signal); box-shadow: none; transform: translateY(-3px); } }
.totop:active { transform: scale(.94); transition-duration: var(--d-press); }
@media (max-width: 1279px) { .site-footer { padding-bottom: 72px; } .no-mcta .site-footer { padding-bottom: 0; } }

/* bird:start (generated by build.py) */
:root { --bird: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1132 606'%3E%3Cpath fill-rule='evenodd' d='M899 605c0 0-2-1-4-1c-2-1-6-1-9-2c-13-3-16-3-21-4c-3-1-9-1-12-2c-12-2-32-5-42-6c-11-1-15-3-29-12c-3-1-11-6-18-9c-7-4-17-9-22-12c-10-5-11-6-11-4c0 1 9 7 10 7c0 0 2 1 2 2c0 1 2 2 2 2c1 0 4 2 15 12c3 2 6 5 8 6c8 4-53 7-63 2c-5-2-6-2-6-1c0 2-5 5-9 5c-1 0-4 0-5 1c-2 0-7 2-11 3c-4 1-12 5-17 7c-6 3-10 5-11 5c0 0-9-8-19-18c-39-38-62-53-90-56c-3-1-10-1-15-2c-12-1-25-4-34-6c-4-1-10-2-16-4c-7-2-9-2-26-10c-17-7-29-13-70-32c-12-5-16-7-28-12c-8-3-15-6-20-8c-2-1-6-2-8-3c-3-1-6-2-8-2c-8-3-16 0-22 6c-5 6-6 6-9-1c-3-6-4-19-2-20c1-1 1-2 1-3c0-5 5-12 12-16c4-3 9-7 12-10c5-5 14-11 18-11c2 0 3 0 4-1c0-1 95-1 97 0c1 1 67 1 80-1c12-1 20-3 26-4c2-1 7-2 9-2c4-1 7-2 17-4c5-1 11-3 16-4c2 0 6-2 9-2c3-1 7-3 10-3c5-1 16-4 22-6c1-1 4-1 5-1c1 0 4 0 5-1c2 0 7-2 11-3c7-2 16-5 37-11c14-4 37-12 48-16c4-1 10-4 14-5c7-3 13-5 24-10c5-2 11-5 14-6c5-2 40-18 47-22c28-14 37-20 42-22c3-2 8-5 10-6c2-2 8-5 12-8c4-3 12-8 17-11c5-4 12-9 14-11c2-1 6-4 7-5c2-1 5-4 18-15c10-8 50-47 50-49c0 0 2-3 5-6c3-2 5-5 5-6c0 0 2-2 4-5c2-2 4-4 4-4c0-1 2-3 4-5c2-3 4-5 4-6c0 0 1-2 3-3c2-2 3-4 3-5c0 0 1-2 2-2c1-1 2-3 2-3c0-1 1-3 2-3c1-1 2-3 2-3c0-1 1-3 2-3c1-1 2-3 2-4c0 0 1-1 2-2c0-1 2-3 3-5c1-2 2-4 3-5c2-2 22-43 22-45c0 0 1-3 3-7c2-3 3-6 3-7c0 0 1-3 2-5c1-1 2-4 2-5c0-1 0-2 1-2c1-1 1-2 1-4c0-1 0-2 1-3c1 0 1-1 1-2c0-1 1-4 2-6c1-1 2-4 2-4c0-2 2-7 3-7c3 0 5 51 2 52c-1 1-1 5-1 10c0 6 0 10-1 10c-1 1-1 4-1 7c0 4 0 7-1 7c-1 1-1 3-1 5c0 3 0 5-1 5c-1 1-1 3-1 5c0 3 0 5-1 5c-1 1-1 3-1 4c0 2 0 4-1 4c-1 1-1 2-1 4c0 1 0 2-1 2c-1 1-1 3-1 4c0 2 0 4-1 5c-1 0-1 1-1 3c0 1 0 2-1 3c-1 0-1 1-1 2c0 2 0 3-1 3c-1 1-1 2-1 3c0 2 0 3-1 3c-1 1-1 2-1 3c0 1-1 4-2 5c-1 2-2 5-2 5c0 2-21 44-23 45c0 1-1 2-1 2c0 1-1 2-2 3c0 1-2 3-3 6c-1 2-3 4-3 5c-1 1-2 2-2 2c0 1-1 3-2 4c-1 0-2 2-2 2c0 1-1 3-3 4c-2 2-3 4-3 4c0 1-1 3-3 4c-2 2-3 4-3 4c0 1-2 3-4 6c-2 2-4 4-4 4c0 1-1 3-3 4c-1 2-2 3-2 4c1 0 32-16 40-22c2-1 7-5 10-7c12-8 47-39 47-41c0-1 3-5 7-9c4-3 7-7 7-8c0 0 2-3 5-5c3-3 5-6 5-7c0 0 1-2 3-3c2-2 3-4 3-4c0-1 1-2 2-3c0-1 2-3 3-5c3-5 4-4 5 2c0 4-1 10-3 14c-1 1-1 3-1 5c0 2 0 3-1 3c-1 1-1 2-1 3c0 1-1 4-2 6c-1 2-2 5-2 6c0 1 0 2-1 2c-1 1-1 2-1 3c0 1-1 4-3 8c-2 4-3 7-3 7c0 2-4 11-6 13c-1 1-2 3-3 5c-1 2-2 4-3 5c-1 0-2 2-3 4c-1 3-3 5-3 6c-1 1-2 2-2 2c0 1-1 3-3 4c-2 2-3 4-3 4c0 1-2 3-4 5c-2 3-4 5-4 6c0 1-25 25-32 30c-2 2-6 5-8 7c-13 10-36 23-62 35c-10 5-9 5 9 5c21-1 35-3 47-7c8-2 9-3 9 0c0 2-6 8-11 11c-1 1-6 4-10 7c-8 6-39 27-45 31c-2 1-6 3-8 5c-2 1-7 4-10 6c-5 3-23 13-37 19c-8 5-26 13-44 20c-2 1-10 4-17 6c-23 7-26 8-36 10c-2 0-7 1-9 2c-2 1-7 2-10 2c-9 2-14 3-18 4c-2 1-7 2-9 2c-2 0-6 1-9 2c-2 1-6 1-8 2c-3 1-7 2-9 2c-2 0-7 1-9 2c-2 1-7 2-10 2c-2 1-7 1-9 2c-2 1-7 1-10 2c-3 0-8 1-10 2c-2 1-7 2-10 2c-9 2-14 3-18 4c-8 2-22 5-31 6c-2 0-5 1-7 1c-2 1-14 1-34-1c-10 0-13 2-3 2c4 1 10 1 14 2c16 2 28 3 56 4c37 1 36 1 63 13c10 5 18 8 38 17c14 6 57 28 63 31c3 2 7 5 9 6c2 1 9 6 16 10c7 5 18 12 24 15c14 10 28 21 28 23c0 1-11 1-13 0zM652 593c14-6 18-9 18-16c0-1 0-3 1-4c1-1-1-6-5-9c-11-11 14-6 31 6c13 9 20 11 21 4c0-3 0-5-1-5c-1-1-1-2-1-3c0-6-6-14-23-28c-4-3-7-6-7-6c1-3 16-1 23 2c2 1 6 3 9 4c7 3 39 19 53 26c18 11 19 11 22 13c4 3 11 5 29 7c8 1 10 0 7-1c-2-1-8-7-15-14c-17-17-36-33-45-40c-2-1-6-4-8-6c-2-1-7-4-10-5c-4-2-11-5-17-8c-27-12-26-12-58-13c-37-1-67-4-95-10c-3-1-7-1-10-2c-3-1-7-1-10-2c-8-2-12-3-17-4c-2-1-6-3-8-3c-15-6 8-9 42-5c5 1 15 1 20 2c14 2 40 2 48 0c3 0 9-1 12-2c3 0 8-1 10-2c3 0 8-1 10-2c3 0 8-1 10-2c2-1 7-2 9-2c2 0 7-1 9-2c2-1 7-2 9-2c2 0 7-1 9-2c4-1 8-2 19-4c3-1 7-1 10-2c2 0 6-1 8-2c8-2 13-3 17-4c2 0 6-1 9-2c2-1 6-1 8-2c4-1 8-2 19-4c13-3 15-3 18-4c2 0 9-3 16-5c8-3 18-6 22-8c13-4 45-20 63-29c5-3 12-7 15-9c3-1 9-5 12-7c4-3 9-6 12-8c3-1 8-4 11-7c4-2 8-5 9-6c4-2 4-2-5-5c-7-2-10-3-20-5c-3-1-6-2-8-2c-1-1-4-1-5-1c-8 0-14-5-8-7c7-3 18-8 29-13c7-3 13-6 13-6c1 0 4-1 7-3c3-2 7-5 10-6c8-4 20-12 24-15c2-2 6-5 8-7c7-5 32-29 32-30c0-1 2-3 4-6c2-2 4-4 4-5c0 0 1-2 3-4c2-2 3-4 3-4c0-1 1-2 2-4c4-4 1-4-7 0c-4 2-10 5-13 6c-3 1-9 4-14 6c-11 5-21 9-28 12c-9 3-19 8-27 12c-18 8-32 11-24 4c1-1 2-2 2-2c0-1 1-3 2-3c1-1 2-3 2-3c0-1 3-4 6-8c3-3 6-6 6-7c0 0 2-2 4-5c2-2 4-4 4-5c0 0 1-2 3-4c2-2 3-4 3-4c0-1 1-3 3-4c2-2 3-4 3-5c0 0 1-2 2-2c1-1 2-3 2-4c0 0 1-1 2-2c0-1 2-3 3-6c1-2 3-4 3-5c1-1 2-2 2-2c0-1 1-2 1-3c2-1 21-39 21-41c0 0 1-3 2-5c1-1 2-4 2-5c0-1 1-2 1-3c2-2 0-3-2-1c-1 1-2 2-3 2c-3 1-26 17-38 26c-4 2-10 7-14 10c-7 4-12 8-19 14c-2 1-7 5-11 7c-4 3-9 7-11 9c-2 1-6 4-8 5c-2 2-6 5-8 6c-2 2-6 5-8 6c-2 2-6 5-8 6c-2 2-6 5-8 6c-2 2-6 5-8 6c-5 5-31 22-36 24c-2 1-6 4-9 6c-17 10-74 39-95 47c-3 1-9 4-12 5c-4 2-10 4-14 6c-13 6-17 7-31 12c-24 8-32 11-40 13c-4 1-10 3-14 4c-24 7-34 10-38 11c-2 0-6 1-8 2c-2 1-6 2-8 2c-6 1-12 3-19 5c-4 1-8 2-10 3c-2 0-6 2-9 3c-3 0-7 2-9 2c-2 1-6 1-8 2c-3 1-7 2-10 2c-3 1-8 1-11 2c-3 1-8 1-11 2c-3 0-7 1-8 1c-3 1-30 2-41 2c-153-2-143-2-157 10c-4 4-10 9-13 12c-8 7-9 10-9 18c0 5 1 8 3 5c1-3 8-4 18-4c11 0 11 0 26 6c3 1 8 3 11 4c8 3 24 10 56 25c20 10 33 15 59 27c3 1 6 2 7 2c0 0 5 1 9 3c4 1 9 3 11 3c2 1 6 1 8 2c11 3 14 3 41 6c32 3 57 18 96 56c10 9 18 17 18 17c0 0 2-1 4-2zM320 420c-8-4-8-7 0-11c10-6 23-2 16 4c-1 0-2 2-2 3c0 3-9 6-14 3zM280 410c-3-2-7-4-9-5c-2-2-7-5-10-6c-3-1-8-4-10-6c-2-1-7-4-10-6c-3-1-8-4-10-6c-2-1-8-4-12-7c-9-5-54-28-59-29c-2-1-6-3-8-4c-3-1-7-2-9-3c-2-1-5-2-7-3c-2-1-5-2-6-2c-1 0-2 0-2-1c-1 0-2-1-4-1c-1-1-4-1-6-2c-7-2-13-3-17-4c-3-1-7-1-10-2c-3-1-9-2-12-2c-7-1-62-2-72-1c-7 1-7 1-3-3c7-7 30-14 52-16c11-1 52-1 66 0c18 2 30 3 54 8c12 3 14 3 18 4c2 1 7 2 9 2c3 1 7 1 10 2c2 0 6 1 8 2c2 0 5 1 8 2c2 0 6 2 9 2c3 1 7 3 10 3c3 1 7 2 11 3c4 1 8 2 11 3c2 1 6 1 8 2c3 1 8 2 11 3c4 1 10 3 14 4c3 1 10 3 14 4c7 2 12 3 20 5c7 2 12 3 19 5c4 1 10 3 14 4c3 1 9 2 11 3c5 1 16 4 22 6c1 1 4 1 5 1c1 0 4 0 5 1c2 0 6 2 9 3c3 0 8 2 10 2c2 1 7 1 9 2c7 2 16 3 32 6c3 0 6 1 8 1c1 1 3 1 4 1c4 1 4 3 0 5c-3 1-74 1-74 0c-1-1-15-1-40-1c-25 0-39 0-40 1c0 1-2 1-4 1c-3 0-5 0-6 1c0 1-2 1-4 1c-6 0-14 5-16 11c-3 6-14 10-20 7zM290 402c2-1 3-3 4-4c2-6 13-13 22-14c3-1 9-2 12-2c7-1 55-2 83 0c20 0 22-1 5-4c-2 0-4-1-5-1c0-1-1-1-2-1c-1 0-4 0-5-1c-2 0-6-1-8-2c-4-1-11-3-24-7c-7-2-12-3-20-5c-7-2-12-3-19-5c-17-5-21-6-26-8c-3 0-7-2-10-2c-3-1-6-2-8-2c-2 0-5-1-8-2c-2-1-6-1-8-2c-5-1-12-3-20-4c-3-1-9-1-12-2c-4-1-10-2-14-2c-6-1-10-2-30-4c-5-1-13-1-18-2c-5-1-14-1-19-2c-5-1-13-1-18-2c-5 0-9-1-9-1c-2-1-13-1-13 0c0 0 2 1 5 2c2 1 5 2 6 2c1 1 3 1 4 1c0 0 2 0 3 1c4 2 10 4 15 6c3 1 12 5 21 9c9 4 18 9 20 10c2 1 9 5 14 7c5 3 13 7 16 10c3 2 9 5 13 7c8 6 12 8 19 12c5 2 9 5 22 14c4 2 6 2 10 0zM40 355c-1-5 20-18 40-24c18-6 18-5 21-4c2 0 5 1 6 1c5 0 30 10 35 14c1 1 4 3 8 5c11 6 14 10 5 9c-4-1-12-2-26-4c-11-2-55-2-64 0c-15 2-20 3-22 4c-2 0-3 0-4-1zM127 343c0-1-1-1-2-1c0 0-3-1-5-2c-15-7-23-8-27-3c-4 4-3 5 7 5c5 0 9 0 10 1c2 1 17 1 17 0z'/%3E%3C/svg%3E"); --bird-solid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1132 606'%3E%3Cpath d='M644 604c0-2-32-36-34-36c-1 0-4-2-6-5c-3-3-6-5-7-5c0 0-2-1-4-3c-2-2-4-3-5-3c0 0-2-1-2-2c0-1-2-2-3-2c0 0-1-1-2-2c-2-2-14-8-26-12c-10-3-14-4-33-6c-12-1-25-4-35-6c-2-1-6-1-8-2c-2-1-6-1-8-2c-2 0-6-2-9-3c-10-4-43-19-84-38c-14-7-51-21-58-24c-3 0-7-2-9-2c-7-2-15 0-21 7c-5 5-6 5-9-3c-5-9-4-16 3-31c3-8 3-11-2-13c-3-1-5-3-6-3c-1-1-3-2-4-3c-2-1-4-2-6-3c-1-1-3-3-5-3c-2-1-4-3-5-3c-1-1-3-2-4-3c-2-1-4-2-6-3c-1-1-3-3-5-3c-2-1-4-3-5-3c-1-1-3-2-4-3c-2-1-4-2-6-3c-1-1-4-3-7-5c-3-1-6-3-7-3c0-1-10-6-21-12c-25-12-30-13-31-6c-1 4-1 4-16 2c-4-1-11-2-16-2c-10-2-52-2-62 0c-3 0-9 1-13 2c-9 2-12 2-13 0c0-1 5-7 9-9c2 0 4-2 5-3c3-2 13-7 22-10c12-4 13-11 2-12c-9-1-61-1-71-1c-9 1-11-3-2-6c2-1 9-3 14-5c13-5 22-6 36-8c12-1 55-1 70 0c14 1 29 3 42 6c3 1 7 1 10 2c3 1 7 1 10 2c2 0 7 1 9 2c4 1 9 2 18 4c2 0 6 1 8 2c3 0 6 1 8 2c3 0 7 2 10 2c3 1 7 3 10 3c2 1 6 2 10 3c4 1 8 2 10 3c12 3 15 3 48 13c6 2 9 3 19 5c10 2 13 3 19 5c4 1 10 3 14 4c3 1 9 2 11 3c5 1 16 4 22 6c1 1 4 1 5 1c1 0 4 0 5 1c2 0 6 2 9 3c3 0 8 2 10 2c2 1 7 1 9 2c5 1 12 3 20 4c8 1 17 3 21 4c5 0 6 1 6 6c1 5 20 5 39 0c2-1 7-2 9-2c2 0 6-1 8-2c3 0 6-1 9-2c2-1 6-1 8-2c3-1 6-1 8-2c2 0 6-2 9-2c3-1 7-3 10-3c4-1 15-4 21-6c1-1 4-1 5-1c1 0 4 0 5-1c2 0 7-2 11-3c7-2 15-5 37-11c18-6 35-11 43-14c5-2 12-4 16-6c22-8 53-22 70-30c7-4 15-7 17-8c2-1 4-2 5-3c1 0 9-4 18-9c9-4 16-8 16-9c1-1 3-2 5-3c2 0 4-2 5-3c2-1 4-2 6-3c1-1 4-2 5-3c1-1 2-2 2-2c0 0 2-1 2-2c1-1 3-2 3-2c1 0 3-1 4-3c1-2 3-3 4-3c0 0 2-1 2-2c1-1 3-2 4-2c0 0 2-1 2-2c1-1 3-2 3-2c1 0 3-1 4-3c1-2 3-3 4-3c0 0 2-1 4-3c1-2 3-3 3-3c1 0 3-2 6-4c2-2 4-4 4-4c1 0 4-3 8-6c3-3 6-6 6-6c2 0 43-41 43-43c0 0 2-3 5-5c3-3 5-6 5-7c0 0 2-2 4-5c2-2 4-4 4-5c0 0 2-2 4-4c2-2 4-4 4-5c0 0 1-2 3-4c2-2 3-4 3-5c0 0 1-2 2-2c1-1 2-3 2-3c0-1 1-3 2-3c1-1 2-3 2-3c0-1 1-3 2-3c1-1 2-3 2-4c0 0 1-1 2-2c1-1 2-3 3-6c1-2 3-4 3-5c2-1 20-38 25-50c1-3 4-8 4-10c1-3 4-8 5-13c2-5 4-10 4-12c1-2 2-5 2-7c0-4 0-4 3-4c5 0 3 61-3 91c-1 3-1 7-2 10c-1 7-3 12-4 18c-3 8-11 34-13 39c-3 6-22 44-24 46c0 1-1 2-1 3c0 0-1 1-2 2c-1 1-2 3-3 6c-1 2-3 4-3 5c-1 1-2 2-2 2c0 1-1 3-2 4c-1 0-2 2-2 2c0 1-1 3-3 4c-3 3-5 9-5 13c1 5 16 3 21-3c1-1 2-2 2-2c1 0 3-1 4-3c1-2 3-3 4-3c0 0 2-1 2-2c1-1 3-2 3-2c1 0 3-2 6-4c3-2 5-4 5-4c1 0 5-3 8-7c3-4 7-7 7-7c2 0 17-15 17-17c0 0 3-4 7-8c4-3 7-7 7-8c0 0 2-3 5-6c3-2 5-5 5-6c0 0 1-2 3-3c2-2 3-4 3-5c0 0 1-1 2-2c0-1 2-3 3-5c2-3 3-4 5-4c4 0 3 20-1 20c-2 0-3 1-3 4c0 2-1 5-2 8c-1 2-3 6-4 10c-1 3-3 8-5 12c-2 4-4 9-5 12c-1 3-3 6-4 8c-1 1-3 3-3 5c-1 2-2 4-3 5c-1 0-2 2-3 4c-1 3-3 5-3 6c-1 1-2 2-2 2c0 1-1 3-3 4c-2 2-3 4-3 4c0 1-2 3-4 5c-2 3-4 5-4 5c0 2-26 28-28 28c0 0-2 2-4 4c-3 2-5 4-6 4c0 0-2 1-4 3c-1 2-3 3-4 3c0 0-2 1-2 2c-1 1-3 2-4 2c0 0-2 1-2 2c-1 1-3 2-4 2c0 0-1 1-2 1c-1 1-4 3-7 5c-3 1-6 3-7 4c-1 0-5 3-10 5c-12 6-12 13 0 12c11 0 27-3 37-6c8-2 10-3 10 0c0 2-9 11-11 11c0 0-2 1-4 3c-1 2-3 3-4 3c0 0-2 1-2 2c-1 1-3 2-3 2c-1 0-3 1-4 3c-1 2-3 3-4 3c0 0-2 1-2 2c-1 1-3 2-4 2c0 0-2 1-2 2c-1 1-3 2-4 2c0 0-2 1-2 2c-1 1-3 2-4 2c0 0-2 1-3 2c0 1-2 2-3 2c0 0-1 1-2 2c-1 0-3 2-5 3c-2 0-4 2-5 3c-2 1-4 2-6 3c-1 1-3 2-4 3c-1 0-3 2-5 3c-2 0-4 2-5 3c-1 0-7 3-13 7c-6 3-12 6-14 7c-2 2-6 3-39 18c-20 8-47 17-63 20c-2 0-7 1-9 2c-2 1-7 2-9 2c-3 1-7 1-10 2c-2 0-7 1-9 2c-2 1-7 2-9 2c-4 1-9 2-18 4c-2 1-6 2-8 2c-2 0-7 1-9 2c-2 1-7 2-9 2c-3 1-7 1-10 2c-11 2-15 3-19 4c-2 1-7 2-9 2c-3 1-7 1-10 2c-2 0-7 1-9 2c-7 2-14 3-20 4c-6 0-7 2-7 6c0 4 0 4 26 4c32 1 32 1 56 12c10 5 23 11 40 18c13 5 56 27 58 29c1 0 3 2 5 2c2 1 4 2 5 3c0 1 2 2 4 3c3 1 5 3 6 3c1 1 2 2 2 2c1 0 3 1 4 2c0 1 2 2 2 2c1 0 3 1 4 2c0 1 2 2 3 2c0 0 1 1 2 2c1 1 3 2 6 3c2 1 4 3 5 3c1 1 2 2 2 2c1 0 3 1 4 2c0 1 2 2 2 2c1 0 3 1 4 2c0 1 2 2 2 2c1 0 3 1 4 3c2 2 4 3 4 3c2 0 12 10 12 11c0 1-7 1-16 1c-15 0-16 0-16-2c0-2-2-4-6-4c-4-1-8-2-23-4c-6-1-10-2-27-4c-4-1-11-1-15-2c-8-1-18-4-23-9c-6-5-15-4-16 1c0 4 0 4-37 4c-21 0-38 1-41 2c-2 0-6 1-8 2c-16 3-30 10-30 14c0 2 0 2-5 2c-4 0-5 0-5-2z'/%3E%3C/svg%3E"); --wm-one: 8.107; --wm-two: 4.536; }
/* bird:end */

.site-footer .kicker { color: var(--muted-d); }


/* ==========================================================================
   Falcon follows the scroll · falcon on image heroes · gallery
   ========================================================================== */

/* ---- the falcon rides a rail down the right edge and turns to face the way you scroll ---- */
.fly { --ft: 14dvh; --fb: 14dvh; position: fixed; z-index: 40; top: 0; bottom: 0; right: clamp(2px, .9vw, 14px); width: 44px; pointer-events: none; }
@media (max-width: 1279px) { .fly { --fb: max(14dvh, 168px); } }   /* stop above the WhatsApp button / sticky CTA */
.fly-rail { position: absolute; right: 21px; top: var(--ft); bottom: var(--fb); width: 2px; background: rgba(127, 134, 156, .32); overflow: hidden; }
.fly-rail i { position: absolute; inset: 0; background: var(--signal); transform: scaleY(0); transform-origin: top; }
.fly-pos { position: absolute; right: 22px; top: var(--ft); width: 0; height: 0; filter: drop-shadow(0 0 1.5px #fff) drop-shadow(0 0 3px rgba(255, 255, 255, .85)); will-change: transform; }
.fly-bird { position: absolute; left: -33px; top: -17px; width: 66px; height: 35px; background: var(--navy);
  -webkit-mask: var(--bird-solid) center / contain no-repeat; mask: var(--bird-solid) center / contain no-repeat;
  transform: rotate(-26deg); transition: transform 620ms var(--spring-soft); }       /* profile view, as in the logo: nose down while scrolling down */
.fly[data-dir="up"] .fly-bird { transform: rotate(24deg); }                          /* nose up while scrolling back */
@media (max-width: 759px) { .fly-bird { width: 46px; height: 25px; left: -23px; top: -12px; } .fly { width: 34px; right: 0; } .fly-rail, .fly-pos { right: 28px; } }
@supports (animation-timeline: scroll()) {
  .fly-pos { animation: fly-travel linear both; animation-timeline: scroll(root block); }
  .fly-rail i { animation: grow-y linear both; animation-timeline: scroll(root block); }
}
.fly.is-js .fly-pos { transform: translateY(calc(var(--sp, 0) * (100dvh - var(--ft) - var(--fb)))); }
.fly.is-js .fly-rail i { transform: scaleY(var(--sp, 0)); }
.fly.is-static { display: none; }
@keyframes fly-travel { to { transform: translateY(calc(100dvh - var(--ft) - var(--fb))); } }
@keyframes grow-y { to { transform: scaleY(1); } }
@media (prefers-reduced-motion: reduce) { .fly { display: none; } }
@media print { .fly { display: none; } }

/* ---- falcon on the right of image page headers ---- */
.page-hero > .wrap { position: relative; z-index: 1; }
.hero-bird { position: absolute; z-index: 0; right: -1vw; top: 50%; translate: 0 -46%; width: min(46vw, 640px); aspect-ratio: 566 / 303; overflow: hidden; pointer-events: none;
  -webkit-mask: var(--bird) center / contain no-repeat; mask: var(--bird) center / contain no-repeat; background: rgba(255, 255, 255, .32); }
@media (max-width: 759px) { .hero-bird { width: 92vw; right: -14vw; top: auto; bottom: 3%; translate: 0 0; background: rgba(255, 255, 255, .28); } }
.page-hero .bus { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; }
@media (prefers-reduced-motion: no-preference) {
  .hero-bird { animation: hero-bird-in 1500ms 250ms var(--ease) both; }
  .page-hero.is-live .hero-bird .bird-spark { animation: spark 5.6s 1.2s var(--ease-io) infinite; }
}
@keyframes hero-bird-in { from { transform: translateX(14%); opacity: 0; } to { transform: none; opacity: 1; } }

/* ---- home gallery ---- */
.gal { position: relative; container-type: inline-size; }
/* three cards always in view on desktop (two on tablets, one plus a peek on phones); the first card lines up with the page gutter */
.gal-track { --w: min(100cqi - 2 * var(--gutter), var(--maxw)); --pad: calc((100cqi - var(--w)) / 2); --gap: clamp(14px, 2vw, 28px);
  display: grid; grid-auto-flow: column; grid-auto-columns: min(78cqi, 340px); gap: var(--gap); overflow-x: auto; overscroll-behavior-x: contain;
  scroll-snap-type: x proximity; scrollbar-width: none; padding: 8px var(--pad); scroll-padding-inline: var(--pad); touch-action: pan-x pan-y; }
@media (min-width: 640px) { .gal-track { grid-auto-columns: calc((var(--w) - var(--gap)) / 2); } }
@media (min-width: 1000px) { .gal-track { grid-auto-columns: calc((var(--w) - 2 * var(--gap)) / 3); } }
.gal-track.is-auto { scroll-snap-type: none; }
.gal-track::-webkit-scrollbar { display: none; }
@media (hover: hover) and (pointer: fine) { .gal-track { cursor: grab; } }
.gal-track.is-dragging { cursor: grabbing; scroll-snap-type: none; user-select: none; -webkit-user-select: none; }
.gal-track.is-dragging * { pointer-events: none; }
.gal-card { scroll-snap-align: start; display: grid; gap: 20px; align-content: start; min-width: 0; }
.gal-media { position: relative; display: block; width: 100%; aspect-ratio: 5 / 4; overflow: hidden; background: var(--ink-2); cursor: zoom-in; }
.gal-media img { width: 100%; height: 100%; object-fit: cover; transform: scale(1.14); transition: scale .9s var(--ease); }
.gal-zoom { position: absolute; right: 12px; top: 12px; width: 42px; height: 42px; display: grid; place-items: center; background: var(--paper); color: var(--ink); opacity: 0; translate: 0 -6px; transition: opacity var(--d-hover) ease, translate var(--d-settle) var(--spring); }
.gal-zoom svg { width: 16px; height: 16px; }
@media (hover: hover) and (pointer: fine) {
  .gal-card:hover .gal-media img { scale: 1.07; }
  .gal-card:hover .gal-zoom, .gal-media:focus-visible .gal-zoom { opacity: 1; translate: 0 0; }
}
@media (hover: none) { .gal-zoom { opacity: 1; translate: 0 0; } }
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view(inline)) {
    .gal-media img { animation: gal-par linear both; animation-timeline: view(inline); }
  }
}
@keyframes gal-par { from { transform: translateX(-6%) scale(1.14); } to { transform: translateX(6%) scale(1.14); } }
.gal-cap { display: grid; grid-template-columns: auto 1fr; gap: 16px; align-items: start; }
.gal-cap .n { font-stretch: 125%; font-weight: 250; font-size: clamp(2rem, 3.2vw, 3rem); line-height: .9; letter-spacing: -.04em; color: #7c8292; min-width: 2ch; }
.gal-cap .meta { font-size: var(--fs-xs); color: var(--muted); margin-bottom: 4px; }
.gal-cap .h3 a { background: linear-gradient(currentColor, currentColor) 0 100% / 0 1px no-repeat; transition: background-size .35s var(--ease), color var(--d-hover) ease; padding-bottom: 2px; }
@media (hover: hover) and (pointer: fine) { .gal-cap .h3 a:hover { background-size: 100% 1px; color: var(--signal); } }
.gal-end-wrap { scroll-snap-align: start; display: grid; min-width: 0; }
.gal-end { position: relative; isolation: isolate; overflow: hidden; display: grid; align-content: space-between; gap: 18px; aspect-ratio: 5 / 4; padding: clamp(22px, 3vw, 36px);
  background: var(--ink); color: #fff; clip-path: polygon(0 0, calc(100% - 22px) 0, 100% 22px, 100% 100%, 0 100%); }
.gal-end .n { font-stretch: 125%; font-weight: 250; font-size: clamp(4rem, 8vw, 8rem); line-height: .85; letter-spacing: -.05em; color: var(--signal-hi); }
.gal-end .t { font-size: var(--fs-lead); line-height: 1.3; max-width: 18ch; color: rgba(255, 255, 255, .86); }
.gal-end .go { position: absolute; right: clamp(22px, 3vw, 36px); top: clamp(22px, 3vw, 36px); width: 44px; height: 44px; display: grid; place-items: center; box-shadow: inset 0 0 0 1px var(--line-d); }
.gal-end .go svg { width: 18px; height: 18px; }
.gal-end .v { font-size: var(--fs-xs); font-weight: 650; letter-spacing: .09em; text-transform: uppercase; }
.gal-end::before { content: ""; position: absolute; inset: 0; z-index: -1; background: var(--navy); transform: scaleX(0); transform-origin: left; transition: transform 460ms var(--ease); }
@media (hover: hover) and (pointer: fine) { .gal-end:hover::before { transform: scaleX(1); } .gal-end:hover .go svg { animation: arrow-loop 520ms var(--ease) both; } }
.gal-ctrl { display: flex; align-items: center; gap: 24px; margin-top: 28px; }
.gal-bar { flex: 1; height: 2px; background: var(--line); position: relative; overflow: hidden; }
.gal-bar i { position: absolute; inset: 0; background: var(--signal); transform-origin: left; transform: scaleX(var(--gp, .3)); transition: transform 180ms linear; }
.gal-count { font-size: var(--fs-xs); color: var(--muted); min-width: 64px; text-align: right; }
.gal-count b { color: var(--ink); font-weight: 650; }
.gal-ctrl .rail-ctrl button svg { width: 16px; height: 16px; }

/* ---- lightbox: caption, project link, previous / next ---- */
.lb-cap { display: flex; flex-wrap: wrap; gap: 6px 22px; justify-content: center; align-items: baseline; margin-top: 14px; color: #fff; font-size: var(--fs-sm); }
.lb-cap p { margin: 0; }
.lb-cap .link { color: #fff; }
.lb-nav { position: fixed; top: 50%; translate: 0 -50%; width: 52px; height: 52px; display: grid; place-items: center; color: #fff; background: rgba(11, 16, 38, .6); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .3); transition: background-color var(--d-hover) ease; }
.lb-nav[hidden] { display: none; }
.lb-nav svg { width: 18px; height: 18px; }
.lb-prev { left: max(10px, env(safe-area-inset-left)); } .lb-next { right: max(10px, env(safe-area-inset-right)); }
@media (hover: hover) and (pointer: fine) { .lb-nav:hover { background: var(--signal); } }


/* ==========================================================================
   WhatsApp chat button (every page)
   The wrapper is fixed; the rings live behind the button so only their soft
   edge shows. Transform + opacity only, so the loop costs nothing on the main thread.
   ========================================================================== */
.wa-wrap { --wa: 56px; position: fixed; z-index: 50; right: max(16px, env(safe-area-inset-right)); bottom: max(20px, calc(env(safe-area-inset-bottom) + 16px)); display: flex; justify-content: flex-end; }
.wa { position: relative; z-index: 1; height: var(--wa); min-width: var(--wa); display: inline-flex; align-items: center; justify-content: center; gap: 0; padding: 0;
  background: #0d7d3e; color: #fff; border-radius: calc(var(--wa) / 2); box-shadow: 0 10px 26px -8px rgba(11, 16, 38, .55), 0 0 0 1px rgba(255, 255, 255, .16) inset;
  transition: transform var(--d-settle) var(--spring), background-color var(--d-hover) ease, padding var(--d-settle) var(--spring), gap var(--d-settle) var(--spring); }
.wa-ico { width: var(--wa); height: var(--wa); display: grid; place-items: center; flex: none; }
.wa-ico svg { width: 30px; height: 30px; }
.wa-txt { max-width: 0; overflow: hidden; white-space: nowrap; font-size: var(--fs-sm); font-weight: 650; letter-spacing: .01em; transition: max-width var(--d-settle) var(--spring); }
@media (hover: hover) and (pointer: fine) {
  .wa:hover, .wa:focus-visible { background: #0a6a34; padding-right: 22px; }
  .wa:hover .wa-txt, .wa:focus-visible .wa-txt { max-width: 9rem; }
}
.wa:active { transform: scale(.94); transition-duration: var(--d-press); }
.wa:focus-visible { outline: 3px solid #fff; outline-offset: 3px; box-shadow: 0 0 0 6px var(--ink); }

/* the dissolve: soft light-green rings leave the button and fade into the page */
.wa-fx { position: absolute; right: 0; bottom: 0; width: var(--wa); height: var(--wa); pointer-events: none; transition: opacity var(--d-hover) ease; }
.wa-fx i { position: absolute; inset: 0; border-radius: 50%; opacity: 0;
  background: radial-gradient(circle, rgba(37, 211, 102, 0) 0 42%, rgba(37, 211, 102, .6) 56%, rgba(37, 211, 102, .3) 68%, rgba(37, 211, 102, 0) 79%); }
.wa-wrap:hover .wa-fx, .wa-wrap:focus-within .wa-fx { opacity: 0; }   /* quiet while the visitor is on it */

/* phones and tablets carry the sticky quote bar: sit above it */
@media (max-width: 1279px) { .wa-wrap { --wa: 52px; bottom: max(84px, calc(env(safe-area-inset-bottom) + 80px)); } .wa-ico svg { width: 28px; height: 28px; } }
.no-mcta .wa-wrap { bottom: max(20px, calc(env(safe-area-inset-bottom) + 16px)); }
@media (prefers-reduced-motion: no-preference) {
  .wa-wrap { animation: wa-in 700ms 900ms var(--spring) both; }
  .wa-fx i { animation: wa-dissolve 3.4s cubic-bezier(.22, .6, .3, 1) 2.2s infinite; }
  .wa-fx i:nth-child(2) { animation-delay: 3.9s; }
  .wa-ico svg { animation: wa-wiggle 9s 4s ease-in-out infinite; transform-origin: 50% 60%; }   /* a small phone-ring shake every few seconds */
}
@keyframes wa-in { from { transform: scale(.4); opacity: 0; } to { transform: none; opacity: 1; } }
@keyframes wa-dissolve { 0% { transform: scale(1); opacity: 0; } 14% { opacity: 1; } 100% { transform: scale(2.8); opacity: 0; } }
@keyframes wa-wiggle { 0%, 87%, 100% { transform: rotate(0); } 89% { transform: rotate(-13deg); } 91% { transform: rotate(11deg); } 93% { transform: rotate(-8deg); } 95% { transform: rotate(5deg); } 97% { transform: rotate(-2deg); } }
@media print { .wa-wrap { display: none; } }

/* small header labels stay readable even where a stroke of the falcon passes behind them */
.page-hero .facts dt { color: #e3e6f0; }
.page-hero .crumbs ol { color: #d3d7e4; }


/* ---- type uniformity: one welcome-sentence size on every page header and the home hero ---- */
.page-hero .lead, .hero .lead { font-size: clamp(1rem, 0.25vw + 0.95rem, 1.125rem); line-height: 1.55; letter-spacing: 0; max-width: 54ch; }
.page-hero .lead { margin-top: 22px; }
.logo-plate img { width: auto; max-width: min(55%, 320px); max-height: 55%; }
.plate img { max-width: 100%; }

.data--kv { min-width: 0; }
.data--kv th:first-child, .data--kv td:first-child { width: 42%; }

/* logo wall: slide in without fading, so small captions are never sampled mid-fade */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) { .logo-wall.stagger > * { animation-name: rv-up; } }
}
@keyframes rv-up { from { transform: translateY(28px); } to { transform: none; } }


/* ---- brand wall: five per row; the "ask" tile completes the last row ---- */
.logo-cell--ask { background: var(--signal); color: #fff; aspect-ratio: auto; align-content: space-between; justify-items: start; text-align: left; padding: clamp(16px, 2vw, 26px); gap: 12px; display: grid; }
.logo-cell--ask .ask-k { font-size: var(--fs-sm); line-height: 1.35; font-weight: 560; max-width: 18ch; }
.logo-cell--ask .ask-v { display: inline-flex; align-items: center; gap: 10px; font-size: var(--fs-xs); font-weight: 650; letter-spacing: .09em; text-transform: uppercase; }
.logo-cell--ask .arr { width: 16px; height: 16px; transition: transform .35s var(--ease); }
@media (hover: hover) and (pointer: fine) { .logo-cell--ask { transition: background-color var(--d-hover) ease; } .logo-cell--ask:hover { background: #b8121a; } .logo-cell--ask:hover .arr { animation: arrow-loop 520ms var(--ease) both; } }
@media (max-width: 639px) { .logo-cell--ask { padding: 10px; } .logo-cell--ask .ask-k { font-size: .75rem; } .logo-cell--ask .ask-v { font-size: .6875rem; letter-spacing: .05em; gap: 6px; } }

/* ---- project cards: the image opens the lightbox ---- */
.proj-card button.media { display: block; width: 100%; padding: 0; cursor: zoom-in; text-align: left; }
.proj-card .media .gal-zoom { z-index: 1; }
@media (hover: hover) and (pointer: fine) { .proj-card:hover .gal-zoom, .proj-card .media:focus-visible .gal-zoom { opacity: 1; translate: 0 0; } }

/* ---- footer credit ---- */
.foot-bottom .credit { display: inline-flex; align-items: center; gap: .4em; flex-wrap: wrap; color: var(--muted-d); }
.foot-bottom .credit a { color: #fff; }
.foot-bottom .heart { width: 15px; height: 15px; color: var(--signal-hi); flex: none; }
@media (prefers-reduced-motion: no-preference) { .site-footer.is-live .heart { animation: heartbeat 2.4s ease-in-out infinite; transform-origin: center; } }
@keyframes heartbeat { 0%, 60%, 100% { transform: scale(1); } 12% { transform: scale(1.22); } 24% { transform: scale(1); } 36% { transform: scale(1.14); } }
.foot-bottom ul { margin-right: auto; }
.legal p.muted { color: var(--muted); font-size: var(--fs-sm); }

.gal-ctrl .rail-ctrl [data-gal-toggle] svg { width: 14px; height: 14px; }

/* ---- captcha field: compact numeric input, not full-width ---- */
.field.captcha .input { max-width: 140px; }
.field.captcha label { display: block; }
.field.captcha .req { color: var(--signal); }

/* timeline scroll hint — phone only */
.tl-hint { display: none; }
@media (max-width: 639px) {
  .tl-hint { display: flex; align-items: center; gap: 8px; margin-top: 20px; color: var(--muted-d); font-size: .78rem; letter-spacing: .08em; text-transform: uppercase; font-weight: 600; }
  .tl-hint svg { flex: none; animation: hint-slide 1.6s ease-in-out infinite; }
  @keyframes hint-slide { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(7px); } }
}
