:root{--ink:#07090c;--paper:#f2efe7;--white:#fff;--blue:#2f80ff;--line:rgba(255,255,255,.15);--muted:#9ca1aa;--ease:cubic-bezier(.16,1,.3,1)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--ink);color:var(--paper);font-family:Manrope,Arial,sans-serif;font-size:16px;line-height:1.55;overflow-x:hidden}a{color:inherit;text-decoration:none}button{font:inherit}img{display:block;max-width:100%}
.progress{position:fixed;inset:0 0 auto;height:2px;background:rgba(255,255,255,.06);z-index:100}.progress span{display:block;width:0;height:100%;background:var(--blue)}
.site-header{position:absolute;z-index:20;top:0;left:0;width:100%;height:92px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:0 4vw;border-bottom:1px solid var(--line)}.brand{width:168px}.brand img{width:100%;height:auto}.site-header nav{display:flex;gap:2.1rem}.site-header nav a{font:400 .78rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.09em;color:#c9ccd0;transition:color .25s}.site-header nav a:hover{color:#fff}.header-mark{justify-self:end;font:500 .78rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em}.header-mark span{color:var(--blue);margin-left:.4rem}.menu-button{display:none;background:none;border:0;color:white;padding:10px}.menu-button span{width:24px;height:1px;background:white;display:block;margin:6px 0}
.hero{position:relative;min-height:100svh;display:flex;align-items:center;padding:150px 6vw 70px;isolation:isolate}.hero-image{position:absolute;inset:0;z-index:-3;background:url('assets/development-engine.png') center/cover no-repeat}.hero-shade{position:absolute;inset:0;z-index:-2;background:linear-gradient(90deg,rgba(7,9,12,.98) 0%,rgba(7,9,12,.88) 33%,rgba(7,9,12,.27) 70%,rgba(7,9,12,.36) 100%),linear-gradient(0deg,rgba(7,9,12,.7),transparent 48%)}.hero-grid,.closing-grid{position:absolute;inset:0;z-index:-1;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:80px 80px;mask-image:linear-gradient(to right,#000,transparent 65%)}.hero-content{width:min(970px,80vw);padding-top:3vh}.eyebrow,.section-label{font:400 .74rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.14em}.eyebrow{display:flex;gap:1.2rem;color:#d6d7d9}.eyebrow:before{content:"";width:34px;height:1px;background:var(--blue);margin-top:.65em}.eyebrow span{color:#777d86}.hero h1{font-size:clamp(4.4rem,10.5vw,10.5rem);font-weight:500;letter-spacing:-.075em;line-height:.78;margin:.18em 0 .28em;max-width:1100px}.hero h1 span{color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.78)}.hero-copy{font-size:clamp(1.05rem,1.55vw,1.35rem);line-height:1.55;max-width:620px;color:#c2c5c9}.hero-actions{display:flex;align-items:center;gap:2rem;margin-top:2.2rem}.button{min-height:52px;display:inline-flex;align-items:center;justify-content:space-between;gap:2.5rem;padding:0 1.25rem;font:500 .76rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.09em;transition:transform .3s var(--ease),background .3s,color .3s}.button span{font-size:1.1rem}.button-primary{background:var(--blue);color:#fff}.button:hover{transform:translateY(-3px)}.text-link{font:500 .75rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.09em;border-bottom:1px solid #6e737b;padding:.7rem 0}.text-link span{color:var(--blue);margin-left:.5rem}.hero-index{position:absolute;right:4vw;bottom:34px;display:flex;align-items:center;gap:1rem;font:400 .67rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.12em;color:#989da4}.hero-index span:first-child{color:var(--blue)}
.section{padding:clamp(90px,11vw,170px) 6vw}.section-label{display:flex;gap:.8rem;align-items:center;color:#aeb2b8}.section-label span{color:var(--blue)}.statement{background:var(--paper);color:var(--ink)}.statement .section-label{color:#656a72}.statement-body{display:grid;grid-template-columns:1.05fr 1fr;gap:8vw;margin:8vw 0 9vw}.statement-kicker{font-size:clamp(3.3rem,6.7vw,7.2rem);font-weight:500;letter-spacing:-.065em;line-height:.98;margin:0}.statement-kicker em{color:var(--blue);font-style:normal}.statement-copy{max-width:650px;padding-top:1rem}.statement-copy p:first-child{font-size:clamp(1.3rem,2vw,1.8rem);line-height:1.45;color:#16191e}.statement-copy p:last-child{font-size:1.05rem;color:#555b65;margin-top:2.5rem}.discipline-rail{display:grid;grid-template-columns:repeat(8,1fr);border-top:1px solid #b9b6ae;border-bottom:1px solid #b9b6ae}.discipline-rail span{padding:1.2rem .5rem;font:500 .67rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em;text-align:center;border-right:1px solid #cbc8c0}.discipline-rail span:last-child{border-right:0}
.portfolio{background:#0d1014}.section-head{display:grid;grid-template-columns:1fr 2.25fr;gap:3vw}.section-head h2,.method-title h2{font-size:clamp(3.4rem,7vw,7.8rem);font-weight:500;letter-spacing:-.07em;line-height:.91;margin:0}.section-intro{max-width:730px;font-size:1.12rem;color:#a7abb2;margin:2rem 0 0}.filters{display:flex;flex-wrap:wrap;margin:7vw 0 1.8rem;border-bottom:1px solid var(--line);gap:.3rem}.filter{color:#7e848c;background:none;border:0;padding:1rem 1.4rem;cursor:pointer;font:400 .72rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em;border-bottom:2px solid transparent;margin-bottom:-1px;transition:.25s}.filter:hover,.filter.active{color:#fff;border-bottom-color:var(--blue)}.filter sup{color:#555c66;margin-left:.25rem}.work-list{border-top:1px solid var(--line)}.work-card{display:grid;grid-template-columns:70px 1fr 180px 40px;gap:2rem;align-items:center;min-height:190px;padding:2.1rem 1.2rem;border-bottom:1px solid var(--line);position:relative;transition:background .35s var(--ease),transform .35s var(--ease),opacity .3s}.work-card:before{content:"";position:absolute;inset:0 auto 0 0;width:3px;background:var(--blue);transform:scaleY(0);transition:transform .35s var(--ease)}.work-card:hover{background:rgba(255,255,255,.035);transform:translateX(5px)}.work-card:hover:before{transform:scaleY(1)}.work-card.hidden{display:none}.work-number{font:400 .7rem DM Mono,monospace;color:#59606a;align-self:start;margin-top:.35rem}.work-type{font:400 .67rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.11em;color:#6f7680;margin:0 0 .55rem}.work-main h3{font-size:clamp(1.65rem,2.7vw,3rem);letter-spacing:-.04em;font-weight:500;line-height:1.05;margin:0}.work-main>p:last-child{max-width:650px;color:#92979f;margin:.85rem 0 0}.work-status{display:flex;flex-direction:column;gap:.75rem;align-items:flex-start}.work-status span{font:400 .66rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em;border:1px solid #3b414a;border-radius:50px;padding:.38rem .65rem;color:#aeb3ba}.work-status span.live{border-color:rgba(47,128,255,.6);color:#8ab8ff}.work-status b{font:400 .67rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.1em;color:#555d67}.work-arrow{font-size:1.3rem;color:#5d646e;transition:.25s}.work-card:hover .work-arrow{color:var(--blue);transform:translate(3px,-3px)}.portfolio-note{max-width:650px;margin:2rem 0 0 auto;color:#626872;font:400 .69rem DM Mono,monospace;line-height:1.7}
.method{background:var(--blue);color:#fff}.method .section-label{color:rgba(255,255,255,.72)}.method .section-label span{color:#fff}.method-grid{display:grid;grid-template-columns:1fr 1fr;gap:9vw;margin-top:7vw}.method-title p{max-width:520px;font-size:1.12rem;color:rgba(255,255,255,.78);margin-top:2rem}.method-steps{list-style:none;padding:0;margin:0;border-top:1px solid rgba(255,255,255,.35)}.method-steps li{display:grid;grid-template-columns:55px 1fr;gap:1rem;padding:1.8rem 0;border-bottom:1px solid rgba(255,255,255,.35)}.method-steps li>span{font:400 .7rem DM Mono,monospace;color:rgba(255,255,255,.6);padding-top:.35rem}.method-steps h3{font-size:1.45rem;font-weight:600;letter-spacing:-.025em;margin:0}.method-steps p{color:rgba(255,255,255,.72);margin:.55rem 0 0;max-width:520px}
.founder{background:var(--paper);color:var(--ink)}.founder-grid{display:grid;grid-template-columns:.65fr 1.35fr 1fr;gap:5vw}.founder .section-label{color:#686d74}.founder blockquote{font-size:clamp(3.6rem,7.4vw,8.2rem);font-weight:500;line-height:.82;letter-spacing:-.08em;margin:0;border-left:3px solid var(--blue);padding-left:2.2rem}.founder-copy{padding-top:.4rem}.founder-copy .lead{font-size:1.35rem;line-height:1.45;margin-top:0}.founder-copy p{color:#4d535c}.founder-copy .legal-note{font:400 .7rem DM Mono,monospace;line-height:1.7;border-top:1px solid #c2bfb7;margin-top:2.4rem;padding-top:1.4rem;color:#72777f}
.closing{min-height:80svh;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;position:relative;isolation:isolate;overflow:hidden}.closing-grid{mask-image:linear-gradient(90deg,#000,transparent)}.closing:after{content:"";position:absolute;width:44vw;height:44vw;border:1px solid rgba(47,128,255,.35);border-radius:50%;right:-12vw;top:7%;box-shadow:0 0 100px rgba(47,128,255,.08);z-index:-1}.closing h2{font-size:clamp(3.8rem,8vw,9rem);letter-spacing:-.075em;line-height:.9;font-weight:500;margin:.25em 0 .45em}.closing h2 span{color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.5)}.button-light{background:var(--paper);color:var(--ink)}
footer{padding:3rem 4vw;display:grid;grid-template-columns:1fr 1.3fr 1fr;align-items:end;border-top:1px solid var(--line);gap:2rem}.footer-brand img{width:175px}.footer-brand{align-self:center}footer>p{max-width:480px;color:#7f858e;font-size:.86rem;margin:0}.footer-meta{display:flex;justify-content:space-between;font:400 .65rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em;color:#656b74}
.reveal{opacity:0;transform:translateY(26px);transition:opacity .85s var(--ease),transform .85s var(--ease)}.reveal.visible{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transform:none;transition:none}.button,.work-card{transition:none}}
@media(max-width:900px){.site-header{grid-template-columns:1fr auto;height:78px}.brand{width:150px}.header-mark{display:none}.menu-button{display:block;justify-self:end}.site-header nav{position:absolute;top:78px;left:0;right:0;display:none;flex-direction:column;padding:1.5rem 6vw 2rem;background:#090b0e;border-bottom:1px solid var(--line)}.site-header nav.open{display:flex}.hero{padding-left:6vw}.hero-content{width:100%}.hero h1{font-size:clamp(4rem,14vw,7rem)}.statement-body,.section-head,.method-grid,.founder-grid{grid-template-columns:1fr}.statement-copy{max-width:720px}.discipline-rail{grid-template-columns:repeat(4,1fr)}.discipline-rail span:nth-child(4){border-right:0}.discipline-rail span:nth-child(-n+4){border-bottom:1px solid #cbc8c0}.section-head{gap:3rem}.work-card{grid-template-columns:45px 1fr 135px 25px;gap:1rem}.founder-grid{gap:3rem}.founder blockquote{max-width:700px}footer{grid-template-columns:1fr 1fr}.footer-meta{grid-column:1/-1}}
@media(max-width:620px){.section{padding:80px 6vw}.hero{min-height:94svh;padding-top:125px}.hero-image{background-position:63% center;opacity:.68}.hero-shade{background:linear-gradient(90deg,rgba(7,9,12,.98),rgba(7,9,12,.5)),linear-gradient(0deg,rgba(7,9,12,.85),transparent)}.hero h1{font-size:clamp(3.6rem,18vw,5.4rem);line-height:.83}.hero-copy{font-size:1rem;max-width:92%}.hero-actions{align-items:flex-start;flex-direction:column;gap:1rem}.hero-index{display:none}.eyebrow{font-size:.64rem}.eyebrow span{display:none}.statement-body{margin:4.5rem 0}.statement-kicker{font-size:3.6rem}.discipline-rail{grid-template-columns:repeat(2,1fr)}.discipline-rail span{border-bottom:1px solid #cbc8c0}.discipline-rail span:nth-child(even){border-right:0}.discipline-rail span:nth-last-child(-n+2){border-bottom:0}.section-head h2,.method-title h2{font-size:3.5rem}.filters{flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px}.filter{flex:none;padding-left:.8rem;padding-right:.8rem}.work-card{grid-template-columns:34px 1fr 24px;min-height:auto;padding:1.8rem .35rem}.work-main h3{font-size:1.85rem}.work-status{grid-column:2;flex-direction:row}.work-arrow{grid-column:3;grid-row:1}.founder blockquote{font-size:4.4rem;padding-left:1.4rem}.closing{min-height:70svh}.closing h2{font-size:4rem}footer{grid-template-columns:1fr;align-items:start}.footer-meta{grid-column:1}.footer-brand img{width:155px}}

/* ===== Site chrome: header, footer, skip link, focus. =============================
   These rules are deliberately self-contained and do not read palette variables,
   so the header and footer render identically on the dark root page and on the
   light research pages, which redefine --ink, --paper and --line locally. ===== */
.skip-link{position:absolute;left:0;top:0;z-index:200;background:#2f80ff;color:#fff;padding:.9rem 1.2rem;font:500 .76rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.09em;transform:translateY(-130%)}
.skip-link:focus{transform:none}
a:focus-visible,button:focus-visible,summary:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid #2f80ff;outline-offset:3px}
.site-header{border-bottom:1px solid rgba(255,255,255,.15)}
.site-header nav{background:transparent}
.site-header nav a{color:#c9ccd0}
.site-header nav a:hover{color:#fff}
.header-mark{color:#f2efe7}
.header-mark span{color:#2f80ff}
.menu-button span{background:#fff}
footer{background:#07090c;color:#f2efe7;border-top:1px solid rgba(255,255,255,.15)}
footer>p{color:#8f959d}
.footer-email{display:inline-block;color:#a7c7ff;margin-top:.65rem;border-bottom:1px solid #3b4858}
.footer-meta{color:#9aa1aa}
.footer-meta a:hover{color:#fff}

/* ===== Contrast corrections so small text clears WCAG AA (4.5:1). ===== */
.method{background:#1f5ec9}
.method .section-label{color:#dbe6fb}
.method-title p{color:#e2ebfd}
.method-steps p{color:#dce7fb}
.method-steps li>span{color:#dbe6fb}
.method-steps,.method-steps li{border-color:rgba(255,255,255,.45)}
.work-type{color:#98a0aa}
.work-number{color:#8b929c}
.work-status b{color:#8e959e}
.portfolio-note{color:#949ba4}
.portfolio-note a{border-bottom:1px solid #6b7580;color:#cfd4da}
.filter{color:#9298a1}
.eyebrow span{color:#9298a1}
.founder-copy .legal-note{color:#5b6068}
.statement-copy p:last-child{color:#4d535c}
/* A work card whose title links to its own page. */
.work-main h3 a{border-bottom:1px solid rgba(255,255,255,.22);transition:border-color .25s,color .25s}
.work-card:hover .work-main h3 a{border-bottom-color:var(--blue)}
a.work-arrow{display:inline-block}

/* ===== Systems menu in the header. Add a row to the list in the nav markup
   when a new development page ships; nothing here needs to change. ===== */
.nav-group{position:relative}
.nav-trigger{background:none;border:0;padding:0;cursor:pointer;font:400 .78rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.09em;color:#c9ccd0;display:inline-flex;align-items:center;gap:.45rem;transition:color .25s}
.nav-trigger:hover,.nav-group.open .nav-trigger{color:#fff}
.nav-trigger i{font-style:normal;color:#2f80ff;transition:transform .3s cubic-bezier(.16,1,.3,1);display:inline-block}
.nav-group.open .nav-trigger i{transform:rotate(45deg)}
.nav-menu{position:absolute;top:calc(100% + 1.45rem);left:-1.1rem;min-width:290px;background:#0b0e12;border:1px solid rgba(255,255,255,.15);padding:.45rem;opacity:0;visibility:hidden;transform:translateY(-8px);transition:opacity .25s,transform .25s cubic-bezier(.16,1,.3,1),visibility .25s;z-index:40;box-shadow:0 24px 50px rgba(0,0,0,.5)}
.nav-group.open .nav-menu{opacity:1;visibility:visible;transform:none}
.nav-menu a,.nav-menu .soon{display:block;padding:.85rem 1rem;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.08);position:relative}
.nav-menu a:last-child,.nav-menu .soon:last-child{border-bottom:0}
.nav-menu b{display:block;font:500 .95rem Manrope,sans-serif;text-transform:none;letter-spacing:-.01em;color:#f2efe7}
.nav-menu span{display:block;margin-top:.22rem;font:400 .74rem Manrope,sans-serif;text-transform:none;letter-spacing:0;color:#9298a1}
.nav-menu a:hover{background:rgba(47,128,255,.1)}
.nav-menu a:hover b{color:#fff}
.nav-menu a:after{content:"→";position:absolute;right:1rem;top:50%;transform:translateY(-50%);color:#2f80ff;opacity:0;transition:opacity .2s,right .2s}
.nav-menu a:hover:after{opacity:1;right:.75rem}
.nav-menu .soon{cursor:default}
.nav-menu .soon b{color:#8b929c}
.nav-menu .soon i{position:absolute;right:1rem;top:50%;transform:translateY(-50%);font-style:normal;font:400 .6rem DM Mono,monospace;text-transform:uppercase;letter-spacing:.09em;color:#6f7680;border:1px solid #39414b;padding:.2rem .4rem}
@media(max-width:900px){
  .nav-group{width:100%}
  .nav-trigger{padding:.15rem 0;width:100%;justify-content:space-between}
  .nav-menu{position:static;transform:none;opacity:1;visibility:visible;display:none;min-width:0;margin:.7rem 0 .4rem;box-shadow:none;background:#0f1319;transition:none}
  .nav-group.open .nav-menu{display:block}
}
/* A work card that has its own page: the whole row is the link. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.work-card{position:relative}
a.card-link{position:static}
a.card-link:before{content:"";position:absolute;inset:0;z-index:1}
a.card-link:focus-visible:before{outline:2px solid #2f80ff;outline-offset:-3px}
.work-card:has(a.card-link){cursor:pointer}
.work-card:has(a.card-link) .work-main h3{display:inline-block}
.work-card:has(a.card-link):hover{background:rgba(47,128,255,.06)}
.work-arrow.soon{opacity:.35}
.section-intro a{color:#9cc0ff;border-bottom:1px solid #3b4858}

/* ===== Header corrections =================================================
   1. The Systems trigger is a <button>, whose `font` shorthand resets
      line-height to `normal`. The nav links inherit 1.55, so the two sat on
      different baselines. Match them explicitly.
   2. The nav grew by one item and the centre column stopped fitting between
      the wordmark and the top-right link. The wordmark collided with the
      first link and the top-right link collided with Contact. So: drop the
      top-right link sooner, tighten the gap in the middle range, and switch
      to the hamburger before the collision range instead of after it. ===== */
.site-header nav a,.nav-trigger{line-height:1.55;display:inline-flex;align-items:center}
.nav-trigger{height:auto}

@media(max-width:1280px){
  .header-mark{display:none}
  .site-header{grid-template-columns:auto 1fr}
  .site-header nav{justify-content:flex-end}
}
@media(max-width:1180px){
  .site-header nav{gap:1.5rem}
  .site-header nav a,.nav-trigger{font-size:.73rem;letter-spacing:.07em}
}
@media(max-width:1080px){
  .site-header{grid-template-columns:1fr auto;height:78px}
  .brand{width:150px}
  .menu-button{display:block;justify-self:end}
  .site-header nav{position:absolute;top:78px;left:0;right:0;display:none;flex-direction:column;
                   align-items:stretch;justify-content:flex-start;gap:0;padding:1.5rem 6vw 2rem;
                   background:#090b0e;border-bottom:1px solid rgba(255,255,255,.15)}
  .site-header nav.open{display:flex}
  .site-header nav a,.nav-trigger{font-size:.78rem;letter-spacing:.09em;padding:.65rem 0}
  .nav-group{width:100%}
  .nav-trigger{width:100%;justify-content:space-between}
  .nav-menu{position:static;transform:none;opacity:1;visibility:visible;display:none;min-width:0;
            margin:.2rem 0 .6rem;box-shadow:none;background:#0f1319;transition:none}
  .nav-group.open .nav-menu{display:block}
}
