/* RICHTMASS: Bit & Pixels, round five (Masslinie palette + hero + measuring, Leitfaden wipe + steps + responsiveness) */
@font-face{font-family:"Fira Code";src:url(/assets/fonts/fira-code-var.woff2) format("woff2");font-weight:300 700;font-display:swap}
@font-face{font-family:"Red Hat Display";src:url(/assets/fonts/red-hat-display-var.woff2) format("woff2");font-weight:300 900;font-display:swap}

/* Active-ground tokens are registered so they crossfade (Leitfaden). Text tokens switch at the wipe's midpoint (JS). */
@property --fg{syntax:"<color>";inherits:true;initial-value:#10151C}
@property --fg2{syntax:"<color>";inherits:true;initial-value:#4A5260}
@property --fg3{syntax:"<color>";inherits:true;initial-value:#5E6672}
@property --err{syntax:"<color>";inherits:true;initial-value:#A3271B}
@property --line{syntax:"<color>";inherits:true;initial-value:#C8321B}
@property --hair{syntax:"<color>";inherits:true;initial-value:rgba(16,21,28,.16)}
@property --tray{syntax:"<color>";inherits:true;initial-value:#FFFFFF}
@property --paint{syntax:"<color>";inherits:true;initial-value:#F4F5F6}

/* ---------- palettes: five section grounds (hero, approach, services, clients, contact+footer) ----------
   per ground: bg, fg, fg2 (muted), fg3 (dimmed, still AA), line (accent, AA as text), tray (visual plates), err.
   Komposit: Maßlinie white/red with Graphit dark/light blue. acc = accent on white surfaces, acc-d = accent on the deep ground, sec = product-UI data colour. */
:root{
  --s0-bg:#F4F5F6;--s0-fg:#10151C;--s0-fg2:#4A5260;--s0-fg3:#5E6672;--s0-line:#C8321B;--s0-tray:#FFFFFF;--s0-err:#A3271B;
  --s1-bg:#1B1E23;--s1-fg:#ECEEF1;--s1-fg2:#A8AEB8;--s1-fg3:#8A919C;--s1-line:#8AA6FF;--s1-tray:#24282E;--s1-err:#FFB4A3;
  --s2-bg:#E3E5E9;--s2-fg:#14171C;--s2-fg2:#454A53;--s2-fg3:#555A63;--s2-line:#B42D17;--s2-tray:#F3F4F6;--s2-err:#9A2414;
  --s3-bg:var(--s0-bg);--s3-fg:var(--s0-fg);--s3-fg2:var(--s0-fg2);--s3-fg3:var(--s0-fg3);--s3-line:var(--s0-line);--s3-tray:var(--s0-tray);--s3-err:var(--s0-err);
  --s4-bg:var(--s1-bg);--s4-fg:var(--s1-fg);--s4-fg2:var(--s1-fg2);--s4-fg3:var(--s1-fg3);--s4-line:var(--s1-line);--s4-tray:var(--s1-tray);--s4-err:var(--s1-err);
  --acc:#C8321B;--acc-d:#8AA6FF;--sec:#2C55A8;
}
/* derived from the palette */
:root{--mark:var(--s1-line);--mark-ink:var(--s1-bg);--mark-l:color-mix(in srgb,var(--s1-line) 60%,#10151C);--deep:var(--s1-bg);--acc-t:color-mix(in srgb,var(--acc) 10%,#fff);--sec-t:color-mix(in srgb,var(--sec) 12%,#fff)}

/* ---------- type: Hausschrift. Red Hat Display for heading and body, Fira Code for mono and the logo. */
:root{
  --head:"Red Hat Display",ui-sans-serif,system-ui,sans-serif; --sans:"Red Hat Display",ui-sans-serif,system-ui,sans-serif; --mono:"Fira Code",ui-monospace,monospace;
  --hw:600; --ht:-.035em; --hlw:300;
  --logo-mono:"Fira Code",ui-monospace,monospace; --logo-sans:"Red Hat Display",ui-sans-serif,system-ui,sans-serif;
}

:root{
  --bg:var(--s0-bg);
  --fg:#10151C; --fg2:#4A5260; --fg3:#5E6672; --err:#A3271B; --line:#C8321B; --hair:rgba(16,21,28,.16); --tray:#FFFFFF; --paint:#F4F5F6;
  --pad:clamp(20px,5.6vw,80px);
  --wrap:1280px;
  --gut:clamp(48px,7vw,104px);
  --lw:2.5px;
  --ease:cubic-bezier(.16,1,.3,1);
  --expo:cubic-bezier(.19,1,.22,1);
  --io:cubic-bezier(.65,0,.35,1);
  /* Leitfaden's slow crossfade for line, hairlines, trays and the nav paint; text tokens get a short fade, fired by JS at the wipe midpoint */
  transition:--line 1.1s var(--io),--hair 1.1s var(--io),--tray 1.1s var(--io),--paint 1.1s var(--io),--fg .16s var(--io),--fg2 .16s var(--io),--fg3 .16s var(--io),--err .16s var(--io);
  color-scheme:light;
}
*,*::before,*::after{box-sizing:border-box}
html{background:var(--bg);color:var(--fg);-webkit-text-size-adjust:100%;scroll-padding-top:84px}
body{margin:0;font:400 1.125rem/1.6 var(--sans);position:relative;overflow-x:clip;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
::selection{background:var(--line);color:var(--paint)}
html{scrollbar-color:var(--fg2) transparent;scrollbar-width:thin}
a{color:inherit;text-underline-offset:.24em;text-decoration-thickness:1px}
:focus-visible{outline:2px solid var(--line);outline-offset:3px}
img,svg{display:block}
[hidden]{display:none!important}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
h1,h2,h3{margin:0;text-wrap:balance;font-family:var(--head)}
p{text-wrap:pretty}
p{margin:0}
.skip{position:fixed;left:16px;top:-80px;z-index:50;background:var(--fg);color:var(--paint);padding:10px 16px;font-weight:600;border-radius:2px}
.skip:focus{top:12px}
.wrap{max-width:calc(var(--wrap) + 2 * var(--pad));margin:0 auto;padding:0 var(--pad)}

/* ---------- wipe + line layers ---------- */
.wipe{position:fixed;inset:0;z-index:0;pointer-events:none}
.wipe i{position:absolute;inset:0;visibility:hidden;will-change:transform}
.line{position:absolute;left:0;top:0;width:100%;z-index:1;pointer-events:none;overflow:visible}
.line path{fill:none}
.line-fill{stroke:var(--line);stroke-width:var(--lw);stroke-linejoin:miter;stroke-linecap:butt}
.line-chase{stroke:var(--line);stroke-width:7;stroke-linecap:butt;opacity:0;transition:opacity .6s}
.is-live .line-chase{opacity:1}
.line-head path{stroke:var(--line);stroke-width:var(--lw);stroke-linecap:square}
.line-marks path{stroke:var(--line);stroke-width:1.25;fill:none}
.line-marks .tk{stroke-width:var(--lw)}
.line-marks text{font:500 11px var(--mono);fill:var(--line);letter-spacing:.02em;font-variant-numeric:tabular-nums}
.line-marks .lm{opacity:0;transition:opacity .5s var(--ease)}
.line-marks .lm.on{opacity:1}
main,footer,.nav{position:relative;z-index:2}

/* ---------- nav ---------- */
.nav{position:fixed;left:0;right:0;top:0;z-index:20;display:flex;align-items:center;gap:28px;height:68px;padding:0 var(--pad);background:var(--paint);transition:box-shadow .4s var(--ease)}
.nav.is-scrolled{box-shadow:0 1px 0 var(--hair)}
.logo{display:inline-flex;align-items:baseline;gap:.26em;text-decoration:none;font-size:1.3rem;line-height:1;white-space:nowrap;padding:12px 0}
/* the nav logo waits until the big hero logo has scrolled away, then slides in */
.js .nav .logo{opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .4s var(--ease),transform .5s var(--expo),visibility 0s linear .4s}
.js .nav.logo-on .logo{opacity:1;visibility:visible;transform:none;transition:opacity .4s var(--ease),transform .5s var(--expo),visibility 0s}
.logo b{font:600 1em var(--logo-mono);letter-spacing:-.02em}
.logo span{font-family:var(--logo-sans);font-weight:var(--hlw)}
.nav-links{display:flex;gap:4px;margin-left:auto}
.nav-links a{text-decoration:none;font-weight:500;font-size:.98rem;position:relative;padding:12px 12px;min-height:44px}
.nav-links a::after{content:"";position:absolute;left:12px;right:12px;bottom:4px;height:1.5px;background:var(--line);transform:scaleX(0);transform-origin:left;transition:transform .5s var(--expo)}
.nav-links a:hover::after,.nav-links a[aria-current]::after{transform:scaleX(1)}
/* language switch: three segments, the active one filled */
.langs{display:flex;border:1px solid var(--fg);border-radius:2px}
.langs button{appearance:none;border:0;background:transparent;color:inherit;min-width:44px;min-height:44px;padding:0 10px;font:500 .8rem var(--mono);letter-spacing:.06em;cursor:pointer;transition:background-color .2s,color .2s}
.langs button+button{border-left:1px solid var(--hair)}
.langs button:hover{background:color-mix(in srgb,var(--fg) 8%,transparent)}
.langs button[aria-pressed="true"]{background:var(--fg);color:var(--paint);cursor:default}
.langs button:focus-visible{outline-offset:-3px}

/* ---------- shared type ---------- */
.sec{position:relative}
.sec-head{max-width:880px}
.h2{font-size:clamp(2.4rem,5.6vw,4.75rem);line-height:.98;font-weight:var(--hw);letter-spacing:var(--ht)}
.h2-xl{font-size:clamp(2.8rem,7.4vw,6rem)}
.h3{font-size:clamp(1.6rem,2.3vw,2.25rem);line-height:1.05;font-weight:var(--hw);letter-spacing:calc(var(--ht) * .7)}
.lead{margin-top:24px;font-size:clamp(1.12rem,1.4vw,1.3rem);line-height:1.5;max-width:46ch;color:var(--fg2)}
.btn{display:inline-flex;align-items:center;gap:14px;min-height:52px;padding:0 22px 0 24px;border-radius:2px;font:600 1.02rem var(--sans);text-decoration:none;cursor:pointer;border:0;transition:background-color .25s var(--ease),box-shadow .4s var(--ease)}
.btn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;transition:transform .5s var(--expo)}
.btn-solid{background:var(--fg);color:var(--paint);box-shadow:0 1px 2px rgba(16,21,28,.2)}
.btn-solid:hover{background:var(--line);color:var(--paint);box-shadow:0 10px 22px -12px rgba(16,21,28,.5)}
.btn:hover svg{transform:translateX(4px)}
.btn:active{transform:translateY(1px)}
.link{font:500 1.02rem/1.2 var(--sans);color:inherit;background:none;border:0;padding:12px 0;min-height:44px;cursor:pointer;text-decoration:underline;text-decoration-color:var(--line);text-decoration-thickness:1.5px;text-underline-offset:.4em;transition:text-underline-offset .4s var(--expo)}
.link:hover{text-underline-offset:.55em}
.ill{position:absolute;left:0;bottom:-30px;font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;display:flex;align-items:center;gap:8px;color:var(--fg2)}
.ill::before{content:"";width:14px;height:1px;background:currentColor}

/* shared two-column measure: the line runs the gutter between the columns */
.grid{display:grid;grid-template-columns:minmax(0,.32fr) minmax(0,.68fr);gap:var(--gut)}

/* ---------- hero ---------- */
.hero{min-height:100svh;padding:calc(68px + clamp(36px,6vh,64px)) 0 clamp(56px,8vh,96px)}
.stage-h{position:relative}
.specimen{display:block;margin:0;color:var(--fg);font-size:calc(min(17vw,24svh,16rem) * var(--hfit,1));line-height:.98;padding-block:.04em .1em;font-kerning:normal;font-variant-ligatures:none}
.sline{display:block;white-space:nowrap;width:fit-content}
.sline-bit{font-family:var(--logo-mono);font-weight:600}
.sline-px{font-family:var(--logo-sans);font-weight:var(--hlw);margin-top:.02em}
.bl{display:inline-block;width:0;height:0;vertical-align:baseline}
.construct,.raster,.labels{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.construct line,.construct path{stroke:var(--line);stroke-width:1;vector-effect:non-scaling-stroke;fill:none}
.construct .hl{opacity:.38}
.construct .dash{stroke-dasharray:3 5;opacity:.38}
.construct .rt{opacity:.7}
.labels span{position:absolute;font:500 .72rem/1 var(--mono);color:var(--line);letter-spacing:.02em;white-space:nowrap;background:var(--bg);padding:2px 5px;transform:translate(-50%,-50%);font-variant-numeric:tabular-nums}
.labels span.v{transform:translate(-50%,-50%) rotate(-90deg)}
/* entry: once the construction lines are drawing, each line of type is wiped in from the left, standing on its baseline */
.motion .stage-h .sw{display:inline-block;clip-path:inset(-.3em 100% -.3em -.2em)}
.stage-h.drawing .sw{clip-path:inset(-.3em -.2em -.3em -.2em);transition:clip-path 1.2s var(--expo) var(--d,.55s)}
.sline-px{--d:.75s}
.motion .stage-h .construct :is(line,path):not(.dash){stroke-dasharray:1 1}
.motion .stage-h:not(.drawing) .construct :is(line,path){stroke-dashoffset:1}
.stage-h.drawing .construct :is(line,path){stroke-dashoffset:0;transition:stroke-dashoffset 1.1s var(--expo);transition-delay:calc(var(--i,0) * 45ms)}
.construct .dash{transition:opacity .8s var(--ease) .5s}
.motion .stage-h:not(.drawing) .construct .dash{opacity:0}
.motion .stage-h:not(.drawing) .labels span{opacity:0}
.labels span{transition:opacity .5s var(--ease);transition-delay:calc(700ms + var(--i,0) * 70ms)}
.raster{transition:opacity .45s var(--ease)}
.stage-h.resolved .raster{opacity:0}
.stage-h.loupe .raster{opacity:1;transition:none}
.failsafe:not([data-ok]) .stage-h .sw{clip-path:none}

.hero-foot{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:24px var(--gut);margin-top:clamp(40px,6vh,64px);align-items:start}
.hero-h{font-size:clamp(2rem,3.7vw,3.4rem);line-height:1.04;font-weight:500;letter-spacing:calc(var(--ht) * .85);max-width:15ch}
.hero-sub{font-size:clamp(1.06rem,1.25vw,1.2rem);line-height:1.55;color:var(--fg2);max-width:50ch}
.ctas{display:flex;flex-wrap:wrap;align-items:center;gap:12px 28px;margin-top:26px}

/* ---------- approach ---------- */
.approach{padding:clamp(120px,16vh,180px) 0 140px}
.ap-grid{margin-top:120px}
.steps{list-style:none;margin:0;padding:0}
.step{position:relative;min-height:88vh;padding-top:18vh;--sc:var(--fg3)}
.step:first-child{padding-top:6vh}
.step:last-child{min-height:72vh}
.step.is-on{--sc:var(--fg)}
/* the tag: a short rule that grows and turns accent when the step is active, then the stage name */
.step-tag{display:flex;align-items:center;gap:12px;height:18px;font-size:.74rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--fg3);transition:color .6s var(--ease)}
.step-tag::before{content:"";width:44px;height:1.5px;background:currentColor;transform:scaleX(.5);transform-origin:left;transition:transform 1s var(--expo),background-color .6s var(--ease)}
.step.is-on .step-tag{color:var(--line)}
.step.is-on .step-tag::before{transform:none}
.node{position:absolute;left:calc(100% + var(--gut) / 2 - 6px);top:calc(18vh + 3px);width:12px;height:12px;background:var(--paint);box-shadow:inset 0 0 0 2px var(--line);transition:background-color .35s var(--ease)}
.step:first-child .node{top:calc(6vh + 3px)}
.node.is-hit{background:var(--line)}
.step h3{margin-top:22px;font-size:clamp(1.9rem,3vw,2.9rem);line-height:1.04;font-weight:400;letter-spacing:calc(var(--ht) * .85);color:var(--sc);transition:color .6s var(--ease)}
.step p{margin-top:18px;max-width:34ch;color:var(--fg3);font-size:1.1rem;transition:color .6s var(--ease)}
.step.is-on p{color:var(--fg2)}

.stage-col{position:relative}
.stage{position:sticky;top:max(100px,calc(50vh - 330px));height:min(660px,calc(100vh - 150px));margin:0}
.stage-meter{position:absolute;right:0;top:-38px;display:flex;font-size:.72rem;z-index:4;border:1px solid var(--hair)}
.sm{padding:5px 11px;color:var(--fg2);transition:background-color .4s,color .4s}
.sm+.sm{border-left:1px solid var(--hair)}
.sm.on{background:var(--fg);color:var(--paint)}
.sm.done{color:var(--fg)}
.scene{position:absolute;inset:0;z-index:1;perspective:2600px;perspective-origin:30% 40%}
.rig{--fx:590px;--fy:380px;position:absolute;left:50%;top:50%;width:1180px;height:760px;margin:-380px 0 0 -590px;transform-style:preserve-3d;transform:scale(var(--s,.6));transition:transform 1.4s var(--expo)}
[data-stage="2"] .rig{transform:scale(calc(var(--s,.6) * .96)) rotateX(9deg) rotateY(-12deg) rotateZ(1deg)}
[data-stage="3"] .rig{transform:scale(calc(var(--s,.6) * .94)) rotateX(12deg) rotateY(-18deg) rotateZ(1.5deg)}
[data-stage="4"] .rig{transform:scale(calc(var(--s,.6) * .96)) rotateX(7deg) rotateY(-10deg) rotateZ(.6deg)}

/* ===== the product UI (design px) ===== */
.app{
  --c1:var(--sec); --c1t:var(--sec-t); --c2:var(--acc); --c2t:var(--acc-t); --c3:#A86A12; --c3t:#F8EFDF; --ok:#1E7350; --okt:#E3F2EA; --bad:#B42318; --badt:#FBE9E7;
  --side:var(--deep); --sideFg:#E6EAF0; --sideSub:#8E99AB; --ink:#10151C; --sub:#576070; --hair:#E2E5EA; --panel:#fff; --canvas:#F3F4F6;
  position:absolute;inset:0;border-radius:8px;overflow:hidden;background:var(--canvas);color:var(--ink);font:500 13px/1.35 var(--sans);letter-spacing:0;
  box-shadow:0 1px 0 rgba(255,255,255,.35) inset,0 50px 100px -30px rgba(0,0,0,.6),0 18px 36px -12px rgba(0,0,0,.4);
  transform:translateZ(0);transition:opacity .8s var(--ease),transform 1.2s var(--expo);
}
.app *{box-sizing:border-box}
[data-stage="1"] .app{opacity:0;transform:translateZ(-80px)}
[data-stage="2"] .app{
  --c1:#7D8595; --c1t:#ECEEF2; --c2:#A7ADB9; --c2t:#F1F2F5; --c3:#B9BEC8; --c3t:#F1F2F5; --ok:#7D8595; --okt:#ECEEF2; --bad:#7D8595; --badt:#ECEEF2;
  --side:#E3E6EC; --sideFg:#4C5466; --sideSub:#7A8292; --ink:#3D4454; --sub:#7A8292; --canvas:#F7F8FA;
}
[data-stage="2"] .app .card,[data-stage="2"] .app .kpi{border-style:dashed;border-color:#B8BEC9;box-shadow:none}
[data-stage="2"] .app .ws-mark i{background:#AEB4C0!important}
/* wireframe = low fidelity: words become placeholder bars, media become crossed boxes, no icons, no numbers, no colour */
[data-stage="2"] .app,[data-stage="2"] .f-proto{--wf:#CDD2D9;--wf-ink:#A3AAB5}
[data-stage="2"] .app{--canvas:#FAFAFB;--side:#EEF0F3}
[data-stage="2"] :is(.app,.f-proto) :is(.kl,.kv,.kd,.crumb span,.crumb b,.card-h b,.card-h small,.legend span,.tbl th,.side-nav li span,.side-nav em,.ws b,.ws small,.side-search span,.side-search kbd,.side-user b,.side-user small,.add span,.all,.url,.seg span,.heat span,.heat-scale span,.pill,.ph-time,.ph-title,.ph-f>span,.ph-f b,.ph-steps span,.ph-roles span,.ph-drop span,.ph-btn,.ph-file){
  color:transparent!important;text-shadow:none;border-color:transparent;box-shadow:none;
  background:linear-gradient(var(--wf),var(--wf)) 0 50%/100% .62em no-repeat!important;border-radius:2px}
[data-stage="2"] .kv{width:fit-content}
[data-stage="2"] .kv small{background:none!important;color:transparent}
[data-stage="2"] .crumb i,[data-stage="2"] .legend i,[data-stage="2"] .pill::before,[data-stage="2"] .kd{visibility:hidden}
[data-stage="2"] :is(.app,.f-proto) svg:not(.cursor){visibility:hidden}
[data-stage="2"] .add{background:none;box-shadow:inset 0 0 0 1.5px var(--wf-ink)}
[data-stage="2"] .add span{background:linear-gradient(var(--wf-ink),var(--wf-ink)) 0 50%/100% .5em no-repeat!important}
[data-stage="2"] .tbl td{color:transparent!important;background:linear-gradient(var(--wf),var(--wf)) 8px 50%/calc(var(--w,62%) - 8px) 6px no-repeat}
[data-stage="2"] .tbl td:nth-child(2){--w:78%}[data-stage="2"] .tbl td:nth-child(4){--w:46%}[data-stage="2"] .tbl td:nth-child(6){--w:52%}
[data-stage="2"] .tbl .who,[data-stage="2"] .pips,[data-stage="2"] .tbl .pill{visibility:hidden}
[data-stage="2"] .kbars i{background:none!important;box-shadow:inset 0 0 0 1px var(--wf-ink)}
[data-stage="2"] .heat i{background:none!important;opacity:1!important;box-shadow:inset 0 0 0 1px var(--wf)}
[data-stage="2"] .heat-scale i{background:var(--wf)}
[data-stage="2"] .chart,[data-stage="2"] .chart-tip{visibility:hidden}
[data-stage="2"] .chart-card::after{content:"";position:absolute;left:16px;right:16px;top:48px;bottom:16px;border:1px dashed var(--wf-ink);
  background:linear-gradient(to top right,transparent calc(50% - .75px),var(--wf) calc(50% - .75px),var(--wf) calc(50% + .75px),transparent calc(50% + .75px)),
             linear-gradient(to bottom right,transparent calc(50% - .75px),var(--wf) calc(50% - .75px),var(--wf) calc(50% + .75px),transparent calc(50% + .75px))}
[data-stage="2"] .av{background:none;box-shadow:inset 0 0 0 1px var(--wf-ink);color:transparent}
[data-stage="2"] .side-nav li.on{background:none;box-shadow:inset 0 0 0 1px var(--wf-ink)}
[data-stage="2"] .ph-f b{background-color:transparent!important;box-shadow:inset 0 0 0 1px var(--wf-ink);background-size:60% .62em!important;background-position:10px 50%!important}
[data-stage="2"] .ph-drop{background:none;border-color:var(--wf-ink)}
[data-stage="2"] .ph-file i,[data-stage="2"] .ph-isl{background:var(--wf)}
[data-stage="2"] .ph-btn{background-color:#fff!important;box-shadow:inset 0 0 0 1.5px var(--wf-ink);background-size:40% .62em!important;background-position:50% 50%!important}
.chrome{height:40px;display:flex;align-items:center;gap:7px;padding:0 16px;background:#E7E9ED;border-bottom:1px solid #D6DAE0}
.chrome>i{width:10px;height:10px;border-radius:50%;background:#C5CAD3}
.chrome .url{margin:0 auto;background:#fff;border-radius:4px;padding:4px 70px;font-size:11.5px;color:#576070}
.chrome-live{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ok);opacity:0;transition:opacity .5s}
.chrome-live b{width:7px;height:7px;background:var(--ok)}
.is-live .chrome-live{opacity:1}
.is-live .chrome-live b{animation:pulse 1.2s infinite}
@keyframes pulse{50%{opacity:.3}}
.app-body{display:grid;grid-template-columns:216px 1fr;height:720px}
.side{background:var(--side);color:var(--sideFg);padding:18px 14px;display:flex;flex-direction:column;gap:16px}
.ws{display:flex;gap:10px;align-items:center;padding:4px 6px}
.ws b{display:block;font-size:14px;font-weight:700}
.ws small{display:block;font-size:11.5px;color:var(--sideSub)}
.ws-mark{display:grid;grid-template-columns:repeat(2,12px);gap:2px}
.ws-mark i{width:12px;height:12px}
.ws-mark i:nth-child(1){background:#E6EAF0}.ws-mark i:nth-child(2){background:#5B677A}.ws-mark i:nth-child(3){background:#5B677A}.ws-mark i:nth-child(4){background:var(--acc-d)}
.side-search{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;border-radius:4px;background:rgba(255,255,255,.07);color:var(--sideSub);font-size:12.5px}
[data-stage="2"] .side-search{background:rgba(0,0,0,.06)}
.side-search svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6}
.side-search kbd{margin-left:auto;font-size:10.5px;border:1px solid rgba(140,150,171,.4);border-radius:3px;padding:1px 5px}
.side-nav{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}
.side-nav li{display:flex;align-items:center;gap:10px;height:34px;padding:0 10px;border-radius:4px;color:var(--sideSub);font-size:13px}
.side-nav li svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.side-nav li.on{background:rgba(255,255,255,.09);color:var(--sideFg);box-shadow:inset 2px 0 0 var(--acc-d)}
[data-stage="2"] .side-nav li.on{background:rgba(0,0,0,.07);box-shadow:none}
.side-nav em{margin-left:auto;font-style:normal;font-size:11px;padding:1px 6px;border-radius:3px;background:rgba(255,255,255,.1)}
.side-nav em.hot{background:var(--c2);color:#fff}
.side-user{margin-top:auto;display:flex;gap:10px;align-items:center;padding:10px 6px;border-top:1px solid rgba(255,255,255,.08)}
.side-user b{display:block;font-size:13px}.side-user small{display:block;font-size:11px;color:var(--sideSub)}
.av{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;font:700 10.5px var(--sans);color:#fff;flex:none}
.av-1{background:var(--sec)}.av-2{background:#4A5361}.av-3{background:#1E7350}.av-4{background:#E2E5EA;color:#3D4454}
[data-stage="2"] .av{background:#C3C8D2;color:#fff}
.main{padding:20px 24px;display:flex;flex-direction:column;gap:14px;min-width:0}
.topbar{display:flex;align-items:center;gap:14px;height:40px}
.crumb{font-size:13px;color:var(--sub);display:flex;gap:8px;align-items:baseline}
.crumb b{font-size:20px;color:var(--ink);font-weight:700;letter-spacing:-.02em}
.crumb i{font-style:normal;color:#C0C5CF}
.seg{margin-left:auto;display:flex;border:1px solid #D9DDE3;border-radius:4px;font-size:11.5px;background:#fff}
.seg span{padding:5px 11px;color:var(--sub)}
.seg span+span{border-left:1px solid #D9DDE3}
.seg .on{background:var(--ink);color:#fff}
[data-stage="2"] .seg .on{background:#C3C8D2}
.avs{display:flex}.avs .av{margin-left:-7px;box-shadow:0 0 0 2px var(--canvas)}
.add{display:flex;align-items:center;gap:6px;height:34px;padding:0 14px;border-radius:4px;background:var(--c1);color:#fff;font-weight:700;font-size:12.5px}
.add svg{width:13px;height:13px;stroke:#fff;stroke-width:2;fill:none}
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.kpi,.card{background:var(--panel);border:1px solid var(--hair);border-radius:6px;box-shadow:0 1px 2px rgba(16,24,40,.05),0 8px 20px -14px rgba(16,24,40,.22)}
.kpi{position:relative;height:92px;padding:13px 15px;overflow:hidden}
.kl{display:block;font-size:12px;color:var(--sub)}
.kv{display:flex;align-items:baseline;gap:4px;margin-top:6px;font-size:29px;font-weight:600;letter-spacing:-.04em;color:var(--ink)}
.kv small{font:600 13px var(--sans);color:var(--sub);letter-spacing:0}
.kd{position:absolute;left:15px;bottom:11px;font-size:10.5px;padding:1px 5px;border-radius:3px}
.kd.up{background:var(--okt);color:var(--ok)}.kd.dn{background:var(--c1t);color:var(--c1)}
.kbars{position:absolute;right:14px;bottom:13px;display:flex;align-items:flex-end;gap:3px;height:34px}
.kbars i{width:6px;background:var(--c1t)}
.kbars i:last-child{background:var(--c1)}
.kpi:nth-child(2) .kbars i:last-child{background:var(--c2)}
.kpi:nth-child(3) .kbars i:last-child{background:var(--ok)}
.kpi:nth-child(4) .kbars i:last-child{background:var(--c3)}
.kv.flash{animation:flash .9s var(--ease)}
@keyframes flash{0%{color:var(--c2)}100%{color:var(--ink)}}
.grid2{display:grid;grid-template-columns:1.62fr 1fr;gap:14px;height:236px}
.card{padding:14px 16px;min-width:0}
.card-h{display:flex;align-items:center;gap:12px;font-size:13.5px}
.card-h b{font-weight:700}
.card-h small{color:var(--sub);font-size:11.5px}
.legend{margin-left:auto;display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--sub)}
.lg{width:10px;height:2px;margin-left:8px}
.lg-1{background:var(--c2)}.lg-2{background:var(--c1);height:8px}.lg-3{background:repeating-linear-gradient(90deg,var(--c3) 0 3px,transparent 3px 5px)}
.chart{width:100%;height:188px;margin-top:8px;overflow:visible}
.chart text{font:10.5px var(--mono);fill:#7A8292}
.chart .grid{stroke:#EDEFF3;stroke-width:1}
.chart .ar{fill:url(#cg)}
.chart .s1{fill:none;stroke:var(--c2);stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.chart .s2{fill:none;stroke:var(--c1);stroke-width:2.4;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.chart .tg{stroke:var(--c3);stroke-width:1.4;stroke-dasharray:4 4;vector-effect:non-scaling-stroke}
.chart .xh{stroke:#10151C;stroke-width:1;stroke-dasharray:2 3;opacity:.5}
.chart .dot{fill:#fff;stroke:var(--c1);stroke-width:2.2}
.chart .dot2{fill:#fff;stroke:var(--c2);stroke-width:2.2}
.chart-card{position:relative}
.chart-tip{position:absolute;padding:8px 10px;border-radius:3px;background:#10151C;color:#fff;font-size:11px;line-height:1.5;pointer-events:none;box-shadow:0 10px 24px -8px rgba(14,20,36,.55);transition:transform .5s var(--expo)}
.chart-tip b{font:600 10px var(--mono);color:#A3ACBC;display:block}
.chart-tip span{display:flex;align-items:center;gap:6px;font-family:var(--mono)}
.chart-tip i{width:7px;height:7px}
[data-stage="2"] .chart-tip{background:#8A92A2}
.heat{display:grid;grid-template-columns:28px repeat(12,1fr);gap:3px;margin-top:12px}
.heat span{font:10.5px var(--mono);color:#7A8292;align-self:center}
.heat i{aspect-ratio:1;border-radius:1px;background:var(--c1);transition:opacity .5s,box-shadow .3s}
.heat i.pop{box-shadow:inset 0 0 0 1.5px var(--acc)}
[data-stage="2"] .heat i{background:#AEB4C0}
.heat-scale{display:flex;align-items:center;gap:3px;justify-content:flex-end;margin-top:10px;font-size:10px;color:#7A8292}
.heat-scale i{width:14px;height:8px;background:var(--c1)}
.heat-scale i:nth-of-type(1){opacity:.12}.heat-scale i:nth-of-type(2){opacity:.3}.heat-scale i:nth-of-type(3){opacity:.5}.heat-scale i:nth-of-type(4){opacity:.75}
.heat-scale span{margin:0 4px}
.table-card{padding:12px 16px 6px}
.all{margin-left:auto;font-size:12px;color:var(--c1);font-weight:700}
.tbl{width:100%;border-collapse:collapse;margin-top:6px;font-size:12.5px}
.tbl th{text-align:left;font-weight:600;font-size:11px;color:var(--sub);padding:6px 8px;border-bottom:1px solid var(--hair)}
.tbl td{padding:0 8px;height:32px;border-bottom:1px solid #EFF1F4;white-space:nowrap}
.tbl tr:last-child td{border-bottom:0}
.tbl td:first-child{font:500 11.5px var(--mono);color:var(--sub)}
.tbl .who{display:flex;align-items:center;gap:7px}.tbl .who .av{width:22px;height:22px;font-size:9px}
.pips{display:flex;gap:2px}.pips i{width:16px;height:4px;background:#E2E5EA}.pips i.f{background:var(--c1)}
.pill{display:inline-flex;align-items:center;gap:6px;padding:2px 8px 2px 7px;border-radius:3px;font-size:11.5px;font-weight:600;transition:background-color .4s,color .4s}
.pill::before{content:"";width:6px;height:6px;background:currentColor}
.st-0{background:var(--c3t);color:#8A5508}.st-1{background:var(--c1t);color:var(--c1)}.st-2{background:var(--okt);color:var(--ok)}.st-3{background:var(--badt);color:var(--bad)}
[data-stage="2"] .pill{background:#ECEEF2;color:#6B7385}
.pill.flip{animation:flip .6s var(--expo)}
@keyframes flip{0%{opacity:0;transform:translateY(6px)}100%{opacity:1;transform:none}}
.tbl tr.new td{animation:rowIn .9s var(--ease)}
@keyframes rowIn{0%{background:color-mix(in srgb,var(--c2) 10%,#fff)}100%{background:transparent}}
.tbl td.ago{font-family:var(--mono);font-size:11px;color:var(--sub)}
.hot-spot{position:absolute;width:30px;height:30px;border-radius:50%;border:1.5px solid var(--mark-l);opacity:0;pointer-events:none}
.hot-spot::after{content:"";position:absolute;inset:-8px;border-radius:50%;border:1px solid var(--mark-l);opacity:.5;animation:ring 1.8s var(--ease) infinite}
@keyframes ring{0%{transform:scale(.6);opacity:.8}100%{transform:scale(1.4);opacity:0}}
.hs-1{left:1080px;top:65px}.hs-2{left:252px;top:168px}.hs-3{left:612px;top:520px}
[data-stage="2"] .hot-spot{opacity:1;transition:opacity .4s .6s}
.cursor{position:absolute;left:0;top:0;width:28px;height:28px;opacity:0;filter:drop-shadow(0 3px 5px rgba(0,0,0,.3))}
.cursor path{fill:#10151C;stroke:#fff;stroke-width:1.6;stroke-linejoin:round}
[data-stage="2"] .cursor{opacity:1;animation:cur 4.8s var(--ease) infinite}
@keyframes cur{0%,100%{transform:translate(1060px,300px)}30%,44%{transform:translate(1092px,76px)}70%,86%{transform:translate(626px,530px)}}

/* redlines over the wireframe */
.anno{position:absolute;inset:0;width:100%;height:100%;overflow:visible;opacity:0;transform:translateZ(30px);transition:opacity .6s var(--ease)}
[data-stage="2"] .anno{opacity:1;transition-delay:.5s}
.anno path{fill:none;stroke:var(--mark);stroke-width:1.5}
.anno .ob{stroke-width:2}
.anno .ext{stroke-width:1;stroke-dasharray:3 3;opacity:.8}
.anno rect.tag{fill:var(--mark)}
.anno text{font:600 12px var(--mono);fill:var(--mark-ink);text-anchor:middle;dominant-baseline:central}

/* sketch: a blueprint on the navy ground */
.sketch{position:absolute;inset:0;width:100%;height:100%;overflow:visible;transition:opacity .8s var(--ease),transform 1.2s var(--expo)}
[data-stage]:not([data-stage="1"]) .sketch{opacity:0;transform:translateZ(60px) scale(1.03)}
.sk-paper{fill:color-mix(in srgb,var(--s1-fg) 3%,transparent);stroke:color-mix(in srgb,var(--s1-fg) 40%,transparent);stroke-width:1.5}
.sk-grid{fill:url(#grid)}
#grid path{fill:none;stroke:color-mix(in srgb,var(--s1-fg) 8%,transparent);stroke-width:1}
.sk-frame *{fill:none;stroke:color-mix(in srgb,var(--s1-fg) 50%,transparent);stroke-width:1.5;stroke-dasharray:6 6}
.sk-flow rect,.sk-flow ellipse,.sk-flow .sk-sys path,.sk-flow .sk-db path{fill:color-mix(in srgb,var(--s1-bg) 85%,transparent);stroke:var(--s1-fg);stroke-width:2}
.sk-people circle,.sk-people path{fill:none;stroke:var(--s1-fg);stroke-width:2}
.sk-wire{fill:none;stroke:var(--s1-fg);stroke-width:2}
.sk-arrow{fill:none;stroke:var(--s1-fg);stroke-width:2;stroke-linejoin:miter}
.sk-flow .sk-dash{fill:none;stroke:color-mix(in srgb,var(--s1-fg) 55%,transparent);stroke-dasharray:4 6;stroke-width:1.5}
.sk-flow text{font:600 15px var(--mono);fill:var(--s1-fg);text-anchor:middle}
.sk-note rect{fill:color-mix(in srgb,var(--s1-line) 12%,transparent);stroke:var(--s1-line);stroke-width:1.5}
.sk-lead{stroke:var(--s1-line);stroke-width:1.5;fill:none;stroke-dasharray:2 4}
.sk-note text{font:500 15px var(--mono);fill:var(--s1-fg)}
/* the pen: loose, overshooting strokes, drawn in once the sketch is on screen */
.sk-pen{fill:none;stroke:var(--s1-line);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1 1}
.motion [data-stage="1"] .sk-pen{animation:pen .9s var(--ease) .55s both}
@keyframes pen{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.sk-dims path{fill:none;stroke:var(--s1-line);stroke-width:1.25}
.sk-dims .sk-obl{stroke-width:2}
.sk-dims text{font:500 14px var(--mono);fill:var(--s1-line)}

/* floats */
.float{position:absolute;opacity:0;transition:opacity .7s var(--ease),transform 1.2s var(--expo);font:500 13px/1.35 var(--sans);color:#10151C}
.f-proto{left:-96px;top:150px;width:272px;height:548px;border-radius:34px;background:#fff;padding:14px 18px 18px;border:7px solid #10151C;transform:translateZ(40px) translateX(-30px);
  box-shadow:0 50px 90px -30px rgba(0,0,0,.6),0 18px 30px -12px rgba(0,0,0,.35);display:flex;flex-direction:column;gap:12px}
[data-stage="2"] .f-proto,[data-stage="3"] .f-proto,[data-stage="4"] .f-proto{opacity:1;transform:translateZ(150px)}
.ph-top{display:flex;align-items:center;justify-content:space-between;height:22px;font-size:11px}
.ph-isl{width:74px;height:20px;border-radius:999px;background:#10151C}
.ph-sig{display:flex;gap:2px;align-items:flex-end}.ph-sig i{width:3px;background:#10151C}.ph-sig i:nth-child(1){height:5px}.ph-sig i:nth-child(2){height:8px}.ph-sig i:nth-child(3){height:11px}
.ph-tag{font-size:10.5px;color:var(--mark-l);font-weight:600;letter-spacing:.03em}
.ph-tag .when-4{display:none;color:#1E7350}
[data-stage="4"] .ph-tag .when-2{display:none}[data-stage="4"] .ph-tag .when-4{display:inline}
.ph-roles{display:flex;border:1px solid #D9DDE3;border-radius:4px;font-size:11.5px}
.ph-roles span{flex:1;text-align:center;padding:5px 0;color:#576070}
.ph-roles span+span{border-left:1px solid #D9DDE3}
.ph-roles .on{background:#10151C;color:#fff;font-weight:700}
.ph-title{font-size:21px;font-weight:700;letter-spacing:-.02em}
.ph-steps{list-style:none;margin:0;padding:0;display:flex;gap:6px}
.ph-steps li{flex:1;display:flex;flex-direction:column;gap:5px;font-size:10.5px;color:#7A8292}
.ph-steps i{height:3px;background:#E2E5EA}
.ph-steps .done i{background:#1E7350}.ph-steps .cur i{background:var(--sec)}.ph-steps .cur{color:#10151C;font-weight:700}
.ph-f{display:flex;flex-direction:column;gap:4px;font-size:11px;color:#576070}
.ph-f b{display:flex;align-items:center;justify-content:space-between;height:36px;padding:0 11px;border-radius:4px;border:1px solid #CDD2DA;color:#10151C;font-size:13px;font-weight:600}
.ph-f b svg{width:12px;height:12px;fill:none;stroke:#576070;stroke-width:1.6}
.ph-drop{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px;border-radius:4px;border:1px dashed color-mix(in srgb,var(--sec) 45%,#fff);background:var(--sec-t);color:var(--sec);font-size:11.5px;font-weight:600}
.ph-drop svg{width:20px;height:20px;fill:none;stroke:var(--sec);stroke-width:1.7;stroke-linecap:round}
.ph-file{display:flex;align-items:center;gap:8px;font-size:10.5px;color:#10151C;background:#fff;border-radius:3px;padding:4px 8px;box-shadow:0 1px 3px rgba(16,24,40,.12)}
.ph-file i{width:46px;height:3px;background:linear-gradient(90deg,#1E7350 70%,#E2E5EA 70%)}
.ph-btn{margin-top:auto;height:44px;border-radius:4px;background:#10151C;color:#fff;display:grid;place-items:center;font-weight:700;font-size:14px}
[data-stage="2"] .f-proto{border-color:#8A92A2}
[data-stage="2"] .ph-btn,[data-stage="2"] .ph-roles .on{background:#8A92A2}
[data-stage="2"] .ph-drop{background:#F4F5F7;border-color:#B8BEC9;color:#6B7385}
[data-stage="2"] .ph-drop svg{stroke:#6B7385}
[data-stage="2"] .ph-steps .done i,[data-stage="2"] .ph-steps .cur i{background:#8A92A2}
.hs-p{left:96px;top:478px}
.f-int{right:24px;top:380px;width:330px;border-radius:6px;background:#fff;padding:16px 18px;transform:translateZ(60px) translateY(30px);
  box-shadow:0 50px 90px -30px rgba(0,0,0,.6),0 18px 30px -12px rgba(0,0,0,.3)}
[data-stage="3"] .f-int,[data-stage="4"] .f-int{opacity:1;transform:translateZ(200px)}
.fi-h{display:flex;align-items:center;justify-content:space-between;font-size:14px}
.fi-ok{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#1E7350;background:#E3F2EA;border-radius:3px;padding:2px 8px}
.fi-ok i{width:7px;height:7px;background:#1E7350}
.fi-list{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-direction:column}
.fi-list li{display:flex;align-items:center;gap:10px;height:40px;border-bottom:1px solid #EFF1F4;font-size:13px}
.fi-list em{margin-left:auto;font-style:normal;font-size:10.5px;color:#1E7350;position:relative;padding-left:14px}
.fi-list em::before{content:"";position:absolute;left:0;top:50%;width:7px;height:7px;margin-top:-3.5px;background:#1E7350}
.is-live .fi-list li:nth-child(odd) em::before{animation:pulse 1.2s infinite}
.is-live .fi-list li:nth-child(even) em::before{animation:pulse 1.2s .6s infinite}
.sys{display:grid;place-items:center;width:28px;height:28px;border-radius:3px;font:700 10px var(--mono);color:#fff}
.s1{background:var(--deep)}.s2{background:var(--sec)}.s3{background:#4A5361}.s4{background:var(--acc)}
.fi-tests{margin-top:12px;display:grid;grid-template-columns:auto 1fr;align-items:baseline;column-gap:8px;row-gap:6px;font-size:12px;color:#576070}
.fi-tests>span:first-child{grid-column:1/-1;font-size:10.5px}
.fi-tests b{font-size:22px;color:#10151C;letter-spacing:-.03em}
.fi-bar{grid-column:1/-1;height:4px;background:#E3F2EA;overflow:hidden}
.fi-bar i{display:block;height:100%;background:#1E7350;transform-origin:left;transform:scaleX(0);transition:transform 1.6s var(--expo) .3s}
[data-stage="3"] .fi-bar i,[data-stage="4"] .fi-bar i{transform:scaleX(1)}
.f-toast{right:70px;top:-40px;width:350px;display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:6px;background:#10151C;color:#fff;transform:translateZ(80px) translateY(-24px);
  box-shadow:0 40px 70px -24px rgba(0,0,0,.6)}
[data-stage="4"] .f-toast{opacity:1;transform:translateZ(260px)}
/* live: the product evolves. Feedback pin on the chart, a forecast that answers it, a release rail */
[data-stage="4"] .chart-tip{opacity:0}
.chart .fcb{fill:var(--c1);opacity:.13}
.chart .fcl{fill:none;stroke:var(--c1);stroke-width:2;stroke-dasharray:5 4;vector-effect:non-scaling-stroke}
.chart .tdy{stroke:#8A92A2;stroke-width:1;stroke-dasharray:2 3}
.chart text.fct{fill:var(--c1);font-weight:600}
.chart .fc.in{animation:fcIn 1.1s var(--expo) .25s both}
@keyframes fcIn{from{opacity:0}}
.side-nav li.new{display:none}
[data-stage="4"] .side-nav li.new{display:flex;animation:fcIn .8s var(--expo) .7s both}
.f-fb{left:418px;top:344px;width:276px;transform:translateZ(40px) translateY(16px)}
[data-stage="4"] .f-fb{opacity:1;transform:translateZ(230px);transition-delay:.45s}
.fb-card{display:flex;gap:10px;padding:12px 14px;background:#fff;border-radius:6px 0 6px 6px;box-shadow:0 30px 60px -24px rgba(0,0,0,.55),0 8px 16px -8px rgba(0,0,0,.25)}
.fb-card b{font-size:12.5px}
.fb-card p{margin:2px 0 8px;font-size:12.5px;line-height:1.35;color:#10151C}
.fb-done{display:inline-flex;align-items:center;gap:5px;padding:2px 7px;border-radius:3px;background:#E3F2EA;color:#1E7350;font-size:10.5px}
.fb-done svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:2}
.fb-pin{position:absolute;right:-8px;top:-8px;width:16px;height:16px;border-radius:50% 0 50% 50%;background:var(--c1);box-shadow:0 0 0 2px #fff,0 4px 8px rgba(0,0,0,.3)}
.f-rel{left:240px;bottom:-62px;width:620px;padding:14px 18px 12px;border-radius:6px;background:#fff;transform:translateZ(60px) translateY(30px);
  box-shadow:0 40px 70px -28px rgba(0,0,0,.55),0 12px 24px -12px rgba(0,0,0,.3)}
[data-stage="4"] .f-rel{opacity:1;transform:translateZ(180px);transition-delay:.15s}
.fr-h{display:flex;justify-content:space-between;align-items:center;font-size:13px}
.fr-live{display:flex;align-items:center;gap:6px;font-size:10.5px;color:#1E7350}
.fr-live i{width:7px;height:7px;background:#1E7350}
.is-live .fr-live i{animation:pulse 1.2s infinite}
.fr-list{position:relative;list-style:none;margin:12px 0 0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr))}
.fr-list::before{content:"";position:absolute;left:6px;right:calc(20% - 6px);top:5px;height:2px;background:var(--sec);transform-origin:left;transform:scaleX(0);transition:transform 1.4s var(--expo) .35s}
[data-stage="4"] .fr-list::before{transform:none}
.fr-list li{position:relative;display:flex;flex-direction:column;gap:2px;font-size:11.5px;color:#576070;opacity:.3;transition:opacity .45s var(--ease) calc(.35s + var(--i) * .24s)}
[data-stage="4"] .fr-list li{opacity:1}
.fr-list li i{position:relative;z-index:1;width:12px;height:12px;border-radius:50%;background:#fff;box-shadow:inset 0 0 0 2px var(--sec)}
.fr-list li b{margin-top:5px;font:600 12px var(--mono);color:#10151C}
.fr-list li.cur i{background:var(--sec);box-shadow:0 0 0 4px var(--sec-t)}
.fr-list li.cur b,.fr-list li.cur span{color:var(--sec);font-weight:600}
/* each release is visible in the product: a version chip on the feature, and a highlight that walks rail and UI together */
.vchip{display:none;padding:3px 5px;border-radius:3px;background:var(--sec);color:#fff;font:600 10px/1 var(--mono);letter-spacing:.02em;white-space:nowrap}
[data-stage="4"] .vchip{display:inline-block;animation:fcIn .6s var(--expo) .9s both}
.ph-roles{position:relative}
.ph-roles .vchip{position:absolute;top:-10px;right:-8px}
.exp{display:none;position:relative;align-items:center;gap:6px;height:34px;padding:0 12px;border-radius:4px;background:#fff;box-shadow:inset 0 0 0 1px #D9DDE3;font-weight:600;font-size:12.5px;color:var(--ink)}
[data-stage="4"] .exp{display:flex;animation:fcIn .8s var(--expo) .6s both}
.exp svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.exp .vchip{position:absolute;top:-10px;right:-10px}
.fi-list .vchip{margin-left:8px}
/* Hi-Fi is 1.0: features shipped later (Roles 1.1, SSO 1.3) only exist from Live on */
.f-proto .ph-roles,.f-int .fi-list li[data-rel="3"],.fi-ok .n4{display:none}
[data-stage="4"] .f-proto .ph-roles,[data-stage="4"] .f-int .fi-list li[data-rel="3"]{display:flex;animation:fcIn .8s var(--expo) .6s both}
[data-stage="4"] .fi-ok .n3{display:none}
[data-stage="4"] .fi-ok .n4{display:inline}
[data-rel]{transition:box-shadow .5s var(--ease)}
.app [data-rel].spot,.float [data-rel].spot{box-shadow:0 0 0 2px var(--sec),0 0 0 7px var(--sec-t)!important;border-radius:4px}
.fr-list li[data-rel].spot{box-shadow:none!important}
.fr-list li.spot i{background:var(--sec);box-shadow:0 0 0 4px var(--sec-t),inset 0 0 0 2px var(--sec)}
.fr-list li.spot b,.fr-list li.spot span{color:var(--sec)}
.f-toast b{display:block;font-size:14px}.f-toast small{display:block;font-size:11.5px;color:#A3ACBC}
.ft-ic{display:grid;place-items:center;width:32px;height:32px;border-radius:3px;background:#1E7350;flex:none}
.ft-ic svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:2.2}
.ft-t{margin-left:auto;font-size:10.5px;color:#A3ACBC;white-space:nowrap}

/* tile assembly overlay: the UI is set from bits */
.tiles{position:absolute;inset:0;display:grid;pointer-events:none;z-index:9;overflow:hidden;border-radius:inherit}
.tiles i{background:var(--c);opacity:0}

/* ---------- services ---------- */
.services{padding:clamp(120px,16vh,180px) 0 160px}
.svc{display:grid;grid-template-columns:minmax(0,.32fr) minmax(0,.68fr);gap:var(--gut);align-items:center;margin-top:120px}
.svc-text p{margin-top:18px;max-width:34ch;color:var(--fg2);font-size:1.1rem}
.svc-vis{position:relative;margin:0;padding:28px;background:var(--tray);border:1px solid var(--hair);box-shadow:0 30px 60px -44px rgba(16,21,28,.45)}
.svc-vis::before,.svc-vis::after{content:"";position:absolute;width:16px;height:16px;border:0 solid var(--line)}
.svc-vis::before{left:-8px;top:-8px;border-left-width:1px;border-top-width:1px}
.svc-vis::after{right:-8px;bottom:-8px;border-right-width:1px;border-bottom-width:1px}
.svc-vis .ill{left:0;bottom:-30px}
.fitbox{position:relative;aspect-ratio:calc(var(--w)) / calc(var(--h))}
.fit{position:absolute;left:0;top:0;width:calc(var(--w) * 1px);height:calc(var(--h) * 1px);transform-origin:0 0;transform:scale(var(--s,1));font:500 13px/1.35 var(--sans);color:#10151C}
.fit>*{position:absolute}
.ux-board,.ux-ds,.br,.vitals,.arch,.code,.tests{background:#fff;border-radius:6px;box-shadow:0 1px 2px rgba(16,24,40,.06),0 24px 50px -24px rgba(16,24,40,.4)}

/* UI/UX: a user flow with its principles pinned on, the research note behind it, the system it is built from */
.ux-board{left:0;top:0;width:476px;height:372px;padding:0 20px}
.ux-flow{display:flex;align-items:flex-start;margin-top:20px}
.scr-w{display:flex;flex-direction:column;align-items:center;gap:8px;width:104px;flex:none;font-size:11.5px;font-weight:600}
.scr{position:relative;width:100%;height:164px;padding:18px 10px 10px;display:flex;flex-direction:column;gap:7px;border:1.25px solid #C6CCD8;border-radius:12px;background:#fff}
.scr::before{content:"";position:absolute;top:7px;left:50%;width:22px;height:3px;border-radius:2px;background:#D5DAE3;transform:translateX(-50%)}
.scr.cur{border-color:var(--sec);box-shadow:0 0 0 4px var(--sec-t)}
.scr .hd{height:9px;width:76%;background:#6B7383}
.scr .l{height:5px;background:#E2E5EA}.scr .l.s{width:62%}
.scr .c{align-self:center}.scr .l.c{width:60%}
.scr .fd{height:20px;border:1.25px solid #D5DAE3;border-radius:3px}
.scr .fd.err{border-color:var(--acc)}
.scr .em{height:4px;width:70%;margin-top:-3px;background:color-mix(in srgb,var(--acc) 70%,#fff)}
.scr .btn{position:relative;display:block;min-height:0;height:20px;margin-top:auto;padding:0;border-radius:3px;background:var(--sec)}
.scr .btn.o{background:none;box-shadow:inset 0 0 0 1.25px var(--sec)}
.okc{display:grid;place-items:center;align-self:center;width:30px;height:30px;margin:10px 0 4px;border-radius:50%;background:var(--sec-t)}
.okc svg{width:16px;height:16px;fill:none;stroke:var(--sec);stroke-width:1.8}
/* a test participant walks the flow: start, fix the field, send, see the confirmation */
.ux-cursor{left:0;top:0;z-index:2;display:flex;flex-direction:column;align-items:flex-start;animation:walk 9s var(--ease) infinite}
.ux-cursor svg{position:relative;width:22px;height:22px;margin:-2px 0 0 -4px;transform-origin:4px 3px;animation:press 9s infinite}
.ux-cursor path{fill:#10151C;stroke:#fff;stroke-width:1.5}
.ux-cursor::before{content:"";position:absolute;left:-13px;top:-13px;width:26px;height:26px;border-radius:50%;border:2px solid var(--sec);opacity:0;animation:ring 9s infinite}
.cur-name{font-size:10.5px;color:#fff;background:var(--sec);border-radius:2px;padding:2px 7px;margin:-4px 0 0 14px;white-space:nowrap}
@keyframes walk{0%{transform:translate(96px,250px);opacity:0}6%{opacity:1}14%,19%{transform:translate(72px,208px)}32%,37%{transform:translate(238px,135px)}50%,55%{transform:translate(238px,208px)}70%,86%{transform:translate(410px,160px);opacity:1}94%,100%{transform:translate(410px,160px);opacity:0}}
@keyframes press{0%,15%,17.5%,33%,35.5%,51%,53.5%,100%{transform:none}16%,34%,52%{transform:scale(.82)}}
@keyframes ring{0%,15.9%,34%,52%{opacity:0;transform:scale(.3)}16%,34.1%,52.1%{opacity:1;transform:scale(.3)}21%,39%,57%,100%{opacity:0;transform:scale(1.5)}}
.pin{display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:var(--sec);color:#fff;font-size:10px;font-weight:600;flex:none}
.scr .pin{position:absolute;right:-9px}
.arw{flex:1;position:relative;height:1.5px;margin:82px 10px 0;background:#9AA2B1}
.arw::after{content:"";position:absolute;right:-1px;top:-4px;border:4.75px solid transparent;border-right:0;border-left:7px solid #9AA2B1}
.ux-legend{list-style:none;margin:18px 0 0;padding:14px 0 0;border-top:1px solid #EDEFF3;display:flex;flex-direction:column;gap:8px;font-size:12px;color:#3A4250}
.ux-legend li{display:flex;align-items:center;gap:10px}
.ux-lead{left:456px;top:118px;width:46px;border-top:1.5px dashed var(--sec)}
.ux-note{left:500px;top:40px;width:180px;padding:14px 16px;display:flex;flex-direction:column;gap:8px;background:color-mix(in srgb,var(--sec) 10%,#fff);border-radius:4px;transform:rotate(1.5deg);box-shadow:0 1px 2px rgba(16,24,40,.06),0 18px 34px -20px rgba(16,24,40,.4)}
.ux-note small{font-size:10px;color:color-mix(in srgb,var(--sec) 65%,#10151C);letter-spacing:.04em;text-transform:uppercase}
.ux-note b{font-size:14px;font-weight:600;line-height:1.3}
.ux-note span{font-size:10.5px;color:#576070}
.ux-ds{left:444px;top:250px;width:236px;padding:14px 16px 16px;display:flex;flex-direction:column;gap:12px}
.ds-h{display:flex;justify-content:space-between;align-items:center;font-size:13px;padding-bottom:10px;border-bottom:1px solid #EDEFF3}
.ds-h span{font-size:10.5px;color:#576070;background:#EDEFF3;border-radius:3px;padding:2px 7px}
.ux-ds .sw{display:flex;gap:4px}.ux-ds .sw i{flex:1;height:22px;border-radius:2px;background:var(--c)}
.ty{display:flex;gap:8px;align-items:center}
.ty>b{font-size:30px;font-weight:600;letter-spacing:-.04em;line-height:1;margin-right:auto;color:#3A4250}
.bt{display:inline-grid;place-items:center;height:28px;padding:0 12px;border-radius:3px;font-weight:700;font-size:11px;white-space:nowrap}
.bt-p{background:var(--sec);color:#fff}
.bt-o{box-shadow:inset 0 0 0 1.25px var(--sec);color:var(--sec)}
.caret{width:1.5px;height:18px;background:var(--sec);margin-left:2px;animation:blink 1.1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}

/* web: the same page at two widths, measured, inspected and audited */
.dim{height:14px;border:0 solid var(--acc);border-width:0 1px;display:grid;place-items:center}
.dim::before{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:var(--acc)}
.dim span{position:relative;font-size:10px;font-weight:600;color:#fff;background:var(--acc);border-radius:2px;padding:1px 6px}
.dim-br{left:0;top:4px;width:560px}
.dim-ph{right:0;top:62px;width:160px}
.br{left:0;top:26px;width:560px;height:380px;overflow:hidden}
.br-bar{display:flex;align-items:center;gap:6px;height:36px;padding:0 14px;background:#EDEFF3}
.br-bar>i{width:9px;height:9px;border-radius:50%;background:#CDD2DB}
.br-url{margin:0 auto;display:flex;align-items:center;gap:6px;background:#fff;border-radius:3px;padding:3px 40px;font-size:11px;color:#576070}
.br-url svg{width:11px;height:11px;fill:none;stroke:#1E7350;stroke-width:1.4}
.br-page{height:100%;padding:12px 22px;background:linear-gradient(180deg,color-mix(in srgb,var(--sec) 7%,#fff) 0 176px,#F3F4F6 176px)}
.bp-nav{display:flex;align-items:center;gap:18px;height:30px;font-size:11px;font-weight:600;color:#576070}
.bp-nav>span:nth-child(2){margin-left:auto;color:#10151C;box-shadow:inset 0 -1.5px var(--sec)}
.bp-logo{display:flex;gap:2px}.bp-logo i{width:11px;height:11px;background:#10151C}.bp-logo i+i{background:var(--acc-d)}
.bp-cta{font-size:10.5px;font-weight:700;color:#10151C;border-radius:2px;padding:4px 10px;box-shadow:inset 0 0 0 1px #C6CCD8}
.bp-hero{display:flex;justify-content:space-between;align-items:center;padding:26px 4px 30px 0;color:#10151C}
.bp-copy{display:flex;flex-direction:column;gap:8px}
.bp-hero b{font-size:27px;font-weight:600;letter-spacing:-.03em;line-height:1.05}
.bp-copy>span{font-size:12.5px;color:#576070}
.bp-btns{display:flex;gap:8px;margin-top:6px}
.bp-btns i{font-style:normal;font-size:11px;font-weight:700;padding:7px 14px;border-radius:2px;background:var(--acc-d);color:#10151C}
.bp-btns i+i{background:none;color:#fff;box-shadow:inset 0 0 0 1px rgba(255,255,255,.55)}
.bp-cards{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.bp-cards>span:not(.insp-tip){position:relative;background:#fff;border-radius:4px;padding:12px;display:flex;flex-direction:column;gap:6px;box-shadow:0 8px 20px -10px rgba(16,24,40,.3)}
.bp-cards>span>i,.wp-card>i{display:grid;place-items:center;width:26px;height:26px;border-radius:2px;background:var(--sec-t);flex:none}
.bp-cards svg,.wp-card svg{width:15px;height:15px;fill:none;stroke:var(--sec);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.bp-cards b{font-size:12.5px;font-weight:700;margin-top:2px}
.bp-cards em{height:5px;width:86%;background:#DDE1E8}.bp-cards em.s{width:56%}
/* the devtools inspector, as it would show the card: padding green, content blue */
.insp::before{content:"";position:absolute;inset:0;border-radius:4px;border:12px solid rgba(147,196,125,.5);background:rgba(111,168,220,.36);background-clip:padding-box}
.insp-tip{position:absolute;right:30px;bottom:calc(100% + 10px);width:184px;padding:8px 10px;background:#fff;border-radius:4px;box-shadow:0 2px 4px rgba(16,24,40,.12),0 14px 30px -8px rgba(16,24,40,.45);font-size:10px;color:#576070;display:flex;flex-direction:column;gap:3px}
.insp-tip::after{content:"";position:absolute;right:24px;top:100%;border:6px solid transparent;border-top-color:#fff}
.it-h{display:flex;justify-content:space-between;padding-bottom:5px;margin-bottom:2px;border-bottom:1px solid #EDEFF3}
.it-h b{color:#881280;font-weight:600}
.it-r{display:flex;justify-content:space-between;align-items:center}
.it-r>span+span{display:flex;align-items:center;gap:5px;color:#10151C}
.aa{font:600 9px/1 var(--sans);border:1px solid #C6CCD8;border-radius:2px;padding:1px 3px}
.it-ok svg{display:block;width:11px;height:11px;fill:none;stroke:#1E7350;stroke-width:2}
.web-phone{right:0;top:86px;width:160px;height:330px;border-radius:26px;background:#2A303A;padding:5px;box-shadow:0 40px 70px -24px rgba(16,24,40,.6)}
/* entrance once the visual is reached: the page drops in, the phone follows from the right, the measurements rise last */
.v-web .br,.dim-br,.web-phone,.dim-ph,.vitals{opacity:0;transition:transform 1s var(--expo) var(--d),opacity .6s var(--ease) var(--d)}
.v-web .br,.dim-br{--d:.1s;transform:translateY(-24px)}
.web-phone,.dim-ph{--d:.35s;transform:translateX(32px)}
.vitals{--d:.6s;transform:translateY(24px)}
.is-plugged .br,.is-plugged .dim-br,.is-plugged .web-phone,.is-plugged .dim-ph,.is-plugged .vitals{opacity:1;transform:none}
.wp-in{height:100%;border-radius:21px;background:linear-gradient(180deg,color-mix(in srgb,var(--sec) 7%,#fff) 0 62%,#F3F4F6 62%);padding:9px 11px 12px;display:flex;flex-direction:column;gap:8px;color:#10151C;overflow:hidden}
.wp-st{display:flex;justify-content:space-between;align-items:center;font-size:9.5px;padding:0 6px}
.wp-sig{display:flex;align-items:flex-end;gap:1.5px}.wp-sig i{width:3px;height:4px;background:#10151C}.wp-sig i+i{height:6px}.wp-sig i+i+i{height:8px}
.wp-nav{display:flex;justify-content:space-between;align-items:center;margin:4px 0}
.wp-burger{display:flex;flex-direction:column;gap:3px}.wp-burger i{width:14px;height:1.5px;background:#10151C}
.wp-in>b{font-size:18px;font-weight:600;letter-spacing:-.02em;line-height:1.05}
.wp-l{height:5px;background:#D5DAE3}.wp-l.s{width:60%}
.wp-btn{height:30px;border-radius:2px;background:var(--acc-d);color:#10151C;font-size:11px;font-weight:700;display:grid;place-items:center;margin:4px 0 6px}
.wp-card{display:flex;align-items:center;gap:8px;padding:8px;border-radius:4px;background:#fff;color:#10151C;box-shadow:0 6px 14px -8px rgba(16,24,40,.35)}
.wp-card b{display:block;font-size:11px}.wp-card em{display:block;width:56px;height:4px;margin-top:5px;background:#DDE1E8}
.vitals{left:24px;bottom:0;width:404px;padding:12px 16px 14px}
.vt-h{display:flex;justify-content:space-between;align-items:center;font-size:14px;margin-bottom:10px}
.vt-ok{display:flex;align-items:center;gap:6px;font-size:11px;color:#1E7350;background:#E3F2EA;border-radius:3px;padding:2px 8px}.vt-ok i{width:7px;height:7px;background:#1E7350}
.vt-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.vt{display:grid;grid-template-columns:auto 1fr;align-items:baseline;gap:6px 8px}
.vt>span:first-child{font-size:10.5px;color:#576070}
.vt b{font-size:15px;letter-spacing:-.02em;text-align:right}
.vt-scale{grid-column:1/-1;height:5px;position:relative;background:linear-gradient(90deg,#BFE3D0 0 40%,#F2DFB8 40% 70%,#F3CFC8 70%)}
.vt-scale i{position:absolute;top:-4px;left:calc(var(--p) * 100%);width:2px;height:13px;background:#10151C;transform:translateX(-50%) scaleY(0);transition:transform .7s var(--expo) .2s}
.is-plugged .vt-scale i{transform:translateX(-50%) scaleY(1)}

/* software: one request through the architecture, the code that routes it, the tests that hold it */
.arch{left:0;top:0;width:392px;height:440px;padding:0 16px;background:#fff linear-gradient(#EEF0F4 1px,transparent 1px) 0 -1px/16px 16px,linear-gradient(90deg,#EEF0F4 1px,transparent 1px) -1px 0/16px 16px}
.ar-h{display:flex;gap:10px;align-items:center;height:44px;margin:0 -16px;padding:0 16px;background:#fff;border-bottom:1px solid #EDEFF3;border-radius:6px 6px 0 0;font-size:15px}
.ar-h span,.ts-h span{font-size:11px;color:#576070;background:#EDEFF3;border-radius:3px;padding:2px 7px}
.ar-svg{display:block;width:100%;height:auto;margin:14px 0 16px;overflow:visible}
.ar-svg text{font:600 12px var(--sans);fill:#10151C;text-anchor:middle;dominant-baseline:central}
.ar-svg .ar-lbl{font:500 10px var(--mono);fill:#576070;text-anchor:start}
.ar-w path{fill:none;stroke:#10151C;stroke-width:1.25}
.ar-g{fill:rgba(255,255,255,.6);stroke:#9AA2B1;stroke-dasharray:4 4}
.nd rect,.ar-db path,.ar-db ellipse{fill:#fff;stroke:#10151C;stroke-width:1.25}
.nd.hot rect{fill:var(--sec-t);stroke:var(--sec);stroke-width:1.75}
.ar-pk circle{fill:var(--acc)}
.code{left:362px;top:22px;width:318px;padding-bottom:12px;background:#FAFBFC;color:#3A4250;font-size:11.5px;line-height:19px}
.cd-tabs{display:flex;height:32px;border-bottom:1px solid #EDEFF3;font-size:10.5px}
.cd-tabs span{display:flex;align-items:center;padding:0 12px;color:#8A93A3}
.cd-tabs .on{color:#10151C;box-shadow:inset 0 -2px var(--sec)}
.cd{list-style:none;margin:10px 0 0;padding:0;counter-reset:ln;white-space:pre}
.cd li{counter-increment:ln;min-height:19px}
.cd li::before{content:counter(ln);display:inline-block;width:24px;margin-right:12px;text-align:right;color:#A3ACBC}
.cd li.on{background:color-mix(in srgb,var(--sec) 8%,transparent)}
.cd .tk-k{color:color-mix(in srgb,var(--acc) 80%,#10151C)}
.cd .tk-f{color:color-mix(in srgb,var(--sec) 65%,#10151C)}
.cd .tk-s{color:#A8D5BA}
.cd .caret{display:inline-block;height:14px;vertical-align:-2px;background:#10151C}
.tests{left:330px;top:200px;width:350px;padding:12px 16px 14px}
.ts-h{display:flex;justify-content:space-between;align-items:center;font-size:14px;padding-bottom:8px;border-bottom:1px solid #EDEFF3}
.ts{list-style:none;margin:0;padding:2px 0 6px}
.ts li{display:grid;grid-template-columns:16px minmax(0,1fr);gap:10px;align-items:center;min-height:26px;font-size:12px}
.ts svg{width:16px;height:16px;padding:2px;border-radius:2px;background:#E3F2EA;fill:none;stroke:#1E7350;stroke-width:1.8}
.ci{display:grid;grid-template-columns:auto 1fr auto;gap:8px 10px;align-items:center;padding-top:10px;border-top:1px solid #EDEFF3;font-size:11px;color:#576070}
.ci-dot{width:10px;height:10px;background:#1E7350;box-shadow:0 0 0 3px #E3F2EA}
.ci b{font-size:16px;color:#10151C;letter-spacing:-.02em}
.ci-bars{grid-column:1/-1;display:flex;gap:2px}.ci-bars i{flex:1;height:12px;background:#1E7350;transform-origin:bottom;transform:scaleY(0);transition:transform .6s var(--expo)}
.is-plugged .ci-bars i{transform:scaleY(1)}
.ci-bars i:nth-child(4){background:#A86A12}

/* ---------- clients ---------- */
.clients{padding:clamp(120px,16vh,180px) 0 180px}
.plate{position:relative;margin-top:120px;padding:16px}
.crop{position:absolute;width:26px;height:26px;border:0 solid var(--line)}
.crop-tl{left:0;top:0;border-left-width:1px;border-top-width:1px}
.crop-tr{right:0;top:0;border-right-width:1px;border-top-width:1px}
.crop-bl{left:0;bottom:0;border-left-width:1px;border-bottom-width:1px}
.crop-br{right:0;bottom:0;border-right-width:1px;border-bottom-width:1px}
.plate-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));background:#fff;border:1px solid var(--fg);box-shadow:0 30px 60px -40px rgba(16,21,28,.35)}
.plate-grid li+li{border-left:1px solid var(--hair)}
.plate-grid a{display:grid;grid-template-rows:1fr auto;grid-template-columns:minmax(0,1fr);height:100%;min-height:clamp(220px,20vw,280px);text-decoration:none;color:#10151C}
.pl-logo{display:grid;place-items:center;padding:40px clamp(24px,3vw,48px)}
.pl-logo img{width:auto;height:auto;max-height:72px;max-width:min(100%,220px);object-fit:contain;transition:transform .8s var(--expo)}
.plate-grid li:nth-child(1) img{max-height:84px}
.plate-grid li:nth-child(3) img{max-width:min(100%,240px)}
.cap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:2px 12px;padding:14px 18px;border-top:1px solid rgba(16,21,28,.12);font-size:.86rem;transition:background-color .25s var(--ease),color .25s var(--ease)}
.cap .url{display:inline-flex;gap:4px;align-items:center;color:var(--line);font-size:.8rem;transition:color .25s var(--ease)}
.cap .url svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;transition:transform .5s var(--expo)}
.plate-grid a:hover img{transform:scale(1.04)}
.plate-grid a:hover .url svg{transform:translate(2px,-2px)}
/* same hover as the buttons: the section accent fills, text turns to the ground colour */
.plate-grid a:hover .cap{background:var(--line);color:var(--paint)}
.plate-grid a:hover .url{color:var(--paint)}
.plate-grid a:focus-visible{outline-offset:-3px}

/* ---------- contact ---------- */
.contact{padding:clamp(120px,16vh,180px) 0 160px}
.ct-grid{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1fr);gap:var(--gut);align-items:start}
.ct-head .lead{max-width:30ch}
.ct-card{position:relative}
form{display:flex;flex-direction:column;gap:20px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.f{display:flex;flex-direction:column;gap:8px}
.f label{font-weight:500;font-size:.95rem}
.f input,.f textarea{font:400 1.06rem/1.5 var(--sans);color:var(--fg);background:color-mix(in srgb,var(--fg) 5%,transparent);border:0;border-bottom:1px solid var(--fg2);border-radius:0;padding:12px 14px;outline:none;caret-color:var(--line);transition:box-shadow .25s,background-color .25s,border-color .25s}
.f input:hover,.f textarea:hover{background:color-mix(in srgb,var(--fg) 8%,transparent)}
.f textarea{resize:vertical;min-height:150px}
.f input:focus,.f textarea:focus{background:color-mix(in srgb,var(--fg) 10%,transparent);border-bottom-color:var(--line);box-shadow:inset 0 -1px 0 var(--line)}
.f [aria-invalid="true"]{border-bottom-color:var(--err);box-shadow:inset 0 -1px 0 var(--err);background:color-mix(in srgb,var(--err) 9%,transparent)}
.err{font:400 .86rem/1.4 var(--mono);color:var(--err)}
.err:empty{display:none}
.ct-alert{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;background:color-mix(in srgb,var(--err) 10%,transparent);color:var(--err);border-top:1px solid var(--err)}
.ct-alert svg{width:20px;height:20px;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;margin-top:2px}
.submit-row{display:flex;flex-direction:column;align-items:flex-start;gap:14px;margin-top:6px}
.submit{position:relative;min-height:56px}
.submit .spin{width:16px;height:16px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;display:none;animation:spin .8s linear infinite}
.submit.is-loading .spin{display:block}
.submit.is-loading svg{display:none}
.submit.is-loading{pointer-events:none;background:var(--fg2)}
.submit.is-fed{box-shadow:-10px 0 0 -8px var(--line)}
@keyframes spin{to{transform:rotate(360deg)}}
.ct-ok{display:flex;flex-direction:column;align-items:flex-start;gap:20px;padding:8px 0;outline:none}
.ct-ok p{font-size:clamp(1.4rem,2.2vw,1.9rem);font-weight:400;line-height:1.25;letter-spacing:-.015em;max-width:24ch}
.ok-ic{width:52px;height:52px;fill:none;stroke:var(--line);stroke-width:2.5;stroke-dasharray:60;stroke-dashoffset:60;animation:tick .9s var(--expo) .1s forwards}
@keyframes tick{to{stroke-dashoffset:0}}

/* ---------- footer ---------- */
.foot{padding:120px 0 48px}
.foot-in{display:grid;grid-template-columns:1fr auto;gap:28px 40px;align-items:end}
.logo-xl{font-size:clamp(2.6rem,8vw,7rem);letter-spacing:-.01em}
.foot-tag{font-size:1.2rem;color:var(--fg2);text-align:right}
.foot-meta{grid-column:1/-1;display:flex;gap:28px;font-size:.84rem;padding-top:24px;border-top:1px solid var(--hair);color:var(--fg2)}
.foot-meta a{color:var(--fg);display:inline-flex;align-items:center;min-height:44px}
.foot-meta a:hover{color:var(--line)}
.foot-meta span{margin-right:auto}

/* ---------- responsive ---------- */
@media (max-width:1100px){
  .nav-links{display:none}
  .langs{margin-left:auto}
}
.sketch-m{display:none}
@media (max-width:959px){
  :root{--lw:2px;--gut:28px}
  .wrap{padding-left:40px;padding-right:20px}
  .nav{padding:0 12px 0 20px;height:60px}
  html{scroll-padding-top:72px}
  .hero{padding-top:calc(60px + 40px)}
  .specimen{font-size:calc(min(25vw,30svh) * var(--hfit,1))}
  .hero-foot{grid-template-columns:1fr;gap:20px}
  .approach{padding:120px 0 80px}
  .ap-grid{grid-template-columns:1fr;margin-top:56px;gap:0}
  /* the showpiece (Leitfaden's phone layout): a sticky, reflowed 440x560 rig; the rail at x=14 stays visible */
  .stage-col{order:-1;position:sticky;top:60px;z-index:5;height:min(62vh,500px);background:var(--paint);margin:0 -20px 0 -12px;padding:14px 0 30px;border-bottom:1px solid var(--hair)}
  .stage{position:relative;top:0;height:100%}
  .stage-meter{top:auto;bottom:-24px;right:12px;font-size:.66rem;background:var(--paint)}
  .sm{padding:3px 7px}
  .stage .ill{display:none}
  .rig{width:440px;height:560px;margin:-280px 0 0 -220px}
  [data-stage="2"] .rig{transform:scale(calc(var(--s,.6) * .97)) rotateX(5deg) rotateY(-6deg)}
  [data-stage="3"] .rig{transform:scale(calc(var(--s,.6) * .96)) rotateX(7deg) rotateY(-9deg) rotateZ(.6deg)}
  [data-stage="4"] .rig{transform:scale(calc(var(--s,.6) * .97)) rotateX(4deg) rotateY(-5deg)}
  .sketch-d{display:none}.sketch-m{display:block}
  .anno{transform:none}
  .app{font-size:14px}
  .app-body{grid-template-columns:1fr;height:auto}
  .side,.seg,.avs,.heat-card,.table-card,.f-proto,.hot-spot,.cursor{display:none}
  .main{padding:16px;gap:12px}
  .crumb b{font-size:21px}
  .add{margin-left:auto}
  .kpis{grid-template-columns:1fr 1fr;gap:10px}
  .kpi{height:96px}
  .kl{font-size:13px}
  .grid2{grid-template-columns:1fr;height:auto}
  .chart{height:150px}
  .chart-card .legend{display:none}
  .f-int{right:14px;top:auto;bottom:18px;width:262px;padding:14px 16px}
  [data-stage="4"] .f-int{opacity:0}
  .f-fb{display:none}
  .exp{padding:0 10px}
  .exp>span{display:none}
  .f-rel{left:14px;right:14px;bottom:18px;width:auto;padding:12px 14px 10px}
  .fr-list li{font-size:11px}
  .f-int .fi-list li{height:34px}
  .f-int .fi-list li:nth-child(n+3){display:none}
  .f-toast{right:14px;left:14px;width:auto;top:-28px}
  .step{min-height:52vh;padding-top:8vh}
  .step:first-child{padding-top:5vh}
  .step:last-child{min-height:44vh}
  .node{left:-32px;top:calc(8vh + 3px)}
  .step:first-child .node{top:calc(5vh + 3px)}
  .services,.clients,.contact{padding:120px 0}
  .svc{grid-template-columns:1fr;gap:28px;margin-top:80px}
  .svc-vis{padding:12px;margin-right:-8px}
  .plate{margin-top:56px;padding:12px}
  .plate-grid li,.plate-grid a{min-width:0}
  .plate-grid a{min-height:170px}
  .pl-logo{padding:32px 20px}
  .pl-logo img,.plate-grid li:nth-child(3) img{max-width:100%}
  .ct-grid{grid-template-columns:1fr;gap:48px}
  .row2{grid-template-columns:1fr}
  .foot-in{grid-template-columns:1fr}
  .foot-tag{text-align:left}
  .foot-meta{flex-wrap:wrap;gap:4px 22px}
  .foot-meta span{flex-basis:100%}
}

/* ---------- phones: the service visuals reflow into a readable column instead of a shrunken board ---------- */
@media (max-width:640px){
  .plate-grid{grid-template-columns:minmax(0,1fr)}
  .plate-grid li+li{border-left:0;border-top:1px solid rgba(16,21,28,.12)}
  .svc{grid-template-columns:minmax(0,1fr)}
  .svc-vis{padding:14px 12px}
  .fitbox{aspect-ratio:auto}
  .fit{position:relative;width:auto;height:auto;transform:none;display:flex;flex-direction:column;gap:12px;font-size:14px}
  .fit>*{position:relative;left:auto;right:auto;top:auto;bottom:auto;width:auto;min-width:0}
  .bp-nav{gap:10px}.bp-nav>span:not(.bp-logo):not(.bp-cta){width:26px}
  .ux-board{height:auto;padding-bottom:16px}
  .scr-w{flex:1 1 0;width:auto;min-width:0}
  .arw{flex:0 0 14px;margin:82px 4px 0}
  .ux-lead,.ux-cursor{display:none}
  .ux-note{transform:none}
  .dim,.web-phone,.insp-tip{display:none}
  .br,.br-page{height:auto}
  .br-url{padding:3px 14px}
  .bp-nav>span:not(.bp-logo):not(.bp-cta){display:none}
  .bp-cta{margin-left:auto}
  .bp-hero b{font-size:24px}
  .bp-cards{gap:8px}
  .bp-cards>span:not(.insp-tip){padding:10px}
  .insp::before{border-width:10px}
  .vt-row{gap:12px}
  .vt b{font-size:14px}
  .arch{height:auto}
  .code{font-size:11px;line-height:18px;overflow:hidden}
  .ts li{font-size:13px;padding:4px 0}
}

/* ---------- reduced motion: final states ---------- */
@media (prefers-reduced-motion:reduce){
  :root{transition:none}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .vt-scale i{transform:translateX(-50%)}
  .ci-bars i,.fi-bar i{transform:none}
  .ok-ic{stroke-dashoffset:0}
  .line-chase{display:none}
}

/* phone sketch */
.sk-grid-m{fill:url(#gridm)}
#gridm path{fill:none;stroke:color-mix(in srgb,var(--s1-fg) 8%,transparent);stroke-width:1}
.sketch-m .sk-flow text{font-size:18px}
.sketch-m .sk-note text{font-size:17px}
.sketch-m .sk-dims text{font-size:15px}

/* ---------- legal pages (imprint, privacy): one drafting sheet, the title dimensioned by its date ---------- */
.legal-page .langs{margin-left:auto}
.legal{padding:clamp(120px,18vh,176px) 0 96px}
.legal-doc{max-width:46rem}
.legal-head{margin-bottom:24px}
.legal-rule{position:relative;display:flex;align-items:center;height:22px;margin-top:32px;border-inline:1px solid var(--line);color:var(--line);font-size:.78rem;letter-spacing:.02em}
.legal-rule::before{content:"";position:absolute;inset:50% 0 auto;height:1px;background:var(--line)}
.legal-rule span{position:relative;margin-left:28px;padding:0 10px;background:var(--bg)}
.legal-doc section{margin-top:40px;padding-top:36px;border-top:1px solid var(--hair)}
.legal-doc h2{margin-bottom:14px;font:600 1.3rem/1.25 var(--head);letter-spacing:-.01em}
.legal-doc p,.legal-doc dd{max-width:68ch;color:var(--fg2)}
.legal-doc p+p,.legal-doc p+address,.legal-doc address+p{margin-top:14px}
.legal-doc address{font-style:normal;line-height:1.7}
.legal-doc dl{display:grid;grid-template-columns:7rem 1fr;gap:6px 16px;margin:0}
.legal-doc dt{color:var(--fg3)}
.legal-doc dd{margin:0}
.legal-doc strong{color:var(--fg);font-weight:600}
.legal-doc section a{text-decoration-color:var(--line);text-decoration-thickness:1.5px}
.legal-doc code{padding:1px 6px;border:1px solid var(--hair);border-radius:2px;background:var(--tray);font:.88em var(--mono)}
mark.todo{padding:1px 6px;border-radius:2px;background:color-mix(in srgb,var(--line) 12%,transparent);color:var(--err);font:500 .85em var(--mono)}
.legal-foot{display:flex;flex-wrap:wrap;align-items:center;gap:4px 28px;margin-top:72px;padding-top:16px;border-top:1px solid var(--fg);font-size:.95rem}
.legal-foot a:not(.link){display:inline-flex;align-items:center;min-height:44px}
.legal-foot a:not(.link):hover{color:var(--line)}
.legal-foot span{margin-left:auto;font-size:.84rem;color:var(--fg2)}
@media (max-width:560px){.legal-doc dl{grid-template-columns:1fr;gap:0}.legal-doc dd+dt{margin-top:10px}.legal-foot span{margin-left:0;flex-basis:100%}}
