@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2)format("woff2"),url(/assets/space-grotesk-latin-400-normal-BnQMeOim.woff)format("woff")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2)format("woff2"),url(/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff)format("woff")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2)format("woff2"),url(/assets/space-grotesk-latin-700-normal-CwsQ-cCU.woff)format("woff")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/playfair-display-latin-400-normal-CFtfchNt.woff2)format("woff2"),url(/assets/playfair-display-latin-400-normal-DHYHbkg3.woff)format("woff")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/playfair-display-latin-700-normal-CuDiGg7c.woff2)format("woff2"),url(/assets/playfair-display-latin-700-normal-Bc_1Q1cG.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff)format("woff")}@font-face{font-family:Caveat;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/caveat-latin-500-normal-B9SDL8cy.woff2)format("woff2"),url(/assets/caveat-latin-500-normal-Do9veZfZ.woff)format("woff")}@media (prefers-reduced-motion:reduce){.reveal,.reveal-words,.reveal-words .word{opacity:1!important;clip-path:none!important;transform:none!important}*{transition-duration:0s!important;animation:none!important}}:root{--bg-base:#001b2b;--bg-elev:#072b3e;--bg-deep:#00111e;--bg-body:#031a21;--text-main:#fafaf9;--text-body:#f9f7f2;--text-muted:#fafaf9e2;--text-faint:#f9f7f2c5;--accent:#009aa5;--accent-strong:#009aa5;--cta-bg:var(--accent);--cta-fg:#001b2b;--cta-bg-hover:#00b4c0;--cta-ring:color-mix(in srgb, var(--accent) 45%, transparent);--chip-bg:color-mix(in srgb, var(--accent) 14%, transparent);--chip-fg:var(--text-body);--surface-card:color-mix(in srgb, var(--bg-elev) 70%, transparent);--hairline:color-mix(in srgb, var(--text-faint) 22%, transparent);--radius:1.25rem;--font-sans:"Space Grotesk", sans-serif;--font-serif:"Playfair Display", serif;--font-mono:"IBM Plex Mono", monospace;--font-hand:"Caveat", "Segoe Print", "Bradley Hand", cursive;--nav-glass-bg:color-mix(in srgb, var(--bg-base) 60%, transparent);--nav-glass-bg-top:color-mix(in srgb, var(--bg-base) 40%, transparent);--nav-shadow:0 10px 32px #00000073, 0 2px 8px #0000004d, inset 0 1px 0 #ffffff14;--dropdown-bg:#071b2b}[data-theme=light]{--bg-base:#fafaf9;--bg-elev:#fff;--bg-deep:oklch(98.5% .001 106.423);--bg-body:#f9f7f2;--text-main:#0a152f;--text-body:#0b111e;--text-muted:#0a152fc9;--text-faint:#0b111ec7;--accent:#009aa5;--accent-strong:#00727a;--cta-bg:#00727a;--cta-fg:#fafaf9;--cta-bg-hover:#006169;--nav-shadow:0 10px 30px #0a152f1f, 0 2px 8px #0a152f14, inset 0 1px 0 #fff9;--dropdown-bg:#fafaf9}.nav-links a,.btn--quiet,.project-page-back{position:relative}.nav-links a:after,.btn--quiet:after,.project-page-back:after{content:"";transform-origin:0;pointer-events:none;background:currentColor;height:1px;transition:transform .3s cubic-bezier(.16,1,.3,1);position:absolute;bottom:-.25em;left:0;right:0;transform:scaleX(0)}.nav-links a:after{bottom:.2rem;left:.75rem;right:.75rem}.nav-links a:hover:after,.nav-links a:focus-visible:after,.nav-links a.active:after,.btn--quiet:hover:after,.btn--quiet:focus-visible:after,.project-page-back:hover:after,.project-page-back:focus-visible:after{transform:scaleX(1)}.margin-note{z-index:1;font-family:var(--font-hand);color:var(--accent-strong);white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:clamp(1.25rem,1.15rem + .5vw,1.5rem);font-weight:500;line-height:1.05;position:absolute}.margin-note-text{display:inline-block;transform:rotate(-3deg)}.margin-note-arrow{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:3.2em;height:3.2em;margin-right:-.2em;position:absolute;right:100%;overflow:visible}.margin-note--down-left .margin-note-arrow{top:.4em}.margin-note--up-left .margin-note-arrow{bottom:.4em;transform:scaleY(-1)}*{box-sizing:border-box;margin:0;padding:0}html{scrollbar-width:none;background-color:var(--bg-base);font-size:1rem;overflow-x:clip}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}html.lenis{scroll-behavior:auto!important}body{font-family:var(--font-sans);color:var(--text-body);line-height:1.5;overflow-x:clip}.site-nav{z-index:10;width:100%;padding:calc(.75rem + env(safe-area-inset-top,0px)) 1rem 0;pointer-events:none;transition:transform .35s;position:fixed;top:0;left:0;right:0}.site-nav.is-hidden:not(:has(:focus-visible)){transition-duration:.7s;transform:translateY(calc(-100% - 3rem))}@media screen and (width<=687px),screen and (orientation:landscape) and (height<=500px){@starting-style{.site-nav{transform:translateY(-100%)}}}.nav-inner{background:var(--nav-glass-bg);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);width:fit-content;max-width:100%;box-shadow:var(--nav-shadow);pointer-events:auto;border-radius:.5rem;justify-content:center;align-items:center;margin:0 auto;padding:.6rem 1rem;transition:background-color .3s,box-shadow .3s;display:flex}.site-nav.is-hero .nav-inner{background:var(--nav-glass-bg-top);box-shadow:none}@supports not ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.nav-inner,.site-nav.is-hero .nav-inner{background:color-mix(in srgb, var(--bg-base) 94%, transparent)}}@media (prefers-reduced-transparency:reduce){.nav-inner,.site-nav.is-hero .nav-inner{background:var(--bg-base);-webkit-backdrop-filter:none;backdrop-filter:none}}.site-nav.is-menu-open .nav-inner{box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0}.nav-right{align-items:center;gap:clamp(1rem,.7rem + 1.2vw,2rem);display:flex}.site-nav a,.nav-hamburger{font-family:var(--font-sans);letter-spacing:.01em;color:var(--text-body);font-size:clamp(.95rem,.9rem + .25vw,1.05rem);font-weight:500;text-decoration:none;transition:color .15s ease-out}.site-nav a:hover,.nav-hamburger:hover{color:var(--accent-strong)}.nav-links{gap:.25rem;display:flex}.nav-links a{padding:.4rem .75rem}.nav-hamburger{cursor:pointer;background:0 0;border:none;padding:.4rem;line-height:0;display:none}.nav-hamburger svg{width:1.25rem;height:auto;display:block}@keyframes nav-slide-down{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}@keyframes nav-item-fade{0%{opacity:0;transform:translateY(-.75rem)}to{opacity:1;transform:translateY(0)}}.nav-dropdown{z-index:9;background:color-mix(in srgb, var(--dropdown-bg) 50%, transparent);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);flex-direction:column;justify-content:center;align-items:center;gap:.5rem;animation:.4s cubic-bezier(.22,1,.36,1) both nav-slide-down;display:flex;position:fixed;inset:0}@supports not ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.nav-dropdown{background:color-mix(in srgb, var(--dropdown-bg) 94%, transparent)}}@media (prefers-reduced-transparency:reduce){.nav-dropdown{background:var(--dropdown-bg);-webkit-backdrop-filter:none;backdrop-filter:none}}.nav-dropdown a{font-family:var(--font-sans);letter-spacing:.01em;color:var(--text-body);opacity:0;padding:.75rem 2rem;font-size:clamp(1.2rem,1.113rem + .436vw,1.44rem);font-weight:500;text-decoration:none;transition:color .15s ease-out;animation:.3s ease-out forwards nav-item-fade}.nav-dropdown a:hover{color:var(--accent-strong)}.hero-container{width:100%;position:relative;overflow:hidden}#home.hero-container{padding:clamp(5rem,3rem + 8vw,9rem) 1.5rem clamp(3rem,2rem + 4vw,5rem)}.hero-content{flex-direction:column;gap:clamp(2.5rem,1.8rem + 3.5vw,4rem);width:100%;max-width:1200px;display:flex}.hero-branding{flex-direction:column;align-items:flex-start;gap:.6rem;min-width:0;display:flex}.hero-featured{min-width:0}@media screen and (width>=1000px){.hero-content{flex-direction:row;align-items:center;gap:clamp(2rem,1rem + 5vw,4rem)}.hero-branding{flex:1.1 1 0}.hero-featured{flex:1 1 0}}.hero-content .hero-name{text-align:left;letter-spacing:-.02em;color:var(--text-main);max-width:100%;font-size:clamp(2.488rem,2.307rem + .905vw,2.986rem);line-height:1.15}.hero-content .role{text-align:left;color:var(--accent-strong);font-size:clamp(1rem,.927rem + .364vw,1.2rem);font-weight:600}.hero-content .bio{color:var(--text-body);text-align:left;max-width:40ch;font-size:clamp(1.2rem,1.113rem + .436vw,1.44rem);line-height:1.4}.hero-content .bio-subline{color:var(--text-muted);text-align:left;flex-direction:column;gap:.4rem;max-width:60ch;margin-top:.75rem;padding-left:0;font-size:clamp(1rem,.927rem + .364vw,1.2rem);line-height:1.5;list-style:none;display:flex}.hero-content .bio-subline li{padding-left:1.9em;position:relative}.hero-content .bio-subline li:before{content:"";background:var(--accent-strong);width:1.1em;height:2px;position:absolute;top:.75em;left:0}.hero-cta-row{flex-wrap:wrap;gap:1.25rem;margin-top:1rem;display:flex}.main-content-wrapper{width:100%;position:relative}.portfolio-section{justify-content:center;min-height:auto;padding:clamp(4rem,3.091rem + 3.879vw,6rem) 1.5rem;display:flex}.section-container{width:100%;max-width:1200px}.section-header{margin-bottom:clamp(3rem,2.091rem + 3.879vw,5rem)}.section-title{color:var(--text-main);font-size:clamp(2.074rem,1.923rem + .754vw,2.488rem);line-height:1.2}.section-title-research,.section-title-projects{font-family:var(--font-serif);letter-spacing:-.01em;text-transform:none;font-style:normal;font-weight:400}.section-kicker{margin-bottom:1rem}.section-standfirst{max-width:70ch;margin-top:1rem}.projects-section-label{margin-bottom:clamp(1.5rem,1.159rem + 1.455vw,2.25rem)}.projects-tech-section{padding-top:0}.projects-grid{grid-template-columns:1fr;gap:clamp(2.5rem,1.818rem + 2.909vw,4rem);width:100%;margin:0 auto;display:grid}.project-thumb{color:inherit;cursor:pointer;border-left:1px solid var(--hairline);flex-direction:column;padding-left:1.25rem;text-decoration:none;transition:border-color .3s;display:flex}.project-thumb:hover,.project-thumb:focus-visible{border-left-color:var(--accent)}.project-thumb-image{aspect-ratio:16/10;object-fit:cover;content-visibility:auto;contain-intrinsic-size:1px 360px;width:100%;height:auto;transition:transform .4s cubic-bezier(.16,1,.3,1),filter .4s;display:block}.project-thumb:hover .project-thumb-image,.project-thumb:focus-visible .project-thumb-image{filter:brightness(1.04);transform:scale(1.012)}.project-thumb-caption{text-align:left;flex-direction:column;align-items:flex-start;gap:.6rem;margin-top:1.25rem;display:flex}.project-thumb-title{font-family:var(--font-serif);letter-spacing:-.01em;color:var(--text-main);font-size:clamp(1.2rem,1.113rem + .436vw,1.44rem);font-weight:400;line-height:1.3;transition:color .2s}.project-thumb:hover .project-thumb-title,.project-thumb:focus-visible .project-thumb-title{color:var(--accent-strong)}.project-thumb-outcome{font-family:var(--font-sans);color:var(--text-body);font-size:clamp(.833rem,.773rem + .303vw,1rem);line-height:1.55}.tech-chips{flex-wrap:wrap;gap:.5rem;display:flex}.tech-chip{font-family:var(--font-sans);letter-spacing:.01em;color:var(--chip-fg);background:var(--chip-bg);white-space:nowrap;border-radius:.25rem;padding:.25rem .6rem;font-size:.833rem;font-weight:500}.project-badge{font-family:var(--font-sans);letter-spacing:.01em;color:var(--accent-strong);font-size:.833rem;font-weight:500}.project-description{text-align:left;max-width:75ch;margin-bottom:1.75rem}.card-actions{flex-wrap:wrap;gap:2rem;margin-top:auto;display:flex}.btn{min-height:2.75rem;font-family:var(--font-sans);letter-spacing:.01em;cursor:pointer;border-radius:.375rem;justify-content:center;align-items:center;padding:.85rem 1.5rem;font-size:clamp(.95rem,.9rem + .25vw,1.05rem);font-weight:500;text-decoration:none;transition:background-color .2s,border-color .2s,color .2s;display:inline-flex}.btn--primary{background:var(--cta-bg);color:var(--cta-fg);border:none}.btn--primary:hover{background:var(--cta-bg-hover)}.btn--primary:focus-visible{outline:2px solid var(--accent-strong);outline-offset:2px}.btn--secondary{color:var(--text-main);border:1px solid var(--hairline);background:0 0}.btn--secondary:hover{border-color:var(--accent-strong)}.btn--secondary:focus-visible{outline:2px solid var(--accent-strong);outline-offset:2px}.btn:disabled{opacity:.6;cursor:not-allowed}.btn--quiet{min-height:0;box-shadow:none;font-family:var(--font-sans);letter-spacing:normal;color:var(--accent-strong);background:0 0;border:none;border-radius:0;padding:0;font-size:clamp(.95rem,.9rem + .25vw,1.05rem);font-weight:500;text-decoration:none;transition:color .2s;display:inline-flex}.btn--quiet:hover{color:var(--text-main)}.btn--quiet:focus-visible{outline:2px solid var(--accent-strong);outline-offset:2px}.project-page{width:100%;max-width:900px;margin:0 auto;padding:clamp(3rem,2rem + 4vw,5rem) 1.5rem clamp(4rem,2.636rem + 5.818vw,7rem)}.project-page-back{font-family:var(--font-sans);color:var(--text-muted);margin:2rem 0;font-size:clamp(.95rem,.9rem + .25vw,1.05rem);font-weight:500;text-decoration:none;transition:color .2s;display:inline-block}.project-page-back:hover,.project-page-back:focus-visible{color:var(--accent-strong)}.project-page-title{margin-bottom:1.25rem;padding-right:0;font-size:clamp(1.44rem,1.335rem + .524vw,1.728rem)}@keyframes page-fade-in{0%{opacity:0}to{opacity:1}}.project-page{animation:.3s both page-fade-in}.project-page-image{aspect-ratio:16/10;object-fit:cover;border-radius:calc(var(--radius) * .5);width:100%;margin-bottom:1.75rem}.project-page-actions{margin-top:0;margin-bottom:1.75rem}.project-summary{border-radius:var(--radius);border:1px solid var(--hairline);background:var(--surface-card);grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:1.5rem 2rem;margin-bottom:2.5rem;padding:clamp(1.5rem,1.2rem + 1.5vw,2.25rem);display:grid}.project-summary-block{flex-direction:column;gap:.5rem;display:flex}.project-summary-label{font-family:var(--font-sans);text-transform:uppercase;letter-spacing:.08em;color:var(--accent-strong);font-size:.833rem;font-weight:500}.project-summary-text{color:var(--text-muted);line-height:1.55}.project-page-cta{border-radius:var(--radius);border:1px solid color-mix(in srgb, var(--accent) 22%, transparent);background:var(--surface-card);flex-direction:column;align-items:flex-start;gap:1.25rem;margin-top:3rem;padding:clamp(2rem,1.455rem + 2.727vw,3.5rem) clamp(1.5rem,1.227rem + 1.212vw,2.25rem);display:flex}.project-page-cta-title{font-size:clamp(1.728rem,1.602rem + .628vw,2.074rem)}.project-page-next{cursor:pointer;text-align:left;background:0 0;border:none;flex-direction:column;align-items:flex-start;gap:.75rem;width:100%;margin-top:2.5rem;padding:0;display:flex}.project-page-next-label{font-family:var(--font-sans);color:var(--accent-strong);font-size:clamp(.95rem,.9rem + .25vw,1.05rem);font-weight:500;transition:color .2s}.project-page-next-card{border-radius:calc(var(--radius) * .6);border:1px solid color-mix(in srgb, var(--text-faint) 20%, transparent);background:color-mix(in srgb, var(--bg-elev) 60%, transparent);align-items:center;gap:1rem;width:100%;padding:.875rem 1rem;transition:border-color .2s,background .2s;display:flex}.project-page-next-thumb{object-fit:cover;border-radius:calc(var(--radius) * .35);flex-shrink:0;width:110px;height:66px}.project-page-next-title{font-family:var(--font-sans);color:var(--text-main);font-size:clamp(1rem,.927rem + .364vw,1.2rem);font-weight:500;line-height:1.4}.project-page-next:hover .project-page-next-label,.project-page-next:focus-visible .project-page-next-label{color:var(--text-main)}.project-page-next:hover .project-page-next-card,.project-page-next:focus-visible .project-page-next-card{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 6%, var(--bg-elev))}.project-tab-row{border-bottom:1px solid color-mix(in srgb, var(--text-faint) 30%, transparent);align-items:flex-end;gap:2rem;margin-bottom:1.5rem;display:flex}.project-page-tabs{border-bottom:none;gap:1.5rem;margin-bottom:0;display:flex}.project-page-tab{cursor:pointer;font-family:var(--font-sans);color:var(--text-muted);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:0 0 .75rem;font-size:clamp(.95rem,.9rem + .25vw,1.05rem);font-weight:500;transition:color .2s,border-color .2s}.project-page-tab:hover,.project-page-tab:focus-visible{color:var(--text-main)}.project-page-tab.is-active{color:var(--accent-strong);border-bottom-color:var(--accent)}.project-details{color:var(--text-muted);line-height:1.5}.project-details>:first-child{margin-top:0}.project-details h1,.project-details h2,.project-details h3,.project-details h4{color:var(--text-main);font-family:var(--font-serif);margin:2rem 0 .75rem;line-height:1.3}.project-details h1,.project-details h2{font-size:clamp(1.2rem,1.113rem + .436vw,1.44rem)}.project-details h3{font-size:clamp(1rem,.927rem + .364vw,1.2rem)}.project-details p,.project-details ul,.project-details ol,.project-details blockquote,.project-details table,.project-details pre{margin:0 0 1rem;font-size:clamp(1rem,.927rem + .364vw,1.2rem)}.project-details ul,.project-details ol{padding-left:1.5rem}.project-details li{margin-bottom:.35rem}.project-details a{color:var(--accent-strong);text-underline-offset:.2em;text-decoration:underline}.project-details img{border-radius:calc(var(--radius) * .5);max-width:100%;height:auto}.project-details code{font-family:var(--font-mono);background:color-mix(in srgb, var(--text-faint) 18%, transparent);border-radius:4px;padding:.15em .4em;font-size:clamp(1rem,.927rem + .364vw,1.2rem)}.project-details pre{background:var(--bg-deep);border:1px solid color-mix(in srgb, var(--text-faint) 25%, transparent);border-radius:calc(var(--radius) * .5);padding:1rem;overflow-x:auto}.project-details pre code{background:0 0;padding:0;font-size:clamp(1rem,.927rem + .364vw,1.2rem)}.project-details blockquote{border-left:3px solid var(--accent);color:var(--text-faint);padding-left:1rem;font-style:italic}.project-details .table-scroll-wrapper{-webkit-overflow-scrolling:touch;overflow-x:auto}.project-details table{border-collapse:collapse;width:100%;font-size:clamp(.833rem,.773rem + .303vw,1rem)}.project-details th,.project-details td{border:1px solid color-mix(in srgb, var(--text-faint) 30%, transparent);text-align:left;padding:.5rem .75rem}.project-details th{color:var(--text-main);font-weight:600}@media (prefers-reduced-motion:reduce){.project-page{animation:none}}.escape-scene{max-width:34rem;margin:0 0 clamp(2rem,1.5rem + 2vw,3rem);position:relative}.escape-svg{width:100%;height:auto;display:block;overflow:visible}.escape-orbit{fill:none;stroke:color-mix(in srgb, var(--accent) 55%, transparent);stroke-width:1.5px;stroke-dasharray:3 7}.escape-trail{fill:none;stroke:color-mix(in srgb, var(--accent) 45%, transparent);stroke-width:1.5px;stroke-dasharray:1 6;stroke-linecap:round}.escape-star{fill:var(--text-main)}.escape-planet{fill:var(--accent);animation:6s linear infinite escape;transform:translate(127.9px,-33.5px)}@keyframes escape{0%{opacity:0;transform:translate(0)}8%{opacity:1;transform:translate(0)}22%{opacity:1;transform:translate(0)}32%{transform:translate(56.4px,-17.5px)}45%{transform:translate(127.9px,-33.5px)}62%{opacity:1;transform:translate(218.7px,-48.4px)}84%{opacity:0;transform:translate(333px,-62.3px)}to{opacity:0;transform:translate(333px,-62.3px)}}.escape-note{white-space:normal;text-align:left;bottom:2%;right:4%}.contact-header{border-bottom:1px solid color-mix(in srgb, var(--text-faint) 50%, transparent);margin-bottom:clamp(1rem,.545rem + 1.939vw,2rem);padding-bottom:clamp(1rem,.545rem + 1.939vw,2rem)}.contact-kicker{margin:1.5rem 0}.contact-title{color:var(--text-main);font-size:clamp(1.728rem,1.452rem + 1.382vw,2.488rem);line-height:1.2}.contact-subtitle{font-family:var(--font-sans);color:var(--text-muted);letter-spacing:.05em;margin-top:1rem;font-size:clamp(1rem,.927rem + .364vw,1.2rem)}.contact-form-section{background:var(--surface-card);border:1px solid var(--hairline);border-radius:var(--radius);flex-direction:column;gap:2.5rem;margin-bottom:clamp(3rem,2.091rem + 3.879vw,5rem);padding:clamp(1.5rem,1rem + 2vw,2.5rem);display:flex}.contact-form{width:100%}.contact-form-fieldset{border:none;flex-direction:column;gap:1rem;margin:0;padding:0;display:flex}.contact-form-fieldset[aria-disabled=true]{opacity:.7;pointer-events:none}.contact-form-legend{margin-bottom:.5rem;padding:0}.contact-form-honeypot,.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.contact-form-hint{font-family:var(--font-sans);color:var(--text-faint);margin-top:-.5rem;font-size:.833rem}.contact-form-label{font-family:var(--font-sans);color:var(--text-main);font-size:.95rem;font-weight:500}.contact-form-input{width:100%;font-family:var(--font-sans);color:var(--text-body);background:color-mix(in srgb, var(--bg-deep) 40%, transparent);border:1px solid var(--hairline);border-radius:.5rem;padding:.85rem 1rem;font-size:1rem;transition:border-color .2s}.contact-form-input::placeholder{color:var(--text-faint)}.contact-form-input:focus-visible{outline:2px solid var(--accent-strong);outline-offset:2px;border-color:var(--accent-strong)}.contact-form-textarea{resize:vertical;min-height:8rem;font-family:var(--font-sans)}.contact-form-captcha:empty{display:none}.contact-form-submit{align-self:flex-start;margin-top:.5rem}.contact-form-status{font-family:var(--font-sans);color:var(--text-muted);min-height:1.4em;font-size:1rem}.contact-form-status a{color:var(--accent-strong);text-underline-offset:.15em;text-decoration:underline}.contact-form-sent-message{font-family:var(--font-sans);color:var(--text-body);font-size:1.125rem}.contact-socials{flex-direction:column;gap:.75rem;margin-bottom:clamp(2.5rem,1.8rem + 2.8vw,4rem);display:flex}@media (width>=688px){.contact-socials{flex-direction:row}.contact-socials .contact-social-link{flex:1}}.contact-social-link{background:color-mix(in srgb, var(--bg-deep) 40%, transparent);border:1px solid color-mix(in srgb, var(--text-faint) 20%, transparent);border-radius:calc(var(--radius) * .65);align-items:center;gap:.9rem;padding:.85rem 1rem;text-decoration:none;transition:border-color .2s,background .2s,transform .3s cubic-bezier(.16,1,.3,1);display:flex}.contact-social-link:hover{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent);transform:translate(2px)}.contact-social-icon{width:2rem;height:2rem;color:var(--text-muted);flex-shrink:0;transition:color .2s}.contact-social-link:hover .contact-social-icon{color:var(--accent)}.contact-social-text{flex-direction:column;flex:1;gap:.1rem;display:flex}.contact-social-name{font-family:var(--font-sans);color:var(--text-body);letter-spacing:.01em;font-size:1rem;font-weight:500}.contact-social-handle{font-family:var(--font-sans);color:var(--text-muted);font-size:.95rem}.contact-social-arrow{width:1rem;height:1rem;color:var(--text-faint);flex-shrink:0;transition:color .2s,transform .2s}.contact-social-link:hover .contact-social-arrow{color:var(--accent);transform:translate(2px)}.footer{color:var(--text-muted);padding:clamp(2rem, 1.091rem + 3.879vw, 4rem) 1.5rem calc(env(safe-area-inset-bottom,0px) + clamp(2.5rem, 1.5rem + 4vw, 4.5rem));background-color:#0000;justify-content:center;display:flex}.footer-bottom-row{flex-flow:wrap;justify-content:space-between;align-items:center;gap:2rem;width:100%;padding:1.5rem 0;display:flex}.footer-rule{border:0;border-top:1px solid color-mix(in srgb, var(--text-faint) 40%, transparent)}.footer-right-row{flex-direction:row;align-items:center;gap:2rem;display:flex}.footer-social-row{flex-direction:row;gap:1.5rem;display:flex}.footer-social-link{font-family:var(--font-sans);letter-spacing:0;color:var(--text-muted);align-items:center;gap:.5rem;padding-block:.4rem;font-size:.8rem;text-decoration:none;transition:color .2s ease-out,transform .3s cubic-bezier(.16,1,.3,1);display:flex}.footer-social-link svg{flex-shrink:0;width:1.5rem;height:1.5rem}.footer-social-link:hover{color:var(--accent-strong);transform:translate(2px)}.footer-copyright{justify-content:flex-end;min-width:0;display:flex}.footer-colophon-text.label{letter-spacing:.04em;color:var(--text-faint);font-size:clamp(.75rem,.7rem + .25vw,.85rem)}.footer-colophon time{white-space:nowrap}.footer-copyright-text.label{overflow-wrap:break-word;font-size:clamp(.8rem,.727rem + .364vw,1rem)}@media screen and (orientation:landscape) and (height<=500px){html .nav-dropdown a{padding:.5rem 1rem;font-size:1rem}.portfolio-section{padding-top:5rem}}@media screen and (width>=768px){.projects-grid{grid-template-columns:1fr 1fr;align-items:start;gap:clamp(3rem,2.318rem + 2.909vw,4.5rem) clamp(2rem,1.091rem + 3.879vw,4rem)}.projects-grid>.project-thumb{width:100%;min-width:0}}@media screen and (width<=687px){.nav-links{display:none}.nav-hamburger{display:block}.site-nav .theme-toggle,.footer-right-row .footer-theme-toggle{display:none}.footer-bottom-row{flex-direction:column;align-items:flex-start;gap:1.25rem}.footer-copyright{justify-content:flex-start;width:100%}.footer-right-row{width:100%}.footer-social-row{gap:1.5rem}.nav-inner{margin-left:auto;margin-right:0;padding:.45rem}}.theme-toggle{cursor:pointer;width:2.25rem;height:2.25rem;color:var(--text-muted);background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:color .2s;display:flex}.theme-toggle svg{width:1.5rem;height:1.5rem;display:block}.theme-toggle:hover{color:var(--accent-strong)}.theme-toggle:focus-visible{outline:2px solid var(--accent-strong);outline-offset:2px}.theme-toggle .theme-toggle-moon,[data-theme=light] .theme-toggle .theme-toggle-sun{display:none}[data-theme=light] .theme-toggle .theme-toggle-moon{display:block}.nav-dropdown .theme-toggle{margin-top:2.5rem}.arrow-icon{vertical-align:-.25em;margin-left:.25em;display:inline-block}.arrow-icon--lead{margin-left:0;margin-right:.35em}.eyebrow{font-family:var(--font-sans);text-transform:capitalize;letter-spacing:.08em;color:var(--text-muted);font-size:clamp(.833rem,.773rem + .303vw,1rem);font-weight:500}.display-serif{font-family:var(--font-serif);letter-spacing:-.01em;color:var(--text-main);font-style:normal;font-weight:400;line-height:1.2}.lead{font-family:var(--font-sans);color:var(--text-body);font-size:clamp(1rem,.927rem + .364vw,1.2rem);font-weight:400;line-height:1.5}.label{font-family:var(--font-sans);letter-spacing:.02em;color:var(--text-muted);font-size:.875rem}.reveal-fade{opacity:0;transition:opacity .4s ease calc(var(--i,0) * 50ms)}.reveal-fade.is-in{opacity:1}.reveal-words .word{white-space:pre;opacity:0;clip-path:inset(0 0 110%);transition:clip-path .8s cubic-bezier(.16, 1, .3, 1) calc(var(--i,0) * 90ms), opacity .8s ease calc(var(--i,0) * 90ms), transform .8s cubic-bezier(.16, 1, .3, 1) calc(var(--i,0) * 90ms);display:inline-block;transform:translateY(.4em)}.reveal-words.is-in .word{opacity:1;clip-path:inset(-.6em -.3em);transform:none}.featured-project{padding-top:clamp(.25rem,.15rem + .5vw,.5rem)}.featured-project-card{border-radius:var(--radius);border:1px solid var(--hairline);background:var(--surface-card);grid-template-columns:1fr;gap:clamp(1.5rem,1rem + 2vw,2.5rem);padding:clamp(1.25rem,.909rem + 1.455vw,2rem);display:grid}.featured-project-image{aspect-ratio:16/10;object-fit:cover;border-radius:calc(var(--radius) * .6);width:100%;display:block}.featured-project-body{flex-direction:column;align-items:flex-start;gap:.75rem;min-width:0;display:flex}.featured-project-pill{color:var(--accent-strong)}.featured-project-title{font-size:clamp(1.728rem,1.602rem + .628vw,2.074rem)}.featured-project-blurb{max-width:65ch}.featured-project-actions{margin-top:.75rem}@media screen and (width>=900px){.featured-project-card{grid-template-columns:1.1fr 1fr;align-items:center}.featured-project-body{order:-1}}.featured-project-card.featured-project-card--compact{grid-template-columns:1fr;gap:1.25rem;padding:clamp(1.1rem,.9rem + 1vw,1.5rem)}.featured-project-card--compact .featured-project-body{order:0;gap:.85rem}.featured-project-card--compact .featured-project-title{font-size:clamp(1.44rem,1.335rem + .524vw,1.728rem)}.featured-project-card--compact .featured-project-blurb{max-width:45ch;font-size:clamp(.833rem,.773rem + .303vw,1rem)}.featured-project-card--compact .featured-project-actions{row-gap:.75rem;margin-top:.5rem}.door-cards{padding-top:clamp(1rem,.545rem + 1.939vw,2rem)}.door-cards-grid{grid-template-columns:1fr;gap:clamp(1.5rem,1rem + 2vw,2.5rem);display:grid}.door-card{border-radius:var(--radius);border:1px solid var(--hairline);background:var(--surface-card);flex-direction:column;align-items:flex-start;gap:1rem;padding:clamp(1.5rem,1.227rem + 1.212vw,2.25rem);transition:border-color .35s,transform .35s cubic-bezier(.16,1,.3,1);display:flex}.door-card:hover{border-color:color-mix(in srgb, var(--accent) 55%, transparent);transform:translateY(-2px)}.door-card-title{font-size:clamp(1.44rem,1.335rem + .524vw,1.728rem)}.door-card-body{color:var(--text-muted)}@media screen and (width>=768px){.door-cards-grid{grid-template-columns:1fr 1fr}}.contact-close-inner{border-radius:var(--radius);border:1px solid color-mix(in srgb, var(--accent) 22%, transparent);background:var(--surface-card);flex-direction:column;align-items:flex-start;gap:1rem;padding:clamp(2rem,1.455rem + 2.727vw,3.5rem) clamp(1.5rem,1.227rem + 1.212vw,2.25rem);display:flex}.contact-close-title{font-size:clamp(1.44rem,1.335rem + .524vw,1.728rem)}.contact-close-sub{color:var(--text-muted)}.contact-close-actions{margin-top:.5rem}.tech-stack{grid-template-columns:1fr;gap:clamp(1.5rem,1.2rem + 1.2vw,2rem) clamp(2rem,1rem + 4vw,3rem);list-style:none;display:grid}@media screen and (width>=640px){.tech-stack{grid-template-columns:repeat(2,1fr)}}@media screen and (width>=1000px){.tech-stack{grid-template-columns:repeat(3,1fr)}}.tech-item{border-top:1px solid var(--hairline);flex-direction:column;align-items:flex-start;gap:.5rem;padding-top:1rem;transition:border-color .3s;display:flex}.tech-item:hover{border-top-color:var(--accent)}.tech-item-head{align-items:center;gap:.75rem;display:flex}.tech-logo{object-fit:contain;width:1.5rem;height:1.5rem}.tech-name{color:var(--text-main);font-size:1.2rem;font-weight:500}.tech-desc{color:var(--text-muted);line-height:1.5}.tech-link{color:var(--accent-strong);text-underline-offset:.2em;font-size:.833rem;text-decoration:underline;transition:color .2s}.tech-link:hover,.tech-link:focus-visible{color:var(--text-main)}
