:root{
  --ink:#000;
  --paper:#f3f3ef;
  --blue:#0099ff;
  --pink:#fc74dd;
  --sky:#94beee;
  --sun:#ffd400;
  --ember:#ff5a1f;
  --lime:#d4ff00;
  --mute:#c9c9c4;
  --display:"Dela Gothic One","Arial Black",Impact,sans-serif;
  --body:"Hanken Grotesk","Helvetica Neue",Arial,sans-serif;
  --mono:"Martian Mono",ui-monospace,Menlo,monospace;
  --gutter:clamp(16px,2.4vw,32px);
  --r:clamp(4px,.6vw,10px);
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--ink);color:#fff;font:400 clamp(16px,1.2vw,19px)/1.55 var(--body);overflow-x:hidden}
img,svg{max-width:100%;display:block}
a{color:inherit}
p{margin:0}
:focus-visible{outline:3px solid var(--blue);outline-offset:3px}
.on-light :focus-visible{outline-color:#000}
main>section{padding-inline:var(--gutter)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* top bar */
.bar{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px var(--gutter);background:rgba(0,0,0,.94);font:300 12px/1 var(--mono)}
.bar a{text-decoration:none}
.bar__home{min-height:44px;display:inline-flex;align-items:center}
.bar__nav{display:flex;align-items:center;gap:clamp(14px,2.2vw,32px)}
.bar__nav a:not(.bar__cta):hover{color:var(--pink)}
.bar__nav a[aria-current="page"]{text-decoration:underline;text-underline-offset:6px;text-decoration-thickness:2px}
.bar__cta{border:1px solid #fff;border-radius:999px;padding:14px 20px;transition:background .2s,color .2s}
.bar__cta:hover{background:#fff;color:#000}
.bar__toggle{display:none;min-height:44px;min-width:44px;background:none;border:1px solid #fff;border-radius:999px;color:#fff;font:inherit;padding:0 18px;cursor:pointer}

.tag{margin:0 0 20px;font:300 12px/1 var(--mono);display:flex;align-items:center;gap:10px}
.tag::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--pink)}
.display{margin:0;font:400 clamp(44px,8.4vw,150px)/.92 var(--display);letter-spacing:-.025em}
.display--sm{font-size:clamp(34px,5.4vw,96px)}
.btn{display:inline-flex;align-items:center;min-height:48px;padding:0 28px;border-radius:999px;background:#000;color:#fff;text-decoration:none;font:300 13px/1 var(--mono);border:2px solid #000;transition:background .2s,color .2s}
.btn:hover{background:transparent;color:#000}
.btn--line{background:transparent;color:inherit;border-color:currentColor}
.btn--line:hover{background:#fff;color:#000;border-color:#fff}
.btn-row{display:flex;flex-wrap:wrap;gap:12px}

/* landing */
.hero{padding:clamp(24px,4vw,56px) var(--gutter) 0}
.hero__name{margin:0;font:400 clamp(44px,14.6vw,330px)/.9 var(--display);letter-spacing:-.04em;display:flex;justify-content:space-between;white-space:nowrap}
.hero__lede{margin:clamp(20px,3vw,40px) 0 0;max-width:34ch;font-size:clamp(20px,2.1vw,32px);line-height:1.25;font-weight:500}
.split{padding-inline:0;position:relative;display:grid;grid-template-columns:1fr 1fr;margin-top:clamp(120px,16vw,260px)}
.glyph{position:absolute;left:50%;top:0;width:min(30vw,380px);aspect-ratio:1;transform:translate(-50%,-52%);z-index:2;pointer-events:none}
.glyph svg{width:100%;height:100%;overflow:visible}
.petal{transform-box:view-box;transform-origin:50% 50%;opacity:0;transform:rotate(calc(var(--r)*1deg)) scale(0)}
.glyph.is-live .petal{opacity:1;animation:
  bloom 1.3s cubic-bezier(.2,.8,.2,1) both,
  breathe 3.6s ease-in-out calc(1.3s + var(--i)*45ms) infinite alternate}
.glyph.is-live svg{animation:spin 48s linear infinite}
@keyframes bloom{from{transform:rotate(calc(var(--r)*1deg - 60deg)) scale(0);opacity:0}to{transform:rotate(calc(var(--r)*1deg)) scale(1);opacity:1}}
@keyframes breathe{from{transform:rotate(calc(var(--r)*1deg)) scale(1)}to{transform:rotate(calc(var(--r)*1deg)) scale(.8)}}
@keyframes spin{to{transform:rotate(360deg)}}
.door{display:flex;flex-direction:column;justify-content:flex-end;gap:18px;min-height:clamp(380px,48vw,640px);padding:clamp(120px,14vw,220px) var(--gutter) clamp(24px,3vw,48px);color:#000;text-decoration:none;transition:filter .25s}
.door--portfolio{background:var(--pink)}
.door--consulting{background:var(--blue)}
.door__title{font:400 clamp(40px,7.4vw,130px)/.92 var(--display);letter-spacing:-.03em}
.door__text{max-width:32ch}
.door__go{align-self:flex-start;min-height:48px;display:inline-flex;align-items:center;padding:0 26px;border:2px solid #000;border-radius:999px;font:300 13px/1 var(--mono);transition:background .2s,color .2s}
.door:hover .door__go{background:#000;color:#fff}

/* page head */
.head{padding-block:clamp(36px,6vw,90px) clamp(32px,5vw,72px)}
.head .display{max-width:12ch}
.head__lede{margin-top:clamp(18px,2.4vw,32px);max-width:46ch;font-size:clamp(19px,1.8vw,28px);line-height:1.3;font-weight:500}
.head .btn-row{margin-top:clamp(20px,3vw,36px)}
.head .btn{background:transparent;color:#fff;border-color:#fff}
.head .btn:hover{background:#fff;color:#000}

/* logos */
.logos{padding-block:0 clamp(48px,7vw,104px)}
.logos__row{display:flex;flex-wrap:wrap;align-items:center;gap:clamp(18px,3vw,44px) clamp(22px,3.4vw,52px)}
.logos__row img{height:clamp(44px,5vw,68px);width:auto;border-radius:3px}
.wordmark{display:inline-flex;align-items:center;min-height:clamp(44px,5vw,68px);padding:0 16px;border:1px solid #fff;border-radius:3px;font:400 clamp(15px,1.5vw,20px)/1 var(--display);letter-spacing:-.01em}

/* projects */
.work{padding-bottom:clamp(56px,8vw,120px)}
.pj{display:grid;grid-template-columns:5fr 7fr;gap:var(--gutter);padding-block:clamp(24px,3vw,44px);border-top:1px solid #333}
.pj__art{position:relative;overflow:hidden;aspect-ratio:4/3;border-radius:var(--r);isolation:isolate}
.pj__art b{position:absolute;display:block}
.pj__org{font:300 12px/1.4 var(--mono);color:var(--mute);margin-bottom:12px}
.pj__title{margin:0 0 14px;font:400 clamp(26px,3.2vw,52px)/1 var(--display);letter-spacing:-.02em}
.pj__text{max-width:58ch}
.pj__text p+p{margin-top:.8em}
.pj__tools{margin-top:16px;font:300 12px/1.6 var(--mono);color:var(--mute);max-width:60ch}
.pj__link{display:inline-block;margin-top:14px;font:300 13px/1.4 var(--mono);text-underline-offset:5px}
.pj__link:hover{color:var(--pink)}
.a1{background:var(--lime)}.a1 b:nth-child(1){left:-8%;bottom:-24%;width:70%;aspect-ratio:1;border-radius:50%;background:var(--ember)}.a1 b:nth-child(2){right:10%;top:12%;width:26%;aspect-ratio:1;border-radius:50%;background:#000}
.a2{background:var(--blue)}.a2 b:nth-child(1){left:0;top:0;width:58%;height:100%;background:var(--sun);border-radius:0 100% 100% 0}.a2 b:nth-child(2){right:12%;bottom:14%;width:22%;aspect-ratio:1;border-radius:50%;background:#000}
.a3{background:var(--pink)}.a3 b:nth-child(1){inset:18% 14%;background:repeating-linear-gradient(90deg,#000 0 12%,transparent 12% 24%);clip-path:polygon(0 100%,0 60%,24% 60%,24% 30%,48% 30%,48% 75%,72% 75%,72% 10%,100% 10%,100% 100%)}
.a4{background:var(--sun)}.a4 b:nth-child(1){left:50%;top:50%;width:58%;aspect-ratio:1;margin:-29% 0 0 -29%;border-radius:50%;border:clamp(16px,3.4vw,56px) solid #000}
.a5{background:var(--sky)}.a5 b:nth-child(1){left:-6%;bottom:-6%;width:62%;height:62%;background:#000;border-radius:0 100% 0 0}.a5 b:nth-child(2){right:-8%;top:-14%;width:50%;aspect-ratio:1;border-radius:50%;background:var(--paper)}
.a6{background:var(--paper)}.a6 b:nth-child(1){left:0;bottom:0;width:100%;height:46%;background:var(--blue);border-radius:100% 100% 0 0/100% 100% 0 0}.a6 b:nth-child(2){left:14%;top:16%;width:24%;aspect-ratio:1;border-radius:50%;background:var(--ember)}
.a7{background:var(--ember)}.a7 b:nth-child(1){left:12%;top:14%;width:44%;aspect-ratio:1;background:#000;border-radius:50% 50% 0 50%}.a7 b:nth-child(2){right:10%;bottom:12%;width:34%;aspect-ratio:1;border-radius:50%;background:var(--sun)}

/* embedded documents */
.docs{background:var(--paper);color:#000;padding-block:clamp(56px,8vw,120px)}
.docs .tag::before{background:#000}
.docs__intro{max-width:44ch;margin-bottom:clamp(28px,4vw,56px);font-size:clamp(18px,1.6vw,24px);line-height:1.3;font-weight:500}
.viewer{margin-bottom:clamp(40px,6vw,88px)}
.viewer__top{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px var(--gutter);margin-bottom:16px}
.viewer__title{margin:0;font:400 clamp(28px,4.2vw,72px)/.95 var(--display);letter-spacing:-.025em}
.viewer__note{max-width:56ch;margin-bottom:14px}
.viewer__open{font:300 13px/1.4 var(--mono);text-underline-offset:5px;min-height:44px;display:inline-flex;align-items:center}
.viewer__open:hover{color:#c0188f}
.viewer__frame{display:block;width:100%;height:min(86vh,980px);min-height:420px;border:2px solid #000;border-radius:var(--r);background:#fff}
.viewer__fallback{padding:24px}

/* timeline */
.path{padding-block:clamp(56px,8vw,120px)}
.path__list{list-style:none;margin:0;padding:0;border-top:1px solid #333}
.path__list li{display:grid;grid-template-columns:minmax(120px,1fr) 3fr;gap:var(--gutter);padding:18px 0;border-bottom:1px solid #333}
.path__when{font:300 12px/1.6 var(--mono);color:var(--mute)}
.path__what strong{font-weight:600}
.path__what span{color:var(--mute)}
.wins{margin-top:clamp(32px,5vw,64px);max-width:60ch}
.wins h3{margin:0 0 12px;font:400 clamp(22px,2.4vw,34px)/1.1 var(--display);letter-spacing:-.02em}
.wins ul{margin:0;padding-left:1.1em}
.wins li{margin-bottom:6px}

/* consulting */
.consult-intro{background:var(--sky);color:#000;padding-block:clamp(36px,6vw,90px) clamp(48px,7vw,104px)}
.consult-intro .head__lede{max-width:44ch}
.talk{padding-block:clamp(56px,8vw,120px)}
.talk__row{display:grid;grid-template-columns:5fr 7fr;gap:var(--gutter);padding-block:clamp(22px,3vw,40px);border-top:1px solid #333}
.talk__row h3{margin:0;font:400 clamp(26px,3.6vw,60px)/1 var(--display);letter-spacing:-.02em}
.talk__row p{max-width:52ch}
.stack{background:var(--blue);color:#000;padding-block:clamp(48px,7vw,104px)}
.stack__list{list-style:none;margin:0;padding:0;border-top:2px solid #000}
.stack__list li{padding:clamp(12px,1.4vw,20px) 0;border-bottom:2px solid #000;font:400 clamp(22px,3.4vw,54px)/1.1 var(--display);letter-spacing:-.02em}
.stack__note{margin-top:20px;max-width:44ch}
.stack .tag::before{background:#000}

/* footer */
.foot{background:var(--sky);color:#000;padding:clamp(32px,5vw,72px) var(--gutter) 20px;display:grid;grid-template-columns:1fr 1fr;gap:var(--gutter)}
.foot__name{grid-column:1/-1;margin:0 0 clamp(16px,3vw,40px);font:400 clamp(40px,14.4vw,320px)/.9 var(--display);letter-spacing:-.04em;white-space:nowrap}
.foot__links{display:flex;flex-wrap:wrap;gap:12px;align-content:start}
.foot__links a{display:inline-flex;align-items:center;min-height:48px;padding:0 26px;border:2px solid #000;border-radius:999px;text-decoration:none;font:300 13px/1 var(--mono);transition:background .2s,color .2s}
.foot__links a:hover{background:#000;color:var(--sky)}
.foot__mail p{margin-bottom:4px;font-size:.95em}
.foot__mail a{font:400 clamp(20px,2.6vw,40px)/1.15 var(--display);letter-spacing:-.02em;text-decoration:none;overflow-wrap:anywhere}
.foot__mail a:hover{text-decoration:underline;text-underline-offset:6px}
.foot__legal{grid-column:1/-1;margin-top:clamp(24px,4vw,56px);font:300 11px/1.4 var(--mono)}

@media (max-width:820px){
  .bar__toggle{display:inline-flex;align-items:center}
  .bar__nav{position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:stretch;gap:0;padding:8px var(--gutter) 20px;background:#000;display:none}
  .bar__nav.is-open{display:flex}
  .bar__nav a{padding:14px 0;border-bottom:1px solid #2a2a2a;min-height:44px}
  .bar__nav .bar__cta{margin-top:14px;text-align:center;border:1px solid #fff}
  .split{grid-template-columns:1fr;margin-top:clamp(100px,30vw,160px)}
  .glyph{width:52vw}
  .door{min-height:360px;padding-top:clamp(70px,22vw,120px)}
  .door--consulting{padding-top:clamp(36px,10vw,60px)}
  .pj,.talk__row,.foot{grid-template-columns:1fr}
  .path__list li{grid-template-columns:1fr;gap:4px}
  .viewer__frame{height:70vh}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .glyph .petal{opacity:1;transform:rotate(calc(var(--r)*1deg)) scale(1);animation:none!important}
  .glyph svg{animation:none!important}
  .curtain{display:none}
  .btn,.door,.door__go{transition:none}
}

/* page transition curtain */
.curtain{position:fixed;inset:0;z-index:100;background:var(--curtain,#000);transform:translateY(100%);pointer-events:none;will-change:transform}
.curtain.is-in{transform:translateY(0);transition:transform .55s cubic-bezier(.7,0,.2,1)}
html.arriving .curtain{transform:translateY(0);animation:curtain-out .7s cubic-bezier(.7,0,.2,1) .05s forwards}
@keyframes curtain-out{to{transform:translateY(-100%)}}
html.arriving main>section:first-child>*{animation:rise .8s cubic-bezier(.2,.8,.2,1) .35s both}
@keyframes rise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){html.arriving main>section:first-child>*{animation:none}}
