/* ============================================================
   techpercept.com — styles
   Tokens first. Change a colour or face here and it changes
   everywhere. Named after the Techpercept design system.
   ============================================================ */

/* ===== Faces — self-hosted (assets/fonts), swap so text never waits ===== */
@font-face{font-family:"Archivo";src:url("../fonts/archivo-var.woff2") format("woff2");font-weight:100 900;font-stretch:62% 125%;font-style:normal;font-display:swap}
@font-face{font-family:"Source Sans 3";src:url("../fonts/source-sans-3-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Source Sans 3";src:url("../fonts/source-sans-3-600.woff2") format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url("../fonts/jetbrains-mono-400.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url("../fonts/jetbrains-mono-500.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url("../fonts/jetbrains-mono-700.woff2") format("woff2");font-weight:700;font-style:normal;font-display:swap}

/* ===== Techpercept design system — tokens (Paper theme) ===== */
:root{
  --paper:#F2F1ED; --paper-raised:#F7F6F3;
  --ink:#161A1F; --ink-2:#3A4049; --ink-3:#686E77; --rule:#C9CCD1;
  --leak:#B5412A; --signal:#5FD39A; --signal-text:#2B7656; --signal-soft:rgba(95,211,154,.07); --signal-on-ink:#7FD4A8; --panel-text:#D9DCE0;
  --display:"Archivo","Arial Narrow",Impact,sans-serif; --sans:"Source Sans 3","Segoe UI",system-ui,sans-serif; --mono:"JetBrains Mono","SF Mono",Menlo,Consolas,monospace;
  --s1:8px; --s2:16px; --s3:24px; --s4:40px; --s5:64px; --s6:112px; --station-gap:260px;
  --hair:1px; --drawn:2px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);line-height:1.6;-webkit-font-smoothing:antialiased}
a{color:var(--leak)}a:hover{color:#8E3220}
.wrap{width:100%;max-width:1400px;margin:0 auto;padding:0 var(--s5)}
.mono{font-family:var(--mono)}
.disp{font-family:var(--display);font-stretch:110%;font-weight:700;letter-spacing:-.02em;line-height:1.1}
.eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;display:flex;align-items:center;gap:14px}
.eyebrow::before{content:"";display:inline-block;width:40px;height:1px;background:currentColor}
.btn{display:inline-flex;align-items:center;gap:12px;text-decoration:none;font-weight:600;font-size:16px;padding:18px 26px}
.btn-leak{background:var(--leak);color:var(--paper)}.btn-leak:hover{background:#8E3220;color:var(--paper)}
.btn-ghost{color:var(--ink);padding:18px 8px}.btn-ghost:hover{color:var(--ink)}

/* nav */
nav{display:flex;align-items:center;justify-content:space-between;height:80px;border-bottom:var(--hair) solid var(--ink)}
nav .wm{display:block;height:22px;width:auto}
nav .wm svg{height:22px;width:auto;display:block}
nav ul{display:flex;gap:36px;align-items:center;list-style:none;font-family:var(--mono);font-size:13px}
nav ul a{color:var(--ink);text-decoration:none}nav ul a:hover{color:var(--leak)}
nav ul a.cta{font-weight:600;border:1.5px solid var(--ink);padding:10px 18px;font-family:var(--sans);font-size:14px}
nav ul a.cta:hover{background:var(--ink);color:var(--paper)}
@media(max-width:820px){nav ul li:not(:last-child){display:none}}

/* hero */
.hero{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(480px,100%),1fr));gap:56px;padding:88px 0 0;align-items:start}
.hero .copy{display:flex;flex-direction:column;gap:32px;padding-top:40px}
.hero h1{font-family:var(--display);font-stretch:125%;font-weight:800;font-size:clamp(48px,7vw,84px);line-height:.96;letter-spacing:-.035em}
.hero .lede{font-size:20px;line-height:1.5;max-width:560px;color:var(--ink-2)}
.hero .trust{font-family:var(--mono);font-size:13px;color:var(--ink-3);border-top:var(--hair) solid var(--rule);padding-top:20px;max-width:560px}
.hero .follow{font-family:var(--mono);font-size:12px;color:var(--leak);display:flex;align-items:center;gap:10px}
.hero-draw{position:relative;width:560px;height:520px;max-width:100%}
.src{display:inline-block;transition:opacity .35s}
.src.out{opacity:0}
.fade{position:absolute;left:0;bottom:0;width:100%;height:80px;background:linear-gradient(to bottom,rgba(242,241,237,0),var(--paper))}

/* road */
.road-wrap{position:relative;width:1272px;max-width:100%}
.rail{position:absolute;left:50%;top:0;width:2px;transform:translateX(-50%);background:var(--rule)}
.road{position:absolute;left:50%;top:0;width:2px;height:0;transform:translateX(-50%);transition:height 1.1s cubic-bezier(.4,0,.2,1)}
.st{position:absolute;left:50%;transform:translateX(-50%);width:48px;height:48px;border-radius:50%;border:var(--drawn) solid var(--ink);background:var(--paper-raised);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:13px;font-weight:700;transition:background .5s,border-color .5s,color .5s}
.tok{position:absolute;left:50%;transform:translateX(-50%);width:20px;height:20px;border-radius:50%;border:3px solid var(--paper);opacity:0;transition:top 1.1s cubic-bezier(.4,0,.2,1),opacity .5s}
.cap{opacity:0;transform:translateY(10px);transition:opacity .6s,transform .6s}
.cap.on{opacity:1;transform:none}
.lyr{opacity:0;transform:translateX(-14px);transition:opacity .7s,transform .7s}
.lyr.on{opacity:1;transform:none}
.side{position:absolute;width:480px;display:flex;flex-direction:column;gap:8px}
.side.l{right:calc(50% + 76px);text-align:right;align-items:flex-end}
.side.r{left:calc(50% + 76px)}
/* Act III has 152px cards on the centre line instead of 48px stations: push its captions out */
[data-act="3"] .side.l{right:calc(50% + 116px)}
[data-act="3"] .side.r{left:calc(50% + 116px)}
.side .k{font-family:var(--mono);font-size:12px;letter-spacing:.08em;color:var(--ink-3)}
.side .t{font-size:17px;line-height:1.5;color:var(--ink-2);max-width:480px}
.callout{position:absolute;width:300px;padding:12px 14px;background:var(--paper-raised);font-family:var(--mono);font-size:12px;line-height:17px;color:var(--leak)}
.callout.r{left:calc(50% + 76px);border-left:var(--drawn) solid var(--leak)}
.callout.l{right:calc(50% + 76px);text-align:right;border-right:var(--drawn) solid var(--leak)}
.callout span{color:var(--ink-2)}
.hl{position:relative;display:inline-block;font-weight:600;color:var(--ink);transition:color .4s ease .35s}
.hl::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .7s cubic-bezier(.4,0,.2,1) .35s}
.on .hl::after,.hl.on::after{transform:scaleX(1)}
.hl-red{color:var(--leak)}
.hl-green{color:var(--signal-text)}.hl-green::after{background:var(--signal)}
.hl-light{color:var(--signal-on-ink)}

/* Act I switch: four businesses, one road */
.chips{position:sticky;top:0;z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 0 76px;padding:12px 0;background:var(--paper);border-bottom:var(--hair) solid var(--rule)}
.chips .hint{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin-right:8px;display:flex;align-items:center;gap:10px}
.chips .hint::after{content:"";display:inline-block;width:28px;height:1px;background:currentColor}
.chip{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);background:var(--paper-raised);border:1.5px solid var(--rule);padding:10px 16px 10px 12px;cursor:pointer;font-weight:500;transition:color .2s,border-color .2s,background .2s,transform .2s}
.chip::before{content:"";width:10px;height:10px;border-radius:50%;border:2px solid var(--ink-3);transition:background .2s,border-color .2s,box-shadow .2s}
.chip:hover{border-color:var(--ink);color:var(--ink)}.chip:hover::before{border-color:var(--ink)}
.chip[aria-pressed="true"]{background:var(--leak);border-color:var(--leak);color:var(--paper);transform:translateY(-1px)}
.chip[aria-pressed="true"]::before{background:var(--paper);border-color:var(--paper);box-shadow:0 0 0 3px rgba(242,241,237,.25)}
.chip:focus-visible{outline:2px solid var(--leak);outline-offset:3px}
.intro{margin:14px 0 24px 76px;font-size:17px;line-height:1.5;color:var(--ink-2);max-width:800px;min-height:52px;transition:opacity .25s}
.intro .tag,.sum .tag{font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.sum b{color:var(--ink)}
.sum .more{font-weight:600;font-size:15px;color:var(--signal-text);text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1.5px}
.sum .more:hover{color:var(--ink)}
.callout.ok{color:var(--signal-text);border-color:var(--signal)}
.road-wrap.swap{opacity:0}
.road-wrap{transition:opacity .25s}
.act-head{display:flex;align-items:baseline;gap:20px;padding:40px 0 16px;border-top:var(--hair) solid var(--ink)}
.act-head .n{font-family:var(--display);font-stretch:125%;font-weight:800;font-size:56px;letter-spacing:-.03em;line-height:1}
.act-head h2{font-size:clamp(26px,3.2vw,36px)}
.band{position:absolute;left:40px;right:40px;border:1.5px solid var(--signal);background:var(--signal-soft)}
.band-t{position:absolute;left:60px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--signal-text)}

/* stage chain — the project system's six stages (Act II layer 2, /work pages) */
.chain{display:flex;flex-wrap:wrap;gap:8px 26px;list-style:none;margin-top:14px;font-family:var(--mono);font-size:12px;line-height:1.3;letter-spacing:.03em;color:var(--signal-text)}
.chain li{position:relative;padding:5px 9px;border:1.5px solid currentColor;white-space:nowrap}
.chain li+li::before{content:"→";position:absolute;left:-20px;top:50%;transform:translateY(-50%);border:0}
.side.l .chain{justify-content:flex-end}
.chain-tags{margin-top:12px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
[data-act="2"] .chain{color:var(--signal-on-ink)}
[data-act="2"] .chain-tags{color:var(--panel-text)}
/* Layer 2 labels are light-on-ink: hold them until the ink panel has assembled */
#ly2:not(.on) ~ .side > .k{opacity:0}
#ly2 ~ .side > .k{transition:opacity .5s}
/* stations reveal one by one as the caption arrives (opacity/transform only — composited) */
.cap .chain li{opacity:0;transform:translateY(4px);transition:opacity .4s ease,transform .4s ease}
.cap.on .chain li{opacity:1;transform:none}
.cap.on .chain li:nth-child(2){transition-delay:.08s}.cap.on .chain li:nth-child(3){transition-delay:.16s}
.cap.on .chain li:nth-child(4){transition-delay:.24s}.cap.on .chain li:nth-child(5){transition-delay:.32s}
.cap.on .chain li:nth-child(6){transition-delay:.4s}
.sum{position:absolute;left:0;right:0;display:flex;align-items:baseline;gap:20px;justify-content:center;flex-wrap:wrap;text-align:center;padding:0 var(--s3)}
.card{position:absolute;left:50%;transform:translateX(-50%);width:152px;height:92px;border:var(--drawn) solid var(--ink);background:var(--paper-raised);padding:14px;display:flex;flex-direction:column;justify-content:space-between;transition:border-color .5s}
.card b{font-size:16px}.card small{font-size:12.5px;color:var(--ink-2)}.card .tag{font-family:var(--mono);font-size:10px;color:var(--ink-3)}

/* work pages (/work/…) — same tokens, same act heads, no road */
.page-head{display:flex;flex-direction:column;gap:28px;padding:88px 0 72px;max-width:900px}
.page-head h1{font-family:var(--display);font-stretch:125%;font-weight:800;font-size:clamp(40px,6vw,72px);line-height:.98;letter-spacing:-.035em}
.page-head .lede{font-size:20px;line-height:1.5;max-width:680px;color:var(--ink-2)}
.page-head .trust{font-family:var(--mono);font-size:13px;color:var(--ink-3);border-top:var(--hair) solid var(--rule);padding-top:20px;max-width:680px}
.blk{padding-bottom:72px}
.blk-body{margin-left:76px;display:flex;flex-direction:column;gap:var(--s3);max-width:900px}
.blk-lede{font-size:18px;line-height:1.55;color:var(--ink-2);max-width:760px}
.pts{list-style:none;display:flex;flex-direction:column;gap:var(--s2)}
.pts li{border-left:var(--drawn) solid var(--leak);padding:2px 0 2px var(--s2);font-size:17px;line-height:1.5;color:var(--ink-2)}
.pts b,.steps b{color:var(--ink)}
.steps{list-style:none;counter-reset:st;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(380px,100%),1fr));border:var(--hair) solid var(--ink)}
.steps li{counter-increment:st;display:flex;flex-direction:column;gap:8px;padding:22px;border:var(--hair) solid var(--rule);margin:-.5px;font-size:16px;line-height:1.5;color:var(--ink-2)}
.steps li::before{content:counter(st,decimal-leading-zero);font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.chain-box{padding:24px;background:var(--ink);color:var(--panel-text)}
.chain-box .k{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--signal-on-ink)}
.chain-box .chain{color:var(--signal-on-ink)}
.chain-box .chain-tags{color:var(--panel-text)}
.cov{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(380px,100%),1fr));gap:0;border:var(--hair) solid var(--ink)}
.cov > div{display:flex;flex-direction:column;gap:8px;padding:22px;border:var(--hair) solid var(--rule);margin:-.5px}
.cov .k{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--signal-text)}
.cov p{font-size:16px;line-height:1.5;color:var(--ink-2)}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));border:var(--hair) solid var(--ink)}
.stats > div{display:flex;flex-direction:column;gap:10px;padding:22px;border:var(--hair) solid var(--rule);margin:-.5px}
.stats .v{font-family:var(--display);font-stretch:110%;font-weight:700;font-size:30px;letter-spacing:-.02em;line-height:1.05;color:var(--signal-text)}
.stats-wide{grid-template-columns:1fr}
.stats-wide .v{font-size:38px}
.stats .v i{font-style:normal;color:var(--ink-3);font-weight:400}
.stats .k{font-family:var(--mono);font-size:11.5px;line-height:1.5;color:var(--ink-3)}
.unchanged{border:var(--hair) solid var(--rule);background:var(--paper-raised);padding:20px 22px;display:flex;flex-direction:column;gap:8px}
.unchanged .k{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.unchanged p{font-size:16px;line-height:1.5;color:var(--ink-2)}
.quotes{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(380px,100%),1fr));gap:var(--s3)}
.quotes blockquote{border-left:var(--drawn) solid var(--signal);padding:2px 0 2px var(--s2);display:flex;flex-direction:column;gap:10px}
.quotes p{font-size:18px;line-height:1.5;color:var(--ink)}
.quotes cite{font-style:normal;font-family:var(--mono);font-size:12px;color:var(--ink-3)}
@media(max-width:1100px){.blk-body{margin-left:0}}
@media(max-width:640px){.page-head{padding:56px 0 48px}.page-head .lede{font-size:18px}.chain-box,.steps li,.cov > div{padding:18px}}

/* mobile: stack the road's sides */
@media(max-width:1100px){
  .road-wrap{height:auto!important}
  .rail,.road,.st,.tok,.band,.band-t{display:none}
  .side,.callout,.sum,.card{position:static;width:auto!important;max-width:none!important;text-align:left;align-items:flex-start;transform:none;margin-bottom:var(--s3);padding-left:0;padding-right:0}
  .side.l{text-align:left;align-items:flex-start}
  .side.r{left:auto}
  .callout.l{text-align:left;border-right:0;border-left:var(--drawn) solid var(--leak)}
  .callout.ok{border-color:var(--signal)}
  .chips,.intro{margin-left:0}
  .sum{justify-content:flex-start;text-align:left}
  .sum > span{text-align:left!important;max-width:none!important}
  .card{width:100%;max-width:360px;height:auto;gap:var(--s2)}
  .cap,.lyr{opacity:1;transform:none}
  /* No dark Layer 2 panel here: the layer names become headings, and light-on-ink text turns back to ink */
  .band-t{display:block;position:static;margin:var(--s3) 0 var(--s2);padding-top:var(--s2);border-top:var(--hair) solid var(--rule);color:var(--signal-text)!important}
  [data-act="2"] .side .k{color:var(--signal-text)!important}
  [data-act="2"] .side .t,[data-act="2"] .side.cap{color:var(--ink-2)!important}
  [data-act="2"] .hl-light{color:var(--signal-text)}
  [data-act="2"] .chain{color:var(--signal-text)}
  [data-act="2"] .chain-tags{color:var(--ink-3)}
  .side.l .chain{justify-content:flex-start}
  .cap .chain li{opacity:1;transform:none}
  .m-stack{display:flex;flex-direction:column;gap:var(--s2);padding:var(--s3) 0}
  .m-h{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);padding-top:var(--s2);border-top:var(--hair) solid var(--rule)}
}
/* the hero drawing is a fixed 560px figure — hide it before it can overflow */
@media(max-width:640px){
  .chips .hint{width:100%;margin:0}
  .chip{padding:9px 12px 9px 10px;font-size:12px}
  .hero-draw{display:none}
  .wrap{padding:0 var(--s2)}
  .hero{padding-top:56px}
  .act-head{gap:14px}
  .act-head .n{font-size:44px}
}

/* who / talk */
.two{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(440px,100%),1fr));gap:var(--s5);align-items:start}
.facts{display:flex;flex-direction:column;border:var(--hair) solid var(--ink);align-self:start}
.facts div{padding:26px 22px;display:flex;flex-direction:column;gap:6px}
.facts div+div{border-top:var(--hair) solid var(--ink)}
.facts .v{font-family:var(--display);font-stretch:110%;font-weight:700;font-size:38px;letter-spacing:-.02em;line-height:1}
.facts .k{font-family:var(--mono);font-size:11.5px;color:var(--ink-3)}
form{display:flex;flex-direction:column;gap:14px;border:var(--hair) solid var(--ink);padding:32px 28px;background:var(--paper-raised)}
label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600}
input,select{font-family:inherit;font-size:15px;padding:12px 14px;border:var(--hair) solid var(--ink);background:var(--paper);color:var(--ink);border-radius:0}
input:focus,select:focus{outline:2px solid var(--leak);outline-offset:1px}
button{font-family:inherit;font-size:16px;font-weight:600;padding:16px 24px;background:var(--ink);color:var(--paper);border:0;cursor:pointer;align-self:flex-start}
button:hover{background:var(--leak)}
footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;padding:28px 0 48px;border-top:var(--hair) solid var(--ink);font-family:var(--mono);font-size:12px;color:var(--ink-3)}
@media(prefers-reduced-motion:reduce){.road,.st,.tok,.cap,.lyr,.hl,.hl::after,.card,.road-wrap,.intro,.chain li{transition:none}}
