:root{
  --bg:#111111; --bg-2:#181818; --card:#161616;
  --ink:#EDEAE4; --ink-2:#8C8A86; --ink-3:#5E5C59;
  --rule:rgba(237,234,228,.10); --rule-2:rgba(237,234,228,.18);
  --mint:#7EE0B5; --violet:#9B87F5; --beige:#E6E0D4;
  --serif:"Newsreader",Georgia,serif;
  --sans:"Inter",system-ui,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,monospace;
  --pad:48px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;scroll-behavior:smooth;scroll-padding-top:76px}
body{background:var(--bg);min-height:100vh;overflow-x:hidden;line-height:1.55;font-size:16px}
a{color:inherit;text-decoration:none}
a:focus-visible,[tabindex]:focus-visible,summary:focus-visible,button:focus-visible{outline:1.5px solid var(--mint);outline-offset:4px}
h1,h2{font-family:var(--serif);font-weight:300;letter-spacing:-.02em}
h2 span,.statement span{color:var(--ink-3)}
h3{font-weight:500;letter-spacing:-.01em}

/* small mono labels with a dot (aethr) */
.label{display:inline-flex;align-items:baseline;gap:12px;font-family:var(--serif);font-style:italic;font-weight:300;font-size:19px;letter-spacing:0;color:var(--ink-2);margin-bottom:18px}
.label::before{content:"";align-self:center;width:22px;height:1px;background:var(--ink-3)}
.num{font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:var(--ink-2)}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:22px;padding:11px 16px;border:1px solid var(--rule-2);border-radius:4px;font-size:14px;transition:border-color .2s,background .2s}
.btn:hover{border-color:var(--ink-2)}
.btn.light{background:var(--beige);color:#141414;border-color:var(--beige)}
.btn.light:hover{background:#f2ede3}
.btn span{font-size:13px}
.cta{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}

/* nav */
nav{position:fixed;inset:0 0 auto 0;display:flex;align-items:center;gap:32px;padding:14px var(--pad);z-index:20;font-size:13px;
  background:rgba(17,17,17,.72);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--rule)}
nav .wordmark{font-family:var(--serif);font-size:19px;letter-spacing:-.01em;margin-right:auto}
nav ul{display:flex;gap:4px;list-style:none}
nav li a{display:block;padding:6px 11px;color:var(--ink-2);border-radius:4px;transition:color .2s,background .2s}
nav li a:hover{color:var(--ink);background:rgba(237,234,228,.06)}
.nav-cta{padding:8px 13px;font-size:13px;gap:14px}
.menu-btn{display:none;background:none;border:1px solid var(--rule-2);border-radius:4px;color:var(--ink);font:12px var(--mono);padding:7px 12px;cursor:pointer}

/* hero (synaptrix visual + aethr type) */
.hero{position:relative;min-height:100vh;overflow:hidden;display:flex;align-items:stretch}
#neural{position:absolute;inset:0;width:100%;height:100%}
.hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(90deg,rgba(17,17,17,.75) 0%,rgba(17,17,17,.25) 45%,rgba(17,17,17,0) 65%),linear-gradient(0deg,var(--bg) 0%,rgba(17,17,17,0) 30%)}
.hero-in{position:relative;z-index:2;width:100%;display:flex;flex-direction:column;justify-content:space-between;padding:130px var(--pad) 72px}
.hero h1{font-size:clamp(64px,10vw,152px);line-height:.9;letter-spacing:-.035em}
.hero-side{align-self:flex-end;max-width:400px}
.hero-side p{font-size:16px;color:var(--ink);line-height:1.55}

.ticker{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);overflow:hidden;padding:15px 0}
.track{display:flex;width:max-content;animation:tick 42s linear infinite}
.track span{font-family:var(--serif);font-weight:300;font-size:clamp(20px,2.2vw,28px);padding:0 24px;white-space:nowrap;color:var(--ink-2)}
.track span::after{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--violet);margin-left:48px;vertical-align:middle}
@keyframes tick{to{transform:translateX(-50%)}}

/* dotted pixel band (aethr) */
.band{height:64px;margin:110px 0 0;opacity:.55;
  background-image:radial-gradient(circle,rgba(237,234,228,.35) 1px,transparent 1.4px);background-size:6px 6px;
  -webkit-mask-image:repeating-linear-gradient(90deg,#000 0 46px,transparent 46px 70px,#000 70px 88px,transparent 88px 150px,#000 150px 230px,transparent 230px 262px),linear-gradient(0deg,transparent,#000 30%,#000 70%,transparent);
  -webkit-mask-composite:source-in;mask-composite:intersect;
  mask-image:repeating-linear-gradient(90deg,#000 0 46px,transparent 46px 70px,#000 70px 88px,transparent 88px 150px,#000 150px 230px,transparent 230px 262px),linear-gradient(0deg,transparent,#000 30%,#000 70%,transparent)}

/* sections */
main{max-width:1240px;margin:0 auto;padding:0 var(--pad)}
section{padding:120px 0 0}
section h2{font-size:clamp(38px,4.6vw,64px);line-height:1.02;max-width:20ch;margin-bottom:56px}

/* about */
.statement{font-size:clamp(34px,4.2vw,60px);line-height:1.08;max-width:22ch;margin-bottom:72px}
.pillars{display:grid;grid-template-columns:repeat(3,1fr);gap:0}
.pillars>div{border-left:1px solid var(--rule);padding:4px 32px 4px 24px}
.pillars h3{font-size:19px;margin:16px 0 8px}
.pillars p{color:var(--ink-2);font-size:15px}

.bridge{margin-top:88px;border:1px solid var(--rule);background:var(--bg-2);position:relative;padding:40px 40px 48px}
.bridge::before,.bridge::after{content:"";position:absolute;top:-1px;bottom:-1px;width:14px;border:1px solid var(--ink-2)}
.bridge::before{left:-1px;border-right:0}
.bridge::after{right:-1px;border-left:0}
.bridge-head{display:grid;grid-template-columns:200px 1fr;gap:24px;align-items:baseline;margin-bottom:44px}
.bridge-head .label{margin:0}
.bridge-head p{font-family:var(--serif);font-weight:300;font-size:clamp(22px,2.2vw,30px);line-height:1.25;max-width:34ch}
.diagram{position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:40px;padding:10px 0;
  background-image:radial-gradient(circle,rgba(237,234,228,.12) 1px,transparent 1.3px);background-size:14px 14px}
.wires{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.wires .w{fill:none;stroke:rgba(237,234,228,.22);stroke-width:1}
.wires .p{fill:none;stroke:var(--mint);stroke-width:1.4;stroke-dasharray:6 160;animation:pulse 3.2s linear infinite}
.wires path.p:nth-of-type(4n){animation-delay:-.8s;stroke:var(--violet)}
.wires path.p:nth-of-type(4n+2){animation-delay:-1.9s}
@keyframes pulse{from{stroke-dashoffset:166}to{stroke-dashoffset:0}}
.side{position:relative;z-index:1;display:flex;flex-direction:column;gap:14px}
.tech{align-items:flex-start}.biz{align-items:flex-end}
.side-name{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);margin-bottom:4px}
.node{font-family:var(--mono);font-size:12px;padding:7px 12px;border:1px solid var(--rule-2);background:var(--bg);border-radius:3px;white-space:nowrap}
.core{position:relative;z-index:1}
.node.me{display:grid;place-items:center;width:84px;height:84px;border-radius:50%;padding:0;border-color:var(--mint);font-family:var(--serif);font-size:22px;
  box-shadow:0 0 0 6px rgba(126,224,181,.08),0 0 40px rgba(126,224,181,.18)}

.figures{display:grid;grid-template-columns:repeat(4,1fr);margin-top:72px;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);font-family:var(--mono);font-size:11px;color:var(--ink-2);letter-spacing:.04em}
.figures>div{padding:26px 24px 24px 0}
.figures>div+div{padding-left:24px;border-left:1px solid var(--rule)}
.figures b{display:block;font-family:var(--serif);font-weight:300;font-size:44px;color:var(--ink);line-height:1.05;margin-bottom:6px;letter-spacing:-.02em}
.figures.small{margin:-24px 0 48px}
.jintro,.intro{max-width:60ch;color:var(--ink-2);font-size:17px;line-height:1.6;margin:-28px 0 40px}
.jintro+.figures.small{margin-top:0}
.now{margin-top:26px;color:var(--ink-2);font-size:15px}
.now b{color:var(--ink);font-weight:500}
.now a{font-family:var(--mono);font-size:12px;color:var(--mint);margin-left:6px}

/* experience */
.timeline{list-style:none;border-top:1px solid var(--rule)}
.timeline li{display:grid;grid-template-columns:140px 1fr;gap:32px;padding:26px 0;border-bottom:1px solid var(--rule)}
.timeline time{font-family:var(--mono);font-size:12px;color:var(--ink-2);padding-top:4px}
.timeline h3{font-size:18px;line-height:1.3}
.timeline small{display:block;color:var(--ink-2);font-size:14px;margin:3px 0 8px}
.timeline p{font-size:15px;line-height:1.6;max-width:70ch;color:#C9C6C0}
.roles{list-style:none;margin-top:14px;border-left:1px solid var(--rule-2);padding-left:22px;display:flex;flex-direction:column;gap:22px}
.roles li{display:block;padding:0;border:0}
.roles .when{display:block;font-family:var(--mono);font-size:11.5px;color:var(--ink-2);margin-bottom:4px}
.roles h4{font-size:17px;font-weight:500;line-height:1.3;margin-bottom:6px}
.edu{margin-top:72px}

/* builds (synaptrix cards) */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.card{border:1px solid var(--rule);background:var(--card);display:flex;flex-direction:column;overflow:hidden}
.art{display:block;position:relative;aspect-ratio:16/10;background:#0B0B0C;border-bottom:1px solid var(--rule)}
.art canvas{position:absolute;inset:0;width:100%;height:100%}
.tag{position:absolute;left:12px;top:10px;font-family:var(--mono);font-size:10px;letter-spacing:.06em;color:var(--ink-2)}
.body{flex:1;display:flex;flex-direction:column;padding:22px 22px 20px;background:linear-gradient(180deg,rgba(var(--tint),.10),rgba(var(--tint),.03))}
.live{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10.5px;letter-spacing:.05em;color:var(--mint)}
.live::before{content:none}
.live.muted{color:var(--ink-2)}
.card h3{font-family:var(--serif);font-weight:400;font-size:25px;line-height:1.1;letter-spacing:-.015em;margin:12px 0 8px}
.card p{font-size:14.5px;line-height:1.55;color:#C9C6C0}
details{margin-top:14px}
summary{cursor:pointer;list-style:none;font-family:var(--mono);font-size:11px;color:var(--ink-2)}
summary::-webkit-details-marker{display:none}
summary::before{content:"+ ";color:var(--mint)}
details[open] summary::before{content:"− "}
.flow{margin:12px 0 0 18px;color:var(--ink-2);font-size:13.5px;line-height:1.5}
.flow li{padding:3px 0 3px 4px}
.flow li::marker{font-family:var(--mono);font-size:11px;color:var(--mint)}
.stack{display:flex;flex-wrap:wrap;gap:5px;margin-top:auto;padding-top:18px;list-style:none}
.stack li{font-family:var(--mono);font-size:10.5px;padding:4px 8px;border:1px solid var(--rule-2);border-radius:3px;color:var(--ink-2)}
.toolkit{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin-top:44px;border-top:1px solid var(--rule)}
.toolkit>div{padding:20px 28px 0 0}
.toolkit>div+div{padding-left:24px;border-left:1px solid var(--rule)}
.toolkit p{margin-top:8px;font-size:14px;color:#C9C6C0;line-height:1.65}

/* journeys */
.jwrap{display:grid;grid-template-columns:1.05fr 1fr;gap:56px;align-items:start}
.jglobe{position:sticky;top:90px;aspect-ratio:1;max-height:calc(100vh - 120px)}
#globe{width:100%;height:100%;display:block}
.jglobe .leg{position:absolute;left:0;bottom:0;font-family:var(--mono);font-size:11px;color:var(--mint)}
.places{list-style:none;border-top:1px solid var(--rule)}
.places li{padding:20px 18px;border-bottom:1px solid var(--rule);cursor:pointer;transition:background .25s;border-left:1px solid transparent}
.places li:hover{background:rgba(237,234,228,.03)}
.places li.active{background:var(--bg-2);border-left-color:var(--mint)}
.where{font-family:var(--mono);font-size:11px;color:var(--ink-2);letter-spacing:.04em}
.places li.active .where{color:var(--mint)}
.places h3{font-family:var(--serif);font-weight:400;font-size:24px;margin:4px 0 4px}
.places p{color:var(--ink-2);font-size:15px;line-height:1.55}
.places li.active p{color:var(--ink)}

/* bring (inside How I work) */
.bring{margin-top:72px}
.bring>.label{display:block;margin-bottom:18px}
.traits{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--rule)}
.traits>div{padding:26px 28px 28px 0;border-bottom:1px solid var(--rule)}
.traits>div:not(:nth-child(3n+1)){padding-left:24px;border-left:1px solid var(--rule)}
.traits h3{font-family:var(--serif);font-weight:400;font-size:22px;margin-bottom:6px}
.traits p{color:var(--ink-2);font-size:15px}

/* outside */
.hobbies{display:grid;grid-template-columns:repeat(6,1fr);gap:14px}
.hobbies>div{grid-column:span 2}
.hobbies>div:last-child{grid-column:1/-1}
.hobbies>div:last-child .ph{aspect-ratio:16/5}
.hobbies>div{border:1px solid var(--rule);background:var(--card);padding:22px;display:flex;flex-direction:column}
.hobbies h3{font-family:var(--serif);font-weight:400;font-size:24px;margin:10px 0 6px}
.hobbies p{color:var(--ink-2);font-size:14.5px;line-height:1.5}
.ph{margin-top:auto;aspect-ratio:4/3;border:1px dashed var(--rule-2);display:grid;place-items:center;font-family:var(--mono);font-size:10px;color:var(--ink-3);background:#0E0E0F}
.hobbies p{margin-bottom:18px}
.ph.drawn{position:relative;border-style:solid;border-color:var(--rule)}
.ph.drawn canvas{position:absolute;inset:0;width:100%;height:100%}
.ph.pic{border:0;overflow:hidden;position:relative}
.ph.pic>img,.ph.pic>video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.ph.pic>img.tall{object-fit:contain;background:#0B0B0C}
.ph.pic.cycling{cursor:pointer}
.ph.pic.cycling>img,.ph.pic.cycling>video{opacity:0;transition:opacity .9s}
.ph.pic.cycling>.on{opacity:1}
.ph.pic .dots{position:absolute;right:10px;bottom:9px;display:flex;gap:5px;z-index:1}
.ph.pic .dots span{width:5px;height:5px;border-radius:50%;background:rgba(237,234,228,.45)}
.ph.pic .dots span.on{background:var(--mint)}
/* each Journeys card shows one photo beside its text, changing on its own every few seconds */
.places li:has(.pics){display:grid;grid-template-columns:1fr 168px;column-gap:18px;align-items:start}
.places li:has(.pics)>:not(.pics){grid-column:1}
.places .pics{grid-column:2;grid-row:1/span 3;position:relative;aspect-ratio:4/3;overflow:hidden;background:#0B0B0C;border:1px solid var(--rule)}
.places .pics img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;opacity:0;transition:opacity .9s}
.places .pics img.on,.places .pics img:only-child{opacity:1}
.places .pics .dots{position:absolute;right:7px;bottom:6px;display:flex;gap:4px}
.places .pics .dots span{width:4px;height:4px;border-radius:50%;background:rgba(237,234,228,.45)}
.places .pics .dots span.on{background:var(--mint)}

/* contact */
#contact{max-width:1240px;margin:0 auto;padding:110px var(--pad) 120px}
#contact h2{font-size:clamp(40px,5.4vw,80px);line-height:1;max-width:16ch;margin-bottom:0}
footer{padding:28px var(--pad);font-family:var(--mono);font-size:11px;color:var(--ink-2);display:flex;justify-content:space-between;border-top:1px solid var(--rule)}

@media (max-width:1100px){
  .cards{grid-template-columns:repeat(2,1fr)}
  .hobbies{grid-template-columns:repeat(2,1fr)}
  .hobbies>div,.hobbies>div:nth-child(n+4){grid-column:auto}
  .hobbies>div:last-child{grid-column:1/-1}
  .menu-btn{display:block}
  nav ul{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;background:var(--bg);border-bottom:1px solid var(--rule);padding:6px var(--pad) 12px}
  nav.open ul{display:flex}
  nav ul li a{padding:12px 0;font-size:17px;color:var(--ink)}
  nav ul li a:hover{background:none}
}
@media (max-width:860px){
  :root{--pad:16px}
  nav{padding:12px var(--pad);gap:10px}
  .nav-cta{display:none}
  .hero{min-height:92vh}
  .hero-in{padding:108px var(--pad) 48px}
  .hero::after{background:linear-gradient(0deg,var(--bg) 8%,rgba(17,17,17,.55) 45%,rgba(17,17,17,.15) 100%)}
  .hero-side{align-self:stretch;max-width:none;margin-top:40px}
  section{padding-top:88px}
  section h2{margin-bottom:36px}
  .statement{margin-bottom:44px}
  .band{margin-top:80px;height:48px}
  .pillars,.cards,.toolkit,.traits,.jwrap{grid-template-columns:1fr}
  .pillars>div{border-left:0;border-top:1px solid var(--rule);padding:20px 0 24px}
  .bridge{padding:28px 18px 32px;margin-top:64px}
  .bridge-head{grid-template-columns:1fr;gap:12px;margin-bottom:32px}
  .diagram{grid-template-columns:1fr;gap:56px;justify-items:center}
  .side{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:8px}
  .tech,.biz{align-items:center}
  .side-name{width:100%;text-align:center}
  .biz .side-name{order:5;margin:4px 0 0}
  .figures{grid-template-columns:repeat(2,1fr)}
  .figures>div{padding:20px 12px 18px 0}
  .figures>div+div{padding-left:0;border-left:0}
  .figures>div:nth-child(even){padding-left:16px;border-left:1px solid var(--rule)}
  .figures>div:nth-child(n+3){border-top:1px solid var(--rule)}
  .figures b{font-size:34px}
  .timeline li{grid-template-columns:1fr;gap:6px}
  .toolkit>div,.toolkit>div+div{padding:18px 0 0;border-left:0}
  .traits>div,.traits>div:not(:nth-child(3n+1)){padding:22px 0;border-left:0}
  .jwrap{gap:24px}
  .jglobe{position:sticky;top:53px;z-index:2;aspect-ratio:auto;max-height:none;height:290px;margin:0 calc(-1 * var(--pad));padding:10px 0 30px;background:var(--bg);border-bottom:1px solid var(--rule)}
  #globe{width:250px;height:250px;margin:0 auto}
  .jglobe .leg{left:0;right:0;bottom:8px;text-align:center}
  .places li{padding:18px 12px}
  .places li:has(.pics){grid-template-columns:1fr 112px;column-gap:12px}
  #contact{padding:80px var(--pad) 80px}
  footer{flex-direction:column;gap:6px}
}
@media (max-width:520px){
  .hobbies{grid-template-columns:1fr}
  .hobbies>div:last-child .ph{aspect-ratio:4/3}
}

/* ===== article: digital twins ===== */
.a-hero{position:relative;min-height:92vh;overflow:hidden;display:flex;align-items:flex-end}
#jet{position:absolute;inset:0;width:100%;height:100%}
.a-hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(0deg,var(--bg) 4%,rgba(17,17,17,.55) 40%,rgba(17,17,17,.1) 75%)}
.a-hero-in{position:relative;z-index:2;max-width:1240px;width:100%;margin:0 auto;padding:120px var(--pad) 64px}
.back{display:block;width:max-content;font-family:var(--mono);font-size:12px;color:var(--ink-2);margin-bottom:26px}
.back:hover{color:var(--ink)}
.a-hero h1{font-size:clamp(46px,6.6vw,104px);line-height:.98;letter-spacing:-.03em;max-width:15ch}
.dek{margin-top:26px;font-size:clamp(17px,1.5vw,20px);line-height:1.55;max-width:56ch;color:#D6D3CD}
.a-body{max-width:1240px;margin:0 auto;padding:0 var(--pad)}
.a-body>.figures{margin-top:24px}
.chapter{padding-top:110px}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:start}
.prose p{font-size:17px;line-height:1.7;color:#D6D3CD;max-width:60ch}
.prose p+p{margin-top:16px}
.src{display:block;margin-top:14px;font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}

/* bar charts: values always sit outside the bar */
.chart,.funnel{border:1px solid var(--rule);background:var(--bg-2);padding:26px 26px 22px}
.chart figcaption,.funnel figcaption{margin-bottom:22px;display:block}
.bar-row,.f-row{display:grid;grid-template-columns:56px 1fr;gap:14px;align-items:center;margin-bottom:14px}
.f-row{grid-template-columns:150px 1fr}
.yr,.f-row>span{font-family:var(--mono);font-size:12px;color:var(--ink-2)}
.bt{display:flex;align-items:center;gap:10px;min-width:0}
.bt .fill{height:26px;max-width:calc(100% - 64px);background:rgba(155,135,245,.55);border-radius:2px}
.bt .fill.hot{background:var(--mint)}
.bt b{font-family:var(--serif);font-weight:400;font-size:20px;white-space:nowrap}
.f-row .bt .fill{height:18px}
.f-row .bt b{font-size:17px}

.callout{border:1px solid var(--rule);border-left:2px solid var(--mint);background:var(--bg-2);padding:28px 30px}
.callout b{display:block;font-family:var(--serif);font-weight:300;font-size:clamp(48px,5vw,72px);line-height:1;letter-spacing:-.02em}
.callout p{margin-top:12px;font-size:17px;color:#D6D3CD;max-width:30ch}

.framework{margin-top:48px;border:1px solid var(--rule);background:var(--bg-2);padding:34px 34px 38px}
.fw-head{max-width:72ch;margin-bottom:34px}
.fw-head h3{font-family:var(--serif);font-weight:400;font-size:clamp(24px,2.4vw,32px);line-height:1.15;margin:10px 0 12px}
.fw-head p{font-size:16px;line-height:1.65;color:#C9C6C0}
.loop-wrap{display:grid;grid-template-columns:minmax(260px,400px) 1fr;gap:56px;align-items:center}
.loop{position:relative;aspect-ratio:1;width:100%}
.loop svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.ring{fill:none;stroke:rgba(237,234,228,.2);stroke-width:.4}
.ring-pulse{fill:none;stroke:var(--mint);stroke-width:.8;stroke-dasharray:12 227;stroke-linecap:round;animation:ring 6s linear infinite;transform-origin:50% 50%;transform:rotate(-90deg)}
@keyframes ring{to{stroke-dashoffset:-239}}
.core-label{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-family:var(--serif);font-size:22px;padding:22px 18px;border-radius:50%;border:1px solid var(--mint);background:var(--bg);box-shadow:0 0 40px rgba(126,224,181,.18);white-space:nowrap}
.lnode{position:absolute;transform:translate(-50%,-50%);font-family:var(--mono);font-size:11px;padding:6px 10px;border:1px solid var(--rule-2);background:var(--bg);border-radius:3px;white-space:nowrap}
.steps{list-style:none;counter-reset:s}
.steps li{counter-increment:s;position:relative;padding:12px 0 12px 36px;border-top:1px solid var(--rule);font-size:15.5px;line-height:1.55;color:#C9C6C0}
.steps li::before{content:counter(s,decimal-leading-zero);position:absolute;left:0;top:16px;font-family:var(--mono);font-size:11px;color:var(--mint)}
.steps b{color:var(--ink);font-weight:500}
.pipe{display:grid;grid-template-columns:1fr auto 1fr auto 1fr auto 1fr;gap:16px;align-items:center;
  padding:24px 18px;background-image:radial-gradient(circle,rgba(237,234,228,.1) 1px,transparent 1.3px);background-size:14px 14px}
.stage{display:flex;flex-direction:column;gap:8px}
.stage .num{margin-bottom:4px}
.pipe .node{text-align:center}
.pipe .node.hot{border-color:var(--mint);box-shadow:0 0 24px rgba(126,224,181,.14)}
.pipe .arrow{font-family:var(--mono);color:var(--mint);font-size:16px}

.hurdles{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--rule)}
.hurdles>div{padding:24px 28px 26px 0;border-bottom:1px solid var(--rule)}
.hurdles>div+div{padding-left:24px;border-left:1px solid var(--rule)}
.hurdles h3{font-family:var(--serif);font-weight:400;font-size:23px;margin:10px 0 8px}
.hurdles p{font-size:15px;line-height:1.6;color:var(--ink-2)}

.then-now{display:grid;grid-template-columns:1fr auto 1fr;gap:28px;align-items:center}
.then-now>div:not(.arrow){border:1px solid var(--rule);background:var(--bg-2);padding:26px}
.then-now p{font-family:var(--serif);font-weight:300;font-size:clamp(20px,1.9vw,26px);line-height:1.3;margin-top:10px}
.then-now .arrow{font-family:var(--mono);color:var(--mint);font-size:20px}
.a-cta{display:flex;flex-wrap:wrap;gap:10px;margin-top:90px;padding-top:30px;border-top:1px solid var(--rule)}
.cite{margin:18px 0 110px;font-size:13px;color:var(--ink-3);max-width:80ch;line-height:1.6}

/* card link to the article */
.card .more{display:inline-block;margin-top:14px;font-family:var(--mono);font-size:11px;color:var(--mint)}
.card .more:hover{text-decoration:underline}
.card.linked .art{cursor:pointer}

@media (max-width:860px){
  .a-hero{min-height:86vh}
  .a-hero-in{padding:96px var(--pad) 40px}
  .chapter{padding-top:80px}
  .cols,.loop-wrap,.hurdles{grid-template-columns:1fr;gap:32px}
  .framework{padding:24px 18px 26px}
  .loop{max-width:320px;margin:0 auto}
  .lnode{font-size:10px;padding:4px 7px}
  .core-label{font-size:18px;padding:16px 12px}
  .pipe{grid-template-columns:1fr;gap:10px;padding:18px 12px}
  .pipe .arrow{transform:rotate(90deg);justify-self:center}
  .hurdles>div,.hurdles>div+div{padding:22px 0;border-left:0}
  .then-now{grid-template-columns:1fr;gap:12px}
  .then-now .arrow{transform:rotate(90deg);justify-self:center}
  .f-row{grid-template-columns:110px 1fr}
}

@media (prefers-reduced-motion:reduce){.track,.wires .p,.ring-pulse{animation:none}html{scroll-behavior:auto}}

/* Ask about Efe chat */
.chat-launch{position:fixed;right:20px;bottom:20px;z-index:60;display:inline-flex;align-items:center;gap:10px;padding:12px 16px;border:1px solid var(--rule-2);border-radius:999px;background:rgba(24,24,24,.92);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);color:var(--ink);font:500 14px var(--sans);cursor:pointer;transition:border-color .2s}
.chat-launch:hover,.chat-launch.on{border-color:var(--mint)}
.chat-launch .dot{width:7px;height:7px;border-radius:50%;background:var(--mint);box-shadow:0 0 0 4px rgba(126,224,181,.15)}
.chat{position:fixed;right:20px;bottom:76px;z-index:60;width:min(380px,calc(100vw - 32px));height:min(560px,calc(100vh - 120px));display:flex;flex-direction:column;background:var(--bg-2);border:1px solid var(--rule-2);border-radius:10px;box-shadow:0 24px 60px rgba(0,0,0,.5);overflow:hidden}
.chat[hidden]{display:none}
.chat header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 16px;border-bottom:1px solid var(--rule)}
.chat header b{font-family:var(--serif);font-weight:400;font-size:20px;display:block}
.chat header small{display:block;font-family:var(--mono);font-size:10px;color:var(--ink-3);margin-top:2px;letter-spacing:.02em}
.chat-x{background:none;border:0;color:var(--ink-2);font-size:22px;line-height:1;cursor:pointer;padding:2px 4px}
.chat-x:hover{color:var(--ink)}
.chat-log{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px}
.msg{max-width:88%;padding:9px 12px;border-radius:8px;font-size:14.5px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}
.msg.assistant{align-self:flex-start;background:var(--card);border:1px solid var(--rule)}
.msg.user{align-self:flex-end;background:rgba(126,224,181,.12);border:1px solid rgba(126,224,181,.25)}
.msg.typing::after{content:"···";color:var(--ink-3);letter-spacing:2px;animation:chatdots 1.2s infinite}
@keyframes chatdots{50%{opacity:.3}}
.chat-chips{display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 12px}
.chat-chips[hidden]{display:none}
.chat-chips button{background:none;border:1px solid var(--rule-2);border-radius:999px;color:var(--ink-2);font:13px var(--sans);padding:6px 10px;cursor:pointer;text-align:left}
.chat-chips button:hover{border-color:var(--mint);color:var(--ink)}
.chat-form{display:flex;gap:8px;padding:12px;border-top:1px solid var(--rule)}
.chat-form input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--rule-2);border-radius:6px;color:var(--ink);font:14.5px var(--sans);padding:10px 12px}
.chat-form input:focus{outline:none;border-color:var(--mint)}
.chat-form button{background:var(--beige);color:#141414;border:0;border-radius:6px;font:500 14px var(--sans);padding:0 14px;cursor:pointer}
.chat-form.busy button{opacity:.5;pointer-events:none}
.chat-left{margin:-4px 12px 10px;font-family:var(--mono);font-size:10px;color:var(--ink-3)}
.chat-left[hidden]{display:none}
@media (max-width:520px){.chat-launch{right:16px;bottom:16px}.chat{right:16px;bottom:70px}}
@media (prefers-reduced-motion:reduce){.msg.typing::after{animation:none}}

/* airline twin simulator (digital-twins page) */
.sim-intro{font-size:17px;line-height:1.7;color:#D6D3CD;max-width:68ch;margin:-28px 0 36px}
.sim{border:1px solid var(--rule);background:var(--bg-2);padding:28px 28px 24px}
.sim-ctrl{display:grid;grid-template-columns:1fr 1fr;gap:20px 48px}
.sim-ctrl label{display:grid;grid-template-columns:1fr auto;gap:4px 12px;align-items:baseline}
.sim-ctrl .big{font-family:var(--serif);font-weight:300;font-size:clamp(26px,2.6vw,36px);color:var(--ink);text-align:right}
.sim-ctrl input{grid-column:1/-1;width:100%;accent-color:var(--mint);margin-top:6px}
.sim-ctrl small{grid-column:1/-1;color:var(--ink-3)}
.sim-time{display:flex;align-items:center;gap:14px;margin:26px 0 14px}
.sim-time #simMonth{min-width:11ch;color:var(--ink)}
.prog{flex:1;height:2px;background:var(--rule)}
.prog i{display:block;height:100%;width:0;background:var(--mint)}
.replay{background:none;border:1px solid var(--rule-2);border-radius:4px;color:var(--ink-2);padding:6px 10px;cursor:pointer}
.replay:hover{color:var(--ink);border-color:var(--ink-2)}
.fleets{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.fleet-box{border:1px solid var(--rule);background:var(--bg);padding:18px 18px 14px}
.fleet-box.on{border-color:rgba(126,224,181,.35)}
.fb-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 12px;margin-bottom:12px}
.fb-head h3{font-family:var(--serif);font-weight:400;font-size:24px}
.fleet-box canvas{display:block;width:100%;height:260px}
.fleet-box dl{display:flex;gap:28px;margin-top:12px;padding-top:12px;border-top:1px solid var(--rule)}
.fleet-box dt{font-family:var(--mono);font-size:10px;color:var(--ink-2)}
.fleet-box dd{font-family:var(--serif);font-weight:300;font-size:30px;line-height:1.1}
.fleet-box.off dd:first-child,#offGround,#onGround{color:#FF7A6B}
dd.mint{color:var(--mint)}
.legend{display:flex;flex-wrap:wrap;gap:6px 20px;margin-top:12px;color:var(--ink-2)}
.legend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:-1px}
.dot.idle{background:rgba(237,234,228,.35)}.dot.red{background:#FF7A6B}.dot.mint{background:var(--mint)}
.verdict{display:grid;grid-template-columns:1.1fr 1fr;gap:14px;margin-top:22px}
.v-main{border:1px solid rgba(126,224,181,.35);background:var(--bg);padding:24px}
.v-main>b{display:block;font-family:var(--serif);font-weight:300;font-size:clamp(56px,7vw,96px);line-height:1;color:var(--mint);letter-spacing:-.02em;margin:8px 0 22px}
.v-bars{display:grid;gap:12px}
.vb{display:grid;grid-template-columns:1fr auto;gap:6px 12px;align-items:center}
.vb .num{grid-column:1/-1}
.vb .vtrack{height:10px;background:rgba(237,234,228,.06)}
.vb .vtrack i{display:block;height:100%;transition:width .5s}
.vb .full{width:100%;background:#FF7A6B}.vb .part{background:var(--mint)}
.vb b{font-family:var(--mono);font-weight:400;font-size:13px;min-width:7ch;text-align:right}
.v-tiles{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.v-tiles>div{border:1px solid var(--rule);background:var(--bg);padding:18px}
.v-tiles b{display:block;font-family:var(--serif);font-weight:300;font-size:clamp(30px,3vw,42px);line-height:1.05}
.v-tiles span{display:block;margin-top:6px;font-size:13.5px;color:var(--ink-2);line-height:1.4}
.how{margin-top:18px;border-top:1px solid var(--rule);padding-top:14px}
.how summary{cursor:pointer;color:var(--ink-2)}
.how summary:hover{color:var(--ink)}
.how ul{margin:14px 0 0 18px;display:grid;gap:8px;font-size:14px;line-height:1.55;color:#C9C6C0;max-width:80ch}
.how em{font-style:normal;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-left:4px}
.how a{color:var(--mint);text-decoration:underline;text-underline-offset:2px}
@media (max-width:860px){
  .sim{padding:18px 14px}
  .sim-intro{margin-top:-12px}
  .sim-ctrl,.fleets,.verdict{grid-template-columns:1fr}
  .fleet-box canvas{height:200px}
  .fleet-box dl{gap:18px}
  .fleet-box dd{font-size:24px}
}

/* direct link to the twin simulator, under the builds */
.sim-link{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:6px 24px;margin-top:14px;padding:22px 26px;border:1px solid rgba(126,224,181,.35);background:var(--bg-2);transition:border-color .2s,background .2s}
.sim-link:hover{border-color:var(--mint);background:#1b1d1c}
.sim-link .num{color:var(--mint)}
.sl-title{font-family:var(--serif);font-size:clamp(20px,2vw,26px);line-height:1.2}
.sl-sub{grid-column:2;font-size:14px;color:var(--ink-2)}
.sl-go{grid-row:1/3;grid-column:3;font-family:var(--mono);font-size:12px;color:var(--mint);white-space:nowrap}
@media (max-width:860px){.sim-link{grid-template-columns:1fr;padding:18px}.sl-sub,.sl-go{grid-column:auto;grid-row:auto}}

.mores{display:flex;flex-wrap:wrap;gap:4px 22px}
button.more{background:none;border:0;padding:0;cursor:pointer;text-align:left;align-self:flex-start}

/* epicycles toy (epicycles.html) */
.epi-page{max-width:1240px;margin:0 auto;padding:120px var(--pad) 40px}
.epi-page h1{font-size:clamp(44px,6vw,92px);line-height:1;letter-spacing:-.03em}
.epi-page h1 span{color:var(--ink-3)}
.epi{display:grid;grid-template-columns:1fr 320px;gap:14px;margin-top:48px}
.epi-stage{position:relative;border:1px solid var(--rule);background:radial-gradient(ellipse at 50% 45%,#161618,#0c0c0d 70%);min-height:560px;overflow:hidden}
.epi-stage canvas{position:absolute;inset:0;width:100%;height:100%;touch-action:none}
.epi-eq{position:absolute;left:20px;top:18px;font-family:var(--serif);font-size:20px;color:var(--ink-2);pointer-events:none}
.epi-eq .sum{font-size:26px;vertical-align:-3px}
.epi-eq>div+div{margin-top:4px}
.epi-eq[hidden]{display:none}
.epi-eq[data-mode=two]{font-size:13.5px;left:16px;top:14px}
.epi-read{position:absolute;right:22px;bottom:18px;text-align:right;pointer-events:none}
.epi-read b{display:block;font-family:var(--serif);font-weight:300;font-size:clamp(30px,3.4vw,46px);line-height:1}
.epi-read b span{color:#F5A97F}
.epi-read>span{font-family:var(--serif);font-size:16px;color:var(--ink-2)}
.epi-status{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-family:var(--mono);font-size:12px;color:var(--ink);background:rgba(17,17,17,.8);border:1px solid var(--rule-2);padding:10px 14px;border-radius:4px;text-align:center;max-width:80%}
.epi-side{border:1px solid var(--rule);background:var(--bg-2);padding:18px;display:flex;flex-direction:column;gap:18px}
.epi-tabs{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--rule-2);border-radius:4px;overflow:hidden}
.epi-tabs button{background:none;border:0;color:var(--ink-2);font:12px var(--mono);padding:9px 0;cursor:pointer}
.epi-tabs button+button{border-left:1px solid var(--rule-2)}
.epi-tabs button[aria-selected=true]{background:var(--beige);color:#111}
.epi-pane{display:grid;gap:10px}
.epi-pane[hidden]{display:none}
.epi-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.epi-side input:not([type]),.epi-side input[type=text],.epi-side select{flex:1;min-width:0;background:var(--bg);color:var(--ink);border:1px solid var(--rule-2);border-radius:4px;padding:10px 12px;font:15px var(--sans)}
.epi-side input[type=range]{width:100%;accent-color:var(--mint)}
.epi-side .btn{cursor:pointer;font:inherit;font-size:14px;color:var(--ink);background:none;gap:12px}
.epi-side .btn.light{background:var(--beige);color:#111;border-color:var(--beige)}
.epi-side .btn.on{border-color:var(--mint);color:var(--mint)}
.epi-drop{display:grid;gap:4px;border:1px dashed var(--rule-2);border-radius:4px;padding:16px;text-align:center;cursor:pointer}
.epi-drop:hover{border-color:var(--ink-2)}
.epi-drop input{display:none}
.epi-drop span{font-size:15px}
.epi-drop small{color:var(--ink-3)}
.epi-chips{display:flex;flex-wrap:wrap;gap:6px}
.epi-chips button{background:var(--bg);border:1px solid var(--rule-2);border-radius:20px;color:var(--ink);padding:7px 12px;font:13px var(--sans);cursor:pointer}
.epi-chips button:hover{border-color:var(--mint);color:var(--mint)}
.epi-help{font-size:14px;color:var(--ink-2);line-height:1.5}
.epi-ctrl{display:grid;gap:10px;margin-top:auto;padding-top:16px;border-top:1px solid var(--rule)}
.epi-ctrl label small{color:var(--ink-3)}
.epi-svg{justify-content:center}
.epi-how{display:grid;grid-template-columns:repeat(3,1fr);margin-top:56px;border-top:1px solid var(--rule)}
.epi-how>div{padding:24px 28px 24px 0}
.epi-how>div+div{padding-left:24px;border-left:1px solid var(--rule)}
.epi-how h3{font-family:var(--serif);font-weight:400;font-size:23px;margin:10px 0 8px}
.epi-how p{font-size:15px;line-height:1.6;color:var(--ink-2)}
.epi-why{margin-top:28px;font-size:16px;line-height:1.6;color:#C9C6C0;max-width:70ch}
.epi-why a{color:var(--mint);text-decoration:underline;text-underline-offset:2px}
@media (max-width:960px){
  .epi{grid-template-columns:1fr}
  .epi-stage{min-height:0;height:62vh;max-height:520px}
}
@media (max-width:860px){
  .epi-page{padding:96px var(--pad) 32px}
  .epi-how{grid-template-columns:1fr}
  .epi-how>div,.epi-how>div+div{padding:20px 0;border-left:0;border-bottom:1px solid var(--rule)}
  .epi-eq{font-size:16px;left:14px;top:12px}
}


/* Fourier drawing tool that travels down the page (fourier-widget.js) */
.fw-tool{position:absolute;left:0;top:0;z-index:40;pointer-events:none;opacity:0;visibility:hidden;transform-origin:center;border:1px solid var(--rule-2);border-radius:8px;background:rgba(17,17,17,.82);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:0 18px 50px rgba(0,0,0,.45)}
.fw-tool canvas{display:block}
.fw-cap{position:absolute;left:12px;bottom:8px;font-family:var(--mono);font-size:10px;color:var(--ink-3)}
.fw-spot{position:absolute;margin:0;opacity:0;transition:opacity .8s ease;pointer-events:none}
.fw-spot.on{opacity:1}
.fw-spot canvas{display:block}
.fw-spot a{display:block;margin-top:8px;font-family:var(--mono);font-size:10px;line-height:1.5;color:var(--ink-3);pointer-events:auto;text-align:center}
.fw-spot a:hover{color:var(--mint)}

/* short intro section */
.intro-cols{display:grid;grid-template-columns:1.5fr 1fr;gap:48px;align-items:end;margin-top:-24px}
.intro-cols p{font-size:18px;line-height:1.7;color:#D6D3CD;max-width:62ch}
.intro-cta{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}
#intro .now{margin-top:40px}
@media (max-width:860px){.intro-cols{grid-template-columns:1fr;gap:24px;margin-top:0}.intro-cta{justify-content:flex-start}}

/* digital twins article: link from the standardisation section to the engine build */
.std-cta{margin-top:22px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--rule);background:var(--bg-2);padding:18px 22px}
.std-cta p{font-size:15.5px;line-height:1.6;color:#C9C6C0;max-width:62ch}
#standardise .pipe{margin-top:28px}

/* hot takes card (last card in Outside work) */
.hobbies>div.takes{display:grid;grid-template-columns:1fr 1fr;gap:18px 36px;align-items:start}
.tk-intro h3{margin-top:10px}
.tk-feature{border-left:2px solid var(--mint);padding:4px 0 2px 14px;margin-top:4px}
.tk-feature p{margin:6px 0 0;color:#D6D3CD;font-size:14.5px;line-height:1.55}
.tk-form{display:grid;gap:10px}
.tk-form textarea,.tk-form select,.tk-form input{width:100%;background:var(--bg);color:var(--ink);border:1px solid var(--rule-2);border-radius:4px;padding:10px 12px;font:14.5px var(--sans);resize:vertical}
.tk-form textarea:focus,.tk-form select:focus,.tk-form input:focus{outline:1.5px solid var(--mint);outline-offset:1px}
.tk-row{display:flex;gap:10px;align-items:center}
.tk-row select{flex:0 0 40%}
.tk-form .btn{cursor:pointer;font:inherit;font-size:14px}
.tk-form .btn.light{background:var(--beige);color:#111;border-color:var(--beige)}
.tk-form .btn:disabled{opacity:.6;cursor:default}
.tk-count{margin-left:auto;color:var(--ink-3)}
.tk-hp{position:absolute!important;left:-9999px;width:1px;height:1px;opacity:0}
.hobbies p.tk-msg{margin:0;min-height:1.4em;font-size:13.5px;color:var(--mint)}
.tk-list{grid-column:1/-1;border-top:1px solid var(--rule);padding-top:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}
.tk-list>.num{grid-column:1/-1}
.tk-item{border:1px solid var(--rule);background:var(--bg);padding:14px}
.hobbies .tk-item p{margin:6px 0 0}
.tk-item .tk-q{color:var(--ink);font-family:var(--serif);font-size:17px}
.tk-item .tk-a{color:var(--ink-2)}
@media (max-width:860px){.hobbies>div.takes{grid-template-columns:1fr}.tk-row{flex-wrap:wrap}.tk-row select{flex:1 1 100%}}
