.logoloop{--logoloop-gap:40px;--logoloop-height:16px;--logoloop-fade:var(--paper);width:100%;position:relative;overflow:hidden}.logoloop__track{will-change:transform;-webkit-user-select:none;user-select:none;width:max-content;display:flex}.logoloop__list{align-items:center;margin:0;padding:0;list-style:none;display:flex}.logoloop__item{margin-right:var(--logoloop-gap);flex:none;line-height:1}.logoloop__node{font-family:var(--font-mono);font-size:var(--logoloop-height);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;transition:color .4s var(--ease-out-expo);align-items:center;gap:12px;display:inline-flex}.logoloop__node:before{content:"";opacity:.5;background:currentColor;flex:none;width:4px;height:4px;transform:rotate(45deg)}.logoloop--paper .logoloop__node{color:var(--muted)}.logoloop--paper .logoloop__item:hover .logoloop__node{color:var(--ac)}.logoloop--ink .logoloop__node{color:var(--muted-dark)}.logoloop--ink .logoloop__item:hover .logoloop__node{color:var(--ac-on-dark)}.logoloop--fade:before,.logoloop--fade:after{content:"";pointer-events:none;z-index:2;width:clamp(40px,12%,160px);position:absolute;top:0;bottom:0}.logoloop--fade:before{background:linear-gradient(to right, var(--logoloop-fade) 0%, transparent 100%);left:0}.logoloop--fade:after{background:linear-gradient(to left, var(--logoloop-fade) 0%, transparent 100%);right:0}@media (prefers-reduced-motion:reduce){html:not([data-motion=force]) .logoloop__track{transform:translate(0,0)!important}}html[data-motion=off] .logoloop__track{transform:translate(0,0)!important}:root{--ac:#2b3fd0;--ac-on-dark:#8e9af0;--paper:#f4f5f8;--paper-alt:#ffffff8c;--card:#fff;--card-alt:#f9fafc;--ink:#14162a;--ink-2:#3a3e55;--muted:#5a5f73;--muted-2:#5f6478;--muted-dark:#a9b1c6;--hairline:#dfe2ea;--hairline-2:#e2e5ec;--hairline-strong:#cdd2de;--ok:#2e9e6a;--ok-dark:#79d6a8;--on-dark:#eff1f6;--on-dark-62:#eff1f69e;--on-dark-70:#eff1f6b3;--on-dark-78:#eff1f6c7;--rule-dark:#ffffff24;--rule-dark-strong:#fff3;--ac-12:color-mix(in oklab, var(--ac) 12%, transparent);--ac-14:color-mix(in oklab, var(--ac) 14%, transparent);--ac-34:color-mix(in oklab, var(--ac) 34%, transparent);--ac-55:color-mix(in oklab, var(--ac) 55%, transparent);--ac-60:color-mix(in oklab, var(--ac) 60%, transparent);--ac-70:color-mix(in oklab, var(--ac) 70%, transparent);--font-display:"Schibsted Grotesk", system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--fs-h1:clamp(46px, 8.2vw, 112px);--fs-h2:clamp(22px, 2.6vw, 34px);--fs-proj:clamp(22px, 3.4vw, 42px);--fs-metric:clamp(32px, 4.4vw, 54px);--fs-lead:clamp(15px, 1.25vw, 18px);--fs-manifesto:clamp(19px, 2.1vw, 30px);--fs-email:clamp(28px, 6.4vw, 84px);--container:1360px;--pad-x:clamp(20px, 5vw, 64px);--pad-y:clamp(64px, 8vw, 120px);--gap-col:clamp(24px, 4vw, 72px);--header-h:78px;--r-sharp:2px;--r-pill:999px;--r-slab:14px;--ease-out-expo:cubic-bezier(.22, 1, .36, 1)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:auto}body{background:var(--paper);color:var(--ink);font-family:var(--font-display);-webkit-font-smoothing:antialiased;text-wrap:pretty;margin:0;font-size:16px;line-height:1.5;overflow-x:clip}a{color:var(--ac);text-decoration:none}::selection{background:var(--ac);color:#fff}:focus-visible{outline:2px solid var(--ac);outline-offset:3px;border-radius:2px}.dark-section :focus-visible{outline-color:var(--ac-on-dark)}.skip-link{z-index:200;background:var(--ink);color:#fff;font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;padding:12px 18px;font-size:11px;position:absolute;top:0;left:-9999px}.skip-link:focus{top:12px;left:12px}.mono{font-family:var(--font-mono)}.container{max-width:var(--container);padding-inline:var(--pad-x);margin:0 auto}.section{padding-block:var(--pad-y)}.rule-top{border-top:1px solid var(--hairline-2)}.paper-alt{background:var(--paper-alt)}.app{background:var(--paper);width:100%;position:relative}.main{z-index:1;position:relative}.blueprint{z-index:0;pointer-events:none;position:fixed;inset:0}.blueprint__inner{max-width:var(--container);height:100%;padding-inline:var(--pad-x);justify-content:space-between;margin:0 auto;display:flex}.blueprint__line{background:linear-gradient(#0000,#14162a0d 10% 90%,#0000);width:1px}.blueprint__line--edge{background:linear-gradient(#0000,#14162a12 10% 90%,#0000)}.header{z-index:60;-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--hairline-2);background:#f4f5f8c7;position:fixed;inset:0 0 auto}.header__inner{max-width:var(--container);padding:12px var(--pad-x);flex-wrap:wrap;align-items:center;gap:20px;margin:0 auto;display:flex}.header__brand{color:var(--ink);flex-direction:column;gap:2px;display:flex}.header__name{letter-spacing:.16em;text-transform:uppercase;font-size:13px;font-weight:800}.header__meta{font-family:var(--font-mono);letter-spacing:.18em;color:var(--muted);text-transform:uppercase;font-size:9.5px}.nav{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;flex-wrap:wrap;align-items:center;gap:clamp(12px,1.8vw,26px);margin-left:auto;font-size:10.5px;display:flex}.nav__link{color:var(--ink-2);transition:color .35s var(--ease-out-expo), letter-spacing .45s var(--ease-out-expo);will-change:transform;align-items:baseline;gap:6px;padding:4px 1px 6px;display:inline-flex;position:relative}.nav__num{color:var(--muted-2);transition:color .35s var(--ease-out-expo), transform .45s var(--ease-out-expo), opacity .35s var(--ease-out-expo);display:inline-block}.nav__link:after{content:"";background:var(--ac);transform-origin:100%;height:1px;transition:transform .45s var(--ease-out-expo);position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.nav__link:hover,.nav__link:focus-visible{color:var(--ac);letter-spacing:.2em}.nav__link:hover .nav__num,.nav__link:focus-visible .nav__num{color:var(--ac);transform:translateY(-2px)}.nav__link:hover:after,.nav__link:focus-visible:after{transform-origin:0;transform:scaleX(1)}.nav__link[aria-current=true]{color:var(--ink)}.nav__link[aria-current=true]:after{transform-origin:0;background:var(--hairline-strong);transform:scaleX(1)}.nav__link[aria-current=true]:hover:after{background:var(--ac)}.nav__link[aria-current=true] .nav__num{color:var(--ac)}.nav__pill{color:var(--ink);border:1px solid var(--hairline);border-radius:var(--r-pill);transition:border-color .35s var(--ease-out-expo), color .35s var(--ease-out-expo), transform .45s var(--ease-out-expo), box-shadow .45s var(--ease-out-expo);background:#fff;align-items:center;gap:7px;padding:7px 12px;display:inline-flex}.nav__pill:hover,.nav__pill:focus-visible{border-color:var(--ac);color:var(--ac);box-shadow:0 10px 22px -16px var(--ac-70);transform:translateY(-2px)}.dot{background:var(--ok);border-radius:50%;width:6px;height:6px;animation:2.6s ease-in-out infinite livePulse}.dot--sm{background:var(--ok-dark);width:5px;height:5px}.rail{z-index:50;pointer-events:none;font-family:var(--font-mono);letter-spacing:.16em;color:var(--muted-2);flex-direction:column;align-items:center;gap:12px;font-size:10px;display:flex;position:fixed;top:50%;right:clamp(10px,1.5vw,20px);transform:translateY(-50%)}.rail__num{color:var(--ink);font-weight:500}.rail__track{background:var(--hairline);width:1px;height:110px;position:relative;overflow:hidden}.rail__fill{background:var(--ac);height:0%;position:absolute;inset:0 0 auto}@media (max-width:899px){.rail{display:none}}.hero{max-width:var(--container);padding:clamp(104px, 13vw, 168px) var(--pad-x) clamp(48px, 6vw, 84px);flex-wrap:wrap;align-items:center;gap:clamp(28px,4vw,64px);margin:0 auto;display:flex}.hero__copy{flex:430px;min-width:min(100%,300px)}.hero__eyebrow{font-family:var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--muted);align-items:center;gap:12px;margin-bottom:clamp(18px,2.4vw,30px);font-size:10.5px;display:flex}.hero__eyebrow:before{content:"";background:var(--ac);width:26px;height:1px}.hero__title{font-size:var(--fs-h1);letter-spacing:-.045em;margin:0;font-weight:800;line-height:.9}.hero__title .accent{color:var(--ac)}.hero__lead{max-width:56ch;font-size:var(--fs-lead);color:var(--ink-2);margin:clamp(22px,3vw,34px) 0 0;line-height:1.62}.hero__ctas{flex-wrap:wrap;gap:12px;margin-top:clamp(26px,3.4vw,40px);display:flex}.hero__cue{font-family:var(--font-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--muted-2);align-items:center;gap:10px;margin-top:clamp(34px,5vw,64px);font-size:9.5px;display:flex}.hero__cue:before{content:"";background:var(--ac);width:1px;height:34px;animation:2.6s ease-in-out infinite scrollCue;display:block}.hero__stage{flex:400px;align-self:stretch;min-width:min(100%,280px)}.btn{border-radius:var(--r-sharp);letter-spacing:.02em;cursor:pointer;transition:background-color .35s var(--ease-out-expo), border-color .35s var(--ease-out-expo), color .35s var(--ease-out-expo), transform .45s var(--ease-out-expo);align-items:center;gap:10px;padding:14px 22px;font-size:13.5px;font-weight:600;display:inline-flex}.btn:hover{transform:translateY(-2px)}.btn__arrow{font-family:var(--font-mono);transition:transform .45s var(--ease-out-expo);font-size:12px}.btn:hover .btn__arrow{transform:translate(4px)}.btn--primary{background:var(--ac);color:#fff;border:1px solid var(--ac)}.btn--primary:hover{background:var(--ink);border-color:var(--ink);color:#fff}.btn--ghost{border:1px solid var(--hairline-strong);color:var(--ink);background:0 0}.btn--ghost:hover{border-color:var(--ink);color:var(--ink)}.legend{flex-wrap:wrap;gap:8px;margin-top:clamp(6px,1.5vw,16px);display:flex}.legend__btn{appearance:none;cursor:pointer;font:inherit;text-align:left;border:1px solid var(--hairline-2);border-radius:var(--r-sharp);transition:border-color .35s var(--ease-out-expo), transform .45s var(--ease-out-expo), box-shadow .45s var(--ease-out-expo);background:#fff;flex-direction:column;flex:118px;gap:3px;padding:9px 11px;display:flex}.legend__btn:hover,.legend__btn:focus-visible,.legend__btn[data-active=true]{border-color:var(--ac);box-shadow:0 14px 26px -20px var(--ac-70);transform:translateY(-3px)}.legend__num{font-family:var(--font-mono);letter-spacing:.2em;color:var(--ac);font-size:9px}.legend__name{letter-spacing:-.01em;font-size:11.5px;font-weight:600}.sec-head{border-bottom:1px solid var(--hairline);align-items:baseline;gap:16px;margin-bottom:clamp(28px,4vw,56px);padding-bottom:14px;display:flex}.sec-head__num{font-family:var(--font-mono);letter-spacing:.2em;color:var(--ac);font-size:11px}.sec-head__title{font-size:var(--fs-h2);letter-spacing:-.03em;margin:0;font-weight:700}.sec-head__label{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--muted-2);margin-left:auto;font-size:10px}.dark-section .sec-head{border-bottom-color:var(--rule-dark)}.dark-section .sec-head__num{color:var(--ac-on-dark)}.dark-section .sec-head__title{color:#fff}.dark-section .sec-head__label{color:var(--muted-dark)}.synth{flex-wrap:wrap;gap:clamp(28px,4vw,72px);display:flex}.synth__manifesto{font-size:var(--fs-manifesto);letter-spacing:-.025em;flex:420px;max-width:22ch;margin:0;font-weight:500;line-height:1.35}.synth__manifesto .accent{color:var(--ac)}.synth__body{color:var(--ink-2);flex-direction:column;flex:380px;gap:16px;max-width:62ch;font-size:15.5px;line-height:1.65;display:flex}.synth__body p{margin:0}.hair-grid{background:var(--hairline);border:1px solid var(--hairline);gap:1px;display:grid}.metrics{grid-template-columns:repeat(auto-fit,minmax(min(100%,168px),1fr));margin-top:clamp(40px,5vw,72px)}.metric{background:#fff;padding:clamp(20px,2.6vw,30px)}.metric__value{font-size:var(--fs-metric);letter-spacing:-.04em;font-variant-numeric:tabular-nums;font-weight:800;line-height:1}.metric__value--accent{color:var(--ac)}.metric__label{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-top:10px;font-size:10px}.stack-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,270px),1fr))}.stack-group{background:var(--card-alt);padding:clamp(20px,2.4vw,28px)}.stack-group__head{align-items:baseline;gap:10px;margin-bottom:16px;display:flex}.stack-group__letter{font-family:var(--font-mono);letter-spacing:.2em;color:var(--ac);font-size:9.5px}.stack-group__title{letter-spacing:.01em;margin:0;font-size:14px;font-weight:700}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{appearance:none;cursor:pointer;font-family:var(--font-mono);letter-spacing:.04em;color:var(--ink-2);border:1px solid var(--hairline);border-radius:var(--r-pill);transition:background-color .3s var(--ease-out-expo), border-color .3s var(--ease-out-expo), color .3s var(--ease-out-expo), transform .35s var(--ease-out-expo);background:#fff;padding:6px 11px;font-size:10.5px}.chip:hover{border-color:var(--ac);color:var(--ac);transform:translateY(-2px)}.chip[aria-pressed=true]{background:var(--ac);border-color:var(--ac);color:#fff}.dark-section{background:var(--ink);color:var(--on-dark)}.filter-bar{font-family:var(--font-mono);letter-spacing:.08em;background:#ffffff0d;border:1px solid #ffffff2e;flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:22px;padding:11px 16px;font-size:11px;display:flex}.filter-bar__key{color:var(--on-dark-62)}.filter-bar__val{color:#fff}.filter-bar__clear{appearance:none;cursor:pointer;font:inherit;letter-spacing:.16em;text-transform:uppercase;color:#fff;border-radius:var(--r-pill);transition:background-color .3s var(--ease-out-expo), color .3s var(--ease-out-expo);background:0 0;border:1px solid #ffffff4d;margin-left:auto;padding:5px 12px}.filter-bar__clear:hover{color:var(--ink);background:#fff}.project{border-top:1px solid var(--rule-dark);transition:opacity .45s}.project:last-of-type{border-bottom:1px solid var(--rule-dark)}.project[data-dimmed=true]{opacity:.24}.project__head{appearance:none;text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:clamp(14px,2.4vw,32px);padding:clamp(20px,2.6vw,32px) 0;display:flex}.project__index{font-family:var(--font-mono);letter-spacing:.2em;color:var(--ac-on-dark);transition:transform .45s var(--ease-out-expo);font-size:11px}.project__head:hover .project__index{transform:translate(4px)}.project__id{flex-wrap:wrap;flex:auto;align-items:baseline;gap:6px 16px;min-width:0;display:flex}.project__name{font-size:var(--fs-proj);letter-spacing:-.035em;color:#fff;transition:color .35s var(--ease-out-expo);font-weight:700}.project__head:hover .project__name{color:var(--ac-on-dark)}.project__tagline{color:var(--on-dark-62);font-size:13.5px}.status{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--on-dark-62);border:1px solid var(--rule-dark-strong);border-radius:var(--r-pill);white-space:nowrap;align-items:center;gap:7px;padding:5px 10px;font-size:9.5px;display:inline-flex}.status--production{color:var(--ok-dark);border-color:#79d6a85c}.project__plus{color:var(--on-dark-70);transition:transform .45s var(--ease-out-expo);font-size:22px;font-weight:300;line-height:1;transform:rotate(0)}.project__head[aria-expanded=true] .project__plus{transform:rotate(45deg)}.project__panel{max-height:0;transition:max-height .6s var(--ease-out-expo);overflow:hidden}.project__panel[data-open=true]{max-height:900px}.project__body{flex-wrap:wrap;gap:clamp(24px,4vw,64px);padding-bottom:clamp(28px,3.4vw,44px);display:flex}.bullets{color:var(--on-dark-78);flex-direction:column;flex:380px;gap:12px;max-width:64ch;margin:0;padding:0;font-size:15px;line-height:1.6;list-style:none;display:flex}.bullets li{gap:12px;display:flex}.bullets li:before{content:"—";color:var(--ac-on-dark);font-family:var(--font-mono);flex:none;padding-top:4px;font-size:11px}.project__side{flex-direction:column;flex:260px;gap:18px;display:flex}.project__metrics{background:var(--rule-dark);border:1px solid var(--rule-dark);flex-wrap:wrap;gap:1px;display:flex}.project__metric{background:var(--ink);flex:100px;padding:14px 16px}.project__metric-value{letter-spacing:-.03em;color:#fff;font-size:22px;font-weight:700}.project__metric-label{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted-dark);margin-top:5px;font-size:9px}.tags{font-family:var(--font-mono);letter-spacing:.06em;color:var(--on-dark-70);flex-wrap:wrap;gap:6px;font-size:10px;display:flex}.tags span{border-radius:var(--r-pill);border:1px solid #ffffff2e;padding:5px 10px}.ext-link{font-family:var(--font-mono);letter-spacing:.1em;color:#fff;transition:color .35s var(--ease-out-expo), border-color .35s var(--ease-out-expo);border-bottom:1px solid #fff6;align-self:flex-start;align-items:center;gap:9px;padding-bottom:4px;font-size:11px;display:inline-flex}.ext-link:hover{color:var(--ac-on-dark);border-color:var(--ac-on-dark)}.sec-cols{flex-wrap:wrap;align-items:center;gap:clamp(28px,4vw,72px);display:flex}.sec-cols__copy{flex:420px;min-width:min(100%,280px)}.sec-headline{letter-spacing:-.025em;max-width:24ch;margin:0 0 clamp(24px,3vw,36px);font-size:clamp(19px,2.1vw,28px);font-weight:500;line-height:1.38}.sec-cards{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr))}.sec-card{transition:box-shadow .45s var(--ease-out-expo);background:#fff;padding:18px 20px}.sec-card:hover{box-shadow:inset 0 0 0 1px var(--ac-34)}.sec-card__num{font-family:var(--font-mono);letter-spacing:.18em;color:var(--ac);margin-bottom:8px;font-size:9.5px}.sec-card__body{color:var(--ink-2);font-size:14px;line-height:1.5}.sec-cols__viz{flex:320px;justify-content:center;min-width:min(100%,260px);display:flex}.tl-row{gap:var(--gap-col);flex-wrap:wrap;display:flex}.tl-row--exp{border-bottom:1px solid var(--hairline);padding-bottom:clamp(32px,4vw,52px)}.tl-row--edu{padding-top:clamp(28px,3.4vw,44px)}.tl-date{min-width:180px;font-family:var(--font-mono);letter-spacing:.14em;color:var(--muted);flex:none;font-size:11px}.tl-date__main{color:var(--ac);margin-bottom:8px}.tl-body{flex:420px}.tl-role{letter-spacing:-.03em;margin:0 0 4px;font-size:clamp(20px,2.4vw,28px);font-weight:700}.tl-org{color:var(--muted);margin-bottom:20px;font-size:14px}.tl-bullets{color:var(--ink-2);flex-direction:column;gap:11px;max-width:70ch;margin:0;padding:0;font-size:15px;line-height:1.6;list-style:none;display:flex}.tl-bullets li{gap:12px;display:flex}.tl-bullets li:before{content:"—";color:var(--ac);font-family:var(--font-mono);flex:none;padding-top:4px;font-size:11px}.edu-split{flex-wrap:wrap;gap:clamp(20px,3vw,48px);display:flex}.edu-course{flex:240px}.edu-course h3{letter-spacing:-.02em;margin:0 0 4px;font-size:18px;font-weight:700}.edu-langs{flex:200px}.edu-langs__label{font-family:var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--muted-2);margin-bottom:10px;font-size:9.5px}.edu-langs div+div{color:var(--ink-2);font-size:15px}.contact__label{font-family:var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin-bottom:clamp(20px,3vw,32px);font-size:10.5px}.contact__email{font-size:var(--fs-email);letter-spacing:-.045em;color:var(--ink);word-break:break-word;transition:color .4s var(--ease-out-expo);font-weight:800;line-height:1;display:inline-block}.contact__email:hover{color:var(--ac)}.contact__links{font-family:var(--font-mono);letter-spacing:.1em;flex-wrap:wrap;gap:clamp(16px,3vw,40px);margin-top:clamp(32px,4vw,56px);font-size:11.5px;display:flex}.contact__link{color:var(--ink-2);border-bottom:1px solid var(--hairline);transition:color .35s var(--ease-out-expo), border-color .35s var(--ease-out-expo), transform .45s var(--ease-out-expo);padding-bottom:4px}.contact__link:hover{color:var(--ac);border-color:var(--ac);transform:translateY(-2px)}.footer{border-top:1px solid var(--hairline-2)}.footer__inner{max-width:var(--container);padding:20px var(--pad-x);font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--muted-2);flex-wrap:wrap;align-items:center;gap:14px;margin:0 auto;font-size:9.5px;display:flex}.footer__right{margin-left:auto}@keyframes scrollCue{0%{transform-origin:top;transform:scaleY(0)}45%{transform-origin:top;transform:scaleY(1)}55%{transform-origin:bottom;transform:scaleY(1)}to{transform-origin:bottom;transform:scaleY(0)}}@keyframes livePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.82)}}@media (prefers-reduced-motion:reduce){html:not([data-motion=force]) *,html:not([data-motion=force]) :before,html:not([data-motion=force]) :after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}html[data-motion=off] *,html[data-motion=off] :before,html[data-motion=off] :after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}
