@font-face{font-family:JB Mono;src:url(/fonts/jetbrains-mono-latin-400-normal.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JB Mono;src:url(/fonts/jetbrains-mono-latin-500-normal.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:JB Mono;src:url(/fonts/jetbrains-mono-latin-700-normal.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:JB Mono;src:url(/fonts/jetbrains-mono-latin-800-normal.woff2)format("woff2");font-weight:800;font-style:normal;font-display:swap}@font-face{font-family:Source Serif;src:url(/fonts/source-serif-4-latin-400-normal.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Source Serif;src:url(/fonts/source-serif-4-latin-400-italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Source Serif;src:url(/fonts/source-serif-4-latin-600-normal.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}:root{--field:#f8f7fb;--field-panel:#f0eef8;--ink:#1d1330;--ink-2:#4a3f61;--ink-3:#6a6080;--rule:#ddd8ec;--signal:#b4e600;--signal-ink:#3a4a00;--violet:#5b3e8f;--violet-deep:#452e70;--coral:#ff6f59;--mono:"JB Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;--serif:"Source Serif", Georgia, "Times New Roman", serif;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--measure:60ch;--ease:cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background:var(--field);color:var(--ink);font-family:var(--serif);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:1.0625rem;line-height:1.65;overflow-x:hidden}::selection{background:var(--signal);color:var(--ink)}.wrap{max-width:62rem;margin-inline:auto;padding-inline:clamp(1.25rem,5vw,3.25rem);position:relative}.link{color:var(--violet);font-family:var(--mono);background-image:linear-gradient(var(--signal), var(--signal));transition:background-size .25s var(--ease), color .15s ease;background-position:0 100%;background-repeat:no-repeat;background-size:0% 2px;padding-bottom:3px;font-size:.92em;font-weight:500;text-decoration:none}.link:hover{color:var(--violet-deep);background-size:100% 2px}.link--strong{font-size:1em;font-weight:700}.arrow{transition:transform .2s var(--ease);margin-left:.15em;font-size:.82em;display:inline-block;transform:translateY(-.05em)}.link:hover .arrow{transform:translate(.1em,-.15em)}a:focus-visible,.brand:focus-visible{outline:2px solid var(--violet);outline-offset:3px;border-radius:2px}.eyebrow{font-family:var(--mono);text-transform:uppercase;letter-spacing:.14em;color:var(--ink-3);align-items:center;gap:.55rem;margin:0 0 2rem;font-size:.72rem;font-weight:500;display:flex}.eyebrow:before{content:"";background:var(--signal);width:.5rem;height:.5rem;box-shadow:0 0 0 3px color-mix(in srgb, var(--signal) 25%, transparent);border-radius:50%;flex:none}.header{z-index:20;background:color-mix(in srgb, var(--field) 85%, transparent);-webkit-backdrop-filter:saturate(1.3)blur(8px);backdrop-filter:saturate(1.3)blur(8px);border-bottom:1px solid var(--rule);position:sticky;top:0}.header__inner{justify-content:space-between;align-items:center;height:3.75rem;display:flex}.brand{font-family:var(--mono);letter-spacing:-.01em;color:var(--ink);font-size:1rem;font-weight:700;text-decoration:none}.nav{align-items:center;gap:clamp(1rem,3vw,1.75rem);display:flex}.nav a{font-family:var(--mono);color:var(--ink-2);font-size:.86rem;text-decoration:none;position:relative}.nav a:after{content:"";background:var(--signal);height:2px;transition:right .2s var(--ease);position:absolute;bottom:-3px;left:0;right:100%}.nav a:hover{color:var(--ink)}.nav a:hover:after{right:0}.nav__resume{font-weight:600;color:var(--violet)!important}.hero{padding-top:clamp(3.5rem,9vw,6.5rem);padding-bottom:clamp(2.5rem,5vw,3.5rem);position:relative;overflow:hidden}.hero__field{z-index:0;pointer-events:none;position:absolute;inset:0}.hero__field canvas{width:100%;height:100%;display:block}.hero .wrap{z-index:1}.hero .eyebrow{margin-bottom:1.25rem}.hero__title{font-family:var(--mono);letter-spacing:-.03em;color:var(--ink);max-width:22ch;margin:0;font-size:clamp(2rem,5.6vw,3.9rem);font-weight:800;line-height:1.06}.hero__title mark{color:var(--ink);background:0 0;position:relative}.hero__title mark:after{content:"";background:var(--signal);z-index:-1;opacity:.9;height:.32em;position:absolute;bottom:.02em;left:-.05em;right:-.05em}.hero__lede{max-width:56ch;color:var(--ink-2);font-size:1.14rem;font-family:var(--serif);margin:1.6rem 0 0}.hero__lede em{color:var(--ink);font-style:italic}.hero__links{flex-wrap:wrap;gap:1.5rem;margin:2rem 0 0;display:flex}@media (prefers-reduced-motion:no-preference){.hero .eyebrow,.hero__title,.hero__lede,.hero__links{animation:rise .75s var(--ease) both}.hero__title{animation-delay:80ms}.hero__lede{animation-delay:.22s}.hero__links{animation-delay:.36s}}@keyframes rise{0%{opacity:0;transform:translateY(.8rem)}to{opacity:1;transform:translateY(0)}}.section{border-top:1px solid var(--rule);padding-block:clamp(3rem,7vw,5rem);scroll-margin-top:3.75rem}.reveal{opacity:0;transform:translateY(1.25rem)}.reveal.is-visible{animation:reveal-in .7s var(--ease) both}@keyframes reveal-in{0%{opacity:0;transform:translateY(1.25rem)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none}}.entry{transition:background-color .2s ease, transform .2s var(--ease);border-top:1px solid #0000;border-radius:10px;grid-template-columns:13rem 1fr;gap:clamp(1rem,4vw,3rem);margin-inline:clamp(-1.5rem,-4vw,-2.25rem);padding:clamp(1.5rem,4vw,2.25rem);display:grid}.entries>.entry{border-top:1px solid var(--rule);border-radius:0}.entries>.entry:first-child{border-top:0}.entry:hover{background:var(--field-panel);transform:translateY(-2px)}.entry__name{font-family:var(--mono);letter-spacing:-.01em;margin:0;font-size:1.4rem;font-weight:700;line-height:1.15}.entry__tag{font-family:var(--mono);color:var(--ink-3);letter-spacing:.01em;margin:.5rem 0 0;font-size:.76rem}.entry__body{min-width:0}.entry__what{color:var(--ink);font-size:1.075rem;font-weight:600;font-family:var(--serif);margin:0}.entry__desc{color:var(--ink-2);max-width:var(--measure);margin:.55rem 0 0}.entry__stack{font-family:var(--mono);color:var(--ink-3);margin:1rem 0 0;font-size:.76rem;line-height:1.5}.entry__links{flex-wrap:wrap;align-items:center;gap:1.25rem;margin:1.1rem 0 0;display:flex}.status{font-family:var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--violet);border:1px solid color-mix(in srgb, var(--violet) 35%, transparent);border-radius:3px;padding:.2rem .55rem;font-size:.7rem}.vessel{border:1px solid var(--rule);background:var(--field-panel);border-radius:12px;padding:clamp(1.5rem,4vw,2.75rem);position:relative}.vessel__lead{font-family:var(--mono);letter-spacing:-.01em;margin:0;font-size:clamp(1.4rem,3.5vw,2rem);font-weight:700;line-height:1.2}.vessel__lead em{color:var(--ink-2);font-style:normal;font-weight:400;font-family:var(--serif);font-style:italic}.vessel__body{color:var(--ink-2);max-width:var(--measure);font-family:var(--serif);margin:1rem 0 0}.job__company{font-family:var(--mono);margin:0;font-size:1.2rem;font-weight:700;line-height:1.2}.job__role{color:var(--ink);font-weight:600;font-family:var(--serif);margin:.4rem 0 0}.job__meta{font-family:var(--mono);color:var(--ink-3);margin:.35rem 0 0;font-size:.76rem}.bullets{gap:.9rem;margin:0;padding:0;list-style:none;display:grid}.bullets li{color:var(--ink-2);max-width:var(--measure);padding-left:1.25rem;position:relative}.bullets li:before{content:"→";color:var(--violet);font-family:var(--mono);position:absolute;left:0}.skills{margin:0}.skill{border-top:1px solid var(--rule);grid-template-columns:13rem 1fr;gap:clamp(1rem,4vw,3rem);padding-block:1.25rem;display:grid}.skills>.skill:first-child{border-top:0;padding-top:0}.skill__label{font-family:var(--mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink);margin:.1rem 0 0;font-size:.78rem;font-weight:700}.skill__body{min-width:0;margin:0}.skill__items{color:var(--ink-2);max-width:var(--measure);font-family:var(--serif);display:block}.skill__used{font-family:var(--mono);color:var(--ink-3);margin-top:.4rem;font-size:.74rem;display:block}.footer{border-top:1px solid var(--rule);padding-block:clamp(3rem,7vw,4.5rem)}.footer__lead{font-family:var(--mono);letter-spacing:-.01em;max-width:20ch;margin:0;font-size:clamp(1.5rem,4vw,2.2rem);font-weight:700;line-height:1.2}.footer__links{margin:1.4rem 0 0;font-size:1.15rem}.footer__row{flex-wrap:wrap;gap:1.5rem;margin:1.4rem 0 0;display:flex}.colophon{font-family:var(--mono);color:var(--ink-3);margin:2.5rem 0 0;font-size:.74rem}@media (width<=640px){.entry,.skill{grid-template-columns:1fr;gap:.85rem}.entry{margin-inline:-1.25rem;padding:1.25rem}.nav a:not(.nav__resume):not(.brand){display:none}.hero__title{overflow-wrap:break-word;max-width:none;font-size:clamp(1.8rem,8.5vw,2.4rem)}}
