:root{color-scheme:light;--bg:oklch(99.5% 0 0);--surface:oklch(96.5% 0 0);--surface-2:oklch(93% 0 0);--ink:oklch(16% 0 0);--muted:oklch(47% 0 0);--faint:oklch(62% 0 0);--line:oklch(89% 0 0);--line-strong:oklch(78% 0 0);--shadow:0 1px 2px oklch(0% 0 0/.06), 0 12px 32px -8px oklch(0% 0 0/.18);--t-xs:.75rem;--t-sm:.875rem;--t-md:1rem;--t-lg:1.25rem;--t-xl:2rem;--t-display:clamp(2.25rem, 4vw, 3rem);--w-regular:400;--w-medium:560;--w-bold:720;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-6:24px;--s-8:32px;--s-12:48px;--s-16:64px;--s-24:96px;--r-sm:8px;--r-md:12px;--r-lg:20px;--measure:640px;--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-morph:cubic-bezier(.32, 1.08, .4, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1)}:root[data-theme=dark]{color-scheme:dark;--bg:oklch(17% 0 0);--surface:oklch(21% 0 0);--surface-2:oklch(25.5% 0 0);--ink:oklch(95% 0 0);--muted:oklch(70% 0 0);--faint:oklch(56% 0 0);--line:oklch(28% 0 0);--line-strong:oklch(40% 0 0);--shadow:0 1px 2px oklch(0% 0 0/.4), 0 16px 40px -8px oklch(0% 0 0/.6)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:oklch(17% 0 0);--surface:oklch(21% 0 0);--surface-2:oklch(25.5% 0 0);--ink:oklch(95% 0 0);--muted:oklch(70% 0 0);--faint:oklch(56% 0 0);--line:oklch(28% 0 0);--line-strong:oklch(40% 0 0);--shadow:0 1px 2px oklch(0% 0 0/.4), 0 16px 40px -8px oklch(0% 0 0/.6)}}@view-transition{navigation:auto}.identity-row{view-transition-name:home-identity}.intro-copy{view-transition-name:home-copy}.work{view-transition-name:home-work}.home-more{view-transition-name:home-links}::view-transition-old(root){animation:page-leave .17s var(--ease-out) both}::view-transition-new(root){animation:page-enter .38s var(--ease-out) .14s both}:root:active-view-transition-type(nav-back)::view-transition-old(root){animation:page-leave-back .17s var(--ease-out) both}:root:active-view-transition-type(nav-back)::view-transition-new(root){animation:page-enter-back .38s var(--ease-out) .14s both}::view-transition-old(home-links){animation:home-block-out .17s var(--ease-out) both}::view-transition-old(home-work){animation:home-block-out .17s var(--ease-out) 30ms both}::view-transition-old(home-copy){animation:home-block-out .17s var(--ease-out) 60ms both}::view-transition-old(home-identity){animation:home-block-out .17s var(--ease-out) 90ms both}::view-transition-new(home-identity){animation:home-block-in .36s var(--ease-out) .14s both}::view-transition-new(home-copy){animation:home-block-in .36s var(--ease-out) .19s both}::view-transition-new(home-work){animation:home-block-in .36s var(--ease-out) .24s both}::view-transition-new(home-links){animation:home-block-in .36s var(--ease-out) .3s both}::view-transition-group(*.project-logo){animation-duration:.54s;animation-timing-function:var(--ease-morph)}::view-transition-old(*.project-logo),::view-transition-new(*.project-logo){animation-duration:.54s;animation-timing-function:var(--ease-morph);object-fit:contain;block-size:100%}::view-transition-old(*.project-logo):only-child{animation:home-block-out .17s var(--ease-out) both}::view-transition-new(*.project-logo):only-child{animation:home-block-in .36s var(--ease-out) .24s both}:root:active-view-transition-type(theme) body *{view-transition-name:none!important}:root:active-view-transition-type(theme)::view-transition-old(root){animation:none}:root:active-view-transition-type(theme)::view-transition-new(root){animation:theme-wipe .56s var(--ease-out) both}@keyframes theme-wipe{0%{clip-path:circle(0 at var(--wipe-x,50%) var(--wipe-y,50%))}to{clip-path:circle(150vmax at var(--wipe-x,50%) var(--wipe-y,50%))}}@keyframes page-leave{to{opacity:0;transform:translateY(-10px)scale(.988)}}@keyframes page-enter{0%{opacity:0;transform:translateY(12px)scale(.992)}}@keyframes page-leave-back{to{opacity:0;transform:translateY(12px)scale(.992)}}@keyframes page-enter-back{0%{opacity:0;transform:translateY(-10px)scale(.988)}}@keyframes home-block-out{to{opacity:0;filter:blur(4px);transform:translateY(-12px)}}@keyframes home-block-in{0%{opacity:0;filter:blur(5px);transform:translateY(-16px)}}@font-face{font-family:Sora;font-style:normal;font-weight:300 800;font-display:swap;src:url(/fonts/sora-latin-variable.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{box-sizing:border-box}html{background:var(--bg);color:var(--ink);-webkit-text-size-adjust:100%;scroll-behavior:smooth;text-rendering:optimizelegibility;font-family:Sora,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:100%;line-height:1.5}body{background:var(--bg);min-width:320px;color:var(--ink);margin:0}h1,h2,h3,p,ol,ul,figure{margin:0}ol,ul{padding:0;list-style:none}::selection{background:var(--ink);color:var(--bg)}a{color:inherit;text-decoration:none}img,svg{display:block}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--ink);outline-offset:3px;border-radius:4px}.link{text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:.22em;transition:text-decoration-color .16s var(--ease-out), text-underline-offset .16s var(--ease-out);text-decoration-thickness:1px}.link:hover{text-underline-offset:.3em;text-decoration-color:currentColor}.page{width:min(100%, calc(var(--measure) + var(--s-12)));min-height:100svh;padding:var(--s-24) var(--s-6) var(--s-16);margin:0 auto}.section-head{justify-content:space-between;align-items:baseline;gap:var(--s-4);margin-bottom:var(--s-3);display:flex}.section-head h2{font-size:var(--t-sm);font-weight:var(--w-medium)}.section-head p{color:var(--faint);font-size:var(--t-xs)}kbd{min-width:1.5em;padding:0 var(--s-1);border:1px solid var(--line);font:inherit;font-size:var(--t-xs);text-align:center;border-bottom-width:2px;border-radius:4px;display:inline-block}.status{color:var(--muted);font-size:var(--t-xs);white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.status:before{content:"";border:1px solid;border-radius:50%;width:6px;height:6px}.status[data-status=live]{color:var(--ink)}.status[data-status=live]:before{animation:status-breathe 2.8s var(--ease-out) infinite;background:currentColor}.status[data-status=beta]:before{background:linear-gradient(90deg,currentColor 50%,#0000 50%)}.status[data-status=shelved]:before{border-style:dashed}@keyframes status-breathe{0%{box-shadow:0 0 0 0 color-mix(in oklch, currentColor 40%, transparent)}70%,to{box-shadow:0 0 0 6px #0000}}.back-link{align-items:center;gap:var(--s-2);color:var(--muted);font-size:var(--t-sm);transition:color .16s var(--ease-out);display:inline-flex}.back-link span{transition:transform .22s var(--ease-spring)}.back-link:hover{color:var(--ink)}.back-link:hover span{transform:translate(-4px)}.work-row__logo,.pd-hero__logo,.pd-more img,.lost__projects img{outline-offset:-1px;outline:1px solid oklch(0% 0 0/.08)}:root[data-theme=dark] :is(.work-row__logo,.pd-hero__logo,.pd-more img,.lost__projects img){outline-color:oklch(100% 0 0/.12)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) :is(.work-row__logo,.pd-hero__logo,.pd-more img,.lost__projects img){outline-color:oklch(100% 0 0/.12)}}.intro-shell{z-index:40;background:var(--bg);color:var(--ink);pointer-events:none;transition:background .52s var(--ease-out), color .52s var(--ease-out);place-items:center;display:none;position:fixed;inset:0}html[data-intro-ready=true] .intro-shell[data-ready=true]{display:grid}.intro-shell--land{background:0 0}.intro-flight{--intro-logo-size:64px;--intro-name-size:var(--t-display);--intro-gap:var(--s-3);width:430px;height:var(--intro-logo-size);align-items:center;gap:var(--intro-gap);transform-origin:0 0;will-change:transform;line-height:1;transition-property:transform;display:flex;position:fixed;top:0;left:0}.intro-piece-stage{z-index:2;width:var(--intro-logo-size);height:var(--intro-logo-size);flex:0 0 var(--intro-logo-size);position:relative}.intro-start-logo{width:var(--intro-logo-size);height:var(--intro-logo-size);border-radius:var(--r-md);object-fit:contain;backface-visibility:hidden;opacity:0;transition:opacity .26s var(--ease-out), transform .5s cubic-bezier(.22, 1.22, .36, 1);will-change:opacity, transform;position:absolute;inset:0;transform:scale(.72)}.intro-piece-stage[data-step=logo] .intro-start-logo,.intro-shell--word .intro-start-logo,.intro-shell--land .intro-start-logo{opacity:1;transform:scale(1)}.intro-word-run{z-index:1;top:50%;left:calc(var(--intro-logo-size) + var(--intro-gap));font-size:var(--intro-name-size);font-weight:var(--w-bold);letter-spacing:-.025em;white-space:nowrap;pointer-events:none;opacity:0;clip-path:inset(0 100% 0 0);will-change:clip-path, opacity, transform;align-items:baseline;line-height:1;transition:clip-path .56s cubic-bezier(.16,1,.3,1),opacity .42s cubic-bezier(.16,1,.3,1) 60ms,transform .56s cubic-bezier(.16,1,.3,1);display:inline-flex;position:absolute;overflow:hidden;transform:translate(-26px,-50%)}.intro-shell--word .intro-word-run,.intro-shell--land .intro-word-run{opacity:1;clip-path:inset(0);transform:translateY(-50%)}html[data-intro-state=running] .home{pointer-events:none}html[data-intro-state=running] .identity-row,html[data-intro-state=running] .intro-copy,html[data-intro-state=running] .work,html[data-intro-state=running] .home-more{opacity:0}html[data-intro-state=running] .intro-copy,html[data-intro-state=running] .work,html[data-intro-state=running] .home-more{transform:translateY(18px)scale(.985)}html[data-intro-state=running] .home,html[data-intro-state=running] .identity-row,html[data-intro-state=running] .intro-copy,html[data-intro-state=running] .work,html[data-intro-state=running] .home-more{animation:1ms linear 4.5s forwards intro-failsafe-show}html[data-intro-state=running] .intro-shell{animation:1ms linear 4.5s forwards intro-failsafe-leave}@keyframes intro-failsafe-show{to{opacity:1;pointer-events:auto;transform:none}}@keyframes intro-failsafe-leave{to{visibility:hidden}}html[data-intro-state=done] .intro-copy,html[data-intro-state=done] .work,html[data-intro-state=done] .home-more{transition:opacity .42s var(--ease-out), transform .52s var(--ease-out)}html[data-intro-state=done] .work{transition-delay:70ms}html[data-intro-state=done] .home-more{transition-delay:.14s}.identity-row{align-items:center;gap:var(--s-3);grid-template-columns:64px max-content;display:grid}.identity-mark{border-radius:var(--r-md);place-items:center;width:64px;height:64px;display:grid}.identity-mark__image{border-radius:var(--r-md);object-fit:contain;width:64px;height:64px;transition:transform .42s var(--ease-spring)}.identity-mark:hover .identity-mark__image{transform:rotate(-8deg)scale(1.04)}.identity-mark:active .identity-mark__image{transition-duration:.12s;transform:rotate(-8deg)scale(.94)}.identity-name{font-size:var(--t-display);font-weight:var(--w-bold);letter-spacing:-.025em;white-space:nowrap;align-items:baseline;line-height:1;display:inline-flex}.identity-name__word,.identity-name__dot,.identity-name__last{display:inline-block}.identity-name__last{margin-left:.01em}.identity-name__dot{transition:transform .38s var(--ease-spring)}.identity-name:hover .identity-name__dot{transform:translateY(-.28em)}.intro-copy{max-width:34ch;margin-top:var(--s-6);font-size:var(--t-lg);font-weight:var(--w-regular);text-wrap:pretty;line-height:1.4}.work{margin-top:var(--s-12)}.work-list{margin-inline:calc(var(--s-3) * -1)}.work-row{align-items:center;gap:var(--s-4);padding:var(--s-3);border-radius:var(--r-md);transition:transform .12s var(--ease-out);grid-template-columns:40px minmax(0,1fr) auto;display:grid;position:relative}.work-row__logo{filter:grayscale();opacity:.88;width:40px;height:40px;transition:transform .24s var(--ease-out);border-radius:10px}.work-row__text{min-width:0;display:grid}.work-row__name{align-items:center;gap:var(--s-2);font-size:var(--t-md);font-weight:var(--w-medium);line-height:1.35;display:inline-flex}.work-row__arrow{color:var(--muted);opacity:0;transition:transform .2s var(--ease-out);transform:translate(-6px)}.work-row__line{color:var(--muted);font-size:var(--t-sm);text-overflow:ellipsis;white-space:nowrap;line-height:1.45;overflow:hidden}.work-row:is(:hover,:focus-visible){background:var(--surface)}.work-row:is(:hover,:focus-visible) .work-row__logo{filter:none;opacity:1;transform:rotate(var(--tilt)) scale(1.08)}.work-row:is(:hover,:focus-visible) .work-row__arrow{opacity:1;transform:none}.work-row:active{transform:scale(.985)}@media (hover:hover){.work-list:has(.work-row:hover) .work-row:not(:hover){opacity:.55}}.work-row.is-returning{animation:row-return 1.1s var(--ease-out) .38s both}@keyframes row-return{0%,30%{background:var(--surface-2)}to{background:0 0}}.peek{z-index:20;aspect-ratio:16/10;border-radius:var(--r-md);background:var(--surface);width:360px;box-shadow:0 0 0 1px var(--line), var(--shadow);opacity:0;pointer-events:none;scale:.92;transform:translate3d(var(--x,0), var(--y,0), 0) rotate(var(--r,0deg));transform-origin:0 0;transition:opacity .18s var(--ease-out), scale .22s var(--ease-out);position:fixed;top:0;left:0;overflow:hidden}.peek.is-tall{aspect-ratio:9/16;border-radius:22px;width:180px}.peek.is-on{opacity:1;scale:1}.peek img,.peek video{object-fit:cover;object-position:top;width:100%;height:100%;position:absolute;inset:0}.peek [hidden]{display:none}.home-links{margin-top:var(--s-12)}.cards{gap:var(--s-3);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.card{align-content:start;gap:var(--s-1);padding:var(--s-4);border-radius:var(--r-lg);box-shadow:0 0 0 1px var(--line);transition:transform .12s var(--ease-out);display:grid}.card:hover{background:var(--surface)}.card:active{transform:scale(.985)}.card__art{height:56px;margin-bottom:var(--s-3);position:relative}.card__title{align-items:center;gap:var(--s-2);font-size:var(--t-md);font-weight:var(--w-medium);display:inline-flex}.card__arrow{color:var(--muted);transition:transform .2s var(--ease-out)}.card:hover .card__arrow{transform:translate(3px)}.card__sub{color:var(--muted);font-size:var(--t-sm);line-height:1.45}.deck__tile{top:8px;left:calc(var(--i) * 14px);background:var(--surface-2);width:40px;height:40px;box-shadow:0 0 0 2px var(--bg);color:var(--muted);transform:rotate(calc((var(--i) - 1.5) * 4deg));transition:left .28s var(--ease-out), transform .28s var(--ease-out), color .16s var(--ease-out);border-radius:11px;place-items:center;display:grid;position:absolute}.deck__tile svg{fill:currentColor;width:18px;height:18px}.card:hover .deck__tile,.card:focus-visible .deck__tile{left:calc(var(--i) * 46px);color:var(--brand);transform:rotate(0deg) translateY(calc(var(--i) * -2px + 3px));transition-delay:calc(var(--i) * 30ms)}.chips__chip{padding:var(--s-1) var(--s-3);background:var(--surface-2);box-shadow:0 0 0 2px var(--bg);color:var(--muted);font-size:var(--t-xs);white-space:nowrap;transform:translate(calc(var(--i) * 6px), calc(var(--i) * 3px)) rotate(calc(var(--i) * 3deg));transition:transform .28s var(--ease-out), color .16s var(--ease-out), background .16s var(--ease-out);border-radius:999px;position:absolute;top:14px;left:0}.chips__chip:first-child{z-index:3}.chips__chip:nth-child(2){z-index:2}.card:hover .chips__chip,.card:focus-visible .chips__chip{color:var(--ink);transition-delay:calc(var(--i) * 30ms)}.card:hover .chips__chip:first-child,.card:focus-visible .chips__chip:first-child{transform:translateY(-10px)rotate(-3deg)}.card:hover .chips__chip:nth-child(2),.card:focus-visible .chips__chip:nth-child(2){transform:translate(86px,4px)rotate(2deg)}.card:hover .chips__chip:nth-child(3),.card:focus-visible .chips__chip:nth-child(3){transform:translate(24px,22px)rotate(-1deg)}.contacts{gap:var(--s-1) var(--s-3);margin-inline:calc(var(--s-3) * -1);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.contact{align-items:center;gap:var(--s-2);border-radius:var(--r-md);display:flex}.contact--email{padding-right:var(--s-3);grid-column:1/-1}.contact:hover{background:var(--surface)}.contact__link{align-items:center;gap:var(--s-3);min-width:0;min-height:44px;padding:0 var(--s-3);border-radius:inherit;font-size:var(--t-sm);flex:1;display:flex}.contact__link svg{width:16px;height:16px;fill:var(--muted);flex:none}.contact:hover .contact__link svg{fill:var(--ink)}.contact__label{width:5.5em;color:var(--muted);flex:none}.contact__handle{min-width:0;font-weight:var(--w-medium);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.contact__arrow{color:var(--faint);transition:transform .2s var(--ease-out);margin-left:auto}.contact:hover .contact__arrow{color:var(--ink);transform:translate(2px,-2px)}.copy-button{padding:2px var(--s-2);border:1px solid var(--line);color:var(--muted);font-size:var(--t-xs);cursor:pointer;transition:color .16s var(--ease-out), border-color .16s var(--ease-out), background .16s var(--ease-out), transform .16s var(--ease-out);background:0 0;border-radius:999px;display:inline-grid}.copy-button>span{transition:opacity .18s var(--ease-out), transform .26s var(--ease-spring), filter .18s var(--ease-out);grid-area:1/1}.copy-button [data-copied]{opacity:0;filter:blur(2px);transform:translateY(6px)}.copy-button.is-copied{border-color:var(--ink);background:var(--ink);color:var(--bg)}.copy-button.is-copied [data-copy]{opacity:0;filter:blur(2px);transform:translateY(-6px)}.copy-button.is-copied [data-copied]{opacity:1;filter:none;transform:none}.copy-button:hover{border-color:var(--line-strong);color:var(--ink)}.copy-button:active{transform:scale(.94)}.theme-toggle{border:1px solid var(--line);width:32px;height:32px;color:var(--muted);cursor:pointer;transition:color .16s var(--ease-out), border-color .16s var(--ease-out), transform .22s var(--ease-spring);background:0 0;border-radius:999px;place-items:center;display:inline-grid}.theme-toggle:hover{border-color:var(--line-strong);color:var(--ink)}.theme-toggle:active{transform:scale(.9)}.theme-toggle svg{width:16px;height:16px;overflow:visible}.theme-toggle__rays{transform-origin:50%;transition:transform .48s var(--ease-spring), opacity .24s var(--ease-out)}.theme-toggle__bite{transition:transform .48s var(--ease-out)}:root[data-theme=dark] .theme-toggle__rays{opacity:0;transform:rotate(-90deg)scale(.5)}:root[data-theme=dark] .theme-toggle__bite{transform:translate(-7px,5px)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle__rays{opacity:0;transform:rotate(-90deg)scale(.5)}:root:not([data-theme=light]) .theme-toggle__bite{transform:translate(-7px,5px)}}.site-foot{justify-content:space-between;align-items:center;gap:var(--s-4);margin-top:var(--s-12);color:var(--faint);font-size:var(--t-xs);display:flex}.project-page{--gutter:var(--s-6);width:min(100%, calc(var(--measure) + var(--gutter) * 2));padding:var(--s-12) var(--gutter) var(--s-16);margin:0 auto}.pd-hero{margin-top:var(--s-12)}.pd-hero__row{align-items:center;gap:var(--s-4);display:flex}.pd-hero__logo{border-radius:14px;flex:none;width:64px;height:64px}.pd-hero h1{font-size:var(--t-display);font-weight:var(--w-bold);letter-spacing:-.025em;line-height:1}.pd-meta{align-items:center;gap:var(--s-1) var(--s-3);margin-top:var(--s-2);color:var(--faint);font-size:var(--t-xs);flex-wrap:wrap;display:flex}.pd-lede{max-width:32ch;margin-top:var(--s-6);font-size:var(--t-lg);text-wrap:balance;line-height:1.4}.pd-summary{margin-top:var(--s-3);color:var(--muted);font-size:var(--t-md);text-wrap:pretty;line-height:1.65}.pd-actions{align-items:center;gap:var(--s-3) var(--s-6);margin-top:var(--s-6);font-size:var(--t-sm);flex-wrap:wrap;display:flex}.button{align-items:center;gap:var(--s-2);min-height:40px;padding:0 var(--s-4);background:var(--ink);color:var(--bg);font-size:var(--t-sm);font-weight:var(--w-medium);transition:transform .12s var(--ease-out);border-radius:999px;display:inline-flex}.button span{transition:transform .16s var(--ease-out)}.button:hover span{transform:translate(2px,-2px)}.button:active{transform:scale(.97)}.shot{border-radius:var(--r-md);background:var(--surface);cursor:zoom-in;width:100%;transition:transform .16s var(--ease-out);border:0;padding:0;display:block;position:relative;overflow:hidden}.shot:after{content:"";border-radius:inherit;pointer-events:none;position:absolute;inset:0;box-shadow:inset 0 0 0 1px oklch(0% 0 0/.1)}:root[data-theme=dark] .shot:after{box-shadow:inset 0 0 0 1px oklch(100% 0 0/.1)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .shot:after{box-shadow:inset 0 0 0 1px oklch(100% 0 0/.1)}}.shot:active{transform:scale(.99)}.shot img{width:100%;height:auto}.pd-lead{margin-top:var(--s-12)}.pd-lead figcaption{margin-top:var(--s-3);color:var(--muted);font-size:var(--t-xs)}.pd-clip .shot{aspect-ratio:16/10;cursor:default}.pd-clip video{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.pd-clip--tall .shot{aspect-ratio:9/16;border-radius:28px;width:min(300px,70%);margin-inline:auto}.pd-clip--tall figcaption{text-align:center}.pd-numbers{gap:var(--s-6);margin:var(--s-12) 0 0;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.pd-numbers div{justify-content:flex-end;gap:var(--s-1);flex-direction:column-reverse;display:flex}.pd-numbers dd{font-size:var(--t-xl);font-weight:var(--w-bold);font-variant-numeric:tabular-nums;letter-spacing:-.02em;margin:0;line-height:1}.pd-numbers dt{color:var(--muted);font-size:var(--t-xs);line-height:1.5}.pd-section{margin-top:var(--s-16)}.pd-section>h2,.pd-section summary{margin-bottom:var(--s-4);font-size:var(--t-sm);font-weight:var(--w-medium)}.pd-shots{gap:var(--s-4);margin-inline:calc(var(--gutter) * -1);padding:var(--s-1) var(--gutter) var(--s-4);overscroll-behavior-x:contain;scroll-padding-inline:var(--gutter);scroll-snap-type:x mandatory;scrollbar-width:thin;scrollbar-color:var(--line) transparent;display:flex;overflow-x:auto}.pd-shots.is-dragging{cursor:grabbing;scroll-snap-type:none;user-select:none}.pd-shot{--shot-h:300px;scroll-snap-align:start;flex:none;width:min-content}.pd-shot img{width:auto;max-width:calc(100vw - var(--gutter) * 3);height:var(--shot-h);object-fit:cover;object-position:left top}.pd-shot figcaption{gap:var(--s-1);margin-top:var(--s-3);font-size:var(--t-sm);display:grid}.pd-shot figcaption strong{font-weight:var(--w-medium)}.pd-shot figcaption span{color:var(--muted);font-size:var(--t-xs);line-height:1.5}.pd-features{gap:var(--s-6);counter-reset:feature;display:grid}.pd-features li{grid-template-columns:var(--s-8) minmax(0, 1fr);gap:var(--s-1) var(--s-3);counter-increment:feature;display:grid}.pd-features li:before{content:counter(feature, decimal-leading-zero);color:var(--faint);font-size:var(--t-xs);font-variant-numeric:tabular-nums;grid-row:span 2;padding-top:2px}.pd-features h3{font-size:var(--t-md);font-weight:var(--w-medium)}.pd-features p,.pd-story p,.pd-how p{color:var(--muted);font-size:var(--t-sm);text-wrap:pretty;line-height:1.65}.pd-story{gap:var(--s-3);display:grid}.pd-stack{gap:var(--s-3) var(--s-6);grid-template-columns:repeat(auto-fill,minmax(260px,1fr));display:grid}.pd-stack li{gap:0 var(--s-3);font-size:var(--t-sm);grid-template-columns:20px minmax(0,1fr);align-items:start;display:grid}.pd-stack svg,.pd-stack__letter{width:16px;height:16px;fill:var(--muted);margin-top:3px}.pd-stack__letter{background:var(--surface-2);color:var(--muted);font-size:var(--t-xs);font-weight:var(--w-bold);border-radius:4px;place-items:center;font-style:normal;display:grid}.pd-stack strong{font-weight:var(--w-medium)}.pd-stack span{color:var(--muted);font-size:var(--t-xs);grid-column:2;line-height:1.5}.pd-how summary{align-items:center;gap:var(--s-2);cursor:pointer;list-style:none;display:inline-flex}.pd-how summary:hover{color:var(--muted)}.pd-how summary::-webkit-details-marker{display:none}.pd-how summary:after{content:"+";background:var(--surface-2);width:20px;height:20px;color:var(--muted);font-size:var(--t-sm);font-weight:var(--w-regular);transition:transform .24s var(--ease-out);border-radius:999px;place-items:center;line-height:1;display:grid}.pd-how[open] summary:after{transform:rotate(45deg)}.pd-how__body{gap:var(--s-4);display:grid}.pd-how h3{font-size:var(--t-sm);font-weight:var(--w-medium)}@supports (interpolate-size:allow-keywords){.pd-how{interpolate-size:allow-keywords}.pd-how::details-content{height:0;transition:height .36s var(--ease-out), content-visibility .36s allow-discrete;overflow:clip}.pd-how[open]::details-content{height:auto}}.pd-more ul{gap:var(--s-2);margin-inline:calc(var(--s-2) * -1);grid-template-columns:repeat(5,minmax(0,1fr));display:grid}.pd-more a{justify-items:center;gap:var(--s-2);padding:var(--s-3) var(--s-1);border-radius:var(--r-md);color:var(--muted);font-size:var(--t-xs);transition:transform .12s var(--ease-out);display:grid}.pd-more img{filter:grayscale();opacity:.88;width:48px;height:48px;transition:transform .24s var(--ease-out);border-radius:12px}.pd-more a:hover,.pd-more a:focus-visible{background:var(--surface);color:var(--ink)}.pd-more a:hover img,.pd-more a:focus-visible img{filter:none;opacity:1;transform:rotate(var(--tilt)) scale(1.08)}.pd-more a:active{transform:scale(.97)}.lightbox{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);max-width:min(96vw,1400px);max-height:92svh;box-shadow:var(--shadow);opacity:0;transition:opacity .2s var(--ease-out), transform .26s var(--ease-out), overlay .2s allow-discrete, display .2s allow-discrete;padding:0;overflow:hidden;transform:scale(.96)}.lightbox[open]{opacity:1;transform:none}@starting-style{.lightbox[open]{opacity:0;transform:scale(.96)}}.lightbox::backdrop{backdrop-filter:blur();transition:background .2s var(--ease-out), backdrop-filter .2s var(--ease-out), overlay .2s allow-discrete, display .2s allow-discrete;background:oklch(0% 0 0/0)}.lightbox[open]::backdrop{backdrop-filter:blur(6px);background:oklch(0% 0 0/.6)}@starting-style{.lightbox[open]::backdrop{backdrop-filter:blur();background:oklch(0% 0 0/0)}}.lightbox img{cursor:zoom-out;width:auto;max-width:100%;height:auto;max-height:92svh}.tools-intro{margin-top:var(--s-12)}.tools-intro h1{font-size:var(--t-display);font-weight:var(--w-bold);letter-spacing:-.025em;line-height:1}.tools-intro p{max-width:52ch;margin-top:var(--s-4);color:var(--muted);font-size:var(--t-md);line-height:1.6}.tools-intro .tools-updated{color:var(--faint);font-size:var(--t-xs)}.tools-section{margin-top:var(--s-12)}.tools-list{margin-inline:calc(var(--s-3) * -1)}.tools-item{align-items:center;gap:var(--s-4);padding:var(--s-3);border-radius:var(--r-md);transition:background .2s var(--ease-out);grid-template-columns:32px minmax(0,1fr);display:grid}.tools-item:has(a:hover,a:focus-visible){background:var(--surface)}.tools-icon{border-radius:var(--r-sm);background:var(--surface-2);width:32px;height:32px;color:var(--muted);transition:background .22s var(--ease-out), color .22s var(--ease-out), transform .36s var(--ease-spring);place-items:center;display:grid}.tools-icon svg{fill:currentColor;width:16px;height:16px}.tools-icon img{object-fit:contain;filter:grayscale();width:20px;height:20px;transition:filter .22s var(--ease-out)}.tools-item:has(a:hover,a:focus-visible) .tools-icon{background:color-mix(in oklch, var(--tool-accent) 16%, transparent);color:var(--tool-accent);transform:rotate(-6deg)scale(1.06)}.tools-item:has(a:hover,a:focus-visible) .tools-icon img{filter:none}.tools-copy h3{font-size:var(--t-md);font-weight:var(--w-medium);line-height:1.35}.tools-copy h3 a:after{content:"↗";margin-left:var(--s-1);color:var(--faint);font-size:var(--t-xs);transition:transform .26s var(--ease-spring);display:inline-block}.tools-copy h3 a:hover:after{transform:translate(2px,-2px)}.tools-copy p{color:var(--muted);font-size:var(--t-sm);line-height:1.5}@media (width<=620px){.page{padding:var(--s-12) var(--s-4) var(--s-12)}.project-page{--gutter:var(--s-4);padding-block:var(--s-8) var(--s-12)}.intro-flight{--intro-logo-size:52px}.identity-row{grid-template-columns:52px max-content}.identity-mark,.identity-mark__image{width:52px;height:52px}.intro-copy{margin-top:var(--s-4)}.work{margin-top:var(--s-8)}.work-list,.tools-list{margin-inline:calc(var(--s-2) * -1)}.work-row,.tools-item{gap:var(--s-3);padding:var(--s-3) var(--s-2)}.section-head p{display:none}.cards,.contacts{grid-template-columns:minmax(0,1fr)}.contacts{margin-inline:calc(var(--s-2) * -1)}.contact__label{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.work-row{align-items:start}.work-row .status{padding-top:4px}.work-row__line{white-space:normal}.pd-hero__logo{border-radius:12px;width:52px;height:52px}.pd-section{margin-top:var(--s-12)}.pd-shot{--shot-h:240px}.pd-lead:not(.pd-clip--tall){margin-inline:calc(var(--gutter) * -1)}.pd-lead:not(.pd-clip--tall) .shot{border-radius:0}.pd-lead figcaption{padding-inline:var(--gutter)}.pd-more ul{gap:0}.pd-more img{border-radius:10px;width:40px;height:40px}}@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation-duration:.001ms!important;animation-iteration-count:1!important}*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}
