/* ============================================================
   PLATT — VANGUARD, version B: "the drawing sheet"
   Same tokens, same words. Light-first. Dimension lines carry structure.
   ============================================================ */
@font-face{font-family:"Michroma";src:url("assets/fonts/michroma-latin.woff2") format("woff2");font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Michroma";src:url("assets/fonts/michroma-latin-ext.woff2") format("woff2");font-display:swap;unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Exo";src:url("assets/fonts/exo-latin.woff2") format("woff2");font-weight:100 900;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Exo";src:url("assets/fonts/exo-latin-ext.woff2") format("woff2");font-weight:100 900;font-display:swap;unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}

:root{
  --blue:#004D99;--orange:#FF4000;--blue-tint:#C1D2ED;--orange-tint:#FACEB6;
  --blue-night:#001B33;--blue-deep:#002B55;--blue-paper:#E9F0F9;--fog:#F2F4F6;--white:#FFFFFF;
  --ink:#1A1A1A;--graphite:#4A4F55;--steel:#8A9099;--mist:#D9DDE2;--orange-deep:#CC3300;
  --t-micro:120ms;--t-state:200ms;--t-reveal:400ms;--t-hero:600ms;
  --e-engage:cubic-bezier(.4,0,.2,1);--e-settle:cubic-bezier(.2,0,0,1);
  --display:"Michroma",system-ui,sans-serif;--body:"Exo",system-ui,sans-serif;
  --max:1280px;--gutter:clamp(20px,4vw,56px);
  --s1:8px;--s2:16px;--s3:24px;--s4:40px;--s5:64px;--s6:96px;--s7:144px;
  --hex:polygon(50% 0,100% 25%,100% 75%,50% 100%,0 75%,0 25%);
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--white);color:var(--ink);font-family:var(--body);font-size:17px;line-height:1.55;-webkit-font-smoothing:antialiased}
img,video{display:block;max-width:100%}
h1,h2,h3,h4,p{margin:0;font-weight:400}
ul,ol{margin:0;padding:0;list-style:none}
a{color:inherit}
button{font:inherit}
:focus-visible{outline:2px solid var(--orange);outline-offset:2px}

/* type */
.d1{font-family:var(--display);font-size:clamp(30px,4.8vw,64px);line-height:1.06;letter-spacing:-.015em;color:var(--blue)}
.d2{font-family:var(--display);font-size:clamp(21px,2.6vw,34px);line-height:1.15;color:var(--blue)}
.d3{font-family:var(--display);font-size:clamp(16px,1.5vw,19px);line-height:1.35;color:var(--blue)}
.dim-label{font-family:var(--display);font-size:12px;letter-spacing:.02em;color:var(--blue)}
.lede{font-size:clamp(18px,1.4vw,21px);line-height:1.5;color:var(--graphite);max-width:34em}
.body{max-width:38em}.body p+p{margin-top:var(--s2)}
.small{font-size:14px;line-height:1.5;color:var(--graphite)}
.dark .d1,.dark .d2,.dark .d3,.dark .dim-label{color:var(--white)}
.dark .lede,.dark .small{color:var(--blue-tint)}

/* layout */
.wrap{max-width:var(--max);margin:0 auto;padding-left:var(--gutter);padding-right:var(--gutter)}
.section{padding:var(--s6) 0}
@media(min-width:900px){.section{padding:var(--s7) 0}}
.grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--s3) var(--s4)}
.c3{grid-column:span 3}.c4{grid-column:span 4}.c5{grid-column:span 5}.c6{grid-column:span 6}.c7{grid-column:span 7}.c8{grid-column:span 8}.c9{grid-column:span 9}.c12{grid-column:span 12}
@media(max-width:899px){.grid{grid-template-columns:minmax(0,1fr)}.grid>[class^="c"]{grid-column:1/-1}}
.bg-paper{background:var(--blue-paper)}.bg-fog{background:var(--fog)}
.dark{background:var(--blue-night);color:var(--white)}
.deep{background:var(--blue-deep);color:var(--white)}

/* drafting paper: a light hex grid, tiled. The field is the story. */
.sheet{position:relative;isolation:isolate}
.sheet .hexfield{position:absolute;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.hexfield svg{position:absolute;inset:0;width:100%;height:100%}
.hexfield .cell{fill:none;stroke:var(--blue);stroke-width:.8;opacity:.08}
.dark .hexfield .cell{stroke:var(--blue-tint);opacity:.16}
.hexfield .cell.lit{fill:var(--orange);stroke:var(--orange);opacity:0}
.in-view .hexfield .cell.lit,.hexfield.armed .cell.lit{animation:hex-assemble var(--t-hero) var(--e-settle) forwards}
.hexfield .cell.lit.settled{opacity:.95;animation:none!important}
@keyframes hex-assemble{from{opacity:0;transform:translateY(16px)}to{opacity:.95;transform:translateY(0)}}

/* dimension line — the structural device of this version.
   Two ticks, a hairline, a value in the middle. It says "measured". */
.dim{display:flex;align-items:center;gap:14px;color:var(--blue);font-family:var(--display);font-size:12px;white-space:nowrap}
.dim::before,.dim::after{content:"";flex:1;height:1px;background:var(--blue);position:relative}
.dim::before{background:linear-gradient(90deg,var(--blue) 0 1px,transparent 1px) left/1px 100% no-repeat,var(--blue)}
.dim span{padding:0 2px}
.dim.tick::before,.dim.tick::after{height:1px}
.dim-v{position:relative;padding-left:22px}
.dim-v::before{content:"";position:absolute;left:0;top:0;bottom:0;width:1px;background:var(--blue)}
.dim-v::after{content:"";position:absolute;left:-4px;top:0;width:9px;height:1px;background:var(--blue);box-shadow:0 var(--dimh,100%) 0 var(--blue)}
.dark .dim,.dark .dim::before,.dark .dim::after{color:var(--blue-tint);background-color:var(--blue-tint)}
.dark .dim{background:none}
.section-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:var(--s3);padding-bottom:var(--s3);border-bottom:1px solid var(--blue);margin-bottom:var(--s5)}
.section-head .ref{font-family:var(--display);font-size:12px;color:var(--graphite);white-space:nowrap;padding-bottom:6px}
.dark .section-head{border-bottom-color:var(--blue-tint)}
.dark .section-head .ref{color:var(--blue-tint)}

/* buttons */
.btn{display:inline-flex;align-items:center;padding:15px 26px;border:2px solid transparent;font-weight:600;font-size:16px;text-decoration:none;cursor:pointer;line-height:1;border-radius:2px;transition:transform var(--t-micro) var(--e-engage),background-color var(--t-micro),border-color var(--t-micro),color var(--t-micro)}
.btn-primary{background:var(--orange);color:var(--white);border-color:var(--orange)}
.btn-primary:hover{background:var(--orange-deep);border-color:var(--orange-deep);transform:translateY(-2px)}
.btn-outline{background:transparent;color:var(--blue);border-color:var(--blue)}
.btn-outline:hover{background:var(--blue-paper);transform:translateY(-2px)}
.btn-ghost{background:transparent;color:var(--white);border-color:var(--blue-tint)}
.btn-ghost:hover{border-color:var(--white);transform:translateY(-2px)}
.btn-row{display:flex;flex-wrap:wrap;gap:var(--s2)}

/* header — a title strip */
.site-header{position:fixed;top:0;left:0;right:0;z-index:50;height:72px;display:flex;align-items:center;background:rgba(255,255,255,.92);backdrop-filter:blur(6px);border-bottom:1px solid var(--mist);transition:background-color var(--t-state) var(--e-settle)}
.site-header .wrap{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--s3)}
.site-header .logo img{height:32px;width:auto}
.nav{display:flex;align-items:center;gap:var(--s3)}
.nav a{color:var(--blue);text-decoration:none;font-size:15px;font-weight:500;padding:6px 0;border-bottom:2px solid transparent}
.nav a:hover{border-bottom-color:var(--blue)}
.nav .btn{padding:11px 18px;font-size:15px;border-bottom:2px solid var(--orange)}
.nav .btn:hover{border-bottom-color:var(--orange-deep)}
@media(max-width:899px){.nav a:not(.btn){display:none}}

/* hero — light sheet with the honeycomb */
.hero{padding-top:150px;padding-bottom:var(--s6);min-height:100vh;display:flex;align-items:center}
.hero .wrap{width:100%}
.hero .d1{max-width:15ch}
/* One sentence per line (.ln), never wrapped. Hungarian runs longer, so it is set a
   touch smaller: its widest line ("Az Ön márkája.") fits the copy column at every width. */
.hero .d1 .ln{display:block;white-space:nowrap}
html[lang="hu"] .hero .d1{font-size:clamp(28px,4.4vw,58px);max-width:none}
.hero .lede{margin-top:var(--s4);color:var(--ink)}
.hero .btn-row{margin-top:var(--s4)}
.hero-meta{margin-top:var(--s5);display:grid;grid-template-columns:repeat(3,auto);gap:var(--s4);justify-content:start}
.hero-meta div{border-top:1px solid var(--blue);padding-top:10px}
.hero-meta .num{font-family:var(--display);color:var(--blue);font-size:22px;line-height:1}
.hero-meta .small{margin-top:4px}
@media(max-width:899px){.hero{min-height:auto;padding-top:120px}}

/* honeycomb — many identical cells, one system. Each cell one process. */
.comb{position:relative;width:calc(100% + var(--gutter) - 22px);aspect-ratio:1/1.02;max-width:760px;margin-left:auto;margin-right:calc((var(--gutter) - 22px) * -1)}
.comb .cell{position:absolute;clip-path:var(--hex);overflow:hidden;background:var(--blue-paper);opacity:0;translate:0 16px;transition:opacity var(--t-hero) var(--e-settle) var(--d,0ms),translate var(--t-hero) var(--e-settle) var(--d,0ms),filter 380ms var(--e-settle),scale 300ms var(--e-settle)}
.in-view .comb .cell,.comb.armed .cell{opacity:1;translate:0 0}
.comb .cell img{width:100%;height:100%;object-fit:cover}
.comb.armed .cell,.in-view .comb .cell{filter:grayscale(1) opacity(.5)}
.comb .cell.near,.comb.armed .cell.near,.in-view .comb .cell.near{filter:grayscale(.45) opacity(.82);scale:1.07;z-index:1}
.comb .cell.awake,.comb.armed .cell.awake,.in-view .comb .cell.awake{filter:none;scale:1.28;z-index:2}
.comb .cell.keep,.comb.armed .cell.keep,.in-view .comb .cell.keep{filter:none}
.comb .cell.orange,.comb.armed .cell.orange,.in-view .comb .cell.orange{filter:none}
.comb .cell.orange{background:var(--orange)}
.comb .cell.line{background:transparent;clip-path:none;overflow:visible}
.comb .cell.line svg{width:100%;height:100%;display:block}
.comb .cell.line svg path{fill:none;stroke:var(--blue);stroke-width:1.2}
.comb .cell.night{background:var(--blue-night)}
.comb .cell.night span{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:14%;font-family:var(--display);font-size:clamp(9px,.85vw,12px);line-height:1.4;color:var(--blue-tint)}
@media(max-width:899px){.comb{margin:var(--s5) auto 0;max-width:420px}}

/* evidence — a dimension chain */
.evidence{padding:var(--s5) 0}
.chain{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s3)}
.chain li{display:flex;flex-direction:column;justify-content:flex-start;padding:var(--s3);border:1px solid var(--blue);background:var(--white);min-width:0}
.chain .num{display:block;font-family:var(--display);font-size:clamp(17px,1.6vw,23px);color:var(--blue);line-height:1.2;white-space:nowrap}

.chain .num[data-tick]{display:inline-block}
.chain .small{display:block;margin-top:10px;font-size:13px;max-width:13em}
/* the ISO standards under "ISO certified": one per line, never split inside a number */
.chain .isos span{display:block;white-space:nowrap}
/* On the dark sheet (2026-09-11: the stats and the numbers band swapped looks) the
   boxes go open — tint rules, white values, one value lit orange, as the band was. */
.dark .chain li{background:transparent;border-color:var(--blue-tint)}
.dark .chain .num{color:var(--white)}
.dark .chain .num.lit{color:var(--orange)}
@media(max-width:640px){.chain{grid-template-columns:1fr 1fr}}

/* drawing note — the boundary line, a leader-line callout */
.callout{position:relative;margin-top:var(--s5);padding:var(--s3) var(--s4) var(--s3) calc(var(--s4) + 12px);border:1px solid var(--blue);font-family:var(--display);font-size:clamp(16px,1.5vw,21px);line-height:1.45;color:var(--blue);background:var(--white)}
.callout::before{content:"";position:absolute;left:-1px;top:var(--s3);bottom:var(--s3);width:4px;background:var(--orange)}
.callout::after{content:"";position:absolute;left:-56px;top:50%;width:56px;height:1px;background:var(--blue)}
.callout .dot{position:absolute;left:-60px;top:calc(50% - 4px);width:8px;height:8px;clip-path:var(--hex);background:var(--orange)}
.callout.callout-solo{margin-top:var(--s4)}
.callout.callout-solo::after{display:none}
@media(max-width:899px){.callout::after,.callout .dot{display:none}}

/* three doors — a condensed horizontal product series */
.parts{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s4);border-top:0}
.part{display:block;text-decoration:none;color:inherit}
.part:hover .hexpic{transform:translateY(-3px)}
.part .idx{display:block;font-family:var(--display);color:var(--blue);font-size:12px;margin-top:var(--s3)}
.part h3{color:var(--blue);margin-top:var(--s1);font-size:clamp(17px,1.5vw,21px)}
.part p{color:var(--graphite);font-size:16px;margin-top:var(--s2)}
.part .go{font-weight:600;color:var(--blue);position:relative;display:inline-block;margin-top:var(--s3);font-size:15px}
.part .go::after{content:"";position:absolute;left:0;bottom:-4px;height:2px;width:100%;background:var(--orange);transform:scaleX(0);transform-origin:left;transition:transform var(--t-state) var(--e-settle)}
.part:hover .go::after{transform:scaleX(1)}
.hexpic{width:200px;height:230px;clip-path:var(--hex);overflow:hidden;transition:transform var(--t-micro) var(--e-engage);justify-self:end}
.hexpic img{width:100%;height:100%;object-fit:cover}
.part .hexpic{width:100%;height:auto;aspect-ratio:1/1.15;justify-self:stretch}
@media(max-width:899px){.parts{grid-template-columns:1fr;gap:var(--s5)}.part .hexpic{max-width:300px}}

/* feature product image — the whole image, never corner-cut */
.featpic{margin:0}
.featpic img{width:100%;height:auto;display:block}

/* factory — nine technologies as a numbered parts table */
.techtab{width:100%;border-collapse:collapse;margin-top:var(--s4)}
.techtab td{padding:14px 12px;border-top:1px solid var(--mist);vertical-align:top;font-size:16px}
.techtab tr:first-child td{border-top:0}
.techtab td:first-child{font-family:var(--display);font-size:12px;color:var(--blue);width:48px}
.techtab td:nth-child(2){font-family:var(--display);font-size:14px;color:var(--blue);width:26%}
.techtab td:last-child{color:var(--graphite)}
.techtab tr:last-child td{border-bottom:1px solid var(--blue)}
.techtab tr[data-fig]{cursor:pointer;transition:background-color var(--t-micro)}
.techtab tr[data-fig]:hover,.techtab tr[data-fig].is-live{background:var(--blue-paper)}
.techtab tr[data-fig] td:nth-child(2){position:relative}
.techtab tr[data-fig] td:nth-child(2)::after{content:"";position:absolute;left:12px;right:12px;bottom:8px;height:2px;background:var(--orange);transform:scaleX(0);transform-origin:left;transition:transform var(--t-state) var(--e-settle)}
.techtab tr[data-fig]:hover td:nth-child(2)::after,.techtab tr[data-fig].is-live td:nth-child(2)::after{transform:scaleX(1)}
/* ONE hexagon for all nine technology rows (Revision 1 section 5 design note).
   The ring is always 4px so nothing shifts when a row goes live; only its colour
   changes. Sticky, so it stays in view while the reader hovers down the list. */
.techrow{margin-top:var(--s4);align-items:stretch}
.techrow .techtab{margin-top:0}
.techrow .c7{padding-bottom:var(--s7)}
@media(max-width:899px){.techrow .c7{padding-bottom:0}}
.hexfig{margin:0;position:sticky;top:104px}
.hexfig .hexring{display:block;padding:4px;background:var(--mist);clip-path:var(--hex);transition:background-color var(--t-state) var(--e-settle)}
.hexfig.is-live .hexring{background:var(--orange)}
.hexfig .hexring img,.hexfig .hexring video{display:block;width:100%;aspect-ratio:.866;object-fit:cover;clip-path:var(--hex);background:var(--fog)}
.hexfig figcaption{margin-top:var(--s3);font-family:var(--display);font-size:12px;color:var(--blue);text-align:center}
@media(max-width:899px){.hexfig{position:static;max-width:420px;margin-inline:auto}}

/* numbers — now the light sheet (swapped with the stats band, 2026-09-11): white
   tiles ruled in blue on the paper grid, big blue values, orange on one */
.numbers .tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border:1px solid var(--blue);background:var(--white)}
.numbers .tile{padding:var(--s4) var(--s3);border-left:1px solid var(--blue)}
.numbers .tile:first-child{border-left:0}
.numbers .num{display:block;font-family:var(--display);font-size:clamp(38px,4.6vw,66px);line-height:.95;color:var(--blue);letter-spacing:-.02em}
.numbers .num small{display:block;font-size:.34em;letter-spacing:0;margin-top:10px}
.numbers .num.lit{color:var(--orange)}
.numbers .tile p{margin-top:var(--s3);color:var(--graphite);font-size:16px}
.numbers .foot{margin-top:var(--s4);color:var(--graphite);max-width:60em}
@media(max-width:899px){.numbers .tiles{grid-template-columns:1fr 1fr}.numbers .tile:nth-child(3){border-left:0}.numbers .tile:nth-child(n+3){border-top:1px solid var(--blue)}}

/* proof */
.proof-fig{margin:0;height:100%;min-height:420px;position:relative}
.proof-fig img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.quote{margin-top:var(--s5);padding-left:var(--s3);border-left:2px solid var(--orange)}
.quote blockquote{margin:0;font-family:var(--display);font-size:clamp(18px,1.9vw,25px);line-height:1.4;color:var(--blue)}
.quote cite{display:block;margin-top:var(--s2);font-style:normal;color:var(--graphite);font-size:15px}

/* steps — four columns, no photos and no rules. The hex number and its value
   label sit side by side; both light orange when that step is hovered. */
.timeline{position:relative}
.timeline .rail{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s4)}
.timeline .st{position:relative}
.timeline .st .khead{display:flex;align-items:center;gap:14px}
.timeline .st .k{flex:none;width:34px;height:39px;clip-path:var(--hex);background:var(--blue);color:var(--white);font-family:var(--display);font-size:13px;display:flex;align-items:center;justify-content:center;transition:background-color var(--t-state) var(--e-settle)}
.timeline .st .kname{font-family:var(--display);font-size:14px;letter-spacing:.02em;color:var(--blue);line-height:1.3;transition:color var(--t-state) var(--e-settle)}
.timeline .st .kval{display:block;margin-top:10px;font-family:var(--display);font-size:12px;letter-spacing:.02em;color:var(--steel);line-height:1.3;transition:color var(--t-state) var(--e-settle)}
.timeline .st:hover .k,.timeline .st:focus-within .k{background:var(--orange)}
.timeline .st:hover .kname,.timeline .st:focus-within .kname{color:var(--orange)}
.timeline .st:hover .kval,.timeline .st:focus-within .kval{color:var(--orange)}
.timeline .st h3{font-size:16px;color:var(--blue);margin-top:var(--s3);font-family:var(--display);line-height:1.35}
.timeline .st p{color:var(--graphite);font-size:16px;margin-top:var(--s2);max-width:26em}
@media(max-width:899px){.timeline .rail{grid-template-columns:1fr 1fr;row-gap:var(--s5)}}
@media(max-width:560px){.timeline .rail{grid-template-columns:1fr}}

/* continuity — the light drawing, one long dimension */
.continuity .span{margin-top:var(--s5);display:grid;grid-template-columns:auto 1fr auto;align-items:end;gap:var(--s3)}
.continuity .yr{font-family:var(--display);font-size:clamp(44px,7vw,110px);line-height:1;color:var(--blue);letter-spacing:-.02em}
.continuity .yr.lit{color:var(--orange)}
.continuity .dim{align-self:center;margin-bottom:clamp(14px,2vw,34px);font-size:13px}
/* Two rows read as one spec table: a row header on the left, the values on the
   right. The two value sides are deliberately different shapes so no item lines up
   with an item above it — the design note is explicit that they are not paired. */
.continuity .samegrid{margin-top:var(--s5);border-top:1px solid var(--blue);border-bottom:1px solid var(--blue)}
.continuity .samerow{display:grid;grid-template-columns:minmax(130px,170px) 1fr;gap:var(--s3);align-items:center;padding:var(--s3) 0}
.continuity .samerow + .samerow{border-top:1px dashed var(--mist)}
.continuity .samerow .lab{font-family:var(--display);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--steel);line-height:1.5}
.continuity .same{display:grid;grid-template-columns:repeat(5,1fr)}
.continuity .improve{display:flex;flex-wrap:wrap;gap:10px var(--s3)}
.continuity .improve li{display:flex;align-items:center;gap:8px;font-family:var(--display);font-size:13px;color:var(--blue)}
.continuity .improve li::before{content:"";width:7px;height:8px;flex:none;clip-path:var(--hex);background:var(--orange)}
.continuity .same li{padding:0 var(--s2);border-right:1px solid var(--mist);font-family:var(--display);font-size:13px;color:var(--blue);line-height:1.4}
.continuity .same li:first-child{padding-left:0}
.continuity .same li:last-child{border-right:0}
@media(max-width:899px){.continuity .span{grid-template-columns:1fr}.continuity .dim{display:none}.continuity .samerow{grid-template-columns:1fr;gap:var(--s2)}.continuity .same{grid-template-columns:1fr 1fr;row-gap:8px}.continuity .same li{border-right:0;padding-left:0}}

/* counter-position */
.counter{padding:var(--s6) 0}
/* Revision 1 section 10: one white sentence, one orange sentence, NO paragraph space
   between them, and the measure is wide enough that each is its own line. */
.counter p{font-family:var(--display);font-size:clamp(15px,1.72vw,23px);line-height:1.5;color:var(--white);max-width:none}
.counter p span{display:block}
.counter p span+span{color:var(--orange-tint)}

/* qualification */
.certs{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3);margin-top:var(--s5)}
.cert{display:grid;grid-template-columns:auto 1fr;gap:var(--s3);align-items:center;border:1px solid var(--blue);padding:var(--s3);background:var(--white)}
.cert img{height:88px;width:auto}
.cert img.tuv{height:auto;width:162px}
.cert img.ecm{height:auto;width:136px}
.cert .name{font-weight:600}
.audit{margin-top:var(--s5);padding:var(--s4);border:1px solid var(--blue);border-left:4px solid var(--orange);font-family:var(--display);font-size:clamp(16px,1.6vw,21px);line-height:1.45;color:var(--blue);background:var(--white)}
.downloads{display:grid;grid-template-columns:1fr 1fr;gap:var(--s2);margin-top:var(--s3)}
.form .filenote{margin-top:var(--s2);color:var(--steel);line-height:1.6}
.ct-alt{display:flex;align-items:flex-end;justify-content:flex-end}
@media(max-width:899px){.ct-alt{justify-content:flex-start;margin-top:var(--s3)}}
.dl{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);padding:var(--s2) var(--s3);border:1px solid var(--steel);color:var(--graphite);text-decoration:none;font-size:15px;background:var(--white)}
.dl .tag{font-size:12px;color:var(--steel);border:1px solid var(--mist);padding:3px 8px;white-space:nowrap}
@media(max-width:899px){.certs,.downloads{grid-template-columns:1fr}.cert{grid-template-columns:1fr}}

/* references */
.refs{padding:var(--s5) 0}
.refs .logos{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--mist);margin-top:var(--s4);background:var(--white)}  /* the logo files are opaque white, so the cells are too */
.refs .logos div{display:grid;grid-template-rows:1fr auto;justify-items:center;align-items:center;gap:var(--s3);padding:var(--s4);border-left:1px solid var(--mist);min-height:190px}
.refs .logos div:first-child{border-left:0}
.refs .logos img{height:40px;width:auto}
.refs .logos img.tall{height:86px}
/* KWB: the official wide lockup (tree beside the wordmark), set a touch taller than the pure wordmarks so the tree reads */
.refs .logos img.wide{height:48px}
.refs p{color:var(--graphite)}
.refs .logos .cat{font-family:var(--display);font-size:12px;letter-spacing:.02em;color:var(--blue);text-align:center;line-height:1.4}
@media(max-width:640px){.refs .logos{grid-template-columns:1fr}.refs .logos div{border-left:0;border-top:1px solid var(--mist)}}

/* fit filter */
.fit{display:grid;grid-template-columns:1fr 1fr;gap:var(--s4);margin-top:var(--s5)}
.fit h3{padding-bottom:var(--s2);border-bottom:1px solid var(--blue);margin-bottom:var(--s2)}
.fit li{padding:13px 0;border-bottom:1px solid var(--mist);display:flex;gap:14px;align-items:flex-start}
.fit li i{flex:none;width:12px;height:14px;margin-top:6px;clip-path:var(--hex);background:var(--blue)}
.fit .no h3{color:var(--graphite);border-bottom-color:var(--mist)}
.fit .no li i{background:transparent;border:1px solid var(--steel);clip-path:none;width:10px;height:10px;transform:rotate(45deg);margin-top:8px}
.fit li:last-child{font-weight:600}
.fit div:not(.no) li:last-child i{background:var(--orange)}
@media(max-width:899px){.fit{grid-template-columns:1fr}}

/* contact */
.form{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
.form .full{grid-column:1/-1}
@media(max-width:640px){.form{grid-template-columns:1fr}}
.field label{display:block;font-family:var(--display);font-size:12px;color:var(--blue);margin-bottom:8px}
.field input,.field select,.field textarea{width:100%;border:0;border-bottom:1px solid var(--blue);background:transparent;padding:10px 0;font:inherit;font-size:16px;color:var(--ink);border-radius:0}
.field textarea{min-height:110px;resize:vertical}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-bottom:2px solid var(--orange)}
.file{border:1px dashed var(--steel);padding:var(--s3);color:var(--graphite);font-size:15px}
/* contact form: spam trap off-screen, captcha box, status line */
.form .hp{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.form .ts-box:empty{display:none}
.form .formstatus{margin:0;font-size:15px}
.form .formstatus.ok{color:var(--blue)}
.form .formstatus.err{color:var(--orange-deep)}
.contact-side .name{font-family:var(--display);color:var(--blue);font-size:15px}
.contact-side address{font-style:normal;color:var(--graphite);margin-top:var(--s2);line-height:1.7}
.contact-side a{color:var(--blue);text-decoration:none;border-bottom:1px solid var(--blue-tint)}
.contact-side .portrait{margin:var(--s4) 0 0;width:180px;height:208px;clip-path:var(--hex);overflow:hidden}
.contact-side .portrait img,.contact-side .portrait video{width:100%;height:100%;object-fit:cover;object-position:top}
.contact-side .mdname{font-family:var(--display);font-size:14px;color:var(--blue);margin-top:10px}
.contact-side .mdname + figcaption{margin-top:2px}
.contact-side figcaption{font-size:13px;color:var(--graphite);margin-top:8px}

/* footer — a drawing title block */
.footer{padding:var(--s6) 0 var(--s4)}
.tblock{display:grid;grid-template-columns:2fr 1fr 1fr 1fr;border:1px solid var(--blue-tint)}
.tblock>div{padding:var(--s3);border-left:1px solid var(--blue-tint);min-height:120px}
.tblock>div:first-child{border-left:0;grid-row:span 2}
.tblock>div:nth-child(n+5){border-top:1px solid var(--blue-tint)}
.tblock .lab{font-family:var(--display);font-size:11px;color:var(--blue-tint);margin-bottom:10px}
.tblock .val{font-size:15px;line-height:1.55;color:var(--white)}
.tblock .val a{color:var(--white);text-decoration:none;display:block}
.tblock .val a:hover{color:var(--orange-tint)}
.tblock .about{color:var(--blue-tint);font-size:14.5px;line-height:1.65;margin-top:var(--s3);max-width:44em}
.tblock .logo img{height:30px;width:auto}
.tblock .tag{font-family:var(--display);font-size:15px;color:var(--white);margin-top:var(--s3)}
.tblock .marks{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.tblock .marks img{height:auto;width:132px;background:var(--white);padding:8px}
.tblock .lang a{color:var(--blue-tint);text-decoration:none;margin-right:12px;display:inline}
.tblock .lang a[aria-current]{color:var(--white);border-bottom:2px solid var(--orange)}
.footer .legal{margin-top:var(--s3);color:var(--blue-tint);font-size:13px}
@media(max-width:899px){.tblock{grid-template-columns:1fr 1fr}.tblock>div:first-child{grid-column:1/-1;grid-row:auto}.tblock>div{border-top:1px solid var(--blue-tint)}.tblock>div:nth-child(odd){border-left:0}}

/* product pages */
.p-hero{padding-top:150px;padding-bottom:var(--s6)}
.p-hero .crumb{font-family:var(--display);font-size:12px;color:var(--graphite);margin-bottom:var(--s3)}
.p-hero .crumb a{text-decoration:none;color:var(--blue)}
.p-hero .d1{max-width:17ch}
.p-hero .lede{margin-top:var(--s3);color:var(--ink)}
/* product hero — the whole render, never corner-cut or cropped */
.phero{margin:0}
.phero img{width:100%;height:auto;display:block}
.envelopes{margin-top:var(--s5)}
.env{display:grid;grid-template-columns:56px 200px 1fr;gap:var(--s3);padding:var(--s3) 0;border-bottom:1px solid var(--mist);align-items:baseline}
/* Solid, like the step badges on the home page. A border under a clip-path gets
   clipped away to a sliver, which is why these used to read as faded outlines. */
.env i{width:22px;height:25px;clip-path:var(--hex);background:var(--blue);display:block;transform:translateY(3px)}
.env.lit i{background:var(--orange)}
.env h3{font-family:var(--display);font-size:14px;color:var(--blue)}
.env p{color:var(--graphite);font-size:16px}
@media(max-width:640px){.env{grid-template-columns:30px 1fr}.env p{grid-column:2}}
.spec{width:100%;border-collapse:collapse;margin-top:var(--s5);border:1px solid var(--blue);font-size:16px}
.spec th,.spec td{text-align:left;padding:16px var(--s2);border-top:1px solid var(--mist);vertical-align:top}
.spec th{font-family:var(--display);font-size:12px;color:var(--blue);width:24%;font-weight:400;border-right:1px solid var(--mist);padding-top:19px}
.spec tr:first-child th,.spec tr:first-child td{border-top:0}
.process{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--s2);margin-top:var(--s5)}
.pstep{min-width:0}
.pstep figure{margin:0;aspect-ratio:1/1.15;clip-path:var(--hex);position:relative;overflow:hidden;background:var(--fog)}
.pstep figure img{width:100%;height:100%;object-fit:cover}
.plabel{text-align:center;margin-top:var(--s2);font-family:var(--display);font-size:12px;color:var(--blue);line-height:1.4}
.plabel small{display:block;font-family:var(--body);font-size:12px;color:var(--graphite);margin-top:6px;line-height:1.4}
@media(max-width:1080px){.process{grid-template-columns:repeat(4,1fr);row-gap:var(--s4)}}
@media(max-width:640px){.process{grid-template-columns:repeat(2,1fr)}}

/* a heading that must not wrap */
.section-head h2.oneline{font-size:clamp(14px,2.05vw,30px);white-space:nowrap}
@media(max-width:760px){.section-head h2.oneline{white-space:normal;font-size:clamp(18px,4.4vw,26px)}}
.note{border:1px solid var(--blue);padding:var(--s3) var(--s4);margin-top:var(--s4);max-width:60em;position:relative}
.note.strong{border-left:4px solid var(--orange)}
.note strong{color:var(--blue)}
.cta-final .btn-row{margin-top:var(--s4)}

/* reveal — one budget: opacity + 16px, 400ms, once, ≤3 per section */
.reveal{opacity:0;transform:translateY(16px);transition:opacity var(--t-reveal) var(--e-settle),transform var(--t-reveal) var(--e-settle)}
.reveal:nth-child(2){transition-delay:60ms}.reveal:nth-child(3){transition-delay:120ms}
.in-view .reveal{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition-duration:200ms!important;transition-property:opacity!important}.reveal,.comb .cell{opacity:1;transform:none;translate:0 0;scale:1}.hexfield .cell.lit{opacity:.95}
  .comb.armed .cell,.in-view .comb .cell{filter:none!important}
  .comb .cell.awake,.comb .cell.near{scale:1!important}}

/* ============================================================
   language toggle · cookie consent · privacy document
   ============================================================ */

/* language toggle — sits in the nav after the CTA */
.lang-toggle{display:flex;align-items:center;gap:0;border:1px solid var(--blue);border-radius:2px;overflow:hidden;flex-shrink:0;width:max-content}
.lang-toggle button{appearance:none;background:transparent;border:0;border-left:1px solid var(--blue);color:var(--blue);font-family:var(--display);font-size:11px;letter-spacing:.04em;padding:9px 10px;cursor:pointer;line-height:1;transition:background-color var(--t-micro),color var(--t-micro)}
.lang-toggle button:first-child{border-left:0}
.lang-toggle button:hover{background:var(--blue-paper)}
.lang-toggle button[aria-pressed="true"]{background:var(--blue);color:var(--white)}
.deep .lang-toggle,.dark .lang-toggle{border-color:var(--blue-tint)}
.deep .lang-toggle button,.dark .lang-toggle button{color:var(--blue-tint);border-left-color:var(--blue-tint)}
.deep .lang-toggle button[aria-pressed="true"],.dark .lang-toggle button[aria-pressed="true"]{background:var(--orange);color:var(--white)}
@media(max-width:420px){.lang-toggle button{padding:9px 7px;font-size:10px}}

/* cookie consent — equal weight, no dark pattern */
.consent{position:fixed;left:0;right:0;bottom:0;z-index:80;background:var(--blue-deep);color:var(--white);border-top:2px solid var(--orange);transform:translateY(100%);transition:transform var(--t-state) var(--e-settle)}
.consent.open{transform:none}
.consent .wrap{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--s4);padding-top:var(--s3);padding-bottom:var(--s3)}
.consent p{font-size:15px;line-height:1.55;color:var(--blue-tint);max-width:62em}
.consent p a{color:var(--white);border-bottom:1px solid var(--orange);text-decoration:none}
.consent .acts{display:flex;gap:var(--s2);flex-shrink:0}
.consent .acts .btn{padding:12px 22px;font-size:15px}
.consent .btn-accept{background:var(--orange);border-color:var(--orange);color:var(--white)}
.consent .btn-accept:hover{background:var(--orange-deep);border-color:var(--orange-deep)}
.consent .btn-reject{background:transparent;border-color:var(--blue-tint);color:var(--white)}
.consent .btn-reject:hover{border-color:var(--white)}
@media(max-width:899px){.consent .wrap{grid-template-columns:1fr;gap:var(--s3)}.consent .acts .btn{flex:1 1 0;justify-content:center}}

/* privacy — a long-form legal document on the sheet */
.legaldoc{padding-top:150px}
.legaldoc .doc{max-width:64em}
.legaldoc h2{font-family:var(--display);font-size:clamp(17px,1.7vw,22px);color:var(--blue);margin-top:var(--s6);padding-bottom:var(--s2);border-bottom:1px solid var(--blue)}
.legaldoc h2:first-of-type{margin-top:var(--s5)}
.legaldoc h3{font-family:var(--display);font-size:15px;color:var(--blue);margin-top:var(--s4)}
.legaldoc p{margin-top:var(--s3);color:var(--ink);font-size:17px;line-height:1.65}
.legaldoc ul{margin-top:var(--s3);list-style:none}
.legaldoc li{position:relative;padding-left:26px;margin-top:var(--s2);color:var(--ink);line-height:1.6}
.legaldoc li::before{content:"";position:absolute;left:0;top:9px;width:10px;height:12px;clip-path:var(--hex);background:var(--orange)}
.legaldoc a{color:var(--blue)}
.legaldoc .updated{font-family:var(--display);font-size:12px;color:var(--graphite);margin-top:var(--s3)}
.legaldoc table{width:100%;border-collapse:collapse;margin-top:var(--s4);border:1px solid var(--blue);font-size:15px}
.legaldoc th,.legaldoc td{text-align:left;padding:14px var(--s2);border-top:1px solid var(--mist);vertical-align:top}
.legaldoc thead th{font-family:var(--display);font-size:12px;color:var(--blue);font-weight:400;background:var(--blue-paper);border-top:0}
.legaldoc .tablewrap{overflow-x:auto}
.footer .legal .cookiebtn{appearance:none;background:none;border:0;color:inherit;font:inherit;cursor:pointer;text-decoration:underline;padding:0}


/* ============================================================
   MOTION UPGRADE — micro-animation layer.
   Same tokens, same budget language: settle curves, orange accents.
   ============================================================ */
::selection{background:var(--blue);color:var(--white)}

/* scroll progress hairline — sits above the header */
.progressline{position:fixed;top:0;left:0;right:0;height:2px;z-index:60;background:var(--orange);transform-origin:left;transform:scaleX(0);pointer-events:none}

/* header shrink */
.site-header{transition:height var(--t-reveal) var(--e-settle),background-color var(--t-state) var(--e-settle),box-shadow var(--t-state) var(--e-settle)}
.site-header .logo img{transition:height var(--t-reveal) var(--e-settle)}
.site-header.scrolled{height:58px;background:rgba(255,255,255,.97);box-shadow:0 8px 24px rgba(0,27,51,.07)}
.site-header.scrolled .logo img{height:26px}

/* nav underline draws left-to-right, exits right */
.nav a:not(.btn){border-bottom:0;position:relative;padding:6px 0 8px}
.nav a:not(.btn)::after{content:"";position:absolute;left:0;right:0;bottom:4px;height:2px;background:var(--blue);transform:scaleX(0);transform-origin:right;transition:transform var(--t-state) var(--e-settle)}
.nav a:not(.btn):hover::after,.nav a:not(.btn)[aria-current]::after{transform:scaleX(1);transform-origin:left}

/* section-head rule draws in when the section arrives */
.section-head{border-bottom-color:transparent;position:relative}
.dark .section-head{border-bottom-color:transparent}
.section-head::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--blue);transform:scaleX(0);transform-origin:left;transition:transform 900ms var(--e-settle) 100ms}
.dark .section-head::after{background:var(--blue-tint)}
.in-view .section-head::after{transform:scaleX(1)}

/* word reveal — lines rise out of a clipped baseline */
.ws{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.12em;margin-bottom:-.12em}
.ws>span{display:inline-block;transform:translateY(112%);transition:transform 620ms var(--e-settle);transition-delay:var(--wd,0ms)}
.in-view .ws>span,.armed .ws>span{transform:none}
h1.split.reveal,h2.split.reveal{opacity:1;transform:none;transition:none}

/* image wipe reveals */
.featpic,.proof-fig{clip-path:inset(0 0 100% 0);transition:clip-path 900ms var(--e-settle)}
.in-view .featpic,.in-view .proof-fig{clip-path:inset(0 0 0% 0)}
.featpic,.proof-fig{overflow:hidden}

/* scroll-linked hex glow */
.hexfield .cell.glow{fill:var(--orange);stroke:var(--orange);opacity:.12;transition:opacity 500ms var(--e-settle)}
.dark .hexfield .cell.glow,.deep .hexfield .cell.glow{opacity:.2}
/* a tenth of the lit cells burn at full strength, so the field has a few
   real highlights instead of one flat wash */
.hexfield .cell.glow.bright{opacity:.9}
.dark .hexfield .cell.glow.bright,.deep .hexfield .cell.glow.bright{opacity:1}

/* honeycomb video cell */
.comb .cell video{width:100%;height:100%;object-fit:cover}
/* the still sits over the video until the clip is really playing (upgradeCell) */
.comb .cell img.cover{position:absolute;inset:0;z-index:1}

/* count-up tick — a dimension stroke draws under the value */
[data-tick]{position:relative;display:inline-block}
[data-tick].ticking::after{content:"";position:absolute;left:0;bottom:-6px;height:2px;width:100%;background:var(--orange);transform:scaleX(0);transform-origin:left;animation:tickdraw 600ms var(--e-settle) 120ms forwards}
@keyframes tickdraw{to{transform:scaleX(1)}}

/* depth on hover — cards, certs, downloads, logos */
.part{transition:transform var(--t-state) var(--e-settle);transform-style:preserve-3d}
.part:hover .hexpic{transform:translateY(-3px);filter:drop-shadow(0 18px 24px rgba(0,27,51,.14))}
.cert,.dl{transition:transform var(--t-state) var(--e-settle),box-shadow var(--t-state) var(--e-settle),border-color var(--t-state)}
.cert:hover{transform:translateY(-3px);box-shadow:0 14px 34px rgba(0,27,51,.09)}
.dl:hover{border-color:var(--blue);color:var(--blue)}
.refs .logos img{transition:transform var(--t-state) var(--e-settle)}
.refs .logos div:hover img{transform:scale(1.06)}
.hexpic img,.featpic img,.proof-fig img,.contact-side .portrait img,.contact-side .portrait video{transition:none}

/* buttons: press state */
.btn{will-change:transform}
.btn:active{transform:translateY(0) scale(.97)}

/* form fields: focus draws */
.field input,.field select,.field textarea{transition:border-color var(--t-state) var(--e-settle)}
.field label{transition:color var(--t-state)}
.field:focus-within label{color:var(--orange)}

/* timeline step numbers get a soft lift */
.timeline .st .k{transition:background-color var(--t-state) var(--e-settle),transform var(--t-state) var(--e-settle)}
.timeline .st:hover .k{transform:translateY(-2px)}

/* page wipe overlay */
.wipe{position:fixed;inset:0;z-index:90;background:var(--blue-deep);transform:translateY(101%);pointer-events:none}
.wipe::before{content:"";position:absolute;left:0;right:0;top:-4px;height:4px;background:var(--orange)}
.wipe.in{transition:transform 340ms var(--e-engage);transform:none;pointer-events:auto}

/* white-label callout — the dimension draws itself in. The callout carries
   data-inview, so this fires when the box itself is on screen, not when its
   very tall section first clips the viewport.
   Order: orange bar wipes down, the leader line runs out to the left,
   the hex dot lands on its end. */
.callout::before{transform:scaleY(0);transform-origin:top;transition:transform 700ms var(--e-settle) 200ms}
.callout::after{transform:scaleX(0);transform-origin:right;transition:transform 800ms var(--e-settle) 620ms}
.callout .dot{transform:scale(0);transition:transform 420ms var(--e-engage) 1320ms}
.callout.in-view::before{transform:scaleY(1)}
.callout.in-view::after{transform:scaleX(1)}
.callout.in-view .dot{transform:scale(1)}

/* product card photo: always object-fit:contain, scaled up at rest by exactly
   enough to fill the hexagon (script.js measures --fill from the real aspect
   ratio). Hover eases back to 1 and the whole part appears. Only transform
   moves, so there is no snap — switching object-fit would jump. */
.part .hexpic{background:var(--white)}
.part .hexpic img.fitted{object-fit:contain;transform:scale(var(--fill,1));transition:transform 700ms var(--e-settle)}
.part:hover .hexpic img.fitted{transform:scale(1)}

@media(prefers-reduced-motion:reduce){
  .featpic,.proof-fig{clip-path:none!important}
  .ws>span{transform:none!important}
  .progressline,.wipe{display:none}
  .section-head::after{transform:scaleX(1)!important}
  .callout::before,.callout::after,.callout .dot{transform:none!important}
}

/* corporate video — click-to-load facade (section 1.2b) */
.ytframe{position:relative;margin:0;aspect-ratio:16/9;overflow:hidden;background:var(--blue-night)}
.ytframe iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.ytplay{position:absolute;inset:0;display:block;width:100%;height:100%;padding:0;border:0;background:none;cursor:pointer}
.ytplay img{width:100%;height:100%;object-fit:cover;display:block;transition:scale 400ms var(--e-settle)}
.ytplay:hover img{scale:1.03}
.ytplay:focus-visible{outline:3px solid var(--orange);outline-offset:3px}
.ytbtn{position:absolute;left:50%;top:50%;width:84px;height:97px;translate:-50% -50%;clip-path:var(--hex);background:var(--orange);transition:scale 250ms var(--e-settle)}
.ytbtn::after{content:"";position:absolute;left:38%;top:34%;width:30%;height:32%;background:var(--white);clip-path:polygon(0 0,100% 50%,0 100%)}
.ytplay:hover .ytbtn{scale:1.08}
.ytcap{margin-top:var(--s2)}
