/* ==========================================================================
   Helmsman — design system
   Colours are the exact vector values from the 2026 company profile: navy #160B56, orange #F47520,
   peach #FAC39F, apricot #F9A968, lavender #8E88B8, paper #F2F4F8, body grey #4C536A. The logo is never recoloured
   except navy <-> white on dark grounds, exactly as the profile does.
   ========================================================================== */

@font-face { font-family: "Inter Tight"; src: url("/fonts/inter-tight.woff2") format("woff2"); font-weight: 400 800; font-display: swap; }
@font-face { font-family: "Inter"; src: url("/fonts/inter.woff2") format("woff2"); font-weight: 400 600; font-display: swap; }
@font-face { font-family: "IBM Plex Serif"; src: url("/fonts/plex-serif.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "IBM Plex Serif"; src: url("/fonts/plex-serif-italic.woff2") format("woff2"); font-weight: 400; font-style: italic; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("/fonts/plex-mono-400.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("/fonts/plex-mono-500.woff2") format("woff2"); font-weight: 500; font-display: swap; }

:root {
    --navy: #160B56;
    --navy-2: #20146A;
    --navy-3: #2C2180;
    --orange: #F47520;
    --orange-ink: #B04608;      /* orange for small text on light grounds (5:1, AA) */
    --peach: #FAC39F;
    --apricot: #F9A968;        /* accent text on navy (profile page 3) */
    --lavender: #8E88B8;       /* secondary text on navy */
    --line-navy: #3C3372;
    --paper: #F2F4F8;
    --paper-2: #E7EAF1;
    --white: #FFFFFF;
    --text: #4C536A;
    --muted: #666C83;          /* 4.8:1 on paper */
    --line: #D9DDE7;
    --line-2: #C9CEDC;
    --red: #D2352B;

    --f-display: "Inter Tight", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
    --f-body: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
    --f-serif: "IBM Plex Serif", Georgia, "Times New Roman", serif;
    --f-mono: "IBM Plex Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;

    --gutter: clamp(16px, 4vw, 56px);
    --max: 1440px;
    --hdr: 76px;
    --ease: cubic-bezier(.2, .7, .1, 1);
    --ease-io: cubic-bezier(.7, 0, .2, 1);
    --radius: 6px;

    color-scheme: light;
}

/* ---------- reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; overflow-x: clip; scroll-padding-top: calc(var(--hdr) + 16px); scrollbar-gutter: stable; }
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-stopped { overflow: hidden; }
body {
    margin: 0; background: var(--paper); color: var(--text);
    font: 400 17px/1.62 var(--f-body); font-feature-settings: "cv11", "ss01";
    -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility;
    overflow-x: clip;
}
img, svg, canvas { display: block; max-width: 100%; }
img { height: auto; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
h1, h2, h3, h4, p, ol, ul, dl, dd, figure, blockquote { margin: 0; }
ol, ul { padding: 0; list-style: none; }
address { font-style: normal; }
::selection { background: var(--orange); color: var(--navy); }
:focus-visible { outline: 2px solid var(--orange); outline-offset: 3px; border-radius: 2px; }
.sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.sr, .hp { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.skip { position: fixed; left: 16px; top: -60px; z-index: 200; background: var(--navy); color: #fff; padding: 12px 18px; border-radius: var(--radius); transition: top .2s; }
.skip:focus { top: 12px; }

/* ---------- type ---------- */
.wrap { width: min(100% - 2 * var(--gutter), var(--max)); margin-inline: auto; }
.mono { font-family: var(--f-mono); font-weight: 400; }
.serif { font-family: var(--f-serif); font-weight: 400; }
.peach { color: var(--peach); }
.eyebrow {
    display: block; font: 500 12px/1.4 var(--f-mono); letter-spacing: .18em; text-transform: uppercase; color: var(--orange-ink);
    margin-bottom: 18px;
}
.h1, .h2, .h3, .hero-h, .display { font-family: var(--f-display); color: var(--navy); font-weight: 700; letter-spacing: -.035em; text-wrap: balance; }
.h1 { font-size: clamp(42px, 6.6vw, 108px); line-height: .98; letter-spacing: -.04em; }
.h2 { font-size: clamp(32px, 4.6vw, 72px); line-height: 1.02; }
.h3 { font-size: clamp(24px, 2.4vw, 34px); line-height: 1.1; letter-spacing: -.025em; }
.display { font-size: clamp(42px, 7vw, 116px); line-height: .96; letter-spacing: -.045em; }
.lede { font-size: clamp(17px, 1.35vw, 20px); line-height: 1.6; max-width: 40em; color: var(--text); }
em { font-style: italic; }

/* dark grounds */
[data-theme="dark"] { background: var(--navy); color: rgba(255, 255, 255, .74); }
[data-theme="dark"] .h1, [data-theme="dark"] .h2, [data-theme="dark"] .h3, [data-theme="dark"] .display { color: #fff; }
[data-theme="dark"] .eyebrow { color: var(--apricot); }
[data-theme="dark"] .peach, .menu .peach, .order.is-helm .order-h-b { color: var(--apricot); }

/* ---------- buttons & links ---------- */
.ic { width: 20px; height: 20px; flex: none; }
.btn {
    --bg: var(--navy); --fg: #fff; --hover: var(--orange); --hover-fg: var(--navy);
    position: relative; display: inline-flex; align-items: center; gap: 12px; height: 52px; padding: 0 22px 0 24px;
    background: var(--bg); color: var(--fg); border-radius: 12px; font: 600 16px/1 var(--f-display); letter-spacing: -.01em;
    overflow: hidden; isolation: isolate; transition: color .45s var(--ease), transform .3s var(--ease); will-change: transform;
}
.btn::before {
    content: ""; position: absolute; inset: 0; z-index: -1; background: var(--hover);
    transform: translateY(101%); border-radius: 50% 50% 0 0 / 30% 30% 0 0; transition: transform .55s var(--ease), border-radius .55s var(--ease);
}
.btn:hover { color: var(--hover-fg); }
.btn:hover::before { transform: translateY(0); border-radius: 0; }
.btn .ic { transition: transform .45s var(--ease); }
.btn:hover .ic { transform: translateX(4px); }
.btn-lg { height: 62px; padding: 0 26px 0 30px; font-size: 18px; border-radius: 14px; }
.btn-sm { height: 42px; padding: 0 16px 0 18px; font-size: 15px; border-radius: 10px; gap: 8px; }
.btn-sm .ic { width: 18px; height: 18px; }
.btn-orange { --bg: var(--orange); --fg: var(--navy); --hover: #fff; --hover-fg: var(--navy); }
.btn-ghost { --bg: transparent; --fg: var(--navy); --hover: var(--navy); --hover-fg: #fff; box-shadow: inset 0 0 0 1.5px var(--navy); }
[data-theme="dark"] .btn:not(.btn-orange) { --bg: #fff; --fg: var(--navy); }
.link-arrow { display: inline-flex; align-items: center; gap: 10px; font: 600 16px/1.2 var(--f-display); color: var(--navy); }
.link-arrow span { background: linear-gradient(currentColor, currentColor) 0 100% / 0 1.5px no-repeat; padding-bottom: 3px; transition: background-size .45s var(--ease); }
.link-arrow:hover span, a:hover > .link-arrow span, a:hover .case-body .link-arrow span { background-size: 100% 1.5px; }
.link-arrow .ic { transition: transform .45s var(--ease); }
.link-arrow:hover .ic, a:hover .case-body .link-arrow .ic { transform: translateX(5px); }
[data-theme="dark"] .link-arrow { color: #fff; }

/* ==========================================================================
   Header & menu
   ========================================================================== */
.hdr {
    position: fixed; inset: 0 0 auto; z-index: 60; height: var(--hdr); color: var(--navy);
    transition: transform .5s var(--ease), background-color .4s, color .4s, box-shadow .4s; view-transition-name: hdr;
}
.hdr-in { width: min(100% - 2 * var(--gutter), var(--max)); margin-inline: auto; height: 100%; display: flex; align-items: center; gap: 28px; }
.hdr-logo { flex: none; margin-right: auto; }
.hdr-logo .logo { width: 172px; height: auto; aspect-ratio: 231 / 39.25; }
.hdr.is-scrolled { background: rgba(242, 244, 248, .82); backdrop-filter: blur(14px) saturate(1.4); -webkit-backdrop-filter: blur(14px) saturate(1.4); box-shadow: 0 1px 0 rgba(22, 11, 86, .08); }
.hdr.is-dark { color: #fff; }
.hdr.is-dark.is-scrolled { background: rgba(22, 11, 86, .8); box-shadow: 0 1px 0 rgba(255, 255, 255, .08); }
.hdr.is-hidden { transform: translateY(-100%); }
.hdr-nav { display: flex; align-items: center; gap: 4px; }
.hdr-link { position: relative; display: inline-block; padding: 10px 14px; font: 500 15px/1 var(--f-display); letter-spacing: -.005em; }
.hdr-link::after { content: ""; position: absolute; left: 14px; right: 14px; bottom: 4px; height: 1.5px; background: var(--orange); transform: scaleX(0); transform-origin: right; transition: transform .4s var(--ease); }
.hdr-link:hover::after, .hdr-link.active::after { transform: scaleX(1); transform-origin: left; }
.hdr.is-dark .btn { --bg: #fff; --fg: var(--navy); }
.hdr-sub { position: relative; }
.hdr-drop {
    position: absolute; top: calc(100% + 10px); left: -12px; width: 420px; padding: 10px; background: #fff; border-radius: 14px;
    box-shadow: 0 24px 60px -20px rgba(22, 11, 86, .35), 0 0 0 1px rgba(22, 11, 86, .06); color: var(--navy);
    opacity: 0; visibility: hidden; transform: translateY(-6px); transition: opacity .3s, transform .4s var(--ease), visibility 0s .3s;
}
.hdr-drop::before { content: ""; position: absolute; inset: -14px 0 auto; height: 14px; }
.hdr-sub:hover .hdr-drop, .hdr-sub:focus-within .hdr-drop { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
.hdr-drop a { display: grid; grid-template-columns: 34px 1fr; column-gap: 8px; padding: 14px; border-radius: 10px; transition: background .25s; }
.hdr-drop a:hover { background: var(--paper); }
.hdr-drop .mono { grid-row: span 2; font-size: 12px; color: var(--orange-ink); padding-top: 3px; }
.hdr-drop strong { font: 600 17px/1.2 var(--f-display); }
.hdr-drop em { font-style: normal; font-size: 14px; line-height: 1.45; color: var(--text); margin-top: 3px; }
.hdr-burger { display: none; width: 48px; height: 48px; margin-right: -10px; position: relative; z-index: 2; }
.hdr-burger i { position: absolute; left: 12px; right: 12px; height: 2px; background: currentColor; border-radius: 2px; transition: transform .45s var(--ease), top .45s var(--ease); }
.hdr-burger i:nth-of-type(1) { top: 19px; }
.hdr-burger i:nth-of-type(2) { top: 27px; }
.menu-open .hdr-burger i:nth-of-type(1) { top: 23px; transform: rotate(45deg); }
.menu-open .hdr-burger i:nth-of-type(2) { top: 23px; transform: rotate(-45deg); }
.menu-open .hdr { color: #fff; background: transparent !important; box-shadow: none !important; transform: none; }

.menu {
    position: fixed; inset: 0; z-index: 55; background: var(--navy); color: #fff;
    clip-path: inset(0 0 100% 0); visibility: hidden; transition: clip-path .7s var(--ease-io), visibility 0s .7s;
    overflow-y: auto; overscroll-behavior: contain;
}
.menu-open .menu { clip-path: inset(0 0 0 0); visibility: visible; transition: clip-path .7s var(--ease-io), visibility 0s; }
.menu-in { min-height: 100%; display: flex; flex-direction: column; justify-content: space-between; gap: 40px; padding: calc(var(--hdr) + 24px) var(--gutter) 32px; }
.menu-links a { display: flex; align-items: baseline; gap: 14px; padding: 6px 0; font: 700 clamp(38px, 11vw, 64px)/1.05 var(--f-display); letter-spacing: -.04em; }
.menu-links .mono { font-size: 12px; letter-spacing: .1em; color: var(--apricot); }
.menu-links li { overflow: hidden; }
.menu-links li a { transform: translateY(110%); transition: transform .7s var(--ease); }
.menu-open .menu-links li a { transform: none; }
.menu-open .menu-links li:nth-child(1) a { transition-delay: .12s; } .menu-open .menu-links li:nth-child(2) a { transition-delay: .16s; }
.menu-open .menu-links li:nth-child(3) a { transition-delay: .2s; } .menu-open .menu-links li:nth-child(4) a { transition-delay: .24s; }
.menu-open .menu-links li:nth-child(5) a { transition-delay: .28s; } .menu-open .menu-links li:nth-child(6) a { transition-delay: .32s; }
.menu-open .menu-links li:nth-child(7) a { transition-delay: .36s; }
.menu-foot { display: grid; gap: 6px; font: 500 17px/1.5 var(--f-display); }
.menu-foot .serif { margin-top: 14px; font-size: 18px; }

/* ==========================================================================
   The chart (WebGL contour canvas, js/chart.js)
   ========================================================================== */
.chart { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; opacity: 0; transition: opacity 1.4s var(--ease); }
.chart.is-live { opacity: 1; }

/* ==========================================================================
   Home — hero: "You think it. We build it."
   Type, space, two actions and the trust band, over slow curved lines (js/hero-lines.js).
   Everything paints on the first frame (split-now / rise); the loader holds it until it lifts.
   ========================================================================== */
.hero.hero-plain { position: relative; min-height: 100svh; display: flex; flex-direction: column; padding-top: var(--hdr); background: var(--paper); overflow: hidden; isolation: isolate; }
.hp-in { position: relative; z-index: 1; flex: 1; display: flex; flex-direction: column; justify-content: center; gap: clamp(28px, 5vh, 56px); padding-block: clamp(28px, 6vh, 72px); }
.hp-eyebrow { margin: 0; padding-top: 16px; border-top: 1px solid var(--line-2); }
.hp-eyebrow i { font-style: normal; color: var(--line-2); padding-inline: 6px; }

/* the headline, big on two deliberate lines, ending in the Helmsman asterisk */
.hp-h { margin: 0; font: 700 clamp(40px, 9.6vw, 140px)/.93 var(--f-display); letter-spacing: -.052em; color: var(--navy); text-wrap: balance; }
.hp-line { display: block; }
.hp-h .hero-ast { display: inline-block; width: .3em; height: .3em; margin-left: .06em; vertical-align: .04em; fill: var(--orange); }

/* the foot: one sentence and two actions */
.hp-foot { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 24px clamp(32px, 6vw, 96px); padding-top: clamp(20px, 3vh, 32px); border-top: 1px solid var(--line); }
.hp-lede { max-width: 36em; font-size: clamp(17px, 1.35vw, 20px); line-height: 1.6; color: var(--text); }
.hp-ctas { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 28px; }

/* slow curved lines behind (js/hero-lines.js): faint, and fainter still behind the words */
.hp-bg { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none; opacity: 0; transition: opacity 1.6s var(--ease);
    -webkit-mask-image: linear-gradient(100deg, rgba(0,0,0,.35) 0%, rgba(0,0,0,.5) 40%, #000 80%);
            mask-image: linear-gradient(100deg, rgba(0,0,0,.35) 0%, rgba(0,0,0,.5) 40%, #000 80%); }
.hp-bg.is-live { opacity: 1; }

/* trust band */
.hero-band { position: relative; z-index: 3; }
.hero-band-in { display: grid; grid-template-columns: 1fr; align-items: center; gap: 24px 48px; padding-block: 22px; }
.hero-captain { font-size: clamp(18px, 1.6vw, 22px); color: #fff; }
.stats { display: flex; gap: clamp(22px, 4vw, 64px); }
.stats > div { display: flex; flex-direction: column-reverse; }
.stats dt { font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--lavender); margin-top: 4px; }
.stats dd { font: 700 clamp(34px, 3.4vw, 50px)/1 var(--f-display); letter-spacing: -.04em; color: #fff; font-variant-numeric: tabular-nums; }
.stats dd b { color: var(--orange); font-weight: 700; }
.stats-light dt { color: var(--muted); }
.stats-light dd { color: var(--navy); }

/* ==========================================================================
   Home — intro & pillars
   ========================================================================== */
.intro { padding-block: clamp(96px, 14vw, 200px) clamp(72px, 10vw, 140px); }
.intro-h { margin: 0; font: 700 clamp(36px, 5.4vw, 88px)/1 var(--f-display); letter-spacing: -.045em; color: var(--navy); max-width: 14em; text-wrap: balance; }
.intro-lede { margin-top: clamp(18px, 2.4vw, 28px); max-width: 34em; font-size: clamp(18px, 1.5vw, 22px); line-height: 1.55; color: var(--text); }
.sw { color: #858AA0; transition: color .3s linear; }  /* large text: unread words stay above 3:1 */
.sw.is-lit { color: var(--navy); }
.pillars { margin-top: clamp(48px, 6vw, 88px); border-bottom: 1px solid var(--line-2); }
.pillar { border-top: 1px solid var(--line-2); }
.pillar a {
    position: relative; display: grid; grid-template-columns: 72px minmax(0, 1.05fr) minmax(0, 1.2fr) 64px; grid-template-areas: "num name line go" "num name tags go";
    align-items: center; column-gap: 24px; padding: clamp(26px, 3vw, 40px) 0; color: var(--navy); isolation: isolate;
}
.pillar a::before { content: ""; position: absolute; inset: 0 calc(-1 * var(--gutter)); z-index: -1; background: #fff; transform: scaleY(0); transform-origin: bottom; transition: transform .6s var(--ease); }
.pillar a:hover::before { transform: scaleY(1); }
.pillar-num { grid-area: num; font-size: 13px; color: var(--orange-ink); }
.pillar-name { grid-area: name; font: 700 clamp(28px, 3.4vw, 52px)/1 var(--f-display); letter-spacing: -.04em; transition: transform .6s var(--ease); }
.pillar a:hover .pillar-name { transform: translateX(10px); }
.pillar-line { grid-area: line; font-size: 17px; line-height: 1.5; color: var(--text); }
.pillar-tags { grid-area: tags; display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.pillar-tags i { font: 400 12px/1 var(--f-mono); font-style: normal; letter-spacing: .04em; padding: 7px 10px; border: 1px solid var(--line-2); border-radius: 4px; color: var(--navy); }
.pillar-go { grid-area: go; justify-self: end; display: grid; place-items: center; width: 56px; height: 56px; border-radius: 50%; border: 1.5px solid var(--navy); transition: background .45s var(--ease), border-color .45s, transform .6s var(--ease); }
.pillar a:hover .pillar-go { background: var(--orange); border-color: var(--orange); transform: rotate(-45deg); }

/* ==========================================================================
   Belief (navy)
   ========================================================================== */
.belief { position: relative; overflow: hidden; }
.belief-pin { position: relative; min-height: 100svh; display: flex; align-items: center; padding-block: clamp(110px, 14vw, 180px); }
.belief-static .belief-in { padding-block: clamp(96px, 12vw, 160px); }
.belief-ast { position: absolute; right: -14vmin; top: 50%; width: min(78vmin, 820px); height: auto; translate: 0 -50%; fill: none; stroke: var(--orange); stroke-opacity: .42; stroke-width: 1.6; }
.belief-in { position: relative; z-index: 1; }
.belief-h { display: block; font-size: clamp(34px, 5.2vw, 84px); line-height: 1.12; letter-spacing: -.012em; color: #fff; max-width: 17em; }
.belief-a, .belief-b { display: block; }
/* the setup line stays in serif; the answer lands big, bold and in the brand orange */
.belief-h:has(.belief-b) { max-width: none; }
.belief-a { max-width: none; text-wrap: balance; font: 700 clamp(28px, 3.9vw, 64px)/1.16 var(--f-display); letter-spacing: -.02em; word-spacing: .1em; }
.belief-b { max-width: 12.5em; margin-top: clamp(28px, 3.6vw, 60px); font: 800 clamp(44px, min(8.4vw, 13.5vh), 150px)/.92 var(--f-display); letter-spacing: -.045em; color: var(--orange); text-wrap: balance; }
.belief-b .bwm { display: inline-block; overflow: hidden; vertical-align: top; padding-bottom: .08em; margin-bottom: -.08em; }
.belief-b .bw { display: inline-block; transform-origin: 0 100%; }
.bw { display: inline-block; will-change: transform; transform-origin: 50% 100%; }
.belief-list { display: flex; flex-wrap: wrap; gap: 16px 56px; margin-top: clamp(40px, 6vw, 72px); padding-top: 26px; border-top: 1px solid var(--line-navy); font: 500 13px/1 var(--f-mono); letter-spacing: .18em; text-transform: uppercase; color: #fff; }
.belief-list .mono { color: var(--lavender); margin-right: 14px; }
.belief-note { margin-top: 32px; max-width: 40em; font-size: 18px; line-height: 1.65; }
.belief-note em { display: block; margin-top: 12px; color: var(--apricot); }

/* ==========================================================================
   One order. Entered once.
   ========================================================================== */
.order { position: relative; background: var(--paper); transition: background-color .8s var(--ease); }
.order.is-helm { background: var(--navy); }
.order-pin { min-height: 100svh; display: flex; flex-direction: column; justify-content: center; padding-block: calc(var(--hdr) + 24px) 40px; }
.order-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 16px 40px; }
.order-h-b { color: var(--orange-ink); transition: color .6s; }
.order-sub { max-width: 22em; font-size: 17px; }
.order .h2, .order-step, .order-sub, .order-head .eyebrow { transition: color .6s; }
.order-stage { margin-top: clamp(28px, 4vh, 48px); }
.order-tabs { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 52px; }
.order-tab { display: inline-flex; align-items: center; gap: 10px; padding: 9px 14px; border-radius: 999px; font: 500 11.5px/1 var(--f-mono); letter-spacing: .16em; text-transform: uppercase; color: var(--muted); border: 1px solid var(--line-2); transition: all .5s var(--ease); }
.order-tab i { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.order-tab.is-on { color: var(--navy); border-color: var(--navy); }
.order-board { position: relative; }
.order-wires { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; z-index: 2; }
.order-wires path { fill: none; stroke: var(--orange); stroke-width: 2; stroke-linecap: round; }
.order-wires circle { fill: var(--orange); }
.order-grid { position: relative; z-index: 1; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(10px, 1.4vw, 18px); }
.order-card {
    display: flex; flex-direction: column; gap: 14px; min-height: clamp(210px, 30vh, 280px); padding: clamp(14px, 1.6vw, 22px);
    background: #fff; border: 1px solid var(--line); border-radius: var(--radius); transition: background-color .7s var(--ease), border-color .7s, transform .7s var(--ease), opacity .6s;
}
.order-card-top { display: flex; justify-content: space-between; align-items: center; }
.order-dept { font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.order-num { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 4px; background: var(--navy); color: #fff; font: 500 12px/1 var(--f-mono); transition: background .6s, color .6s; }
.order-step { position: relative; display: grid; font: 600 clamp(15px, 1.35vw, 19px)/1.25 var(--f-display); color: var(--navy); letter-spacing: -.01em; min-height: 2.5em; }
.order-step > span { grid-area: 1 / 1; transition: opacity .5s, transform .6s var(--ease); }
.t-helm { opacity: 0; transform: translateY(8px); }
.order-doc { position: relative; margin-top: auto; display: grid; gap: 6px; padding: 12px 14px; background: var(--paper); border-radius: 4px; font: 400 13px/1.3 var(--f-mono); color: var(--navy); transition: background .6s, color .6s; }
.doc-k { font-size: 10.5px; letter-spacing: .1em; color: var(--muted); margin-bottom: 2px; }
.doc-row { display: flex; justify-content: space-between; gap: 10px; }
.doc-row em { font-style: normal; color: var(--muted); }
.doc-row b { font-weight: 500; min-width: 3ch; text-align: right; }
.doc-row b.is-caret::after { content: ""; display: inline-block; width: 1.5px; height: 1em; margin-left: 2px; vertical-align: -2px; background: currentColor; animation: caret .8s steps(1) infinite; }
@keyframes caret { 50% { opacity: 0; } }
.doc-row b.is-typo.is-done { color: var(--red); text-decoration: underline wavy var(--red); text-underline-offset: 3px; }
.doc-auto { position: absolute; right: 10px; top: 10px; font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--orange); opacity: 0; transition: opacity .5s; }
.order-out { position: relative; display: grid; margin-top: 22px; min-height: 5.4em; }
.order-out ul { grid-area: 1 / 1; display: flex; flex-wrap: wrap; align-content: flex-start; gap: 8px 28px; font-size: 15.5px; transition: opacity .5s, transform .6s var(--ease); }
.order-out li { display: flex; align-items: center; gap: 10px; }
.order-out li::before { content: ""; width: 8px; height: 8px; background: var(--line-2); flex: none; }
.order-gain { opacity: 0; transform: translateY(8px); color: rgba(255, 255, 255, .84); }
.order-gain li::before { background: var(--orange) !important; }
.order-how { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 24px; margin-top: clamp(20px, 3vh, 36px); padding-top: 18px; border-top: 1.5px solid var(--orange); font-size: 15px; }
.order-how .eyebrow { margin: 0; }

.order.is-helm .h2, .order.is-helm .order-step { color: #fff; }
.order.is-helm .order-sub, .order.is-helm .order-how p { color: rgba(255, 255, 255, .74); }
.order.is-helm .order-head .eyebrow, .order.is-helm .order-how .eyebrow { color: var(--apricot); }
.order.is-helm .order-h-b { color: var(--apricot); }
.order.is-helm .order-tab { color: rgba(255, 255, 255, .68); border-color: rgba(255, 255, 255, .22); }
.order.is-helm .order-tab.is-on { color: #fff; border-color: var(--orange); }
.order.is-helm .order-tab.is-on i { background: var(--orange); }
.order.is-helm .order-card { background: rgba(255, 255, 255, .055); border-color: rgba(255, 255, 255, .14); }
.order.is-helm .order-card[data-card="0"] { border-color: var(--orange); }
.order.is-helm .order-card[data-card="0"] .order-num { background: var(--orange); color: var(--navy); }
.order.is-helm .order-num { background: rgba(255, 255, 255, .12); color: rgba(255, 255, 255, .6); }
.order.is-helm .order-dept, .order.is-helm .doc-k, .order.is-helm .doc-row em { color: rgba(255, 255, 255, .5); }
.order.is-helm .order-doc { background: rgba(255, 255, 255, .07); color: #fff; }
.order.is-helm .doc-row b.is-typo { color: #fff; text-decoration: none; }
.order.is-helm .order-card:not([data-card="0"]) .doc-auto { opacity: 1; }
.order.is-helm .t-today { opacity: 0; transform: translateY(-8px); }
.order.is-helm .t-helm { opacity: 1; transform: none; }
.order.is-helm .order-cost { opacity: 0; transform: translateY(-8px); }
.order.is-helm .order-gain { opacity: 1; transform: none; }
.doc-row b.is-pulse { animation: pulse 1.1s var(--ease); }
@keyframes pulse { 0%, 45% { color: var(--orange); text-shadow: 0 0 14px rgba(254, 122, 34, .8); } }

/* ==========================================================================
   What we build — the build reel (Components/Shared/BuildReel.razor)
   Two halves: "For running your business" on white, "For your customers" on navy.
   Base = a stacked list of big words (phones, short screens, reduced motion, no JS); the customer half sits on a
   full-width navy band. .is-armed (set by site.js on desktop) = one pinned screen where the words roll in one at
   a time; when the customer half starts, navy floods out of the asterisk (.reel-flood) and site.js sets
   data-theme="dark" on the section so the header and the counter follow.
   ========================================================================== */
.reel {
    /* the white half */
    --rl-fg: var(--navy); --rl-text: var(--text); --rl-kicker: var(--muted); --rl-rule: var(--line-2);
    --rl-tag: rgba(22, 11, 86, .2); --rl-tag-fg: var(--navy); --rl-more: var(--orange-ink);
    position: relative; overflow: hidden; background: var(--paper);
}
/* the navy half: each customer item carries its own colours, so it reads right pinned or stacked */
.reel-item.is-b {
    --rl-fg: #fff; --rl-text: #fff; --rl-kicker: var(--lavender); --rl-rule: var(--line-navy);
    --rl-tag: rgba(255, 255, 255, .22); --rl-tag-fg: rgba(255, 255, 255, .8); --rl-more: var(--apricot);
}
.reel[data-theme="dark"] { background: var(--paper); color: var(--text); } /* the flood paints the navy, not the section */
.reel-pin { position: relative; padding-block: clamp(80px, 11vw, 150px); }
.reel-flood { display: none; }
.reel-ast { position: absolute; right: -16vmin; top: 50%; width: min(96vmin, 920px); height: auto; translate: 0 -50%; fill: none; stroke: var(--orange); stroke-opacity: .32; stroke-width: 1.5; pointer-events: none; }
.reel-top { position: relative; z-index: 2; display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 10px 32px; }
.reel-eyebrow { margin: 0; transition: color .6s; }
.reel-group { display: none; }
.reel-list { position: relative; z-index: 2; margin-top: clamp(28px, 4vw, 56px); }
.reel-item { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 26rem); align-items: end; gap: 12px 48px; padding-block: clamp(22px, 3vw, 36px); border-top: 1px solid var(--rl-rule); }
.reel-kicker { grid-column: 1 / -1; margin: 0; font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--rl-kicker); }
.reel-kicker i { font-style: normal; color: var(--orange); padding-inline: 4px; }
.reel-word { margin: 0; font: 800 min(var(--fs, 12vw), 140px)/.86 var(--f-display); letter-spacing: -.055em; text-transform: uppercase; color: var(--rl-fg); }
.reel-item.is-b .reel-word { color: var(--orange); }
.reel-word span { display: block; overflow: hidden; padding-bottom: .06em; }
.reel-word i { display: block; font-style: normal; transition: transform .9s var(--ease); }
html.js .reel:not(.is-armed) .reel-item:not(.is-on) .reel-word i { transform: translateY(105%); animation: failsafe .01s 3.5s forwards; }
.reel-line { margin: 0; font-size: clamp(17px, 1.4vw, 20px); line-height: 1.5; color: var(--rl-text); }
.reel-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 14px; }
.reel-tags li { padding: 6px 10px; border: 1px solid var(--rl-tag); border-radius: 4px; font: 400 12px/1.2 var(--f-mono); letter-spacing: .04em; color: var(--rl-tag-fg); }
.reel-more { margin-top: 16px; font-size: 15px; color: var(--rl-more) !important; }
.reel-foot { position: relative; z-index: 2; display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; margin-top: clamp(32px, 4vw, 56px); }
.reel-count { display: none; }
.reel-bar { display: none; }

/* stacked: the customer half and the button below it sit on one full-width navy band */
.reel:not(.is-armed) .reel-pin { padding-bottom: 0; }
.reel:not(.is-armed) .reel-item.is-b,
.reel:not(.is-armed) .reel-foot { background: var(--navy); box-shadow: 0 0 0 100vmax var(--navy); clip-path: inset(0 -100vmax); }
.reel:not(.is-armed) .reel-item.is-b { clip-path: inset(0 -100vmax -1px); } /* overlap by 1px so no hairline shows between the pieces */
.reel:not(.is-armed) .reel-item.is-b + .reel-item.is-b { border-top-color: var(--line-navy); }
.reel:not(.is-armed) .reel-foot { margin-top: 0; padding-block: clamp(28px, 4vw, 56px) clamp(80px, 11vw, 150px); }

/* the pinned reel */
.reel.is-armed .reel-pin { height: 100svh; display: flex; flex-direction: column; padding-block: calc(var(--hdr) + 20px) clamp(28px, 4vh, 44px); }
.reel.is-armed .reel-flood { display: block; position: absolute; inset: 0; background: var(--navy); clip-path: circle(0% at 80% 50%); transition: clip-path .6s cubic-bezier(.2, .7, .1, 1); pointer-events: none; }
.reel.is-armed.is-b-on .reel-flood { clip-path: circle(150% at 80% 50%); }
.reel.is-armed .reel-group { display: grid; justify-items: end; font-size: 12px; letter-spacing: .2em; text-transform: uppercase; }
.reel-group span { grid-area: 1 / 1; transition: opacity .5s, transform .6s var(--ease); }
.reel-group-a { color: var(--navy); }
.reel-group-b { color: var(--peach); opacity: 0; transform: translateY(8px); }
.reel.is-b-on .reel-group-a { opacity: 0; transform: translateY(-8px); }
.reel.is-b-on .reel-group-b { opacity: 1; transform: none; }
.reel.is-armed .reel-list { flex: 1; margin-block: 0; }
.reel.is-armed .reel-item { position: absolute; left: 0; right: 0; top: 50%; transform: translateY(-50%); grid-template-columns: 1fr; gap: clamp(18px, 3vh, 32px); padding: 0; border: 0; pointer-events: none; }
.reel.is-armed .reel-item.is-on { pointer-events: auto; }
.reel.is-armed .reel-kicker { display: none; }
.reel.is-armed .reel-word { font-size: min(var(--fs, 16vw), 30vh, 260px); }
.reel.is-armed .reel-word i { transform: translateY(105%); transition: transform .75s cubic-bezier(.2, .7, .1, 1); }
.reel.is-armed .reel-item.is-past .reel-word i { transform: translateY(-105%); transition-duration: .55s; }
.reel.is-armed .reel-item.is-on .reel-word i { transform: none; }
.reel.is-armed .reel-info { max-width: 34rem; opacity: 0; transform: translateY(16px); transition: opacity .35s, transform .5s var(--ease); }
.reel.is-armed .reel-item.is-on .reel-info { opacity: 1; transform: none; transition-delay: .18s; }
.reel.is-armed .reel-foot { margin-block: 0; }
.reel.is-armed .reel-count { display: block; margin: 0; font: 700 clamp(64px, 10vw, 170px)/.8 var(--f-display); letter-spacing: -.05em; color: var(--navy); font-variant-numeric: tabular-nums; transition: color .6s; }
.reel.is-armed.is-b-on .reel-count { color: #fff; }
.reel-count sup { font-size: .32em; vertical-align: 1.6em; color: var(--orange); margin-left: .08em; }
.reel.is-armed:not(.is-b-on) .reel-count sup { color: var(--orange-ink); }
.reel.is-armed .reel-bar { display: block; position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: var(--orange); transform: scaleX(0); transform-origin: left; }

@media (max-width: 640px) {
    .reel-item { grid-template-columns: 1fr; }
    .reel-foot .btn { width: 100%; justify-content: space-between; }
}

/* ==========================================================================
   Nine questions
   ========================================================================== */
.nine { padding-block: clamp(80px, 10vw, 150px); }
.nine-head { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); align-items: end; gap: 16px 64px; }
.nine-head .eyebrow { grid-column: 1 / -1; margin-bottom: 0; }
.nine-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; margin-top: clamp(40px, 5vw, 64px); background: var(--line); border: 1px solid var(--line); }
.nine-q { position: relative; display: flex; gap: 18px; align-items: flex-start; min-height: 128px; padding: clamp(20px, 2.2vw, 30px); background: var(--paper); transition: background .6s var(--ease); }
.nine-q::before { content: ""; position: absolute; left: -1px; top: -1px; bottom: -1px; width: 3px; background: var(--orange); transform: scaleY(0); transform-origin: top; transition: transform .6s var(--ease); }
.nine-q .mono { font-size: 13px; color: var(--muted); padding-top: 5px; transition: color .5s; }
.nine-q > span:last-child { font: 600 clamp(18px, 1.6vw, 23px)/1.25 var(--f-display); letter-spacing: -.015em; color: var(--navy); }
html.js .nine-q > span:last-child { color: var(--muted); transition: color .6s; }
.nine-q.is-on { background: #fff; }
.nine-q.is-on::before { transform: scaleY(1); }
.nine-q.is-on .mono { color: var(--orange-ink); }
html.js .nine-q.is-on > span:last-child { color: var(--navy); }
.nine-banner { margin-top: 12px; padding: clamp(18px, 2vw, 26px) clamp(20px, 2.4vw, 34px); background: var(--navy); color: #fff; font-size: clamp(20px, 2vw, 28px); }

/* ==========================================================================
   Seven stages
   ========================================================================== */
.stages { position: relative; background: #fff; }
.stages-pin { padding-block: clamp(90px, 10vw, 140px) clamp(60px, 7vw, 100px); overflow: hidden; }
.stages-head .h2 { max-width: 17em; }
.stages-view { margin-top: clamp(40px, 6vh, 72px); }
.stages-track { display: flex; gap: 16px; padding-inline: max(var(--gutter), (100vw - var(--max)) / 2); width: max-content; will-change: transform; }
.stage { position: relative; display: flex; flex-direction: column; width: clamp(280px, 26vw, 360px); min-height: clamp(360px, 48vh, 460px); padding: 28px 26px 44px; background: var(--paper); border-radius: var(--radius); }
.stage-num { font: 700 clamp(48px, 5vw, 72px)/1 var(--f-display); letter-spacing: -.04em; color: #7F849B; transition: color .6s; font-variant-numeric: tabular-nums; }
.stage-name { margin-top: 14px; font: 700 clamp(24px, 2.2vw, 30px)/1.1 var(--f-display); color: var(--navy); letter-spacing: -.03em; }
.stage-text { margin-top: 14px; font-size: 16px; line-height: 1.55; }
.stage-out { margin-top: auto; padding-top: 22px; display: grid; }
.stage-out .eyebrow { margin-bottom: 6px; }
.stage-out strong { font: 600 18px/1.25 var(--f-display); color: var(--navy); }
.stage::after { content: ""; position: absolute; left: 26px; right: 26px; bottom: 18px; height: 3px; background: var(--line); }
.stage::before { content: ""; position: absolute; left: 26px; right: 26px; bottom: 18px; height: 3px; background: var(--orange); z-index: 1; transform: scaleX(0); transform-origin: left; transition: transform .8s var(--ease); }
.stage.is-on .stage-num { color: var(--orange); }
.stage.is-on::before { transform: scaleX(1); }
.stages-course { margin-top: 28px; }
.stages-course span { display: block; height: 2px; background: var(--line); }
.stages-course i { display: block; height: 100%; background: var(--navy); transform: scaleX(0); transform-origin: left; }

/* ==========================================================================
   Work — case studies & products
   ========================================================================== */
.work { padding-block: clamp(96px, 12vw, 170px) clamp(60px, 8vw, 110px); }
.work-head { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 16px 40px; margin-bottom: clamp(40px, 5vw, 72px); }
.work-head .eyebrow { grid-column: 1 / -1; margin: 0; }
.work-head .h2 { max-width: 14em; }
.cases { display: grid; gap: 24px; }
.case { position: sticky; top: calc(var(--hdr) + 12px); }
.case-in {
    display: grid; grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr); min-height: min(72vh, 640px);
    background: #fff; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; transform-origin: 50% 0; will-change: transform;
    box-shadow: 0 -18px 40px -30px rgba(22, 11, 86, .3);
}
.case-img { position: relative; background: #F2F4F8; overflow: hidden; min-height: 320px; }
.case-img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; padding: clamp(8px, 2vw, 28px); transition: transform 1.2s var(--ease); }
.case-in:hover .case-img img { transform: scale(1.035); }
.case-body { display: flex; flex-direction: column; padding: clamp(24px, 3vw, 48px); }
.case-title { font: 700 clamp(28px, 3vw, 46px)/1.02 var(--f-display); letter-spacing: -.04em; color: var(--navy); text-wrap: balance; }
.case-sum { margin-top: 16px; font-size: 17px; }
.case-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 26px; padding-top: 14px; border-top: 2px solid var(--navy); }
.case-meta dt { font-size: 10.5px; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.case-meta dd { margin-top: 4px; font: 600 15px/1.3 var(--f-display); color: var(--navy); }
.case-impact { margin-top: 24px; font-size: 15.5px; }
.case-impact .eyebrow { margin-bottom: 8px; }
.case-body .link-arrow { margin-top: auto; padding-top: 26px; }
.work-note { margin-top: 28px; font-size: 12px; letter-spacing: .08em; color: var(--muted); }

.products { padding-block: clamp(60px, 8vw, 120px); }
.build-foot { margin-top: 40px; font-size: clamp(18px, 1.6vw, 22px); color: var(--navy); }
.products-head .h2 { max-width: 16em; }
.products-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 2vw, 28px); margin-top: clamp(36px, 5vw, 64px); }
.product-img { overflow: hidden; border-radius: var(--radius); background: var(--paper-2); aspect-ratio: 5 / 3; }
.product-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s var(--ease); }
.product:hover .product-img img { transform: scale(1.04); }
.product .mono { display: block; margin-top: 20px; font-size: 12px; color: var(--orange-ink); }
.product h3 { margin-top: 8px; font: 700 clamp(21px, 1.8vw, 25px)/1.15 var(--f-display); letter-spacing: -.025em; color: var(--navy); }
.product p { margin-top: 10px; font-size: 15.5px; line-height: 1.55; }

/* ==========================================================================
   The honest test
   ========================================================================== */
.honest { padding-block: clamp(96px, 12vw, 170px); }
.honest-head { max-width: 58rem; }
.honest-head .lede { margin-top: 20px; }
.honest-body { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(0, .8fr); gap: clamp(28px, 4vw, 64px); margin-top: clamp(36px, 5vw, 64px); align-items: start; }
.honest-list { border-top: 2px solid var(--navy); }
.honest-q { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; align-items: center; gap: 12px 20px; padding: 20px 0; border-bottom: 1px solid var(--line); }
.honest-q .mono { font-size: 13px; color: var(--orange-ink); }
.honest-q p { font: 600 clamp(17px, 1.45vw, 20px)/1.3 var(--f-display); color: var(--navy); letter-spacing: -.012em; }
.honest-yn { display: inline-flex; padding: 4px; gap: 4px; background: var(--paper-2); border-radius: 10px; }
.honest-yn button { min-width: 62px; height: 40px; padding: 0 14px; border-radius: 7px; font: 600 14px/1 var(--f-display); color: var(--navy); transition: background .35s var(--ease), color .35s; }
.honest-yn button:hover { background: #fff; }
.honest-yn button[data-a="yes"][aria-pressed="true"] { background: var(--navy); color: #fff; }
.honest-yn button[data-a="no"][aria-pressed="true"] { background: var(--orange); color: var(--navy); }
.honest-card { position: sticky; top: calc(var(--hdr) + 24px); padding: clamp(26px, 3vw, 40px); background: var(--navy); color: rgba(255, 255, 255, .74); border-radius: 10px; }
.honest-card .eyebrow { color: var(--apricot); }
.honest-verdict { font-size: clamp(22px, 2vw, 28px); line-height: 1.3; color: #fff; min-height: 5.2em; }
.honest-meter { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; margin: 26px 0; }
.honest-meter i { height: 6px; border-radius: 3px; background: rgba(255, 255, 255, .14); transition: background .4s; }
.honest-meter i.is-yes { background: var(--apricot); }
.honest-meter i.is-no { background: var(--orange); }
.honest-card .btn { margin-bottom: 22px; }
.honest-card .btn[hidden] { display: none; }
.honest-note { font-size: 11.5px; line-height: 1.6; letter-spacing: .06em; color: rgba(255, 255, 255, .5); }

/* ==========================================================================
   Why Helmsman
   ========================================================================== */
.why { padding-block: clamp(80px, 10vw, 150px); }
.why-head .h2 { max-width: 20em; }
.why-list { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-top: clamp(36px, 5vw, 64px); }
.why-item { display: flex; flex-direction: column; padding: 26px 24px 28px; background: #fff; border-radius: var(--radius); }
.why-num { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 4px; background: var(--navy); color: #fff; font-size: 12px; }
.why-item h3 { position: relative; margin-top: 30px; font: 700 21px/1.2 var(--f-display); letter-spacing: -.02em; color: var(--navy); }
.why-item h3::before { content: ""; position: absolute; left: 0; top: -14px; width: 22px; height: 2.5px; background: var(--orange); }
.why-item p { margin-top: 10px; font-size: 15px; line-height: 1.55; }
.why-card { display: flex; align-items: flex-end; padding: 28px 24px; border-radius: var(--radius); }
.why-card p { font-size: clamp(19px, 1.6vw, 23px); line-height: 1.35; color: #fff; }
/* why cards, alive: they come in with the number popping and the orange rule drawing itself; on hover a card
   lifts, a soft orange light follows the pointer (--mx/--my from site.js), the rule stretches and the number turns orange */
.why-item { position: relative; overflow: hidden; isolation: isolate; transition: translate .55s var(--ease), box-shadow .55s var(--ease); }
html.js .why-item[data-reveal] { transition: opacity 1s var(--ease) var(--d, 0s), transform 1.1s var(--ease) var(--d, 0s), translate .55s var(--ease), box-shadow .55s var(--ease); }
.why-item::after { content: ""; position: absolute; inset: 0; z-index: -1; background: radial-gradient(280px circle at var(--mx, 50%) var(--my, 0%), rgba(244, 117, 32, .13), transparent 65%); opacity: 0; transition: opacity .45s; pointer-events: none; }
.why-item:hover { translate: 0 -6px; box-shadow: 0 26px 50px -26px rgba(22, 11, 86, .38); }
.why-item:hover::after { opacity: 1; }
.why-num { transition: background .4s, color .4s; }
.why-item:hover .why-num { background: var(--orange); color: var(--navy); }
.why-item h3::before { transform-origin: left; transition: width .55s var(--ease); }
.why-item:hover h3::before { width: 56px; }
.why-item.is-in .why-num { animation: why-pop .7s calc(var(--d, 0s) + .25s) var(--ease) backwards; }
.why-item.is-in h3::before { animation: why-draw .7s calc(var(--d, 0s) + .4s) var(--ease) backwards; }
@keyframes why-pop { from { opacity: 0; transform: translateY(6px); } }
@keyframes why-draw { from { transform: scaleX(0); } }
/* the blueprint card: the asterisk turns slowly in its corner and leans in on hover */
.why-card { position: relative; overflow: hidden; isolation: isolate; transition: translate .55s var(--ease), box-shadow .55s var(--ease); }
html.js .why-card[data-reveal] { transition: opacity 1s var(--ease) var(--d, 0s), transform 1.1s var(--ease) var(--d, 0s), translate .55s var(--ease), box-shadow .55s var(--ease); }
.why-card p { position: relative; }
.why-card-ast { position: absolute; right: -34%; top: -38%; z-index: -1; width: 92%; height: auto; fill: none; stroke: var(--orange); stroke-opacity: .45; stroke-width: 1.4; animation: why-turn 40s linear infinite; transition: scale .8s var(--ease), stroke-opacity .5s; }
.why-card:hover { translate: 0 -6px; box-shadow: 0 26px 50px -26px rgba(22, 11, 86, .5); }
.why-card:hover .why-card-ast { scale: 1.14; stroke-opacity: .8; }
@keyframes why-turn { to { rotate: 360deg; } }
.ways, .ways-band { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 26px; margin-top: 14px; padding: 20px clamp(20px, 2.4vw, 32px); background: var(--navy); border-radius: var(--radius); color: #fff; }
.ways .eyebrow, .ways-band .eyebrow { margin: 0; color: var(--apricot); }
.ways ul, .ways-band ul { display: flex; flex-wrap: wrap; gap: 6px 0; font-size: 15.5px; }
.ways li + li::before, .ways-band li + li::before { content: "·"; padding-inline: 10px; color: rgba(255, 255, 255, .4); }
.ways-band { margin-bottom: clamp(60px, 8vw, 120px); }

/* ==========================================================================
   Clients & quotes
   ========================================================================== */
.clients { padding-block: clamp(80px, 10vw, 150px); }
.clients-head { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 16px 64px; align-items: end; }
.clients-head .eyebrow { grid-column: 1 / -1; margin: 0; }
.clients-grid { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 1px; margin-top: clamp(36px, 5vw, 64px); background: var(--line); border: 1px solid var(--line); }
.clients-grid li { position: relative; aspect-ratio: 2 / 1; background: #fff; overflow: hidden; perspective: 600px; transition: box-shadow .45s var(--ease); }
.clients-grid li::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: var(--orange); transform: scaleX(0); transform-origin: left; transition: transform .5s var(--ease); }
.clients-grid li:hover { z-index: 1; box-shadow: 0 18px 40px -18px rgba(22, 11, 86, .35); }
.clients-grid li:hover::after { transform: none; }
.clients-grid img { position: absolute; inset: 20% 15%; width: 70%; height: 60%; object-fit: contain; backface-visibility: hidden; transition: transform .6s var(--ease); }
.clients-grid li:hover img { transform: scale(1.08); }
.quotes { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: clamp(20px, 3vw, 48px); margin-top: clamp(48px, 6vw, 88px); }
.quote { padding-top: 24px; border-top: 2px solid var(--navy); }
.quote blockquote { font-size: clamp(19px, 1.6vw, 23px); line-height: 1.45; color: var(--navy); }
.quote figcaption { display: grid; gap: 2px; margin-top: 20px; }
.quote strong { font: 600 16px/1.3 var(--f-display); color: var(--navy); }
.quote .mono { font-size: 12px; letter-spacing: .08em; color: var(--muted); }

/* ==========================================================================
   FAQ
   ========================================================================== */
.faq { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: 32px clamp(32px, 6vw, 96px); padding-block: clamp(80px, 10vw, 150px); }
.faq-head { align-self: start; position: sticky; top: calc(var(--hdr) + 32px); }
.faq-list { border-top: 2px solid var(--navy); }
.faq-item { border-bottom: 1px solid var(--line-2); }
.faq-item summary { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding: 24px 0; cursor: pointer; list-style: none; font: 600 clamp(18px, 1.5vw, 21px)/1.3 var(--f-display); letter-spacing: -.012em; color: var(--navy); }
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary .ic { width: 26px; height: 26px; flex: none; transition: transform .45s var(--ease); }
.faq-item[open] summary .ic { transform: rotate(45deg); color: var(--orange); }
.faq-a { overflow: hidden; }
.faq-a p { padding-bottom: 26px; max-width: 62ch; font-size: 16.5px; line-height: 1.65; }

/* ==========================================================================
   Footer
   ========================================================================== */
.ftr { position: relative; z-index: 1; overflow: hidden; }
/* while the page lifts off it, the footer comes up out of the dark (site.js tweens --shade) */
.ftr::after { content: ""; position: absolute; inset: 0; z-index: 3; background: #07031F; opacity: var(--shade, 0); pointer-events: none; }
.ftr-in { padding-top: clamp(72px, 8vw, 120px); }
.ftr-top, .ftr-base { width: min(100% - 2 * var(--gutter), var(--max)); margin-inline: auto; }

/* top: the invitation on the left, small labelled columns on the right */
.ftr-top { position: relative; z-index: 1; display: grid; grid-template-columns: minmax(0, 1.7fr) repeat(4, minmax(0, 1fr)); gap: 40px 32px; padding-bottom: clamp(48px, 5vw, 80px); }
.ftr-h { margin: 0; max-width: 11em; font: 600 clamp(30px, 3.1vw, 50px)/1.06 var(--f-display); letter-spacing: -.035em; color: #fff; text-wrap: balance; }
.ftr-h span { display: block; color: rgba(255, 255, 255, .42); }
.ftr-btn { display: inline-flex; align-items: center; gap: 12px; height: 50px; margin-top: clamp(24px, 2.6vw, 36px); padding: 0 22px 0 26px; border-radius: 999px; background: var(--orange); color: var(--navy); font: 600 15.5px/1 var(--f-display); letter-spacing: -.01em; transition: background .35s, color .35s; }
.ftr-btn .ic { width: 18px; height: 18px; transition: transform .45s var(--ease); }
.ftr-btn:hover { background: #fff; }
.ftr-btn:hover .ic { transform: translateX(3px); }
.ftr-col { display: flex; flex-direction: column; align-items: flex-start; gap: 9px; font: 400 14.5px/1.45 var(--f-body); font-style: normal; color: rgba(255, 255, 255, .62); }
.ftr-k { margin: 0 0 6px; font: 500 11px/1 var(--f-mono); letter-spacing: .16em; text-transform: uppercase; color: rgba(255, 255, 255, .38); }
.ftr-col a { display: inline-flex; align-items: center; gap: 4px; color: rgba(255, 255, 255, .86); transition: color .25s; }
.ftr-col a:hover { color: var(--orange); }
.ftr-col .ic { width: 14px; height: 14px; opacity: .5; }

/* one hairline, then the base line */
.ftr-base { position: relative; z-index: 1; display: flex; flex-wrap: wrap; align-items: center; gap: 10px 28px; padding-top: 20px; border-top: 1px solid rgba(255, 255, 255, .12); font: 400 13px/1.4 var(--f-body); color: rgba(255, 255, 255, .45); }
.ftr-base a { color: rgba(255, 255, 255, .62); transition: color .25s; }
.ftr-base a:hover { color: #fff; }
.ftr-top-link { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; }
.ftr-top-link .ic { width: 14px; height: 14px; rotate: -90deg; }

/* the name: the real wordmark, edge to edge, flush with the bottom of the page */
.ftr-name { position: relative; z-index: 1; margin-top: clamp(28px, 4vw, 64px); }
.ftr-name svg { width: 100%; height: auto; aspect-ratio: 494 / 74; overflow: hidden; }
.ftr-name text { font: 800 100px var(--f-display); letter-spacing: -5px; fill: #fff; }
.ftr-word, .ftr-star { transform-box: fill-box; }
.ftr-word { transition: transform 1.5s var(--ease); }
.ftr-star { transform-origin: center; }
html.js .ftr-name:not(.is-shown) .ftr-word { transform: translateY(112%); }
html.js .ftr-name:not(.is-shown) .ftr-star { transform: scale(0); }
.ftr-name.is-shown .ftr-star { animation: ftr-land 1.6s .5s var(--ease) both, ftr-turn 18s 2.1s linear infinite; }
@keyframes ftr-land { from { transform: rotate(-300deg) scale(0); } }
@keyframes ftr-turn { to { transform: rotate(360deg); } }

/* the curtain (desktop): the page is a sheet with rounded corners lifting off the footer */
html.is-curtain { --curve: clamp(28px, 3vw, 48px); }
html.is-curtain main { position: relative; z-index: 2; background: var(--paper); border-radius: 0 0 var(--curve) var(--curve); box-shadow: 0 60px 90px -40px rgba(8, 4, 36, .7); }
html.is-curtain .ftr { margin-top: calc(-1 * var(--curve)); padding-top: var(--curve); }

@media (max-width: 980px) {
    .ftr-top { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ftr-cta { grid-column: 1 / -1; }
}
@media (max-width: 480px) {
    .ftr-top { gap: 32px 20px; }
    .ftr-top-link { margin-left: 0; }
}
@media (prefers-reduced-motion: reduce) {
    .ftr-name .ftr-star { animation: none !important; }
}

/* ==========================================================================
   Inner pages
   ========================================================================== */
.phero { position: relative; overflow: hidden; padding-top: calc(var(--hdr) + clamp(56px, 9vw, 120px)); padding-bottom: clamp(56px, 8vw, 110px); }
.phero-chart { -webkit-mask-image: radial-gradient(90% 110% at 88% 30%, #000 20%, transparent 72%); mask-image: radial-gradient(90% 110% at 88% 30%, #000 20%, transparent 72%); }
.phero-in { position: relative; z-index: 1; }
.crumbs { display: flex; flex-wrap: wrap; gap: 10px; font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); margin-bottom: clamp(24px, 4vw, 48px); }
.crumbs a:hover { color: var(--navy); }
.crumbs [aria-current] { color: var(--navy); }
.phero-num { display: block; margin-bottom: 16px; font-size: 13px; letter-spacing: .14em; text-transform: uppercase; color: var(--orange-ink); }
.phero .h1 { max-width: 15ch; }
.phero-lede { margin-top: clamp(20px, 3vw, 32px); max-width: 38em; font-size: clamp(18px, 1.5vw, 21px); line-height: 1.55; }
.phero-ctas { display: flex; flex-wrap: wrap; align-items: center; gap: 18px 30px; margin-top: 36px; }

.svc-index { display: grid; gap: 14px; padding-bottom: 14px; }
.svc-block { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.3fr); gap: 24px clamp(32px, 5vw, 80px); padding: clamp(28px, 4vw, 56px); background: #fff; border-radius: 10px; }
.svc-block-head .mono { font-size: 13px; color: var(--orange-ink); }
.svc-block-head .h3 { margin-top: 10px; font-size: clamp(28px, 3vw, 42px); }
.svc-block-line { margin-top: 14px; font-size: 17px; }
.svc-block-head .btn { margin-top: 28px; }
.svc-block-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 28px; align-content: start; }
.svc-block-list li { display: grid; padding: 14px 0; border-bottom: 1px solid var(--line); }
.svc-block-list strong { font: 600 16.5px/1.3 var(--f-display); color: var(--navy); }
.svc-block-list span { font-size: 14.5px; line-height: 1.45; }

.svc-intro { padding-block: clamp(48px, 6vw, 80px) clamp(64px, 8vw, 110px); border-top: 1px solid var(--line-2); }
.svc-oneline { font: 500 clamp(26px, 3.4vw, 52px)/1.14 var(--f-display); letter-spacing: -.028em; color: var(--navy); max-width: 22em; }
.svc-intro-cols { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px clamp(32px, 5vw, 80px); margin-top: clamp(32px, 4vw, 56px); font-size: 17.5px; line-height: 1.65; }
.caps { padding-bottom: clamp(80px, 10vw, 140px); }
.caps-head .h2 { max-width: 18em; }
.caps-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: clamp(32px, 5vw, 80px); margin-top: clamp(36px, 5vw, 64px); }
.cap { display: grid; grid-template-columns: 52px minmax(0, 1fr); column-gap: 12px; padding: 28px 0; border-top: 1px solid var(--line-2); }
.cap-num { grid-row: span 3; font-size: 13px; color: var(--orange-ink); padding-top: 6px; }
.cap-name { font: 700 clamp(22px, 2vw, 28px)/1.15 var(--f-display); letter-spacing: -.025em; color: var(--navy); }
.cap-line { margin-top: 6px; font: 500 13px/1.5 var(--f-mono); color: var(--orange-ink); letter-spacing: .02em; }
.cap-detail { margin-top: 12px; font-size: 16px; line-height: 1.6; }
.svc-belief { padding-block: clamp(80px, 10vw, 140px); }
.svc-belief-q { font-size: clamp(28px, 4vw, 60px); line-height: 1.15; color: #fff; max-width: 18em; }
.related { padding-block: clamp(80px, 10vw, 140px) 40px; }
.related-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: clamp(20px, 3vw, 40px); margin-top: clamp(32px, 4vw, 56px); }
.rcard-img { overflow: hidden; border-radius: 10px; background: var(--paper-2); aspect-ratio: 16 / 10; margin-bottom: 22px; }
.rcard-img img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s var(--ease); }
.rcard:hover .rcard-img img { transform: scale(1.04); }
.rcard .eyebrow { margin-bottom: 10px; }
.rcard h3 { font: 700 clamp(24px, 2.2vw, 32px)/1.1 var(--f-display); letter-spacing: -.03em; color: var(--navy); }
.rcard p { margin-top: 10px; font-size: 16px; }
.svc-process { padding-block: clamp(64px, 8vw, 110px); }
.svc-process-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: 16px 40px; }
.svc-process-head .eyebrow { width: 100%; margin: 0; }
.mini-stages { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; margin-top: 36px; }
.mini-stages li { display: grid; align-content: start; gap: 6px; padding: 18px 16px 20px; background: #fff; border-radius: var(--radius); border-bottom: 3px solid var(--line); }
.mini-stages li:first-child { border-color: var(--orange); }
.mini-stages .mono { font-size: 12px; color: var(--orange-ink); }
.mini-stages strong { font: 700 18px/1.2 var(--f-display); color: var(--navy); }
.mini-stages em { font-style: normal; font-size: 13.5px; line-height: 1.35; }
.svc-next { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.svc-next a { display: grid; grid-template-columns: 40px 1fr auto; grid-template-areas: "n t i" "n e i"; gap: 4px 12px; align-items: center; padding: 28px; background: var(--navy); color: rgba(255, 255, 255, .7); border-radius: 10px; transition: background .4s; }
.svc-next a:hover { background: var(--navy-3); }
.svc-next .mono { grid-area: n; font-size: 12px; color: var(--apricot); align-self: start; padding-top: 6px; }
.svc-next strong { grid-area: t; font: 700 clamp(22px, 2vw, 28px)/1.15 var(--f-display); color: #fff; letter-spacing: -.025em; }
.svc-next em { grid-area: e; font-style: normal; font-size: 15px; }
.svc-next .ic { grid-area: i; width: 28px; height: 28px; color: var(--orange); transition: transform .45s var(--ease); }
.svc-next a:hover .ic { transform: translateX(6px); }

/* case study page */
.cs-meta { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; max-width: 62rem; margin-top: 40px; padding-top: 16px; border-top: 2px solid var(--navy); }
.cs-meta dt { font-size: 10.5px; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.cs-meta dd { margin-top: 4px; font: 600 16px/1.3 var(--f-display); color: var(--navy); }
.cs-meta a { text-decoration: underline; text-decoration-color: var(--orange); text-underline-offset: 4px; }
.cs-shot { padding: clamp(12px, 3vw, 48px); background: var(--paper-2); border-radius: 12px; overflow: hidden; }
.cs-shot img { width: 100%; border-radius: 6px; }
.cs-shot figcaption { margin-top: 14px; font-size: 11.5px; letter-spacing: .08em; color: var(--text); }
.cs-body { display: grid; padding-block: clamp(64px, 8vw, 120px) 0; }
.cs-row { display: grid; grid-template-columns: minmax(0, .5fr) minmax(0, 1.5fr); gap: 16px 48px; padding-block: clamp(28px, 4vw, 48px); border-top: 1px solid var(--line-2); }
.cs-row .eyebrow { margin: 6px 0 0; }
.cs-lead { font: 500 clamp(20px, 2vw, 28px)/1.4 var(--f-display); letter-spacing: -.015em; color: var(--navy); max-width: 34em; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chips li { padding: 9px 13px; border: 1px solid var(--line-2); border-radius: 4px; background: #fff; font: 400 13px/1.2 var(--f-mono); color: var(--navy); transition: border-color .3s; }
.chips-link a { display: block; margin: -9px -13px; padding: 9px 13px; }
.chips-link li:has(a):hover { border-color: var(--navy); }
.cs-impact { margin-top: 24px; padding: clamp(28px, 4vw, 56px); border-radius: 10px; }
.cs-impact .serif { font-size: clamp(24px, 2.8vw, 40px); line-height: 1.3; color: #fff; max-width: 26em; }
.cs-next { padding-block: clamp(64px, 8vw, 120px); }
.cs-next a { display: grid; grid-template-columns: 1fr auto; gap: 8px 32px; padding-top: 28px; border-top: 2px solid var(--navy); }
.cs-next .eyebrow { grid-column: 1 / -1; margin: 0; }
.cs-next strong { display: block; }
.cs-next em { font-style: normal; font-size: 17px; max-width: 40em; }
.cs-next .ic { grid-row: 2 / span 2; grid-column: 2; align-self: center; width: 44px; height: 44px; color: var(--orange); transition: transform .5s var(--ease); }
.cs-next a:hover .ic { transform: translateX(8px); }

/* industries */
.inds { padding-bottom: clamp(40px, 6vw, 80px); }
.ind-list { border-bottom: 1px solid var(--line-2); }
.ind { display: grid; grid-template-columns: 56px minmax(0, .9fr) minmax(0, 1.1fr); grid-template-areas: "n name line" "n name chips" "n name case"; gap: 12px 32px; padding: clamp(28px, 3.4vw, 44px) 0; border-top: 1px solid var(--line-2); scroll-margin-top: calc(var(--hdr) + 20px); }
.ind-num { grid-area: n; font-size: 13px; color: var(--orange-ink); padding-top: 8px; }
.ind-name { grid-area: name; font: 700 clamp(26px, 2.8vw, 40px)/1.05 var(--f-display); letter-spacing: -.035em; color: var(--navy); }
.ind-line { grid-area: line; font-size: 17px; }
.ind .chips { grid-area: chips; }
.ind-case { grid-area: case; font-size: 15px; }

/* about */
.about-intro { padding-block: clamp(48px, 6vw, 80px) clamp(80px, 10vw, 140px); border-top: 1px solid var(--line-2); }
.about-cols { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 48px clamp(40px, 6vw, 96px); align-items: end; }
.about-big { font: 500 clamp(26px, 3.2vw, 48px)/1.16 var(--f-display); letter-spacing: -.028em; color: var(--navy); }
.about-cols .stats { flex-direction: column; gap: 26px; }
.team { padding-block: clamp(80px, 10vw, 150px) 0; }
.team-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: 62rem; gap: clamp(16px, 2vw, 28px); margin-top: clamp(36px, 5vw, 64px); }
.person { padding: 28px; background: #fff; border-radius: 10px; }
.person-init { display: grid; place-items: center; width: 64px; height: 64px; border-radius: 14px; background: var(--navy); color: #fff; font: 700 22px/1 var(--f-display); letter-spacing: -.02em; }
.person h3 { margin-top: 26px; font: 700 24px/1.15 var(--f-display); color: var(--navy); letter-spacing: -.025em; }
.person .mono { margin-top: 6px; font-size: 12px; letter-spacing: .12em; text-transform: uppercase; color: var(--orange-ink); }
.person p:last-child { margin-top: 16px; font-size: 15.5px; line-height: 1.6; }

/* contact */
.contact { padding-top: calc(var(--hdr) + clamp(40px, 7vw, 100px)); padding-bottom: clamp(80px, 10vw, 140px); }
.contact-in { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 48px clamp(40px, 6vw, 96px); align-items: start; }
.contact .h1 { max-width: 9ch; }
.contact-lede { margin-top: 24px; max-width: 30em; font-size: clamp(18px, 1.5vw, 21px); }
.contact-ways { display: grid; gap: 14px; margin-top: 40px; font: 500 clamp(18px, 1.6vw, 22px)/1.35 var(--f-display); color: var(--navy); }
.contact-ways li { display: flex; gap: 14px; align-items: flex-start; }
.contact-ways .ic { margin-top: 3px; color: var(--orange-ink); }
.contact-ways a { background: linear-gradient(var(--orange), var(--orange)) 0 100% / 0 2px no-repeat; transition: background-size .45s var(--ease); }
.contact-ways a:hover { background-size: 100% 2px; }
.contact-next { margin-top: 48px; padding-top: 24px; border-top: 1px solid var(--line-2); }
.contact-next li { display: grid; grid-template-columns: 40px 1fr; padding: 8px 0; font-size: 16px; }
.contact-next .mono { font-size: 12px; color: var(--orange-ink); padding-top: 4px; }
.form { padding: clamp(24px, 3.4vw, 48px); background: #fff; border-radius: 14px; box-shadow: 0 40px 80px -50px rgba(22, 11, 86, .35); }
.form-need { border: 0; padding: 0; margin: 0 0 28px; min-width: 0; }
.form-need legend { padding: 0; }
.need-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.need { position: relative; }
.need input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.need span { display: flex; align-items: center; min-height: 52px; height: 100%; padding: 10px 16px; border-radius: 10px; border: 1.5px solid var(--line); font: 500 15px/1.3 var(--f-display); color: var(--navy); transition: background .3s, border-color .3s, color .3s; }
.need input:hover + span { border-color: var(--navy); }
.need input:checked + span { background: var(--navy); border-color: var(--navy); color: #fff; }
.need input:focus-visible + span { outline: 2px solid var(--orange); outline-offset: 2px; }
.form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px 20px; }
.field { display: grid; gap: 6px; }
.field-wide { grid-column: 1 / -1; }
.field > span { font: 500 11.5px/1 var(--f-mono); letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.field input, .field textarea { width: 100%; padding: 12px 0; border: 0; border-bottom: 1.5px solid var(--line-2); background: transparent; font: 500 17px/1.4 var(--f-display); color: var(--navy); caret-color: var(--orange); border-radius: 0; transition: border-color .3s; resize: vertical; }
.field textarea { min-height: 110px; }
.field input:focus, .field textarea:focus { outline: none; border-color: var(--navy); }
.field input::placeholder, .field textarea::placeholder { color: #A5AABB; font-weight: 400; }
.field.is-bad input { border-color: var(--red); }
.form-hint { margin-top: 18px; font-size: 11.5px; letter-spacing: .06em; color: var(--muted); }
.form-go { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 24px; margin-top: 26px; }
.form-status { font-size: 15.5px; color: var(--navy); }
.form-status.is-bad { color: var(--red); }
.form-status.is-ok { color: #1E7A45; }
.form-legal { margin-top: 20px; font-size: 13px; color: var(--muted); }
.form-legal a, .form-status a { text-decoration: underline; text-underline-offset: 3px; }

/* prose & not found */
.prose { max-width: 70ch; padding-bottom: clamp(80px, 10vw, 140px); }
.prose h2 { margin: 36px 0 10px; font: 700 22px/1.2 var(--f-display); color: var(--navy); }
.prose a { text-decoration: underline; text-decoration-color: var(--orange); text-underline-offset: 3px; }
.nf { position: relative; min-height: 88svh; display: grid; align-items: center; overflow: hidden; padding-top: var(--hdr); }
.nf-in { position: relative; z-index: 1; }
.nf .h1 { max-width: 12ch; }
.nf .lede { margin-top: 24px; }
.nf-links { display: flex; flex-wrap: wrap; gap: 14px 32px; margin-top: 32px; }

/* ==========================================================================
   Motion primitives (driven by js/site.js)
   ========================================================================== */
@keyframes failsafe { to { opacity: 1; transform: none; } }
html.js [data-reveal]:not(.is-in) { opacity: 0; transform: translateY(26px); animation: failsafe .01s 3.5s forwards; }
html.js [data-reveal] { transition: opacity 1s var(--ease), transform 1.1s var(--ease); transition-delay: var(--d, 0s); }
html.js [data-split]:not(.is-split) { opacity: 0; animation: failsafe .01s 3.5s forwards; }
.sl { display: inline-block; overflow: hidden; vertical-align: top; padding-bottom: .1em; margin-bottom: -.1em; padding-right: .02em; }
.sl > span { display: inline-block; transform: translateY(108%); transition: transform 1.05s var(--ease); transition-delay: var(--d, 0s); }
.is-in .sl > span, .sl.is-in > span { transform: none; }
html.js [data-clients] li { opacity: 0; transform: translateY(26px) scale(.9); transition: opacity .7s var(--ease) var(--d, 0s), transform .8s var(--ease) var(--d, 0s), box-shadow .45s var(--ease); }
html.js [data-clients].is-in li { opacity: 1; transform: none; }

/* page-to-page transition (browsers with cross-document View Transitions) */
@view-transition { navigation: auto; }
::view-transition-old(root) { animation: vt-out .35s var(--ease-io) both; }
::view-transition-new(root) { animation: vt-in .6s var(--ease) both; }
@keyframes vt-out { to { opacity: 0; transform: translateY(-14px); } }
@keyframes vt-in { from { opacity: 0; transform: translateY(22px); } }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 1180px) {
    .why-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .clients-grid { grid-template-columns: repeat(6, minmax(0, 1fr)); }
    .mini-stages { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 980px) {
    .hp-foot { grid-template-columns: 1fr; }
    .hero-band-in { grid-template-columns: 1fr; gap: 16px; }
    :root { --hdr: 66px; }
    .hdr-nav, .hdr-cta { display: none; }
    .hdr-burger { display: block; }
    .hdr-logo .logo { width: 150px; }
    .pillar a { grid-template-columns: 48px minmax(0, 1fr) 52px; grid-template-areas: "num name go" "num line go" "num tags go"; row-gap: 10px; }
    .pillar-go { width: 48px; height: 48px; }
    .caps-list, .svc-intro-cols, .svc-block, .cs-row, .about-cols, .contact-in, .faq, .honest-body, .nine-head, .clients-head { grid-template-columns: 1fr; }
    .faq-head { position: static; }
    .honest-card { position: static; }
    .order-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .case { position: static; }
    .case-in { grid-template-columns: 1fr; min-height: 0; }
    .case-img { aspect-ratio: 16 / 10; min-height: 0; }
    .products-grid, .team-list { grid-template-columns: 1fr 1fr; }
    .ind { grid-template-columns: 44px minmax(0, 1fr); grid-template-areas: "n name" "n line" "n chips" "n case"; }
    .svc-next { grid-template-columns: 1fr; }
    .cs-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .stages-track { flex-direction: column; width: auto; padding-inline: var(--gutter); transform: none !important; }
    .stage { width: auto; min-height: 0; }
    .stages-course { display: none; }
}
@media (max-width: 640px) {
    .hp-h { font-size: clamp(42px, 12.6vw, 64px); }
    .hp-ctas .btn { width: 100%; justify-content: space-between; }
    body { font-size: 16px; }
    .stats { gap: 22px; justify-content: space-between; }
    .nine-grid, .why-list, .products-grid, .team-list, .need-grid, .form-grid, .svc-block-list { grid-template-columns: 1fr; }
    .nine-q { min-height: 0; }
    .clients-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .mini-stages { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .honest-q { grid-template-columns: 34px minmax(0, 1fr); }
    .honest-yn { grid-column: 2; justify-self: start; }
    .case-meta { grid-template-columns: 1fr 1fr; }
    .order-card { min-height: 0; }
    .order-step { font-size: 14.5px; }
    .order-doc { font-size: 12px; padding: 10px; }
    .order-out ul { font-size: 14px; }
    .belief-list { gap: 14px 28px; }
    .belief-pin { min-height: 0; }
    .doc-k { padding-right: 34px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}

/* ==========================================================================
   Reduced motion: everything is shown, nothing moves
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
    html.js [data-reveal], html.js [data-split], .sl > span, html.js [data-clients] li { opacity: 1 !important; transform: none !important; }
    .sw { color: var(--navy); }
    html.js .nine-q > span:last-child { color: var(--navy); }
}

/* Hero copy enters with CSS alone, so it paints on the first frame (it is the page's Largest Contentful Paint).
   Starting at .01 rather than 0 keeps it an LCP candidate from the very first paint. */
@keyframes rise { from { opacity: .01; transform: translateY(18px); } }
.rise { animation: rise 1s var(--ease) both; animation-delay: var(--d, 0s); }
@media (prefers-reduced-motion: reduce) { .rise { animation: none; } }

/* Server-split headings (Ui/Split.cs): the word reveal runs on the first frame, without JavaScript */
@keyframes word-up { from { transform: translateY(108%); } }
.split-now .sl > span { transform: none; transition: none; animation: word-up 1.05s var(--ease) both; animation-delay: var(--d, 0s); }
@media (prefers-reduced-motion: reduce) { .split-now .sl > span { animation: none; } }

/* Profile screenshots come on white or grey plates: multiply blends both into the panel colour */
.case-img img, .rcard-img img, .cs-shot img { mix-blend-mode: multiply; }

/* ==========================================================================
   Motion between and around the pages (js/fx.js; html.fx-on unless reduced motion)
   ========================================================================== */
/* 1. page transitions: the navy cover with the turning asterisk */
.pt { position: fixed; inset: 0; z-index: 9998; display: grid; place-items: center; background: var(--navy); pointer-events: none; visibility: hidden; clip-path: inset(100% 0 0 0); }
.pt-ast { width: min(16vmin, 130px); height: auto; fill: var(--orange); opacity: 0; transform: scale(.4) rotate(-90deg); transition: opacity .3s, transform .6s var(--ease); }
html.fx-on .pt-ast { animation: pt-turn 2.4s linear infinite; }
@keyframes pt-turn { to { rotate: 360deg; } }
/* leaving: the cover slides up from the bottom */
html.is-pt-arm .pt { visibility: visible; transition: clip-path .55s cubic-bezier(.7, 0, .2, 1); }
html.is-pt-in .pt { clip-path: inset(0 0 0 0); }
html.is-pt-in .pt-ast { opacity: 1; transform: none; transition-delay: .18s; }
/* arriving: the page starts covered, then the cover lifts off the top */
html.is-pt .pt { visibility: visible; clip-path: inset(0 0 0 0); }
html.is-pt .pt-ast { opacity: 1; transform: none; }
html.is-pt-out .pt { clip-path: inset(0 0 100% 0); transition: clip-path .75s cubic-bezier(.7, 0, .2, 1); }
html.is-pt-out .pt-ast { opacity: 0; transform: translateY(-40px) scale(.7); transition: opacity .3s, transform .5s var(--ease); }
/* entrance effects wait under the cover, like they wait under the loader */
html.is-pt:not(.is-pt-out) .split-now .sl > span, html.is-pt:not(.is-pt-out) .rise { animation-play-state: paused; }

/* 2. the cursor */
.cur { position: fixed; left: 0; top: 0; z-index: 9990; display: grid; place-items: center; width: 10px; height: 10px; margin: -5px 0 0 -5px; border-radius: 50%; background: var(--orange); pointer-events: none; opacity: 0; transition: width .4s var(--ease), height .4s var(--ease), margin .4s var(--ease), background .3s, border-color .3s, opacity .3s, scale .2s; border: 1px solid transparent; }
.cur.is-on { opacity: 1; }
.cur.is-link { width: 42px; height: 42px; margin: -21px 0 0 -21px; background: rgba(244, 117, 32, .14); border-color: var(--orange); }
.cur.is-label { width: 92px; height: 92px; margin: -46px 0 0 -46px; background: var(--orange); }
.cur.is-down { scale: .85; }
.cur span { font: 600 14px/1 var(--f-display); letter-spacing: -.01em; color: var(--navy); opacity: 0; transform: scale(.6); transition: opacity .25s, transform .4s var(--ease); }
.cur.is-label span { opacity: 1; transform: none; }
html.fx-on [data-cursor], html.fx-on [data-cursor] * { cursor: none; }

/* 3. big headings lean with the speed of the scroll (--fx-skew from js/fx.js) */
html.fx-on .h2, html.fx-on .intro-h, html.fx-on .belief-b, html.fx-on .display { transform: skewY(var(--fx-skew, 0deg)); transform-origin: 0 50%; will-change: transform; }

/* 4. the footer name: letters lift off the bottom edge as the pointer passes */
.ftr-name .ftr-l { font: 800 100px var(--f-display); fill: #fff; transform-box: fill-box; }

/* ==========================================================================
   The drawn route (js/route.js, home page)
   ========================================================================== */
.route { position: absolute; left: 0; top: 0; z-index: 5; max-width: none; overflow: visible; pointer-events: none; }
.route path { fill: none; stroke: var(--orange); stroke-linecap: round; stroke-linejoin: round; }
.route-trail { stroke-width: 1.2; stroke-dasharray: 1 9; opacity: .32; }      /* the course still ahead, dotted */
.route-line { stroke-width: 2; }
.route-tip { fill: var(--orange); transition: opacity .4s; }
.route-ring { fill: none; stroke: var(--orange); stroke-width: 1.2; opacity: .4; transform-box: fill-box; transform-origin: center; animation: route-pulse 1.8s var(--ease) infinite; transition: opacity .4s; }
@keyframes route-pulse { 0% { scale: .5; opacity: .6; } 100% { scale: 1.6; opacity: 0; } }
.route.is-done .route-tip, .route.is-done .route-ring { opacity: 0; }
@media (max-width: 640px) { .route-line { stroke-width: 1.5; } .route-trail { display: none; } }

/* ==========================================================================
   Insights — index (InsightsIndex.razor) and article (InsightArticle.razor)
   ========================================================================== */
.ins { padding-bottom: clamp(80px, 10vw, 150px); }
.ins-meta { display: flex; flex-wrap: wrap; gap: 6px 22px; font-size: 11.5px; letter-spacing: .16em; text-transform: uppercase; color: var(--orange-ink); }
.ins-lead a { display: block; padding: clamp(28px, 4vw, 56px); background: var(--navy); border-radius: 14px; color: rgba(255, 255, 255, .78); transition: transform .6s var(--ease), box-shadow .6s var(--ease); }
.ins-lead a:hover { transform: translateY(-4px); box-shadow: 0 30px 60px -30px rgba(22, 11, 86, .6); }
.ins-lead .ins-meta { color: var(--apricot); }
.ins-lead-h { margin: 18px 0 0; max-width: 18em; font: 700 clamp(32px, 4.4vw, 68px)/1.02 var(--f-display); letter-spacing: -.04em; color: #fff; text-wrap: balance; }
.ins-lead-answer { margin-top: clamp(18px, 2vw, 28px); max-width: 44em; font-size: clamp(17px, 1.35vw, 20px); line-height: 1.6; }
.ins-lead .link-arrow { margin-top: clamp(22px, 3vw, 36px); color: #fff; }
.ins-list { margin-top: clamp(28px, 4vw, 56px); border-top: 2px solid var(--navy); }
.ins-row { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 2fr) minmax(0, 1.6fr) auto 28px; align-items: baseline; gap: 10px 32px; padding: clamp(22px, 2.6vw, 34px) 0; border-bottom: 1px solid var(--line-2); transition: padding .5s var(--ease); }
.ins-topic { font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: var(--orange-ink); }
.ins-title { font: 650 clamp(20px, 1.9vw, 28px)/1.2 var(--f-display); letter-spacing: -.02em; color: var(--navy); transition: color .3s; }
.ins-desc { font-size: 15px; line-height: 1.55; color: var(--text); }
.ins-min { font-size: 12px; color: var(--muted); white-space: nowrap; }
.ins-go { align-self: center; width: 22px; height: 22px; color: var(--navy); transition: transform .45s var(--ease), color .3s; }
.ins-row:hover { padding-left: 14px; }
.ins-row:hover .ins-title { color: var(--orange-ink); }
.ins-row:hover .ins-go { transform: translateX(6px); color: var(--orange); }
.ins-feed { margin-top: 28px; font-size: 12px; color: var(--muted); }
.ins-feed a { color: var(--navy); text-decoration: underline; text-decoration-color: var(--orange); text-underline-offset: 3px; }

.art-byline { display: flex; flex-wrap: wrap; gap: 6px 24px; margin-top: 28px; padding-top: 16px; border-top: 2px solid var(--navy); max-width: 46rem; font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); }
.art-byline span:first-child { color: var(--navy); }
.art-byline a { text-decoration: underline; text-decoration-color: var(--orange); text-underline-offset: 3px; }
.art { display: grid; grid-template-columns: minmax(0, 15rem) minmax(0, 46rem); justify-content: space-between; gap: 48px; padding-bottom: clamp(56px, 7vw, 100px); }
.art-toc { position: sticky; top: calc(var(--hdr) + 28px); align-self: start; }
.art-toc ol { display: grid; gap: 10px; margin-top: 4px; padding-left: 14px; border-left: 1px solid var(--line-2); font-size: 14px; line-height: 1.4; }
.art-toc a { color: var(--text); transition: color .25s; }
.art-toc a:hover { color: var(--orange-ink); }
.art-answer { padding: clamp(22px, 2.6vw, 32px); background: #fff; border-left: 3px solid var(--orange); border-radius: 0 10px 10px 0; }
.art-answer .eyebrow { margin-bottom: 10px; }
.art-answer p { font: 500 clamp(18px, 1.5vw, 21px)/1.55 var(--f-display); letter-spacing: -.01em; color: var(--navy); }
.art-sec { padding-top: clamp(36px, 4vw, 52px); scroll-margin-top: calc(var(--hdr) + 24px); }
.art-sec h2 { font: 700 clamp(24px, 2.3vw, 34px)/1.15 var(--f-display); letter-spacing: -.025em; color: var(--navy); text-wrap: balance; }
.art-sec p { margin-top: 16px; font-size: 18px; line-height: 1.75; color: var(--text); }
.art-sec ul { display: grid; gap: 12px; margin-top: 18px; }
.art-sec li { position: relative; padding-left: 26px; font-size: 17.5px; line-height: 1.6; color: var(--navy); }
.art-sec li::before { content: ""; position: absolute; left: 0; top: .62em; width: 12px; height: 2px; background: var(--orange); }
.art-cta { margin-top: clamp(44px, 5vw, 64px); padding: clamp(26px, 3vw, 40px); border-radius: 14px; }
.art-cta-h { margin-top: 8px; font: 650 clamp(22px, 2vw, 30px)/1.25 var(--f-display); letter-spacing: -.02em; color: #fff; }
.art-cta-go { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 28px; margin-top: 24px; }
.art-more { padding-bottom: clamp(80px, 10vw, 140px); }
.art-more .ins-list { margin-top: 14px; }

@media (max-width: 980px) {
    .ins-row { grid-template-columns: minmax(0, 1fr) auto; }
    .ins-topic, .ins-title, .ins-desc { grid-column: 1 / -1; }
    .ins-go { display: none; }
    .art { grid-template-columns: minmax(0, 1fr); }
    .art-toc { position: static; }
}

/* ==========================================================================
   Work — one format for everything (Work.razor grid + WorkItemView.razor pages)
   The cards borrow the home page's "Selected work" card: white, 10px radius, the screen on a soft plate,
   a mono eyebrow, a bold title and a navy-ruled facts strip. Case studies are pinned first and span wider.
   ========================================================================== */
.work-head .more-filter { align-self: end; }
.more-filter { display: flex; flex-wrap: wrap; gap: 8px; }
.more-filter button { display: inline-flex; align-items: center; gap: 8px; height: 42px; padding: 0 16px; border: 1px solid var(--line-2); border-radius: 999px; background: #fff; font: 500 14.5px/1 var(--f-display); color: var(--navy); cursor: pointer; transition: background .3s, color .3s, border-color .3s; }
.more-filter button span { font: 400 11px/1 var(--f-mono); color: var(--muted); transition: color .3s; }
.more-filter button:hover { border-color: var(--navy); }
.more-filter button.is-on { background: var(--navy); border-color: var(--navy); color: #fff; }
.more-filter button.is-on span { color: var(--apricot); }

.wk-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-auto-flow: dense; gap: clamp(16px, 2vw, 24px); }
.wk[hidden] { display: none; }
.wk.is-case { grid-column: span 3; }
.wk-in { display: flex; flex-direction: column; height: 100%; background: #fff; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; transition: transform .6s var(--ease), box-shadow .6s var(--ease); }
.wk-in:hover { transform: translateY(-4px); box-shadow: 0 26px 50px -30px rgba(22, 11, 86, .35); }
.wk-img { display: block; aspect-ratio: 16 / 10; overflow: hidden; background: var(--paper); }
.wk-img img { width: 100%; height: 100%; object-fit: cover; object-position: top center; transition: transform 1.2s var(--ease); }
.wk-in:hover .wk-img img { transform: scale(1.04); }
.wk-body { display: flex; flex: 1; flex-direction: column; padding: clamp(18px, 2vw, 26px); }
.wk-eyebrow { font-size: 11px; letter-spacing: .16em; text-transform: uppercase; color: var(--orange-ink); }
.wk-title { margin-top: 10px; font: 700 clamp(21px, 1.8vw, 27px)/1.08 var(--f-display); letter-spacing: -.03em; color: var(--navy); text-wrap: balance; }
.wk-line { margin-top: 8px; font-size: 15px; line-height: 1.5; color: var(--text); }
.wk-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 18px; padding-top: 12px; border-top: 2px solid var(--navy); font: 600 14px/1.3 var(--f-display); color: var(--navy); }
.wk-meta i { display: block; margin-bottom: 4px; font-style: normal; font-size: 10px; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.wk-go { margin-top: auto; padding-top: 20px; font-size: 14.5px; }
/* the case studies: the same card, laid out like the home page's case cards — screen left, story right */
.wk.is-case .wk-in { display: grid; grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr); }
.wk.is-case .wk-img { aspect-ratio: auto; min-height: 340px; }
.wk.is-case .wk-img img { object-fit: contain; padding: clamp(8px, 2vw, 28px); }
.wk.is-case .wk-body { padding: clamp(24px, 3vw, 48px); }
.wk.is-case .wk-title { font-size: clamp(28px, 3vw, 46px); line-height: 1.02; letter-spacing: -.04em; }
.wk.is-case .wk-line { font-size: 17px; }
.work-note a { color: var(--navy); text-decoration: underline; text-decoration-color: var(--orange); text-underline-offset: 3px; }

/* the item page */
.pj-meta dd { font-size: 15px; }
.pj-meta a { text-decoration: underline; text-decoration-color: var(--orange); text-underline-offset: 4px; }
.pj-brief { display: grid; grid-template-columns: minmax(0, .5fr) minmax(0, 1.5fr); gap: 16px 48px; padding-block: 8px clamp(40px, 5vw, 64px); }
.pj-brief .eyebrow { margin: 8px 0 0; }
.pj-gallery { display: grid; gap: clamp(18px, 2.4vw, 32px); }
.pj-gallery-more { padding-top: clamp(56px, 7vw, 100px); }
.pj-shot { overflow: hidden; border: 1px solid var(--line); border-radius: 10px; background: #fff; }
.pj-shot img { width: 100%; height: auto; }
.pj-long-win { position: relative; height: min(84vh, 900px); overflow-y: auto; overscroll-behavior: contain; border: 1px solid var(--line); border-radius: 10px; background: #fff; scrollbar-width: thin; }
.pj-long-win img { width: 100%; height: auto; }
.pj-long-win:focus-visible { outline-offset: 4px; }
.pj-long figcaption { margin-top: 10px; font-size: 11.5px; letter-spacing: .08em; color: var(--muted); }
.cs-chips-h { margin: 24px 0 12px; }
.pj-related { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px 32px; padding-top: clamp(48px, 6vw, 80px); }
.pj-source { font-size: 12px; letter-spacing: .08em; color: var(--navy); text-decoration: underline; text-decoration-color: var(--orange); text-underline-offset: 3px; }

@media (max-width: 980px) {
    .work-head { grid-template-columns: minmax(0, 1fr); }
    .wk-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .wk.is-case { grid-column: span 2; }
    .wk.is-case .wk-in { grid-template-columns: minmax(0, 1fr); }
    .wk.is-case .wk-img { min-height: 0; aspect-ratio: 16 / 10; }
    .pj-brief { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 560px) {
    .wk-grid { grid-template-columns: minmax(0, 1fr); }
    .wk.is-case { grid-column: auto; }
    .pj-long-win { height: 72vh; }
}
