@font-face{font-family:Fraunces;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/a5a3076f5a3c2968-s.09mqwf_zjnrdf.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/23f1a98b08006014-s.0s5mkn35-hrc5.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/54fc36028e2bb174-s.p.20jfceqj9zyw9.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces Fallback;src:local(Times New Roman);ascent-override:84.71%;descent-override:22.09%;line-gap-override:0.0%;size-adjust:115.45%}.fraunces_374e9e7f-module__MQxEAa__className{font-family:Fraunces,Fraunces Fallback;font-style:normal}.fraunces_374e9e7f-module__MQxEAa__variable{--font-fraunces:"Fraunces", "Fraunces Fallback"}
@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(../media/c7f47671e39f7787-s.0klc_mi0-5f4_.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(../media/f06bf9da926bae75-s.p.2874ccu1_u7jf.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Sans Fallback;src:local(Arial);ascent-override:94.42%;descent-override:24.33%;line-gap-override:0.0%;size-adjust:102.74%}.instrument_sans_69daf838-module__T3g6bW__className{font-family:Instrument Sans,Instrument Sans Fallback;font-style:normal}.instrument_sans_69daf838-module__T3g6bW__variable{--font-instrument-sans:"Instrument Sans", "Instrument Sans Fallback"}
@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/13bf9871fe164e7f-s.2f7nqdagzwx2-.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/cc545e633e20c56d-s.176arc174-8zp.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/71b036adf157cdcf-s.0bp8oijd_gu96.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/89b21bb081cb7469-s.1fby2rem9ngyr.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/3fe682a82f50d426-s.0vfdmo25voy_0.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/70bc3e132a0a741e-s.p.3t6q91iet4nsy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_7d65b77b-module__VxV-Ta__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_7d65b77b-module__VxV-Ta__variable{--font-jetbrains-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
@property --mr{syntax:"<length>";inherits:true;initial-value:360px}:root{--night:#191114;--night-2:#241619;--plum:#6b2d46;--rose:#c4576b;--amber:#e9a93c;--amber-hi:#ffd489;--paper:#f7efe6;--sand:#eadbc9;--moss:#6e7f55;--ink:#241a1d;--ink-soft:#6a5b60;--display:var(--font-fraunces), Georgia, serif;--body:var(--font-instrument-sans), system-ui, sans-serif;--mono:var(--font-jetbrains-mono), ui-monospace, monospace;--gutter:clamp(1.25rem, 5vw, 4.5rem);--mx:50%;--my:40%}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased;margin:0;font-size:17px;line-height:1.6;overflow-x:hidden}h1,h2,h3{font-family:var(--display);letter-spacing:-.02em;margin:0;font-weight:500;line-height:1.02}a{color:inherit}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none}.frame{max-width:1240px;padding-inline:var(--gutter);z-index:3;margin:0 auto;position:relative}.frame.mt-48p{margin-top:48px}.eyebrow{font-family:var(--mono);letter-spacing:.22em;text-transform:uppercase;color:var(--ink-soft);align-items:center;gap:.9rem;margin-bottom:2rem;font-size:.7rem;font-weight:400;line-height:1.6;display:flex}.eyebrow:after{content:"";opacity:.3;background:currentColor;flex:1;height:1px}.grain{pointer-events:none;z-index:100;opacity:.3;mix-blend-mode:overlay;position:fixed;inset:0}.rail{z-index:60;flex-direction:column;align-items:flex-end;gap:1.1rem;display:flex;position:fixed;top:50%;right:1.6rem;transform:translateY(-50%)}@media (max-width:1100px){.rail{display:none}}.rail a{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);opacity:.45;align-items:center;gap:.65rem;font-size:.62rem;text-decoration:none;transition:opacity .3s,color .3s;display:flex}.rail a .tick{background:currentColor;width:18px;height:1px;transition:width .35s}.rail a:hover{opacity:.9}.rail a.on{opacity:1;color:var(--plum)}.rail a.on .tick{width:34px}.rail.on-dark a{color:var(--paper)}.rail.on-dark a.on{color:var(--amber)}.night{background:var(--night);color:var(--paper);isolation:isolate;position:relative;overflow:hidden}.night:before{content:"";z-index:0;background:radial-gradient(60% 55% at 18% 12%, #e9a93c24, transparent 70%), radial-gradient(50% 50% at 88% 78%, #c4576b29, transparent 70%), linear-gradient(160deg, var(--night-2), var(--night) 60%);position:absolute;inset:0}.lamp{z-index:1;pointer-events:none;will-change:transform;opacity:0;background:radial-gradient(circle,#e9a93c33,#e9a93c0f 42%,#0000 68%);width:820px;height:820px;margin:-410px 0 0 -410px;transition:opacity .6s;position:absolute;top:0;left:0}.night.awake .lamp{opacity:1}.topbar{z-index:70;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);color:var(--paper);background:#191114b3;border-bottom:1px solid #f7efe61f;position:fixed;top:0;left:0;right:0}.topbar .frame{justify-content:space-between;align-items:center;gap:1rem;padding-block:.85rem;display:flex}.brand{font-family:var(--mono);font-size:.78rem;text-decoration:none}.brand em{color:var(--amber);font-style:normal}.navlinks{gap:1.6rem;font-size:.88rem;display:flex}.navlinks a{opacity:.72;padding-bottom:3px;text-decoration:none;position:relative}.navlinks a:after{content:"";background:var(--amber);height:1px;transition:right .35s;position:absolute;bottom:0;left:0;right:100%}.navlinks a:hover{opacity:1}.navlinks a:hover:after{right:0}@media (max-width:640px){.navlinks a:not(.keep){display:none}}.hero{align-items:center;min-height:100svh;padding-block:9rem 5rem;display:flex}.kicker{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--amber);margin-bottom:2rem;font-size:.72rem;display:block}.wordmark{margin-bottom:1.9rem;display:inline-block;position:relative}.wordmark h1{font-variation-settings:"SOFT" 70, "WONK" 1, "opsz" 144;font-size:clamp(3.6rem,15vw,12rem);font-weight:400;line-height:.86}.wordmark .dim{color:#f7efe699}.wordmark .lit{color:#ffd489;pointer-events:none;text-shadow:0 0 34px #e9a93c73;-webkit-mask-image:radial-gradient(circle var(--mr) at var(--mx) var(--my), #000 12%, transparent 68%);-webkit-mask-image:radial-gradient(circle var(--mr) at var(--mx) var(--my), #000 12%, transparent 68%);mask-image:radial-gradient(circle var(--mr) at var(--mx) var(--my), #000 12%, transparent 68%);position:absolute;inset:0}.hero.igniting .lit{animation:1.5s cubic-bezier(.22,.8,.25,1) both ignite}@keyframes ignite{0%{--mr:0px;opacity:0}22%{opacity:1}60%{--mr:1500px}to{--mr:360px;opacity:1}}.lede{color:#f7efe6cc;max-width:37ch;margin:0 0 2.75rem;font-size:clamp(1.15rem,2.3vw,1.6rem);line-height:1.45}.lede b{color:var(--paper);font-weight:500}.hero-meta{font-family:var(--mono);color:#f7efe68c;border-top:1px solid #f7efe629;flex-wrap:wrap;gap:.6rem 2.25rem;max-width:74ch;padding-top:1.4rem;font-size:.76rem;display:flex}.hero-meta b{color:var(--amber);font-weight:500}.scrollcue{z-index:3;font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:#f7efe666;flex-direction:column;align-items:center;gap:.6rem;font-size:.64rem;display:flex;position:absolute;bottom:2rem;left:50%;transform:translate(-50%)}.scrollcue:after{content:"";background:linear-gradient(#f7efe680,#0000);width:1px;height:44px;animation:2.4s ease-in-out infinite drop}@keyframes drop{0%,to{transform-origin:top;transform:scaleY(.35)}50%{transform-origin:top;transform:scaleY(1)}}.word{opacity:0;filter:blur(6px);transition:opacity .7s cubic-bezier(.2,.8,.2,1),transform .7s cubic-bezier(.2,.8,.2,1),filter .7s;display:inline-block;transform:translateY(.5em)rotate(1.5deg)}.in .word,.word.in{opacity:1;filter:none;transform:none}.marquee{background:var(--amber);color:var(--night);border-block:1px solid #19111440;padding:.85rem 0;overflow:hidden}.marquee-track{width:max-content;animation:42s linear infinite slide;display:flex}.marquee:hover .marquee-track{animation-play-state:paused}.marquee-group{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;flex-shrink:0;gap:3rem;padding-right:3rem;font-size:.8rem;display:flex}.marquee-group span{align-items:center;gap:3rem;display:inline-flex}.marquee-group span:after{content:"◆";opacity:.5;font-size:.55rem}@keyframes slide{to{transform:translate(-50%)}}.work{background:var(--paper);padding-block:clamp(4rem,9vw,7rem) 0}.stack-wrap{padding-bottom:9rem}.project{background:var(--paper);border:1px solid var(--sand);border-radius:6px;margin-bottom:2.5rem;padding:clamp(1.5rem,3.5vw,2.75rem);position:sticky;box-shadow:0 26px 60px -34px #241a1d8c}.project:before{content:"";background:var(--spine);border-radius:6px 0 0 6px;width:4px;position:absolute;top:0;bottom:0;left:0}.project:first-of-type{--spine:var(--plum);top:6rem}.project:nth-of-type(2){--spine:var(--rose);top:7.4rem}.project:nth-of-type(3){--spine:var(--moss);top:8.8rem}.p-head{grid-template-columns:1fr;gap:2rem;display:grid}@media (min-width:820px){.p-head{grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);align-items:center;gap:3rem}}.dates{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);font-size:.7rem}.project h3{font-variation-settings:"SOFT" 60, "WONK" 1;margin:.5rem 0 .9rem;font-size:clamp(1.9rem,4.4vw,3rem)}.project-title{align-items:center;gap:8px;display:flex}.project-title a{display:flex}.project-title a:hover{fill:red}.problem{max-width:46ch;color:var(--ink-soft);margin:0 0 1.5rem}.facts{border-top:1px solid var(--sand);margin:0}.facts>div{border-bottom:1px solid var(--sand);grid-template-columns:5.5rem 1fr;gap:1rem;padding:.55rem 0;font-size:.94rem;display:grid}.facts dt{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);padding-top:.3rem;font-size:.63rem}.facts dd{margin:0}.facts .out{font-weight:500}.stack{flex-wrap:wrap;gap:.4rem;display:flex}.stack span{font-family:var(--mono);border:1px solid var(--moss);color:var(--moss);border-radius:3px;padding:.15rem .5rem;font-size:.67rem}.thumb-shell{will-change:transform;border-radius:4px;transition:transform .5s cubic-bezier(.2,.8,.2,1);position:relative;box-shadow:0 18px 42px -26px #241a1db3}.thumb-shell:before{content:"";border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .5s;position:absolute;inset:0;box-shadow:0 34px 66px -30px #241a1de6}.project:hover .thumb-shell{transform:translateY(-6px)scale(1.014)}.project:hover .thumb-shell:before{opacity:1}.thumb{aspect-ratio:4/3;background:linear-gradient(150deg, var(--night-2), var(--night));font-family:var(--mono);color:#f7efe673;text-align:center;background-size:cover;border-radius:4px;justify-content:center;align-items:center;padding:1rem;font-size:.7rem;display:flex;position:relative;overflow:hidden}.thumb:after{content:"";opacity:0;background:radial-gradient(70% 60% at 50% 0,#e9a93c42,#0000 70%);transition:opacity .5s;position:absolute;inset:0}.project:hover .thumb:after{opacity:1}.expand{font-family:var(--mono);color:var(--plum);border:1px solid var(--plum);border-radius:3px;align-items:center;gap:.6rem;margin-top:1.5rem;padding:.55rem 1.05rem;font-size:.75rem;transition:background .3s,color .3s,gap .3s;display:inline-flex}.expand:hover{background:var(--plum);color:var(--paper);gap:.95rem}.expand .sign{transition:transform .35s;display:inline-block}.project.open .expand .sign{transform:rotate(45deg)}.drawer{grid-template-rows:0fr;transition:grid-template-rows .55s cubic-bezier(.2,.8,.2,1);display:grid}.project.open .drawer{grid-template-rows:1fr}.drawer-inner{overflow:hidden}.case{border-top:1px solid var(--sand);grid-template-columns:1fr;gap:2rem;margin-top:2rem;padding-top:2rem;display:grid}@media (min-width:820px){.case{grid-template-columns:repeat(3,1fr);gap:2.5rem}}.case h4{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--plum);margin:0 0 .6rem;font-size:.63rem;font-weight:500}.case p{color:var(--ink-soft);margin:0;font-size:.95rem}.candid{border-left:3px solid var(--amber);grid-column:1/-1;margin-top:.5rem;padding:.2rem 0 .2rem 1.1rem}.candid p{color:var(--ink);font-style:italic}.experience{background:var(--sand);padding-block:clamp(4rem,9vw,7rem)}.job{border-top:1px solid #241a1d29;grid-template-columns:1fr;gap:.35rem;padding:1.35rem 1rem 1.35rem 0;transition:background .3s,padding-left .3s;display:grid}@media (min-width:720px){.job{grid-template-columns:9.5rem minmax(0,1fr);align-items:baseline;gap:2.5rem}}.job:hover{background:#f7efe68c;padding-left:1rem}.when{font-family:var(--mono);color:var(--ink-soft);letter-spacing:.05em;font-size:.74rem}.job h3{font-family:var(--body);letter-spacing:0;font-size:1.18rem;font-weight:600}.job p{color:var(--ink-soft);max-width:60ch;margin:.3rem 0 0;font-size:.95rem}.resume{font-family:var(--mono);color:var(--plum);border:1px solid var(--plum);border-radius:3px;align-items:center;gap:.6rem;margin-top:2.25rem;padding:.55rem 1.05rem;font-size:.75rem;text-decoration:none;transition:background .3s,color .3s,gap .3s;display:inline-flex}.resume:hover{background:var(--plum);color:var(--paper);gap:.95rem}.about{padding-block:clamp(4.5rem,10vw,8rem)}.about .eyebrow{color:#f7efe699}.about-grid{grid-template-columns:1fr;align-items:center;gap:3rem;display:grid}@media (min-width:880px){.about-grid{grid-template-columns:minmax(0,1fr) 320px;gap:5rem}}.about h2{font-variation-settings:"SOFT" 70, "WONK" 1;max-width:20ch;margin-bottom:1.5rem;font-size:clamp(2rem,5vw,3.4rem)}.about h2 em{color:var(--amber);font-style:italic}.about p{color:#f7efe6c7;max-width:54ch;margin:0 0 1.1rem}.portrait{aspect-ratio:4/5;font-family:var(--mono);color:#f7efe680;background:#f7efe60d;border:1px solid #f7efe638;border-radius:4px;justify-content:center;align-items:center;font-size:.7rem;display:flex;box-shadow:0 30px 70px -30px #000c}.portrait div{background-position:50% -50px;background-size:cover;width:100%;height:100%}.contact{background:linear-gradient(180deg, var(--sand), var(--paper) 55%);text-align:center;padding-block:clamp(4.5rem,10vw,8rem)}.contact h2{font-variation-settings:"SOFT" 80, "WONK" 1;margin-bottom:1.2rem;font-size:clamp(2.2rem,7vw,4.6rem)}.contact h2 em{color:var(--plum);font-style:italic}.contact .sub{color:var(--ink-soft);max-width:44ch;margin:0 auto 2.75rem}.email{font-family:var(--display);font-variation-settings:"SOFT" 80, "WONK" 1;background-image:linear-gradient(var(--amber), var(--amber));background-position:0 88%;background-repeat:no-repeat;background-size:100% 38%;padding:0 .2em;font-size:clamp(1.4rem,4vw,2.4rem);font-style:italic;text-decoration:none;transition:background-size .35s,color .35s;display:inline-block}.email:hover{color:var(--night);background-size:100% 100%}.elsewhere{font-family:var(--mono);flex-wrap:wrap;justify-content:center;gap:1.75rem;margin-top:3rem;font-size:.78rem;display:flex}.elsewhere a{color:var(--ink-soft);border-bottom:1px solid var(--sand);padding-bottom:2px;text-decoration:none}.elsewhere a:hover{color:var(--plum);border-bottom-color:var(--plum)}footer{background:var(--night);color:#f7efe699;font-family:var(--mono);text-align:center;padding:1.6rem 0;font-size:.7rem}:focus-visible{outline:2px solid var(--amber);outline-offset:3px;border-radius:2px}.contact :focus-visible,.work :focus-visible,.experience :focus-visible{outline-color:var(--plum)}.reveal{opacity:0;transition:opacity .8s cubic-bezier(.2,.8,.2,1),transform .8s cubic-bezier(.2,.8,.2,1);transform:translateY(22px)}.reveal.in{opacity:1;transform:none}.reveal.d1{transition-delay:.1s}.reveal.d2{transition-delay:.2s}.reveal.d3{transition-delay:.3s}.skip{background:var(--amber);color:var(--night);z-index:200;font-family:var(--mono);padding:.7rem 1.1rem;font-size:.75rem;position:absolute;top:0;left:-9999px}.skip:focus{top:1rem;left:1rem}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal,.word{opacity:1;filter:none;transition:none;transform:none}.marquee-track,.scrollcue:after{animation:none}.marquee-track{flex-wrap:wrap;justify-content:center;width:auto}.marquee-group:last-child,.lamp{display:none}.hero.igniting .lit{animation:none}.wordmark .lit{display:none}.wordmark .dim{color:var(--paper)}.project{position:static}.drawer,.thumb-shell,.job,.expand,.email,.resume{transition:none}}
