:root{--bg: #f3f1ed;--ink: #16150f;--ink-dim: #6e6a60;--accent: #cf3f22;--accent-rgb: 207, 63, 34;--line: rgba(22, 21, 15, .14);--font-display: "Instrument Serif", Georgia, serif;--font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--ease-out: cubic-bezier(.16, 1, .3, 1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);background-image:radial-gradient(108% 74% at 12% -6%,rgba(207,63,34,.05),transparent 62%),radial-gradient(92% 68% at 92% 4%,rgba(38,58,120,.05),transparent 58%);background-attachment:fixed;color:var(--ink);font-family:var(--font-mono);font-weight:400;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}@media(pointer:fine){body{cursor:none}}a{color:inherit;text-decoration:none}::selection{background:var(--accent);color:#fff}.grain{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none;opacity:.032;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}}.app{position:relative;z-index:2}.shell{width:min(1180px,90vw);margin:0 auto}.nav{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:1.4rem min(5vw,3rem);mix-blend-mode:difference}.nav__mark{font-family:var(--font-mono);font-weight:700;letter-spacing:.04em;font-size:.9rem;display:flex;align-items:center;gap:.55rem}.nav__dot{width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 12px var(--accent)}.nav__links{display:flex;gap:1.6rem;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase}.nav__links a{position:relative;opacity:.8;transition:opacity .3s var(--ease-out)}.nav__links a:hover{opacity:1}.nav__links a:after{content:"";position:absolute;left:0;bottom:-4px;width:0;height:1px;background:var(--accent);transition:width .35s var(--ease-out)}.nav__links a:hover:after{width:100%}@media(max-width:640px){.nav__links{display:none}}.hero{min-height:100svh;display:flex;flex-direction:column;justify-content:center;padding:8rem min(5vw,3rem) 6rem;position:relative}.hero__eyebrow{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.32em;text-transform:uppercase;color:var(--accent);margin-bottom:1.6rem}.hero__title{font-family:var(--font-display);font-weight:400;line-height:.92;letter-spacing:-.01em;font-size:clamp(3.4rem,14vw,12rem);text-wrap:balance}.hero__title em{font-style:italic;color:var(--accent)}.hero__sub{margin-top:2.2rem;max-width:46ch;font-size:clamp(1rem,1.4vw,1.2rem);line-height:1.7;color:var(--ink-dim)}.hero__meta{margin-top:3.5rem;display:flex;flex-wrap:wrap;gap:2rem 3rem;font-family:var(--font-mono);font-size:.74rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-dim)}.hero__meta b{color:var(--ink);font-weight:500}.scrollcue{position:absolute;bottom:2rem;left:50%;transform:translate(-50%);font-family:var(--font-mono);font-size:.66rem;letter-spacing:.3em;text-transform:uppercase;color:var(--ink-dim);display:flex;flex-direction:column;align-items:center;gap:.6rem}.scrollcue__line{width:1px;height:42px;background:linear-gradient(var(--ink-dim),transparent)}.section{padding:9rem min(5vw,3rem);position:relative}.section__label{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.28em;text-transform:uppercase;color:var(--accent);display:flex;align-items:center;gap:.8rem;margin-bottom:3rem}.section__label:before{content:"";width:28px;height:1px;background:var(--accent)}.about__text{font-family:var(--font-display);font-size:clamp(1.7rem,4.2vw,3.3rem);line-height:1.28;letter-spacing:-.01em;max-width:20ch;text-wrap:balance}.about__text .dim{color:var(--ink-dim)}.about__grid{margin-top:4rem;display:flex;flex-wrap:wrap;gap:.7rem}.chip{font-family:var(--font-mono);font-size:.76rem;letter-spacing:.04em;padding:.5rem .95rem;border:1px solid var(--line);border-radius:999px;color:var(--ink-dim);transition:color .3s var(--ease-out),border-color .3s var(--ease-out),transform .3s var(--ease-out)}.chip:hover{color:var(--ink);border-color:var(--accent);transform:translateY(-2px)}.work__list{border-top:1px solid var(--line)}.proj{display:grid;grid-template-columns:5rem 1fr auto;gap:1.5rem;align-items:baseline;padding:2.4rem .5rem;border-bottom:1px solid var(--line);position:relative;overflow:hidden}.proj:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,rgb(var(--accent-rgb) / .07),transparent 70%);transform:translate(-100%);transition:transform .5s var(--ease-out);z-index:-1}.proj:hover:before{transform:translate(0)}.proj__index{font-family:var(--font-mono);font-size:.8rem;color:var(--accent)}.proj__title{font-family:var(--font-display);font-size:clamp(1.6rem,3.4vw,2.6rem);line-height:1.1;transition:transform .4s var(--ease-out)}.proj:hover .proj__title{transform:translate(12px)}.proj__blurb{margin-top:.5rem;color:var(--ink-dim);font-size:.92rem;max-width:52ch}.proj__stack{display:flex;gap:.6rem;margin-top:.9rem;flex-wrap:wrap}.proj__stack span{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.06em;color:var(--ink-dim);text-transform:uppercase}.proj__year{font-family:var(--font-mono);font-size:.8rem;color:var(--ink-dim);text-align:right}@media(max-width:640px){.proj{grid-template-columns:3rem 1fr}.proj__year{display:none}}.contact{padding:9rem min(5vw,3rem) 6rem;text-align:center}.contact__big{font-family:var(--font-display);font-size:clamp(2.6rem,9vw,7rem);line-height:1;letter-spacing:-.01em}.contact__big a{position:relative;display:inline-block;font-style:italic;color:var(--accent)}.contact__big a:after{content:"";position:absolute;left:0;bottom:.1em;width:100%;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ease-out)}.contact__big a:hover:after{transform:scaleX(1)}.contact__links{margin-top:3.5rem;display:flex;justify-content:center;gap:2.5rem;font-family:var(--font-mono);font-size:.82rem;letter-spacing:.1em;text-transform:uppercase}.contact__links a{opacity:.75;transition:opacity .3s,color .3s}.contact__links a:hover{opacity:1;color:var(--accent)}.footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:1rem;padding:2.5rem min(5vw,3rem);border-top:1px solid var(--line);font-family:var(--font-mono);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim)}.progress-rail{position:fixed;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--accent),rgb(var(--accent-rgb) / .35));transform-origin:0 50%;z-index:100;pointer-events:none}.proj-wrap{will-change:transform,opacity,filter}.proj{text-decoration:none;color:inherit}.proj__body{min-width:0}.proj__live{display:inline-block;margin-left:.75rem;padding:.15em .6em;border:1px solid rgb(var(--accent-rgb) / .4);border-radius:999px;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);vertical-align:middle;transform:translateY(-.15em)}.proj__live:before{content:"";display:inline-block;width:5px;height:5px;margin-right:.45em;border-radius:50%;background:var(--accent);vertical-align:middle;animation:live-pulse 2.4s ease-in-out infinite}@keyframes live-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}.hero__meta{flex-wrap:wrap;gap:1.4rem 2.4rem}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.proj-wrap{opacity:1!important;filter:none!important;transform:none!important}}.field-section{padding-block:clamp(6rem,14vh,11rem)}.skillfield{display:flex;flex-wrap:wrap;align-items:baseline;gap:.2em .8em;margin-top:2.5rem;max-width:100%}.skillfield__item{--f: 0;font-family:var(--font-display);font-size:clamp(1.5rem,3.6vw,3rem);line-height:1.06;letter-spacing:-.01em;white-space:nowrap;color:color-mix(in oklab,var(--ink) calc(18% + var(--f) * 82%),transparent);transform:scale(calc(1 + var(--f) * .045));text-shadow:0 0 calc(var(--f) * 26px) rgb(var(--accent-rgb) / calc(var(--f) * .28));will-change:transform,color}.skillfield__item:nth-child(3n){color:color-mix(in oklab,var(--accent) calc(var(--f) * 62%),color-mix(in oklab,var(--ink) calc(18% + var(--f) * 60%),transparent))}.field-note{margin-top:3rem;font-family:var(--font-mono);font-size:.82rem;letter-spacing:.02em;color:var(--ink);max-width:54ch}.field-note .dim{color:var(--ink-dim)}.artifact__card{display:block;margin-top:2.5rem;padding:clamp(1.75rem,4vw,3rem);border:1px solid var(--line);border-radius:4px;text-decoration:none;color:inherit;position:relative;overflow:hidden;transition:border-color .5s var(--ease-out),transform .5s var(--ease-out)}.artifact__card:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(120% 100% at 0% 0%,rgb(var(--accent-rgb) / .07),transparent 60%);opacity:0;transition:opacity .6s var(--ease-out)}.artifact__card:hover{border-color:rgb(var(--accent-rgb) / .35);transform:translateY(-3px)}.artifact__card:hover:before{opacity:1}.artifact__head{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.artifact__title{font-family:var(--font-display);font-size:clamp(2.2rem,6vw,3.6rem);line-height:1}.artifact__live{padding:.2em .7em;border:1px solid rgb(var(--accent-rgb) / .4);border-radius:999px;font-family:var(--font-mono);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.artifact__live:before{content:"";display:inline-block;width:5px;height:5px;margin-right:.5em;border-radius:50%;background:var(--accent);vertical-align:middle;animation:live-pulse 2.4s ease-in-out infinite}.artifact__blurb{margin-top:1.25rem;color:var(--ink-dim);font-size:.95rem;max-width:62ch}.artifact__stack{display:flex;flex-wrap:wrap;gap:.5rem 1.1rem;margin-top:1.5rem;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-dim)}.artifact__cta{display:inline-block;margin-top:1.75rem;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.06em;color:var(--accent);transition:transform .4s var(--ease-out)}.artifact__card:hover .artifact__cta{transform:translate(6px)}.artifact__aside{margin-top:2.25rem;font-family:var(--font-mono);font-size:.82rem;color:var(--ink);max-width:60ch}.artifact__aside .dim{color:var(--ink-dim)}.artifact__aside a{color:var(--accent)}@media(max-width:640px){.skillfield__item{font-size:clamp(1.25rem,6.5vw,1.9rem)}}.kb-host{margin-top:2rem}.kb{position:relative;width:100%;aspect-ratio:16 / 7;max-height:60vh;touch-action:pan-y}.kb__canvas{display:block;width:100%!important;height:100%!important;background:transparent;animation:kb-in 1.2s cubic-bezier(.16,1,.3,1) both}@keyframes kb-in{0%{opacity:0;transform:translateY(26px) scale(.98)}to{opacity:1;transform:none}}.kb--skeleton:after{content:"";position:absolute;left:50%;top:54%;width:min(70%,620px);height:34%;transform:translate(-50%,-50%) perspective(900px) rotateX(52deg);border:1px solid var(--line);border-radius:14px;background:linear-gradient(100deg,transparent 34%,rgb(var(--accent-rgb) / .07) 50%,transparent 66%);background-size:260% 100%;animation:kb-shimmer 2.4s ease-in-out infinite}@keyframes kb-shimmer{0%{background-position:140% 0}to{background-position:-40% 0}}.kb-label-wrap{pointer-events:none!important}.kb-label{display:block;white-space:nowrap;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:#fff;background:var(--ink);padding:.34rem .62rem;border-radius:3px;box-shadow:0 8px 24px #16150f47;animation:kb-label-in .22s cubic-bezier(.16,1,.3,1) both}@keyframes kb-label-in{0%{opacity:0;transform:translateY(6px) scale(.94)}to{opacity:1;transform:none}}.kb__caption{position:absolute;left:0;bottom:-.4rem;margin:0;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-dim);pointer-events:none}@media(max-width:720px){.kb{aspect-ratio:16 / 9}.kb__caption{display:none}}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.kb__canvas,.kb--skeleton:after,.kb-label{animation:none}}.stage{position:relative}.stage__pin{position:sticky;top:0;height:100svh;display:flex;flex-direction:column;justify-content:center;overflow:hidden}.stage__pin .hero{min-height:0;padding-top:0;padding-bottom:0}.stage__pin .section{padding-top:0;padding-bottom:0}.stage__pin .field-section{padding-block:0}.shiny{display:inline-block;color:inherit;background-image:linear-gradient(115deg,transparent 38%,rgba(255,255,255,.85) 50%,transparent 62%);background-size:220% 100%;background-position:130% 0;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;animation:shine 3.4s cubic-bezier(.4,0,.2,1) infinite}@keyframes shine{0%{background-position:130% 0}55%{background-position:-60% 0}to{background-position:-60% 0}}.grad-ink{background-image:linear-gradient(100deg,var(--accent) 0%,#e0703f 28%,var(--ink) 62%,var(--accent) 100%);background-size:240% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:grad-drift 9s ease-in-out infinite alternate}@keyframes grad-drift{0%{background-position:0% 0}to{background-position:100% 0}}.contact__title{font-family:var(--font-display);font-weight:400;font-size:clamp(3.4rem,9vw,7rem);line-height:1;margin-bottom:3rem}.spotlight{position:relative}.spotlight:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .4s ease;background:radial-gradient(420px circle at var(--mx, 50%) var(--my, 50%),rgb(var(--accent-rgb) / .09),transparent 65%)}.spotlight:hover:before{opacity:1}@media(prefers-reduced-motion:reduce){.shiny,.grad-ink{animation:none}.grad-ink{-webkit-text-fill-color:initial;color:var(--accent);background:none}}
