:root,:root[data-theme=dark]{color-scheme:dark;--bg: #000000;--surface: #111111;--ink: #ededed;--muted: #a3a3a3;--line: #2a2a2a;--field-border: #737373;--accent: #7b93ff;--accent-strong: #a3b3ff;--accent-ink: #000000;--danger: #ff8f86;--success: #6fd69a;--glow: rgba(123, 147, 255, .16);--glow-strong: rgba(123, 147, 255, .45)}:root[data-theme=light]{color-scheme:light;--bg: #f4f6f8;--surface: #ffffff;--ink: #141c26;--muted: #566172;--line: #d9dee5;--field-border: #7a8595;--accent: #2b4eff;--accent-strong: #1f3bd1;--accent-ink: #ffffff;--danger: #b3261e;--success: #17683a;--glow: rgba(43, 78, 255, .1);--glow-strong: rgba(43, 78, 255, .35)}:root{--font-display: "Bricolage Grotesque", "Segoe UI", system-ui, sans-serif;--font-body: "Instrument Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--radius: 6px;--ease: cubic-bezier(.2, .8, .2, 1);--container: 68rem;--gutter: 1.25rem;--tap: 2.75rem}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}body{margin:0;min-height:100vh;min-height:100dvh;overflow-x:clip;background:var(--bg);color:var(--ink);font-family:var(--font-body);font-size:1.0625rem;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3{margin:0;font-family:var(--font-display);line-height:1.1;letter-spacing:-.02em}h2{font-size:clamp(1.5rem,3vw,2rem)}p{margin:0 0 1rem;overflow-wrap:break-word}a,button,summary,label,input,textarea{touch-action:manipulation}ul,ol,dl,dd{margin:0;padding:0;list-style:none}a{color:inherit}img{display:block;max-width:100%}:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.container{width:min(100% - var(--gutter) * 2 - env(safe-area-inset-left) - env(safe-area-inset-right),var(--container));margin-inline:auto}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:1rem;top:-4rem;z-index:110;padding:.6rem 1rem;background:var(--ink);color:var(--bg);border-radius:var(--radius)}.skip-link:focus{top:1rem}html.lenis,html.lenis body{height:auto}.lenis.lenis-smooth{scroll-behavior:auto!important}.lenis.lenis-stopped{overflow:hidden}.scene-canvas{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;width:100%;height:100vh;height:100lvh;pointer-events:none}.site-header,main,.site-footer{position:relative;z-index:1}.curtain{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;display:grid;place-items:center;background:var(--accent);color:var(--accent-ink);visibility:hidden;clip-path:inset(100% 0% 0% 0%);pointer-events:none}.curtain-mask{overflow:hidden;padding:.1em .2em}.curtain-title{margin:0;font-family:var(--font-display);font-size:clamp(2.25rem,12vw,10rem);font-weight:700;letter-spacing:-.035em;line-height:1.05;text-align:center;transform:translateY(110%)}.cursor-follow{position:fixed;left:0;top:0;z-index:100;display:none;opacity:0;pointer-events:none;transition:opacity .25s}.has-custom-cursor .cursor-follow{display:block}.cursor-visible .cursor-follow{opacity:1}.cursor-ring{position:absolute;left:0;top:0;translate:-50% -50%;display:grid;place-items:center;width:2.5rem;height:2.5rem;border:1.5px solid var(--ink);border-radius:50%;transition:width .35s var(--ease),height .35s var(--ease),background-color .3s,border-color .3s,opacity .2s,scale .2s}.cursor-ring[data-state=link]{width:4rem;height:4rem;border-color:var(--accent);background:var(--glow)}.cursor-ring[data-state=label]{width:5.5rem;height:5.5rem;border-color:var(--accent);background:var(--accent)}.cursor-ring[data-state=hidden]{opacity:0}.cursor-ring[data-pressed]{scale:.85}.cursor-label{color:var(--accent-ink);font-size:.9rem;font-weight:600;opacity:0;transition:opacity .2s}.cursor-ring[data-state=label] .cursor-label{opacity:1}.cursor-dot{position:absolute;left:0;top:0;translate:-50% -50%;width:.4rem;height:.4rem;background:var(--ink);border-radius:50%}html.has-custom-cursor,html.has-custom-cursor *{cursor:none!important}html.has-custom-cursor input,html.has-custom-cursor textarea,html.has-custom-cursor select{cursor:text!important}.roll{display:inline-block;overflow:hidden;vertical-align:bottom;white-space:nowrap}.roll-inner{position:relative;display:block;transition:transform .5s var(--ease)}.roll-inner:after{content:attr(data-text);content:attr(data-text) / "";position:absolute;left:0;top:100%;white-space:nowrap}:is(a,button):focus-visible .roll-inner{transform:translateY(-100%)}@media (hover: hover){:is(a,button):hover .roll-inner{transform:translateY(-100%)}}.site-header{padding-block:1.5rem}.header-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 2rem}.brand{display:inline-flex;align-items:center;min-height:var(--tap);font-family:var(--font-display);font-size:1.2rem;font-weight:700;letter-spacing:-.01em;text-decoration:none}.header-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem}.nav-list{display:flex;flex-wrap:wrap;gap:.25rem 1.5rem}.nav-list a{display:inline-flex;align-items:center;min-height:var(--tap);color:var(--muted);text-decoration:none;background:linear-gradient(var(--accent),var(--accent)) left bottom / 0 2px no-repeat;transition:color .2s,background-size .35s var(--ease)}@media (hover: hover){.nav-list a:hover{color:var(--ink)}}.nav-list a[aria-current=page]{color:var(--ink);background-size:100% 2px}.theme-toggle{position:relative;display:grid;place-items:center;width:var(--tap);height:var(--tap);padding:0;background:transparent;border:1px solid var(--line);border-radius:50%;color:var(--ink);cursor:pointer;transition:border-color .2s}@media (hover: hover){.theme-toggle:hover{border-color:var(--ink)}}.theme-toggle .icon{position:absolute;width:1.25rem;height:1.25rem;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .6s var(--ease),opacity .3s}:root[data-theme=dark] .icon-moon{opacity:0;transform:rotate(-90deg) scale(.4)}:root[data-theme=light] .icon-sun{opacity:0;transform:rotate(90deg) scale(.4)}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}.btn{display:inline-block;min-height:var(--tap);padding:.8rem 1.4rem;text-align:center;border:1.5px solid transparent;border-radius:var(--radius);font:inherit;font-weight:600;text-decoration:none;cursor:pointer;transition:background-color .2s,color .2s,box-shadow .3s var(--ease),scale .2s var(--ease)}.btn:active{scale:.97}.btn-primary{background:var(--accent);color:var(--accent-ink)}.btn-primary:active{background:var(--accent-strong)}@media (hover: hover){.btn-primary:hover{background:var(--accent-strong);box-shadow:0 10px 30px -10px var(--glow-strong)}}.btn-primary:disabled{opacity:.6;cursor:wait}.btn-ghost{border-color:var(--ink);color:var(--ink)}@media (hover: hover){.btn-ghost:hover{background:var(--ink);color:var(--bg)}}.section-head .text-link{display:inline-flex;align-items:center;min-height:var(--tap)}.text-link,.project-links a,.contact-details a{color:var(--accent);font-weight:600;text-underline-offset:.2em;transition:color .2s}@media (hover: hover){.text-link:hover,.project-links a:hover,.contact-details a:hover{color:var(--accent-strong)}}.word{display:inline-block;overflow:hidden;padding:.14em .04em .12em;margin:-.14em .16em -.12em -.04em}.word:last-child{margin-right:-.04em}.char{display:inline-block;animation:char-in .9s var(--ease) both;animation-delay:calc(var(--i, 0) * 45ms + .45s)}@keyframes char-in{0%{opacity:0;transform:translateY(105%) rotate(6deg)}}.hero-fade{animation:fade-up .8s var(--ease) both;animation-delay:calc(var(--n, 8) * 45ms + .55s)}.actions.hero-fade{animation-delay:calc(var(--n, 8) * 45ms + .7s)}@keyframes fade-up{0%{opacity:0;transform:translateY(14px)}}.hero{display:flex;flex-direction:column;justify-content:center;min-height:min(78svh,52rem);padding-block:clamp(3rem,9vw,6rem)}.hero-title{font-size:clamp(3rem,12vw,9.5rem);font-weight:700;line-height:.98;letter-spacing:-.035em}.lead{max-width:36ch;margin-top:1.5rem;font-size:clamp(1.2rem,2.4vw,1.5rem);line-height:1.4;color:var(--muted)}.actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:2rem}.marquee{overflow:hidden;padding-block:clamp(2rem,6vw,4rem);-webkit-user-select:none;user-select:none}.marquee-row{display:flex;gap:clamp(2rem,5vw,4rem);width:max-content;font-family:var(--font-display);font-size:clamp(3.5rem,11vw,9rem);font-weight:700;line-height:1.05;letter-spacing:-.035em;white-space:nowrap;will-change:transform}.marquee-row span{display:inline-flex;align-items:center;gap:clamp(2rem,5vw,4rem)}.marquee-row span:after{content:"";flex:none;width:.22em;height:.22em;border-radius:50%;background:var(--accent)}.marquee-outline{color:transparent;-webkit-text-stroke:1.5px var(--ink)}.section{padding-block:3rem}.section-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.5rem 1rem;margin-bottom:1.5rem}.page{padding-block:clamp(2.5rem,7vw,5rem) 3rem}.page-title{font-size:clamp(2.4rem,11vw,7rem);font-weight:700;line-height:1;letter-spacing:-.035em}.page .lead{margin-bottom:2rem}.reveal{opacity:0;transform:translateY(16px);transition:opacity .7s var(--ease) var(--reveal-delay, 0ms),transform .7s var(--ease) var(--reveal-delay, 0ms)}.reveal.is-visible{opacity:1;transform:none}.reveal-line{position:relative}.reveal-line:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:var(--line);transform:scaleX(0);transform-origin:left;transition:transform .9s var(--ease)}.reveal-line>*{opacity:0;transform:translateY(12px);transition:opacity .7s var(--ease) .15s,transform .7s var(--ease) .15s}.reveal-line>*:nth-child(2){transition-delay:.27s}.reveal-line.is-visible:before{transform:scaleX(1)}.reveal-line.is-visible>*{opacity:1;transform:none}.tags{display:flex;flex-wrap:wrap;gap:.5rem}.tags li{padding:.1rem .7rem;background:var(--surface);border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:.875rem}.project-list,.timeline{border-bottom:1px solid var(--line)}.project-list>li{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:1rem clamp(1.5rem,4vw,3rem);padding-block:2.25rem}.project h3{overflow-wrap:break-word;font-size:clamp(1.9rem,4.6vw,3.4rem);line-height:1.05;letter-spacing:-.03em}.project-main-link{text-decoration:none}.project-main-link:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.project-title{display:inline-block;transition:transform .5s var(--ease),color .2s}.project-year{margin:.5rem 0 0;color:var(--muted)}.project-body img{width:100%;aspect-ratio:16 / 9;margin-bottom:1rem;object-fit:cover;border:1px solid var(--line);border-radius:var(--radius)}.project-body .tags{margin-bottom:1rem}.project-links a{display:inline-flex;align-items:center;min-height:var(--tap)}.project-links{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:0 1.5rem;margin:0}@media (hover: hover){.project:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background:var(--glow);transform:scaleY(0);transform-origin:bottom;transition:transform .55s var(--ease)}.project:hover:after{transform:scaleY(1)}.project:hover .project-title{color:var(--accent);transform:translate(.75rem)}}.filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:2.5rem}.chip{min-height:var(--tap);padding:.4rem 1.1rem;background:var(--surface);border:1px solid var(--line);border-radius:999px;color:var(--ink);font:inherit;font-size:.95rem;cursor:pointer;transition:background-color .2s,color .2s,border-color .2s}@media (hover: hover){.chip:hover{border-color:var(--ink)}}.chip[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--bg)}.statement{max-width:34ch;margin:2.5rem 0 3.5rem;font-family:var(--font-display);font-size:clamp(1.7rem,3.6vw,2.8rem);font-weight:500;line-height:1.2;letter-spacing:-.02em}.cv-download{margin:-1.5rem 0 0}.about-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:2rem clamp(2rem,5vw,4rem);margin-top:2.5rem}.prose{max-width:60ch;font-size:1.15rem}.skills h2{margin-bottom:1rem;font-size:1.3rem}.skill-group{margin-bottom:1.25rem}.skill-group dt{margin-bottom:.4rem;font-weight:600}.timeline{margin-top:1.5rem}.timeline>li{display:grid;grid-template-columns:minmax(9rem,11rem) minmax(0,1fr);gap:.25rem 2rem;padding-block:1.25rem}.timeline p{margin:0}.timeline-period,.timeline-place{color:var(--muted)}.timeline-title{font-weight:600}.timeline-details{display:grid;gap:.5rem;margin-top:.75rem}.timeline-details li{position:relative;padding-left:1.1rem}.timeline-details li:before{content:"";position:absolute;left:0;top:.7em;width:.4rem;height:.4rem;border-radius:50%;background:var(--accent)}.contact-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:3rem clamp(2rem,5vw,4rem);align-items:start}.field{margin-bottom:1.25rem}.field label{display:block;margin-bottom:.35rem;font-weight:600}.field input,.field textarea{width:100%;padding:.75rem .9rem;background:var(--surface);border:1px solid var(--field-border);border-radius:var(--radius);color:var(--ink);font:inherit;transition:border-color .2s,box-shadow .3s}.field input:focus,.field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--glow)}.field textarea{resize:vertical}.form-status{margin:1.25rem 0 0;font-weight:600}.form-status.success{color:var(--success)}.form-status.error{color:var(--danger)}.contact-details h2{margin-bottom:1rem;font-size:1.3rem}.contact-details{overflow-wrap:anywhere}.contact-details ul{display:grid;gap:.25rem}.contact-details li a{display:inline-flex;align-items:center;min-height:var(--tap)}.send-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.6rem;min-width:min(100%,16.5rem);overflow:hidden;transition:background-color .3s,color .2s,box-shadow .3s var(--ease),scale .2s var(--ease)}.send-btn:disabled{opacity:1}.send-icons{position:relative;flex:none;width:1.25rem;height:1.25rem}.send-icons svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.send-check{opacity:0}.send-check path{stroke-dasharray:24;stroke-dashoffset:24}.send-btn:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.25),transparent);translate:-100% 0;pointer-events:none}.send-btn[data-state=sending] .send-plane{animation:plane-loop 1s ease-in-out infinite}.send-btn[data-state=sending]:after{animation:sheen 1.2s ease-in-out infinite}.btn.send-btn[data-state=success],.btn.send-btn[data-state=success]:hover{background:var(--success);box-shadow:none}.send-btn[data-state=success] .send-plane{animation:plane-away .6s var(--ease) forwards}.send-btn[data-state=success] .send-check{opacity:1}.send-btn[data-state=success] .send-check path{animation:check-draw .5s .35s var(--ease) forwards}.btn.send-btn[data-state=error]{animation:shake .45s}@keyframes plane-loop{0%{transform:translate(0);opacity:1}40%{transform:translate(1.6rem,-.7rem);opacity:0}41%{transform:translate(-1.6rem,.7rem);opacity:0}to{transform:translate(0);opacity:1}}@keyframes plane-away{to{transform:translate(2.5rem,-1rem) scale(.5);opacity:0}}@keyframes check-draw{to{stroke-dashoffset:0}}@keyframes sheen{to{translate:100% 0}}@keyframes shake{20%,60%{translate:-6px 0}40%,80%{translate:6px 0}}.map{padding-top:4rem}.map-frame{position:relative;width:100%;aspect-ratio:16 / 7;min-height:18rem;overflow:hidden;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.map-frame iframe{display:block;width:100%;height:100%;border:0;pointer-events:none}.map-frame.is-active iframe{pointer-events:auto}:root[data-theme=dark] .map-frame iframe{filter:invert(1) hue-rotate(180deg) brightness(.9) contrast(.9)}.map-hint{position:absolute;left:50%;top:1rem;translate:-50% 0;padding:.35rem .9rem;background:var(--bg);border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:.875rem;white-space:nowrap;pointer-events:none;transition:opacity .3s}.map-frame.is-active .map-hint{opacity:0}html.map-active .cursor-follow{opacity:0!important}.site-footer{margin-top:3rem;padding-block:2rem;padding-bottom:calc(2rem + env(safe-area-inset-bottom));border-top:1px solid var(--line);color:var(--muted);font-size:.95rem}.footer-inner{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem 2rem}.footer-inner p{margin:0}.footer-links{display:flex;gap:.25rem;margin-right:-.6rem}.footer-links a{display:grid;place-items:center;width:var(--tap);height:var(--tap)}@media (min-width: 1280px){:root{--container: 72rem;--gutter: 2rem}}@media (min-width: 1600px){:root{--container: 80rem;--gutter: 2.5rem}}@media (min-width: 1920px){html{font-size:112.5%}}@media (min-width: 2560px){html{font-size:137.5%}}@media (max-width: 1024px){:root{--gutter: 1.75rem}.header-inner{gap:.5rem 1.5rem}.project-list>li{padding-block:2rem}}@media (max-width: 720px){:root{--gutter: 1.25rem}body{font-size:1rem}.project-list>li,.about-grid,.contact-grid,.timeline>li{grid-template-columns:1fr}.project-list>li{gap:.75rem;padding-block:1.75rem}.site-header{padding-block:.75rem .25rem}.header-inner{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 1rem}.header-actions{display:contents}.brand{grid-column:1;grid-row:1}.theme-toggle{grid-column:2;grid-row:1}.header-actions nav{grid-column:1 / -1;grid-row:2;border-bottom:1px solid var(--line)}.nav-list{flex-wrap:nowrap;justify-content:space-between;gap:0 .5rem;font-size:.95rem}.hero{min-height:min(72svh,40rem);padding-block:2.5rem 3.5rem}.lead{max-width:none;margin-top:1.25rem}.actions{margin-top:1.75rem}.actions .btn{flex:1 1 10rem}.section{padding-block:2rem}.section-head{margin-bottom:1rem}.statement{margin:1.5rem 0 2.5rem}.prose{font-size:1.05rem}.filters{margin-bottom:1.75rem}.field input,.field textarea{padding:.85rem .9rem}.form .btn{width:100%}.map{padding-top:2.5rem}.map-frame{aspect-ratio:4 / 3;min-height:16rem}.site-footer{margin-top:2rem;padding-top:1.25rem}}@media (max-width: 380px){:root{--gutter: 1rem}body{font-size:.975rem}.nav-list{font-size:.875rem}.footer-links{margin:0 0 0 -.6rem}.actions .btn{flex-basis:100%}.chip{padding-inline:.9rem;font-size:.9rem}}@media (max-height: 520px) and (orientation: landscape){.site-header{padding-block:.5rem}.hero{min-height:0;padding-block:2rem 2.5rem}.hero-title{font-size:clamp(2.75rem,9vw,5.5rem)}.page{padding-block:1.5rem 2rem}.page-title{font-size:clamp(2.4rem,8vw,4.5rem)}}@media (prefers-reduced-motion: reduce){.char,.hero-fade{animation:none}.reveal,.reveal-line>*{opacity:1;transform:none}.reveal-line:before{transform:none}.send-btn,.send-btn:after,.send-plane,.send-check path{animation:none!important}.send-btn[data-state=sending] .send-plane{opacity:.5}.send-btn[data-state=success] .send-plane{opacity:0}.send-btn[data-state=success] .send-check path{stroke-dashoffset:0}*,*:before,*:after{transition:none!important}}
