:root{color-scheme:light;--paper: #f7f5ef;--paper-soft: #efede5;--ink: #11100e;--ink-2: #35322d;--ink-3: #747067;--line: #d8d3c8;--line-strong: #1a1815;--accent: #6b5a3a;--max: 1280px;--gutter: clamp(20px, 4vw, 56px);--sans: "Manrope", Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--serif: "Newsreader", Georgia, serif;--mono: "IBM Plex Mono", "SFMono-Regular", "Cascadia Code", "Liberation Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html{scroll-behavior:smooth}body{min-width:320px;margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;letter-spacing:0;text-rendering:geometricPrecision}a{color:inherit;text-decoration:none}img,svg{display:block}img{max-width:100%}:focus-visible{outline:1px solid var(--ink);outline-offset:4px}.site-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:70px;padding:14px var(--gutter);border-bottom:1px solid transparent;background:color-mix(in srgb,var(--paper) 82%,transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);transition:border-color .18s ease,background .18s ease}.site-header--scrolled{border-color:var(--line);background:color-mix(in srgb,var(--paper) 94%,transparent)}.brand{display:inline-flex;align-items:center;gap:12px;min-width:0;font-size:.94rem;font-weight:700;line-height:1}.brand img{width:32px;height:32px;flex:0 0 auto}.site-header nav{display:flex;align-items:center;gap:clamp(16px,3vw,30px);color:var(--ink-2);font-size:.88rem;font-weight:650}.site-header nav>a:not(.github-link),.project-cta,.research-links a,.contact-block a,.site-footer a:not(.github-link){text-decoration-thickness:1px;text-underline-offset:5px}.site-header nav>a:not(.github-link):hover,.site-header nav>a:not(.github-link):focus-visible,.project-cta:hover,.project-cta:focus-visible,.research-links a:hover,.research-links a:focus-visible,.contact-block a:hover,.contact-block a:focus-visible,.site-footer a:hover,.site-footer a:focus-visible{text-decoration-line:underline}.github-link{display:inline-grid;width:34px;height:34px;place-items:center;color:var(--ink)}.github-link svg{width:18px;height:18px}.hero{width:min(var(--max),calc(100% - (var(--gutter) * 2)));margin:0 auto;padding:clamp(58px,8vw,110px) 0 clamp(70px,9vw,128px)}.hero-logo{width:clamp(70px,8vw,96px);height:clamp(70px,8vw,96px);margin-bottom:clamp(34px,5vw,58px)}.hero h1{max-width:12.5ch;margin:0;font-size:clamp(2.5rem,6vw,5.5rem);font-weight:750;line-height:1.02;letter-spacing:0}.word-slot{display:inline-block;min-width:10.1ch;white-space:nowrap}.animated-word{font-family:var(--serif);font-weight:600}.caret{display:inline-block;width:.055em;height:.78em;margin-left:.08em;transform:translateY(.08em);background:var(--accent);animation:caret-blink 1.1s steps(2,start) infinite}.punctuation{margin-left:.01em}.punctuation--hidden{display:none}.hero-copy{max-width:560px;margin:clamp(18px,3vw,30px) 0 0;color:var(--ink-2);font-size:clamp(1rem,1.4vw,1.18rem);font-weight:500;line-height:1.55}.metrics{display:flex;flex-wrap:wrap;gap:0;width:min(780px,100%);margin:clamp(32px,5vw,58px) 0 0;padding:0;border-top:1px solid var(--line-strong);border-bottom:1px solid var(--line)}.metric{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:baseline;gap:12px;min-width:260px;padding:17px 26px 17px 0}.metric+.metric{padding-left:26px;border-left:1px solid var(--line)}.metric dt{margin:0;font-family:var(--mono);font-size:clamp(1.32rem,2vw,1.8rem);font-weight:600;line-height:1}.metric dd{margin:0;color:var(--ink-3);font-size:.92rem;font-weight:600;line-height:1.35}.project-section{overflow:clip;padding:clamp(58px,8vw,108px) 0 clamp(50px,7vw,92px);border-top:1px solid var(--line-strong)}.project-section-intro{width:min(var(--max),calc(100% - (var(--gutter) * 2)));margin:0 auto clamp(42px,7vw,84px)}.project-section-intro p,.contact-block p,.research-index>p,.project-meta{margin:0;color:var(--ink-3);font-family:var(--mono);font-size:.73rem;font-weight:600;line-height:1.45;letter-spacing:0;text-transform:uppercase}.project-section-intro h2{max-width:700px;margin:14px 0 0;font-size:clamp(1.6rem,3vw,2.8rem);font-weight:720;line-height:1.06;letter-spacing:0}.project-list{display:grid;gap:clamp(72px,10vw,144px)}.project{position:relative;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(20px,3vw,46px);width:min(var(--max),calc(100% - (var(--gutter) * 2)));margin:0 auto;padding-top:clamp(22px,4vw,46px);border-top:1px solid var(--line)}.project-copy{grid-column:1 / 6;align-self:start;padding-top:clamp(10px,3vw,38px)}.project--image-left .project-copy{grid-column:8 / 13;padding-top:clamp(54px,8vw,118px)}.project--image-right .project-visual{grid-column:6 / 13}.project--image-left .project-visual{grid-column:1 / 8;grid-row:1}.project--research{grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(28px,5vw,70px);padding-bottom:clamp(8px,3vw,28px)}.project--research .project-copy{grid-column:1 / 6;padding-top:0}.research-index{grid-column:7 / 13;align-self:start}.project-meta{display:flex;align-items:center;gap:14px}.project-meta span:first-child{color:var(--ink)}.project h2{margin:18px 0 0;font-size:clamp(2rem,4vw,4rem);font-weight:740;line-height:1;letter-spacing:0}.project-description{max-width:520px;margin:22px 0 0;color:var(--ink-2);font-size:clamp(.98rem,1.4vw,1.14rem);font-weight:500;line-height:1.62}.fact-strip{display:flex;flex-wrap:wrap;gap:0 16px;margin:28px 0 0;padding:14px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--ink-2);font-family:var(--mono);font-size:.73rem;font-weight:500;line-height:1.6;list-style:none}.fact-strip li{display:inline-flex;align-items:center}.fact-strip li+li:before{width:1px;height:13px;margin-right:16px;background:var(--line);content:""}.project-cta{display:inline-block;margin-top:26px;color:var(--ink);font-size:.92rem;font-weight:750}.project-visual{margin:0;overflow:hidden;border:1px solid var(--line);background:#fff}.project--image-right .project-visual{transform:translateY(32px)}.project--image-left .project-visual{transform:translateY(-10px)}.project-visual img{width:100%;aspect-ratio:16 / 10;object-fit:cover;object-position:center top;transform:scale(1.012)}.research-index>p{padding-bottom:15px;border-bottom:1px solid var(--line-strong);color:var(--ink)}.research-links{display:grid}.research-links a{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:20px;min-height:74px;border-bottom:1px solid var(--line);color:var(--ink-2);font-size:clamp(.98rem,1.2vw,1.08rem);font-weight:650}.research-links a span:last-child{color:var(--ink-3);font-family:var(--mono);font-size:.82rem}.contact-block{width:min(var(--max),calc(100% - (var(--gutter) * 2)));margin:0 auto;padding:clamp(58px,9vw,116px) 0 clamp(62px,8vw,104px);border-top:1px solid var(--line-strong)}.contact-block h2{max-width:720px;margin:16px 0 18px;font-size:clamp(2rem,4vw,4rem);font-weight:720;line-height:1.04;letter-spacing:0}.contact-block a{color:var(--ink-2);font-size:clamp(1rem,1.6vw,1.2rem);font-weight:700}.site-footer{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:clamp(18px,3vw,34px);padding:28px var(--gutter) 36px;border-top:1px solid var(--line);color:var(--ink-3);font-size:.86rem}.footer-brand{display:flex;flex-wrap:wrap;gap:10px}.footer-brand strong{color:var(--ink)}.footer-links{display:flex;align-items:center;gap:14px}.copyright{white-space:nowrap}[data-reveal]{opacity:0;transform:translateY(18px);transition:opacity .56s ease,transform .56s ease}[data-reveal].is-visible{opacity:1;transform:translateY(0)}.project[data-reveal] .project-copy{opacity:0;transform:translateY(14px);transition:opacity .56s ease 80ms,transform .56s ease 80ms}.project[data-reveal] .project-visual,.project[data-reveal] .research-index{opacity:0;transform:translateY(20px);transition:opacity .62s ease .15s,transform .62s ease .15s}.project[data-reveal].is-visible .project-copy,.project[data-reveal].is-visible .project-visual,.project[data-reveal].is-visible .research-index{opacity:1;transform:translateY(0)}@keyframes caret-blink{50%{opacity:0}}@media(max-width:920px){.project,.project--research{grid-template-columns:1fr;gap:28px}.project-copy,.project--image-left .project-copy,.project--image-right .project-visual,.project--image-left .project-visual,.project--research .project-copy,.research-index{grid-column:1;grid-row:auto;padding-top:0;transform:none}.project--image-left .project-visual{grid-row:auto}.site-footer{grid-template-columns:1fr}}@media(max-width:640px){.site-header{min-height:64px;gap:16px}.brand span{max-width:96px;line-height:1.08}.site-header nav{gap:14px;font-size:.82rem}.github-link{width:30px;height:30px}.hero{padding-top:46px}.hero h1{max-width:9.8ch;font-size:clamp(2.45rem,14vw,4rem)}.word-slot{display:block;min-width:9.2ch}.metrics{display:grid}.metric{grid-template-columns:1fr;min-width:0;gap:7px;padding:16px 0}.metric+.metric{padding-left:0;border-top:1px solid var(--line);border-left:0}.project-list{gap:68px}.project-meta{align-items:flex-start;flex-direction:column;gap:5px}.fact-strip{display:grid;gap:6px}.fact-strip li+li:before{display:none}.project-visual img{aspect-ratio:4 / 3}.research-links a{min-height:66px;font-size:.95rem}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.001ms!important}[data-reveal],.project[data-reveal] .project-copy,.project[data-reveal] .project-visual,.project[data-reveal] .research-index{opacity:1;transform:none}.caret{display:none}}
