:root{color-scheme:light dark;--paper:#f5f5f7;--surface:#ffffff;--ink:#1d1d1f;--body:#3a3a3c;--muted:#6e6e73;--faint:#d2d2d7;--accent:#007aff;--green:#34c759;--onink:#f5f5f7;--onink-muted:#98989d;--onink-line:rgba(255,255,255,.2);--code:#c9d6e8;--grid:rgba(0,0,0,.07);--hair:rgba(0,0,0,.1);--line:rgba(0,0,0,.15);--line2:rgba(0,0,0,.22);--muted2:#707074;--accent-ink:#006ce2;--accent-fill:#0072ef;--accent-onink:#1183ff;--on-accent:#ffffff;--dot-db:#248a3d;--gx:40px;--gx2:32px;--navgap:26px;--sp2:span 2;--sp3:span 3;--sp4:span 4;--sp5:span 5;--sp7:span 7;--sp8:span 8;--sp9:span 9;--g4:repeat(4,minmax(0,1fr));--g3:repeat(3,minmax(0,1fr));--g2:repeat(2,minmax(0,1fr));--gcap:minmax(0,1fr) minmax(0,1.6fr);--glabel:92px minmax(0,1fr);--gexp:minmax(0,190px) minmax(0,1fr);--gdec:minmax(0,110px) minmax(0,1fr) minmax(0,1fr);--gout:minmax(0,120px) minmax(0,1fr);--h-hero:460px;--h-main:360px;--h-half:190px;--h-thumb:200px;--h-gal:280px;--h-port:460px;--h-cs:440px;--h-shot:320px;--pt-hero:64px;--pt-sec:56px;--pt-card:48px;--pt-dark:72px;--gap-lg:40px;--decpad:24px;--decline:2px solid var(--ink)}@media(max-width:1180px){:root{--navgap:18px}}@media(max-width:1080px){:root{--g4:repeat(2,minmax(0,1fr));--gx:28px;--gx2:24px}}@media(max-width:1024px){:root{--sp2:span 12;--sp3:span 12;--sp4:span 12;--sp5:span 12;--sp7:span 12;--sp8:span 12;--sp9:span 12;--gcap:minmax(0,1fr);--pt-hero:48px;--pt-sec:36px;--pt-card:32px;--pt-dark:48px;--h-port:320px}}@media(max-width:860px){:root{--gx:20px;--gx2:20px;--g3:minmax(0,1fr);--glabel:minmax(0,1fr);--gexp:minmax(0,1fr);--gdec:minmax(0,1fr);--gout:minmax(0,1fr);--h-hero:280px;--h-main:260px;--h-half:160px;--h-thumb:180px;--h-gal:220px;--h-port:280px;--h-cs:260px;--h-shot:240px;--pt-hero:36px;--pt-sec:32px;--pt-card:28px;--pt-dark:40px;--gap-lg:22px;--decpad:0px;--decline:0}}@media(max-width:560px){:root{--g4:minmax(0,1fr);--g2:minmax(0,1fr)}}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:Archivo,-apple-system,BlinkMacSystemFont,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--ink);text-decoration:none}a:hover{color:var(--accent-ink)}h1,h2,h3,h4,p,blockquote,figure{margin:0}button{font:inherit;color:inherit}a:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--accent-fill);outline-offset:2px}.on-ink a:focus-visible,.on-ink button:focus-visible{outline-color:var(--accent-onink)}.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--ink);color:var(--onink);padding:12px 18px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;font-weight:600}.skip:focus{left:0}.d1{font-stretch:125%;font-weight:800;line-height:.96;letter-spacing:-.035em;text-transform:uppercase}.d2{font-stretch:125%;font-weight:800;font-size:clamp(26px,3.2vw,42px);line-height:.9;letter-spacing:-.035em;text-transform:uppercase}.h1role{font-stretch:112%;font-weight:600;font-size:clamp(13px,1.35vw,19px);letter-spacing:.03em;line-height:1.35;color:var(--muted);margin-top:clamp(12px,1.6vh,20px);max-width:34ch}.d3{font-stretch:112%;font-weight:700;font-size:clamp(17px,1.7vw,21px);line-height:1.12;letter-spacing:-.015em;text-transform:uppercase}.d4{font-stretch:112%;font-weight:600;font-size:15px;line-height:1.25;letter-spacing:-.005em;text-transform:uppercase}.tx{font-size:16px;line-height:1.62;color:var(--body);text-wrap:pretty}.tx-sm{font-size:15px;line-height:1.6;color:var(--body);text-wrap:pretty}.meta{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted2)}.eyebrow{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}.lbl{font-size:11px;letter-spacing:.1em;text-transform:uppercase;font-weight:600;color:var(--muted2)}.on-ink .lbl{color:var(--onink-muted)}.mono{font-family:SF Mono,SFMono-Regular,Menlo,Consolas,monospace}.band{background:var(--ink);color:var(--onink);padding:15px var(--gx);display:flex;align-items:baseline;gap:18px;flex-wrap:wrap}.band h2{font-stretch:125%;font-weight:700;font-size:clamp(14px,1.5vw,17px);line-height:1.1;letter-spacing:.02em;text-transform:uppercase}.band .sub{font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--onink-muted)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{border:1px solid var(--line2);padding:5px 11px;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);white-space:nowrap}.on-ink .chip{border-color:var(--onink-line);color:var(--onink-muted)}.btn{display:inline-block;border:1px solid var(--line2);padding:11px 16px;font-size:12px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;white-space:nowrap;transition:background .25s ease,color .25s ease,border-color .25s ease}.btn:hover,.btn-solid{background:var(--ink);color:var(--onink);border-color:var(--ink)}.btn-solid:hover{background:var(--accent-fill);color:var(--on-accent);border-color:var(--accent-fill)}.btn-accent{background:var(--accent-fill);color:var(--on-accent);border:0;padding:15px 26px;font-size:12px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;cursor:pointer}.btn-accent:hover{background:var(--ink)}.cs-link{display:inline-flex;align-items:center;gap:10px;font-size:12px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;color:var(--accent-ink);border-bottom:2px solid var(--accent);padding-bottom:5px;transition:gap .25s ease,color .2s ease}.cs-link .arw{display:inline-block;transition:transform .3s cubic-bezier(.16,1,.3,1)}.cs-link:hover,.cs-link:focus-visible{color:var(--accent-ink);gap:16px}.cs-link:hover .arw,.cs-link:focus-visible .arw{transform:translate(4px)}.cs-link .peek{font-size:10.5px;letter-spacing:.1em;color:var(--muted2);opacity:0;max-width:0;overflow:hidden;white-space:nowrap;transition:opacity .25s ease,max-width .35s cubic-bezier(.16,1,.3,1)}.cs-link:hover .peek,.cs-link:focus-visible .peek{opacity:1;max-width:260px}.grp{border-top:2px solid var(--ink)}.grp>*+*{border-top:1px solid var(--hair)}.rowpad{padding:22px 0}.caps{display:grid;grid-template-columns:var(--g2)}.cap{padding:34px var(--gx2);position:relative;overflow:hidden;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.cap:nth-child(2n){background:var(--surface)}.cap .ghost{position:absolute;right:-6px;top:-18px;font-stretch:125%;font-weight:800;font-size:92px;line-height:1;color:var(--faint);opacity:.55;pointer-events:none;user-select:none}.strip{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(280px,1fr);overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:thin}.strip>*{scroll-snap-align:start;border-right:1px solid var(--line)}@media(max-width:860px){.strip{grid-auto-columns:minmax(240px,86%)}}.ph{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--surface)}.ph-img{width:100%;height:100%;object-fit:cover;display:block}.ph-wire{background-image:repeating-linear-gradient(135deg,transparent 0 11px,var(--grid) 11px 12px)}.ph-frame{position:absolute;inset:14px;border:1px dashed var(--line);pointer-events:none}.ph-tick{position:absolute;width:11px;height:11px;border:2px solid var(--ink)}.ph-c{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;padding:20px;text-align:center}.ph-dim{font-family:SF Mono,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;letter-spacing:.1em;color:var(--muted2)}.ph-note{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);max-width:30ch;line-height:1.65}.ph-tag{position:absolute;left:0;top:0;background:var(--ink);color:var(--onink);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;padding:5px 9px}.ph-term{background:var(--ink);color:var(--code);padding:0}.ph-term .bar{display:flex;gap:5px;padding:10px 12px;border-bottom:1px solid var(--onink-line)}.ph-term .bar i{width:8px;height:8px;background:var(--onink-line);display:block}.ph-term pre{margin:0;padding:14px 16px;font-family:SF Mono,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.85;white-space:pre-wrap;overflow:hidden;flex:1}.ph-term .dim{padding:0 16px 12px;font-family:SF Mono,SFMono-Regular,Menlo,Consolas,monospace;font-size:10.5px;letter-spacing:.1em;color:var(--onink-muted)}.diagwrap{position:relative;height:560px;overflow:auto;background-color:var(--surface);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:34px 34px}@media(max-width:860px){.diagwrap{height:440px}}.node{position:absolute;border:2px solid var(--ink);padding:12px 14px;cursor:pointer;display:flex;flex-direction:column;gap:6px;overflow:hidden;text-align:left;background:var(--paper);color:var(--ink);transition:background .2s ease,color .2s ease,transform .25s cubic-bezier(.16,1,.3,1),box-shadow .25s ease}.node[aria-pressed=true]{background:var(--ink);color:var(--paper);transform:translateY(-2px);box-shadow:6px 6px 0 var(--accent)}.node:hover{box-shadow:4px 4px 0 var(--line2)}.node[aria-pressed=true]:hover{box-shadow:6px 6px 0 var(--accent)}.nav{position:sticky;top:0;z-index:30;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:13px var(--gx);border-bottom:2px solid var(--ink);background:var(--paper);font-size:12px;letter-spacing:.1em;text-transform:uppercase;font-weight:600;min-height:60px}.navlinks{display:flex;gap:var(--navgap);align-items:center;white-space:nowrap}.navlinks a{position:relative;padding:4px 0}.navlinks a:after{content:"";position:absolute;left:0;bottom:0;height:1px;width:100%;background:var(--accent);transform:scaleX(0);transform-origin:0 50%;transition:transform .25s cubic-bezier(.16,1,.3,1)}.navlinks a:hover:after,.navlinks a:focus-visible:after{transform:scaleX(1)}.navlinks a.cta:after{display:none}@media(max-width:900px){.nav .navlinks .opt{display:none}}.prog{position:absolute;left:0;bottom:-2px;height:2px;width:100%;transform-origin:0 50%;background:var(--accent);transform:scaleX(0)}@supports (animation-timeline:scroll()){.prog{transform:scaleX(1);animation:prog linear both;animation-timeline:scroll(root block)}}.crumb{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:14px var(--gx);border-bottom:1px solid var(--line);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);flex-wrap:wrap}.crumb ol{list-style:none;margin:0;padding:0;display:flex;align-items:center;gap:12px;flex-wrap:wrap}.crumb li{display:flex;align-items:center;gap:12px}.crumb li+li:before{content:"/";color:var(--faint)}.crumb a{color:var(--muted)}.crumb a:hover,.crumb a:focus-visible{color:var(--accent-ink)}.crumb [aria-current]{color:var(--ink);font-weight:600}@keyframes marq{to{transform:translate(-50%)}}@keyframes rise{0%{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}@keyframes riseSm{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes wipe{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}@keyframes zoomIn{0%{opacity:0;transform:scale(1.06)}to{opacity:1;transform:none}}@keyframes dash{to{stroke-dashoffset:-14}}@keyframes prog{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.an-rise{animation:rise .9s cubic-bezier(.16,1,.3,1) both}.an-riseSm{animation:riseSm .8s cubic-bezier(.16,1,.3,1) both}.an-zoom{animation:zoomIn 1.1s cubic-bezier(.16,1,.3,1) .3s both}.an-wipe{animation:wipe .7s cubic-bezier(.16,1,.3,1) 1s both}.sv-rise{animation:rise .9s linear both;animation-timeline:view();animation-range:entry 0% cover 22%}.sv-riseSm{animation:riseSm .8s linear both;animation-timeline:view();animation-range:entry 0% cover 26%}.sv-zoom{animation:zoomIn 1.2s linear both;animation-timeline:view();animation-range:entry 0% cover 30%}.marq{display:flex;gap:44px;padding-right:44px;font-stretch:125%;font-weight:700;font-size:15px;letter-spacing:.06em;text-transform:uppercase;animation:marq 26s linear infinite}.marqwrap:hover .marq{animation-play-state:paused}.zoomable{transition:transform .6s cubic-bezier(.16,1,.3,1)}.zoomable:hover{transform:scale(1.02)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper:#121214;--surface:#1b1b1f;--ink:#f2f2f4;--body:#c6c6cb;--muted:#a0a0a7;--faint:#3d3d43;--muted2:#9a9aa1;--accent:#4da3ff;--accent-ink:#5aaaff;--accent-fill:#66b0ff;--on-accent:#08192b;--accent-onink:#0067d6;--green:#1c6b30;--dot-db:#4ade80;--onink:#121214;--onink-muted:#55555c;--onink-line:rgba(0,0,0,.22);--code:#1d3a5c;--grid:rgba(255,255,255,.07);--hair:rgba(255,255,255,.1);--line:rgba(255,255,255,.15);--line2:rgba(255,255,255,.24)}:root:not([data-theme=light]) .ph-img{filter:brightness(.82) contrast(1.06)}}:root[data-theme=dark]{color-scheme:dark;--paper:#121214;--surface:#1b1b1f;--ink:#f2f2f4;--body:#c6c6cb;--muted:#a0a0a7;--faint:#3d3d43;--muted2:#9a9aa1;--accent:#4da3ff;--accent-ink:#5aaaff;--accent-fill:#66b0ff;--on-accent:#08192b;--accent-onink:#0067d6;--green:#1c6b30;--dot-db:#4ade80;--onink:#121214;--onink-muted:#55555c;--onink-line:rgba(0,0,0,.22);--code:#1d3a5c;--grid:rgba(255,255,255,.07);--hair:rgba(255,255,255,.1);--line:rgba(255,255,255,.15);--line2:rgba(255,255,255,.24)}:root[data-theme=dark] .ph-img{filter:brightness(.82) contrast(1.06)}:root[data-theme=light]{color-scheme:light}.themes{display:inline-flex;border:1px solid var(--line2);flex:0 0 auto}.th{background:none;border:0;cursor:pointer;padding:5px 9px;font-size:10px;letter-spacing:.1em;text-transform:uppercase;font-weight:600;color:var(--muted2);transition:background .2s ease,color .2s ease}.th+.th{border-left:1px solid var(--line2)}.th:hover{color:var(--ink)}.th:active{transform:translateY(1px)}.th[aria-pressed=true]{background:var(--ink);color:var(--onink)}footer .themes{border-color:var(--line)}.btn:active,.btn-accent:active,.skip:active,.crumb a:active{transform:translateY(1px)}.navlinks a:active{opacity:.65}.node:active{background:var(--surface)}.cs-link:active .arw{transform:translate(9px)}.navlinks a[aria-current=true]{color:var(--accent-ink)}.navlinks a[aria-current=true]:after{transform:scaleX(1)}.ixcard{transition:background .3s ease}.ixcard:hover,.ixcard:focus-visible{background:var(--surface)}.ixcard .thumb{overflow:hidden}.ixcard .thumb .ph{transition:transform .55s cubic-bezier(.16,1,.3,1)}.ixcard:hover .thumb .ph,.ixcard:focus-visible .thumb .ph{transform:scale(1.04)}.ixcard .go{margin-top:auto;padding-top:14px;font-size:15px;line-height:1;color:var(--accent-ink);opacity:0;transform:translate(-6px);transition:opacity .25s ease,transform .3s cubic-bezier(.16,1,.3,1)}.ixcard:hover .go,.ixcard:focus-visible .go{opacity:1;transform:none}.panel{animation:panelIn .34s cubic-bezier(.16,1,.3,1) both;display:flex;flex-direction:column;gap:14px;flex:1}@keyframes panelIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.nav{view-transition-name:sitenav}::view-transition-old(root),::view-transition-new(root){animation-duration:.3s;animation-timing-function:cubic-bezier(.16,1,.3,1)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.an-rise,.an-riseSm,.an-zoom,.an-wipe,.sv-rise,.sv-riseSm,.sv-zoom{animation:none!important;opacity:1!important;transform:none!important;clip-path:none!important}.marq{animation:none!important}.prog{animation:none!important;transform:scaleX(0)!important}.zoomable:hover{transform:none}.cs-link .peek{transition:none}.panel{animation:none!important}.ixcard .go{opacity:1;transform:none;transition:none}.ixcard:hover .thumb .ph,.btn:active,.btn-accent:active,.skip:active,.crumb a:active,.th:active{transform:none}::view-transition-old(root),::view-transition-new(root){animation:none!important}}.workrow{transition:background .45s cubic-bezier(.16,1,.3,1)}.workrow:hover{background:var(--surface)}.worknum{color:var(--faint);transition:color .4s ease,transform .5s cubic-bezier(.16,1,.3,1)}.workrow:hover .worknum{color:var(--accent);transform:translate(4px)}.themes-slot{display:inline-flex}@media(prefers-reduced-motion:reduce){.workrow:hover .worknum{transform:none}}.cta-mail{transition:background .25s ease,color .25s ease}.cta-mail:hover{background:var(--accent-fill);color:var(--on-accent)}section[id],[id^=work-h],[id^=index-h],[id^=about-h],[id^=stack-h],[id^=exp-h],[id^=arch-h]{scroll-margin-top:76px}@media(max-width:620px){.nav{padding-left:16px;padding-right:16px;gap:12px}.navlinks{gap:14px}.nav .opt-sm{display:none}.nav .cta{padding:8px 12px}.nav,.navlinks{font-size:11px}}.feat{display:grid;grid-template-columns:var(--g2)}.feat-cell{padding:22px var(--gx) 26px;border-top:1px solid var(--onink-line)}.feat-cell:nth-child(2n){border-left:1px solid var(--onink-line)}@media(max-width:860px){.feat-cell:nth-child(2n){border-left:0}}.more{border-bottom:2px solid var(--ink)}.more>summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:1fr auto;align-items:center;gap:16px;padding:22px var(--gx);background:var(--ink);color:var(--onink);transition:background .25s ease}.more>summary::-webkit-details-marker{display:none}.more>summary .lbl{display:block;margin-top:6px;color:var(--onink-muted)}.more>summary:hover{background:var(--body)}.more>summary:focus-visible{outline:3px solid var(--accent-onink);outline-offset:-3px}.more-mark{grid-row:1/3;width:22px;height:22px;position:relative;flex:0 0 22px}.more-mark:before,.more-mark:after{content:"";position:absolute;background:var(--onink);transition:transform .3s cubic-bezier(.16,1,.3,1)}.more-mark:before{left:0;top:10px;width:22px;height:2px}.more-mark:after{left:10px;top:0;width:2px;height:22px}.more[open] .more-mark:after{transform:scaleY(0)}.morerow{display:grid;grid-template-columns:minmax(0,90px) minmax(0,1fr) minmax(0,240px) 28px;gap:var(--gap-lg);align-items:start;padding:26px var(--gx);border-bottom:1px solid var(--line);transition:background .3s ease}.morerow:hover,.morerow:focus-visible{background:var(--surface)}.morenum{font-size:38px;line-height:.85;letter-spacing:-.04em;color:var(--faint);transition:color .3s ease}.morerow:hover .morenum{color:var(--accent)}.morerow .arw{align-self:center;font-size:18px;color:var(--accent-ink);transition:transform .3s cubic-bezier(.16,1,.3,1)}.morerow:hover .arw{transform:translate(5px)}@media(max-width:1024px){.morerow{grid-template-columns:minmax(0,60px) minmax(0,1fr);gap:20px}.morerow .chips,.morerow .arw{display:none}}@media(prefers-reduced-motion:reduce){.more-mark:before,.more-mark:after,.morerow .arw{transition:none}}.nav .lang{border:1px solid var(--line2);padding:5px 10px;font-size:10px;letter-spacing:.1em;font-weight:600}.nav .lang:after{display:none}.nav .lang:hover{background:var(--ink);color:var(--onink);border-color:var(--ink)}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
