:root{--paper:#f4f1ea;--paper-2:#e9e4d8;--ink:#14201a;--ink-2:#4b564e;--line:#d5cebf;--line-strong:#a9a392;--signal:#c23d1f;--on-ink:#f4f1ea;--on-ink-2:#b4bbb0;--display:"Bricolage Grotesque", "Segoe UI", system-ui, sans-serif;--mono:"IBM Plex Mono", Consolas, monospace;--edge:clamp(16px, 4vw, 40px);--ease-out:cubic-bezier(.23, 1, .32, 1)}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;background:var(--paper);scroll-padding-top:5rem}body{background:var(--paper);color:var(--ink);font:400 1rem/1.6 var(--display);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3,p,ol,ul,dl,dd,figure{margin:0}ol,ul{padding:0;list-style:none}a{color:inherit}img{max-width:100%;display:block}button{font:inherit;color:inherit}::selection{background:var(--ink);color:var(--paper)}:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:3px}main:focus{outline:none}.wrap{width:100%;max-width:1120px;padding-inline:var(--edge);margin-inline:auto}.nowrap{white-space:nowrap}.skip{z-index:20;background:var(--ink);color:var(--on-ink);border-radius:8px;padding:10px 14px;position:fixed;top:12px;left:12px;transform:translateY(-200%)}.skip:focus-visible{transform:none}h1,h2,h3,.work-title,.project-nav-title,.mail,.brand{font-family:var(--display);letter-spacing:-.035em;text-wrap:balance;font-size:1.125rem;font-weight:650;font-stretch:82%;line-height:.98}h1{font-size:clamp(2rem,4.4vw,3.25rem)}h2{font-size:clamp(1.55rem,2.7vw,2.125rem)}h3{letter-spacing:-.02em;font-size:1.1875rem;line-height:1.15}.kicker,.num{font:500 .75rem/1.4 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}.num{color:var(--signal)}.lead{max-width:40em;color:var(--ink-2);font-size:clamp(1.0625rem,1.3vw,1.125rem);line-height:1.55}.button{background:var(--ink);min-height:42px;color:var(--on-ink);transition:transform .16s var(--ease-out), background-color .16s ease;border-radius:10px;align-items:center;gap:8px;padding:0 18px;font-size:.9375rem;font-weight:600;text-decoration:none;display:inline-flex}.button:active{transform:scale(.97)}.link{text-decoration:underline;-webkit-text-decoration-color:var(--line-strong);text-decoration-color:var(--line-strong);text-underline-offset:5px;align-items:baseline;gap:6px;padding-block:10px;font-size:.9375rem;font-weight:600;text-decoration-thickness:1px;transition:text-decoration-color .16s;display:inline-flex}.arrow{transition:transform .2s var(--ease-out);display:inline-block}.actions{flex-wrap:wrap;align-items:center;gap:8px 24px;display:flex}@media (hover:hover) and (pointer:fine){.button:hover{background:#2a3d31}.link:hover{-webkit-text-decoration-color:var(--signal);text-decoration-color:var(--signal)}a:hover>.arrow,a:hover .work-title>.arrow{transform:translate(4px)}}.site-header{z-index:10;border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--paper) 86%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);position:sticky;top:0}.site-header .wrap{justify-content:space-between;align-items:center;gap:16px;min-height:56px;display:flex}.brand{padding-block:10px;font-size:1.25rem;line-height:1.2;text-decoration:none}.site-header nav{gap:clamp(4px,2vw,20px);margin-right:-10px;display:flex}.site-header nav a{color:var(--ink-2);padding:12px 10px;font-size:.9375rem;font-weight:500;text-decoration:none;transition:color .16s}.site-header nav a[aria-current]{color:var(--ink);text-decoration:underline;-webkit-text-decoration-color:var(--signal);text-decoration-color:var(--signal);text-underline-offset:8px;text-decoration-thickness:2px}@media (hover:hover) and (pointer:fine){.site-header nav a:hover{color:var(--ink)}}.site-footer{background:var(--ink);color:var(--on-ink-2);font:400 .8125rem/1.4 var(--mono)}.site-footer .wrap{border-top:1px solid #ffffff1f;flex-wrap:wrap;align-items:center;gap:4px 24px;padding-block:20px;display:flex}.site-footer span{margin-right:auto}.site-footer a{padding-block:10px;text-decoration:none}.site-footer a:hover{color:var(--on-ink)}.route{animation:enter .32s var(--ease-out) both}@keyframes enter{0%{opacity:0;transform:translateY(8px)}}@keyframes fade{0%{opacity:0}}.hero{padding-top:clamp(28px,4.5vw,52px);padding-bottom:clamp(32px,4vw,48px)}.hero h1{letter-spacing:-.03em;margin-top:20px;font-size:clamp(1.75rem,3vw,2.5rem);line-height:1.1}.hero-body{grid-template-columns:minmax(0,1fr) 520px;align-items:start;gap:28px 48px;margin-top:clamp(24px,3.2vw,36px);display:grid}.hero-person img{object-fit:cover;border-radius:50%;width:240px;max-width:100%;height:240px}.hero .actions{margin-top:20px}.demo{min-width:0;container-type:inline-size}.demo-stage{aspect-ratio:640/400;background:var(--paper-2);border-radius:14px;max-width:640px}@container (width<=479.98px){.demo-stage{aspect-ratio:358/560;max-width:358px;margin-inline:auto}}.facts{grid-template-columns:repeat(5,minmax(0,1fr));display:grid}.facts div{border-block:1px solid var(--line);padding:14px 16px 14px 0}.facts dt{font:500 .75rem/1.4 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}.facts dd{letter-spacing:-.02em;margin-top:4px;font-size:clamp(1.0625rem,1.6vw,1.25rem);font-weight:600;font-stretch:82%;line-height:1.15}.section{padding-block:clamp(44px,5.5vw,72px)}.section+.section{padding-top:0}.section-head h2,.split h2{margin-top:10px}.section-more{margin-top:16px}.split{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:24px 64px;display:grid}.split .lead{margin-top:26px}.platform{grid-template-columns:minmax(0,7fr) minmax(0,5fr);align-items:center;gap:28px 56px;margin-top:clamp(24px,3.5vw,40px);padding-bottom:clamp(32px,4.5vw,52px);display:grid}.platform-art{padding:0 7% 6% 0;position:relative}.platform-desktop{aspect-ratio:3/2;width:100%;box-shadow:0 0 0 1px var(--line), 0 24px 48px -28px #14201a73;border-radius:10px}.platform-phone{aspect-ratio:390/844;width:23%;box-shadow:0 0 0 1px var(--line), 0 18px 36px -16px #14201a80;border-radius:clamp(8px,1.4vw,16px);position:absolute;bottom:0;right:0}.platform-copy h3{letter-spacing:-.04em;margin-top:10px;font-size:clamp(1.8rem,3.2vw,2.5rem);font-weight:650;line-height:.95}.platform-copy>p:not(.kicker){max-width:30em;color:var(--ink-2);margin-top:12px}.platform-list{border-top:1px solid var(--line);margin-top:20px}.platform-list a{border-bottom:1px solid var(--line);grid-template-columns:28px minmax(0,1fr) auto;align-items:baseline;gap:2px 12px;padding:10px 0;text-decoration:none;transition:border-color .16s;display:grid}.platform-name{font-weight:600}.platform-kind{color:var(--ink-2);grid-area:2/2;font-size:.875rem}.work-list{border-top:1px solid var(--line)}.work-row a{border-bottom:1px solid var(--line);grid-template-columns:40px minmax(0,1fr) 232px;align-items:center;gap:16px 24px;padding-block:clamp(18px,2.4vw,26px);text-decoration:none;transition:border-color .16s;display:grid}.work-row .num{align-self:start;padding-top:.5em}.work-text{gap:6px;display:grid}.work-kind{font:500 .75rem/1.4 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}.work-title{font-size:clamp(1.35rem,2.3vw,1.8rem)}.work-summary{max-width:38em;color:var(--ink-2);font-size:.9375rem}.shots{transition:transform .3s var(--ease-out)}.shots-desktop img{aspect-ratio:3/2;object-fit:cover;object-position:left top;width:100%;box-shadow:0 0 0 1px var(--line);border-radius:8px}.shots-mobile{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.shots-mobile img{aspect-ratio:390/844;object-fit:cover;object-position:top;width:100%;box-shadow:0 0 0 1px var(--line);border-radius:10px}@media (hover:hover) and (pointer:fine){.work-row a:hover,.platform-list a:hover{border-color:var(--ink)}.work-row a:hover .shots{transform:translateY(-4px)}}.skills{border-top:1px solid var(--line);margin-top:24px}.skills div{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) minmax(0,3fr);gap:4px 32px;padding-block:12px;display:grid}.skills dt{font-weight:600}.skills dd{color:var(--ink-2)}.closing{background:var(--ink);color:var(--on-ink);padding-block:clamp(52px,6.5vw,84px)}.closing .kicker{color:var(--on-ink-2)}.closing h2{max-width:14em;margin-top:10px}.mail{overflow-wrap:anywhere;max-width:100%;text-decoration:underline;-webkit-text-decoration-color:var(--signal);text-decoration-color:var(--signal);text-underline-offset:.14em;margin-top:24px;font-size:clamp(1.35rem,3.6vw,2.5rem);line-height:1.1;text-decoration-thickness:.06em;display:inline-block}.closing-links{flex-wrap:wrap;gap:0 32px;margin-top:16px;display:flex}.closing .link{text-decoration-color:#ffffff59}.contact-rows{border-top:1px solid var(--line);margin-top:36px}.contact-rows a{border-bottom:1px solid var(--line);grid-template-columns:96px minmax(0,1fr) auto;align-items:baseline;gap:16px;padding-block:14px;font-size:1rem;text-decoration:none;transition:border-color .16s;display:grid}@media (hover:hover) and (pointer:fine){.contact-rows a:hover{border-color:var(--ink)}}.page,.detail{min-height:70vh;padding-top:clamp(28px,4.5vw,52px);padding-bottom:clamp(52px,6.5vw,84px)}.page h1,.detail h1{max-width:16em;margin-top:12px}.page>.lead,.detail-head .lead{margin-top:16px}.page .facts{margin-top:40px;padding-inline:0}.about{grid-template-columns:minmax(0,1fr) 240px;align-items:start;gap:28px 56px;margin-top:28px;display:grid}.about-text{gap:14px;max-width:42em;display:grid}.about-text p:not(.lead){color:var(--ink-2)}.about-text .lead{color:var(--ink)}.about-side{justify-items:start;gap:12px;display:grid}.about-side img{border-radius:50%;width:128px;height:128px;margin-bottom:12px}.about-heading{margin-top:clamp(40px,5.5vw,64px)}.education{border-top:1px solid var(--line);margin-top:20px}.education li{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) minmax(0,3fr);gap:8px 32px;padding-block:20px;display:grid}.education-place{margin-top:4px;font-weight:500}.education div p:last-child{max-width:40em;color:var(--ink-2);margin-top:12px}.detail-head .kicker .num{margin-right:10px}.detail-head .actions{margin-top:20px}.detail>.shots{margin-top:clamp(24px,3.5vw,40px)}.detail>.shots-desktop img{box-shadow:0 0 0 1px var(--line), 0 32px 64px -40px #14201a80;border-radius:12px;max-width:860px}.detail>.shots-mobile{padding:clamp(16px, 3.2vw, 32px) var(--edge);background:var(--paper-2);border-radius:16px;grid-template-columns:repeat(3,minmax(0,172px));justify-content:center;gap:clamp(10px,2.4vw,24px)}.detail>.shots-mobile img{border-radius:clamp(10px,1.6vw,18px)}.detail>.shots+.spec{margin-top:clamp(28px,4vw,48px)}.detail-head+.spec{margin-top:36px}.spec{border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) minmax(0,3fr);gap:10px 32px;padding-block:20px;display:grid}.spec>.kicker{text-wrap:auto;padding-top:.45em}.spec-body{max-width:46em}.spec-body>p:not(.lead){color:var(--ink-2)}.spec-body>.lead{color:var(--ink)}.features{gap:6px;display:grid}.features li{padding-left:1.6em;position:relative}.features li:before{content:"—";color:var(--signal);position:absolute;left:0}.tags{flex-wrap:wrap;gap:8px;display:flex}.tags li{border:1px solid var(--line-strong);font:400 .8125rem/1.4 var(--mono);border-radius:6px;padding:5px 9px}.lifecycle{counter-reset:step;font:500 .875rem/1.4 var(--mono);flex-wrap:wrap;gap:10px 0;display:flex}.lifecycle li{counter-increment:step}.lifecycle li:before{content:counter(step, decimal-leading-zero) " ";color:var(--signal)}.lifecycle li:not(:last-child):after{content:"→";color:var(--line-strong);margin-inline:14px}.connections{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:20px 36px;display:grid}.connections p{color:var(--ink-2);margin-top:6px;font-size:.9375rem}.family{flex-wrap:wrap;gap:0 28px;margin-block:-10px;display:flex}.gallery{margin-top:clamp(36px,5vw,60px)}.gallery>h2{margin-top:10px}.gallery-group{border-top:1px solid var(--line);margin-top:28px;padding-top:18px}.gallery-intro{grid-template-columns:minmax(0,1fr) minmax(0,3fr);align-items:baseline;gap:8px 32px;display:grid}.gallery-intro p{max-width:44em;color:var(--ink-2);font-size:.9375rem}.gallery-grid{gap:20px 18px;margin-top:18px;display:grid}.gallery-desktop{grid-template-columns:repeat(3,minmax(0,1fr))}.gallery-mobile{grid-template-columns:repeat(auto-fill,minmax(144px,1fr))}.gallery-grid button{border:1px solid var(--line);background:var(--paper-2);cursor:zoom-in;width:100%;transition:transform .16s var(--ease-out), border-color .16s ease;border-radius:10px;padding:0;display:block;overflow:hidden}.gallery-grid button:active{transform:scale(.99)}.gallery-grid img{object-fit:contain;width:100%}.gallery-desktop img{aspect-ratio:3/2}.gallery-mobile img{aspect-ratio:390/844}.gallery-grid figcaption{color:var(--ink-2);font:400 .75rem/1.4 var(--mono);margin-top:10px}@media (hover:hover) and (pointer:fine){.gallery-grid button:hover{border-color:var(--ink)}}.project-nav{border-top:1px solid var(--ink);grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;margin-top:clamp(40px,5.5vw,64px);display:grid}.project-nav a{gap:6px;padding-block:18px;text-decoration:none;display:grid}.project-nav a:last-child{text-align:right}.project-nav-title{font-size:clamp(1.125rem,1.9vw,1.4rem)}@media (hover:hover) and (pointer:fine){.project-nav a:hover .project-nav-title{text-decoration:underline;-webkit-text-decoration-color:var(--signal);text-decoration-color:var(--signal);text-underline-offset:6px;text-decoration-thickness:2px}}.lightbox{width:100%;max-width:none;height:100dvh;max-height:none;color:var(--on-ink);background:#0e1410f0;border:0;place-items:center;margin:0;padding:24px;display:none;position:fixed;inset:0}.lightbox[open]{opacity:1;transition:opacity .2s ease-out;display:grid}.lightbox figure{transition:transform .22s var(--ease-out);justify-items:center;gap:12px;display:grid}@starting-style{.lightbox[open]{opacity:0}.lightbox[open] figure{transform:scale(.97)}}.lightbox::backdrop{background:0 0}.lightbox img{object-fit:contain;border-radius:8px;max-width:min(100%,1200px);max-height:84dvh}.lightbox figcaption{font:400 .8125rem/1.4 var(--mono);color:var(--on-ink-2)}.lightbox button{width:48px;height:48px;color:var(--on-ink);cursor:pointer;transition:transform .16s var(--ease-out);background:0 0;border:0;border-radius:50%;font-size:2rem;line-height:1;position:absolute;top:8px;right:8px}.lightbox button:active{transform:scale(.94)}@media (width<=980px){.hero-body{grid-template-columns:minmax(0,1fr)}}@media (width<=860px){.platform,.split,.about{grid-template-columns:minmax(0,1fr)}.work-row a{grid-template-columns:32px minmax(0,1fr);gap:14px 10px}.work-row .shots{grid-column:2}.work-row .shots-desktop{max-width:420px}.gallery-desktop{grid-template-columns:repeat(2,minmax(0,1fr))}.work-row .shots-mobile{max-width:300px}.spec,.skills div,.education li,.gallery-intro{grid-template-columns:minmax(0,1fr)}.spec>.kicker{padding-top:0}.facts{grid-template-columns:repeat(2,minmax(0,1fr))}.facts div:nth-child(n+3){border-top:0}}@media (width<=560px){.hero-person img{width:180px;height:180px}.gallery-desktop{grid-template-columns:minmax(0,1fr)}.gallery-mobile{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 12px}.contact-rows a{grid-template-columns:minmax(0,1fr) auto;gap:4px 16px}.contact-rows .kicker{grid-column:1/-1}}@media (prefers-reduced-motion:reduce){.route{animation-name:fade}.button,.arrow,.shots,.gallery-grid button,.lightbox figure,.lightbox button{transition-property:background-color,border-color;transform:none!important}}
