:root{--paper: #f1ebdf;--paper-2: #e8e0cf;--paper-3: #ded4bf;--ink: #16150f;--ink-soft: #3d3a2e;--muted: #736c58;--rule: #cdc3ab;--clay: #c0481f;--clay-deep: #95371a;--pine: #1d5247;--sky: #8fb7c4;--sand: #e6b894;--sage: #b9cbb0;--display: "Bricolage Grotesque", system-ui, sans-serif;--body: "Instrument Sans", system-ui, sans-serif;--mono: "JetBrains Mono", ui-monospace, monospace;--gut: clamp(1.25rem, 5vw, 6rem);--max: 1180px;--ease: cubic-bezier(.22, 1, .36, 1);--slow: .85s}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--body);font-size:clamp(1rem,.95rem + .25vw,1.1rem);line-height:1.65;-webkit-font-smoothing:antialiased;overflow-x:hidden}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}body:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:9999;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23n)'/%3E%3C/svg%3E")}a{color:inherit}:focus-visible{outline:2.5px solid var(--clay);outline-offset:3px;border-radius:2px}.skip{position:absolute;left:-9999px;top:0;background:var(--ink);color:var(--paper);padding:.75rem 1.25rem;z-index:10000}.skip:focus{left:0}.wrap{max-width:var(--max);margin:0 auto;padding-inline:var(--gut)}.btn{display:inline-flex;align-items:center;gap:.5rem;text-decoration:none;font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.09em;padding:.62rem 1.05rem;border-radius:999px;border:1px solid var(--ink);transition:background .3s var(--ease),color .3s var(--ease),transform .3s var(--ease)}.btn:hover{background:var(--ink);color:var(--paper);transform:translateY(-2px)}.btn.solid{background:var(--ink);color:var(--paper)}.btn.solid:hover{background:var(--clay);border-color:var(--clay)}.btn svg{width:11px;height:11px;flex:none}.prog{position:fixed;top:0;left:0;height:3px;width:100%;z-index:900;background:transparent}.prog span{display:block;height:100%;width:0;background:var(--clay)}nav{position:fixed;top:0;left:0;right:0;z-index:800;padding:1.1rem 0;transition:background .4s var(--ease),box-shadow .4s var(--ease),padding .4s var(--ease)}nav.stuck{background:#f1ebdfe0;backdrop-filter:blur(14px);box-shadow:0 1px 0 var(--rule);padding:.7rem 0}.nav-in{display:flex;align-items:center;justify-content:space-between;gap:1rem}.mark{font-family:var(--display);font-weight:800;font-size:1.05rem;letter-spacing:-.02em;text-decoration:none;display:inline-flex;align-items:center;gap:.5rem}.mark i{width:9px;height:9px;border-radius:50%;background:var(--clay);display:block;flex:none}.nav-links{display:flex;align-items:center;gap:clamp(.9rem,2vw,1.9rem);list-style:none;margin:0;padding:0}.nav-links a{font-family:var(--mono);font-size:.74rem;text-transform:uppercase;letter-spacing:.1em;text-decoration:none;color:var(--ink-soft);position:relative;padding-block:.3rem}.nav-links a:after{content:"";position:absolute;left:0;bottom:0;height:1.5px;width:100%;background:var(--clay);transform:scaleX(0);transform-origin:0 50%;transition:transform .45s var(--ease)}.nav-links a:hover:after,.nav-links a:focus-visible:after{transform:scaleX(1)}.hire{font-family:var(--mono);font-size:.74rem;text-transform:uppercase;letter-spacing:.09em;text-decoration:none;background:var(--ink);color:var(--paper);padding:.6rem 1.05rem;border-radius:999px;white-space:nowrap;transition:background .3s var(--ease),transform .3s var(--ease)}.hire:hover{background:var(--clay);transform:translateY(-2px)}@media (max-width: 760px){.nav-links{display:none}}header.hero{position:relative;padding:clamp(8rem,18vh,12rem) 0 clamp(4rem,9vh,7rem);overflow:hidden}.hero .wrap{position:relative;z-index:1}.blobs{position:absolute;inset:0;pointer-events:none;z-index:0}.blob{position:absolute;border-radius:50%;filter:blur(62px);opacity:.5;will-change:transform}.b1{width:46vw;height:46vw;min-width:320px;min-height:320px;background:var(--sky);top:-14%;right:-10%;animation:drift1 24s ease-in-out infinite}.b2{width:34vw;height:34vw;min-width:240px;min-height:240px;background:var(--sand);bottom:-18%;left:-8%;animation:drift2 30s ease-in-out infinite}.b3{width:22vw;height:22vw;min-width:170px;min-height:170px;background:var(--sage);top:38%;right:24%;opacity:.42;animation:drift3 21s ease-in-out infinite}@keyframes drift1{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-5%,6%) scale(1.09)}}@keyframes drift2{0%,to{transform:translate(0) scale(1)}50%{transform:translate(7%,-5%) scale(1.12)}}@keyframes drift3{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-9%,-8%) scale(.92)}}.eyebrow{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);border:1px solid var(--rule);border-radius:999px;padding:.4rem .9rem;background:#f1ebdf99}.pulse{width:7px;height:7px;border-radius:50%;background:var(--pine);position:relative;flex:none}.pulse:after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--pine);animation:pulse 2.4s ease-out infinite}@keyframes pulse{0%{transform:scale(1);opacity:.6}to{transform:scale(3.4);opacity:0}}h1{font-family:var(--display);font-weight:600;font-size:clamp(2.9rem,10.5vw,8.2rem);line-height:.93;letter-spacing:-.045em;margin:1.6rem 0 0;max-width:15ch}h1 b{font-weight:800;color:var(--clay);font-style:normal}.hero-lede{font-size:clamp(1.08rem,1rem + .7vw,1.45rem);line-height:1.5;color:var(--ink-soft);max-width:46ch;margin:clamp(1.6rem,4vw,2.4rem) 0 0}.hero-lede strong{font-weight:600;color:var(--ink)}.hero-meta{display:flex;flex-wrap:wrap;gap:.5rem 1.6rem;margin-top:2.2rem;font-family:var(--mono);font-size:.76rem;color:var(--muted);letter-spacing:.04em}.hero-meta span{display:inline-flex;align-items:center;gap:.5rem}.hero-meta span:before{content:"";width:4px;height:4px;border-radius:50%;background:var(--clay);flex:none}.scroll-cue{display:inline-flex;align-items:center;gap:1rem;margin-top:clamp(3rem,7vw,4.5rem);font-family:var(--mono);font-size:.68rem;letter-spacing:.42em;text-transform:uppercase;color:var(--muted);text-decoration:none}.scroll-cue i{display:block;width:46px;height:1px;background:var(--rule);position:relative;overflow:hidden}.scroll-cue i:after{content:"";position:absolute;inset:0;background:var(--clay);transform:translate(-100%);animation:sweep 2.6s var(--ease) infinite}@keyframes sweep{0%{transform:translate(-100%)}60%,to{transform:translate(100%)}}section{padding:clamp(4.5rem,11vh,8.5rem) 0;position:relative}.sec-head{display:flex;align-items:baseline;gap:1rem;margin-bottom:clamp(2.2rem,5vw,3.4rem)}.sec-num{font-family:var(--mono);font-size:.74rem;color:var(--clay);letter-spacing:.1em;flex:none;padding-top:.4em}h2{font-family:var(--display);font-weight:600;font-size:clamp(1.85rem,5.2vw,3.5rem);line-height:1.04;letter-spacing:-.035em;margin:0}h2 b{font-weight:800;color:var(--clay);font-style:normal}.about-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:clamp(2rem,6vw,5rem);align-items:start}@media (max-width: 860px){.about-grid{grid-template-columns:1fr}}.about-body p{font-size:clamp(1.02rem,.98rem + .35vw,1.22rem);line-height:1.62;color:var(--ink-soft);margin:0 0 1.15em;max-width:56ch}.about-body p:last-child{margin-bottom:0}.about-body strong{font-weight:600;color:var(--ink)}.facts{border-top:1px solid var(--rule);margin:0}.fact{display:flex;justify-content:space-between;gap:1.5rem;padding:.95rem 0;border-bottom:1px solid var(--rule);font-size:.92rem}.fact dt{font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin:0;flex:none}.fact dd{margin:0;text-align:right;font-weight:500}.fact dd a{text-decoration:none;border-bottom:1.5px solid var(--clay);padding-bottom:1px;transition:color .25s}.fact dd a:hover{color:var(--clay)}.fact dd small{display:block;font-family:var(--mono);font-size:.68rem;color:var(--muted);font-weight:400;letter-spacing:.03em;margin-top:.15rem}.projects{border-top:1px solid var(--rule)}.proj{border-bottom:1px solid var(--rule);position:relative}.proj-head{width:100%;background:none;border:0;padding:clamp(1.5rem,3.4vw,2.4rem) 0;display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:clamp(1rem,3vw,2.4rem);align-items:center;text-align:left;cursor:pointer;font:inherit;color:inherit;list-style:none;transition:padding-left .5s var(--ease)}.proj-head::-webkit-details-marker{display:none}.proj-head::marker{content:""}.proj-head:hover{padding-left:clamp(.4rem,1.2vw,1rem)}.p-num{font-family:var(--mono);font-size:.74rem;color:var(--muted);letter-spacing:.08em;flex:none;align-self:start;padding-top:.5em}.p-title{font-family:var(--display);font-weight:600;font-size:clamp(1.5rem,4.2vw,2.75rem);line-height:1.06;letter-spacing:-.032em;margin:0 0 .5rem;transition:color .35s var(--ease)}.proj-head:hover .p-title{color:var(--clay)}.p-tag{font-size:clamp(.95rem,.92rem + .2vw,1.08rem);color:var(--muted);line-height:1.45;max-width:54ch;margin:0}.p-status{display:inline-flex;align-items:center;gap:.45rem;font-family:var(--mono);font-size:.64rem;text-transform:uppercase;letter-spacing:.11em;padding:.28rem .62rem;border-radius:999px;margin-bottom:.7rem;background:var(--paper-2);color:var(--ink-soft);border:1px solid var(--rule)}.p-status i{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}.p-status.live{background:#1d52471a;border-color:#1d524747;color:var(--pine)}.p-status.wip{background:#c0481f1a;border-color:#c0481f4d;color:var(--clay-deep)}.plus{position:relative;width:38px;height:38px;border-radius:50%;border:1px solid var(--rule);flex:none;display:grid;place-items:center;align-self:start;margin-top:.25rem;transition:background .35s var(--ease),border-color .35s var(--ease),transform .5s var(--ease)}.plus:before,.plus:after{content:"";position:absolute;background:var(--ink);transition:background .35s,opacity .35s var(--ease)}.plus:before{width:13px;height:1.5px}.plus:after{width:1.5px;height:13px}.proj-head:hover .plus{background:var(--ink);border-color:var(--ink);transform:rotate(90deg)}.proj-head:hover .plus:before,.proj-head:hover .plus:after{background:var(--paper)}.proj[open] .plus{transform:rotate(180deg)}.proj[open] .plus:after{opacity:0}.proj-body{display:grid;grid-template-columns:auto minmax(0,1fr);gap:clamp(1rem,3vw,2.4rem);overflow:hidden;max-height:0;opacity:0;transition:max-height .7s var(--ease),opacity .5s var(--ease)}.proj[open] .proj-body{opacity:1}.proj-body-in{padding-bottom:clamp(2rem,4.5vw,3.2rem);max-width:62ch}.proj-body-in p{color:var(--ink-soft);margin:0 0 1.05em;font-size:clamp(.98rem,.95rem + .25vw,1.1rem)}.proj-body-in p:last-of-type{margin-bottom:1.6em}.proj-body-in strong{font-weight:600;color:var(--ink)}.stack{display:flex;flex-wrap:wrap;gap:.45rem;margin:0 0 1.5rem;padding:0;list-style:none}.stack li{font-family:var(--mono);font-size:.68rem;letter-spacing:.05em;padding:.3rem .6rem;border:1px solid var(--rule);border-radius:4px;color:var(--muted);background:var(--paper-2)}.p-links{display:flex;flex-wrap:wrap;gap:.6rem}.aside{border-left:2px solid var(--clay);padding:.1rem 0 .1rem 1.1rem;margin:0 0 1.6rem;font-size:.95rem;color:var(--muted)}.aside b{color:var(--ink-soft);font-weight:600}@media (max-width: 640px){.proj-head{grid-template-columns:minmax(0,1fr) auto}.p-num{display:none}.proj-body{grid-template-columns:1fr}}.repo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:clamp(.7rem,1.4vw,1rem)}.repo{background:var(--paper);padding:1.5rem 1.4rem;text-decoration:none;display:flex;flex-direction:column;gap:.5rem;border:1px solid var(--rule);border-radius:7px;transition:background .35s var(--ease),border-color .35s var(--ease),transform .35s var(--ease)}.repo:hover{background:var(--paper-2);border-color:var(--clay);transform:translateY(-3px)}.repo h3{font-family:var(--display);font-weight:600;font-size:1.1rem;letter-spacing:-.018em;margin:0;display:flex;align-items:center;justify-content:space-between;gap:.6rem}.repo h3 svg{width:12px;height:12px;flex:none;opacity:0;transform:translate(-4px,4px);transition:opacity .35s var(--ease),transform .35s var(--ease)}.repo:hover h3 svg{opacity:1;transform:none}.repo p{margin:0;font-size:.9rem;color:var(--muted);line-height:1.5;flex:1}.repo span{font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--clay)}.xp{border-top:1px solid var(--rule)}.xp-label{font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--clay);margin:clamp(2.5rem,5vw,3.5rem) 0 0}.xp-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem clamp(1.5rem,4vw,3rem);padding:clamp(1.4rem,3vw,2rem) 0;border-bottom:1px solid var(--rule);align-items:baseline}.xp-row h3{font-family:var(--display);font-weight:600;font-size:clamp(1.12rem,1.05rem + .5vw,1.5rem);letter-spacing:-.022em;margin:0 0 .15rem}.xp-org{font-size:.95rem;color:var(--clay);font-weight:500}.xp-org a{color:inherit;text-decoration:none;border-bottom:1.5px solid currentColor}.xp-row ul{margin:.85rem 0 0;padding-left:1.1rem;color:var(--ink-soft);font-size:.97rem;line-height:1.58;max-width:62ch}.xp-row li{margin-bottom:.4rem}.xp-row li::marker{color:var(--clay)}.xp-when{font-family:var(--mono);font-size:.72rem;color:var(--muted);letter-spacing:.05em;white-space:nowrap;text-align:right}@media (max-width: 640px){.xp-row{grid-template-columns:1fr}.xp-when{text-align:left}}.marquee{border-block:1px solid var(--rule);padding:1.3rem 0;overflow:hidden;background:var(--paper-2);position:relative}.marquee:before,.marquee:after{content:"";position:absolute;top:0;bottom:0;width:11vw;z-index:2;pointer-events:none}.marquee:before{left:0;background:linear-gradient(90deg,var(--paper-2),transparent)}.marquee:after{right:0;background:linear-gradient(270deg,var(--paper-2),transparent)}.track{display:flex;width:max-content;animation:roll 42s linear infinite}.marquee:hover .track{animation-play-state:paused}@keyframes roll{to{transform:translate(-50%)}}.track span{font-family:var(--display);font-weight:600;font-size:clamp(1rem,2.2vw,1.5rem);letter-spacing:-.02em;padding-inline:clamp(.9rem,2.2vw,1.8rem);display:inline-flex;align-items:center;gap:clamp(.9rem,2.2vw,1.8rem);color:var(--ink-soft);white-space:nowrap}.track span:after{content:"";width:6px;height:6px;border-radius:50%;background:var(--clay);flex:none}.contact{padding-bottom:clamp(3rem,7vh,5rem)}.contact h2{font-size:clamp(2.2rem,8vw,5.6rem);max-width:18ch}.contact-lede{font-size:clamp(1.05rem,1rem + .5vw,1.3rem);color:var(--ink-soft);max-width:44ch;margin:1.6rem 0 2.4rem}.contact-actions{display:flex;flex-wrap:wrap;gap:.7rem;align-items:center}.contact-actions+.contact-actions{margin-top:2rem}.mailto{font-family:var(--display);font-weight:600;font-size:clamp(1rem,.95rem + .7vw,1.5rem);letter-spacing:-.025em;text-decoration:none;border-bottom:2.5px solid var(--clay);padding-bottom:3px;transition:color .3s var(--ease),border-color .3s var(--ease)}.mailto:hover{color:var(--clay)}footer{border-top:1px solid var(--rule);padding:2rem 0 2.6rem}.foot-in{display:flex;flex-wrap:wrap;gap:1rem 2rem;align-items:center;justify-content:space-between;font-family:var(--mono);font-size:.72rem;color:var(--muted);letter-spacing:.04em}.foot-links{display:flex;gap:1.3rem;list-style:none;margin:0;padding:0}.foot-links a{text-decoration:none;transition:color .25s}.foot-links a:hover{color:var(--clay)}.rv{opacity:0;transform:translateY(26px);transition:opacity var(--slow) var(--ease),transform var(--slow) var(--ease)}.rv.in,.no-js .rv{opacity:1;transform:none}
