@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(../media/bricolage-grotesque-vietnamese-wght-normal.03f_1bxrvnkfd.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(../media/bricolage-grotesque-latin-ext-wght-normal.37g1whwfgt7kp.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(../media/bricolage-grotesque-latin-wght-normal.1iqnhac4m3hwo.woff2)format("woff2-variations");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}
@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(../media/dm-sans-latin-ext-wght-normal.0hiocdn10l05a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(../media/dm-sans-latin-wght-normal.0tm8u-h63rec8.woff2)format("woff2-variations");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}
@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-cyrillic-ext-400-normal.09jq5v9-1wf71.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-ext-400-normal.2iaubq2jy0rx3.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-cyrillic-400-normal.0m1ahpdxrpokj.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-400-normal.2-z93d2j9-3s0.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-vietnamese-400-normal.3a7fs2yw914a9.woff2)format("woff2"),url(../media/ibm-plex-mono-vietnamese-400-normal.2kzc8ichkozg5.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-latin-ext-400-normal.1hjaitcyq2e2r.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-ext-400-normal.0nrwft7nlo5oa.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(../media/ibm-plex-mono-latin-400-normal.3xdfs0-p_zi4c.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-400-normal.2lhng2ntocry9.woff)format("woff");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}
@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-cyrillic-ext-500-normal.28wp48yubenc3.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-ext-500-normal.41yczc5zdkwdh.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-cyrillic-500-normal.26ox_itp_alxp.woff2)format("woff2"),url(../media/ibm-plex-mono-cyrillic-500-normal.1eaan1mch682e.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-vietnamese-500-normal.0s1z3n-ysad7w.woff2)format("woff2"),url(../media/ibm-plex-mono-vietnamese-500-normal.2g79xp9gzp1kn.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-latin-ext-500-normal.1cuq9_67cn48n.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-ext-500-normal.1tdw_l2v4yhc_.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(../media/ibm-plex-mono-latin-500-normal.11q3guvgd1r20.woff2)format("woff2"),url(../media/ibm-plex-mono-latin-500-normal.1fgk-kmy-32_a.woff)format("woff");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}
:root{--heading:"Bricolage Grotesque Variable", sans-serif;--body:"DM Sans Variable", sans-serif;--mono:"IBM Plex Mono", monospace;--text-xs:13px;--text-sm:15px;--text-base:17px;--text-lg:19px;--h3:40px;--h2:42px;--hero:clamp(48px, 5.4vw, 76px);--brand:26px;--email:30px;--art-title:23px;--art-cell:20px}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:92px}body{font-family:var(--body);font-size:var(--text-base);-webkit-font-smoothing:antialiased;color:#202723;background:#f5f6f5;margin:0;line-height:1.6}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}a{color:inherit;text-decoration:none}button,a{touch-action:manipulation}button{cursor:pointer}button:focus-visible,a:focus-visible{outline-offset:6px;border-radius:3px;outline:3px solid #23815b}::selection{color:#103c2b;background:#b7e7ce}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--heading);font-weight:550;line-height:1.1}.portfolio{--bg:#f5f6f5;--surface:#fff;--text:#202723;--muted:#656e68;--faint:#78827b;--line:#dce1dd;--green:#277457;--tint:#e9eeea;background-color:var(--bg);color:var(--text);isolation:isolate;min-height:100vh;transition:background-color .3s,color .3s;position:relative}.portfolio[data-stage=back]{--bg:#0f1211;--surface:#161a18;--tint:#1c211e;--panel:#1c211e;--line:#2a302c;--text:#eceeed;--muted:#a3aba6;--faint:#8b948f;--green:#8fc8a6;--ok:#8fc8a6;--running:#e0b46a;--fail:#e98a74}.shell{max-width:1320px;margin-inline:auto;padding-left:48px;padding-right:48px}.site-header{z-index:10;background:var(--bg);align-items:center;gap:42px;min-height:72px;transition:background-color .3s,color .3s;display:flex;position:sticky;top:0}.header-main,.stage-switch-row{display:contents}.brand{font-family:var(--heading);font-size:var(--brand);letter-spacing:-.8px;align-items:center;gap:11px;font-weight:650;display:flex}.brand-mark{width:38px;height:38px}.brand-suffix{color:var(--muted);font-weight:450}.site-header nav{font-size:var(--text-sm);align-items:center;gap:27px;margin-left:auto;font-weight:500;display:flex}.site-header nav a{align-items:center;gap:4px;display:flex}.site-header nav svg{width:14px}.site-header nav a:hover{color:var(--green)}.stage-switch{white-space:nowrap;background:var(--tint);border:1px solid var(--line);color:var(--muted);font-size:var(--text-sm);border-radius:8px;flex-shrink:0;align-items:center;gap:3px;padding:4px;font-weight:600;display:flex}.stage-switch>span{border-radius:4px;align-items:center;gap:7px;padding:9px 12px;transition:background .18s,color .18s;display:flex}.stage-switch>span.active{background:var(--surface);color:var(--text);box-shadow:0 1px 3px #0000000c}.stage-switch:hover{border-color:var(--green)}.hero{grid-template-columns:1.8fr 1fr;align-items:center;gap:38px;padding:48px 0;display:grid}.eyebrow{font-family:var(--mono);font-size:var(--text-xs);letter-spacing:1.15px;color:var(--muted);align-items:center;gap:9px;font-weight:400;line-height:1.7;display:flex}.status-dot{background:#379467;border-radius:50%;flex:0 0 6px;width:6px;height:6px;display:inline-block}.eyebrow-separator{color:#adb6af;margin-inline:3px}.hero h1{font-size:var(--hero);letter-spacing:-2.8px;margin-top:24px;font-weight:560;line-height:1.1}.hero h1>span{color:var(--green)}.hero h1>.hero-name{color:var(--muted);font-family:var(--body);font-size:var(--text-base);letter-spacing:0;margin-bottom:20px;font-weight:500;line-height:1.5;display:block}.hero-description{max-width:65ch;color:var(--muted);font-size:var(--text-lg);margin-top:23px;line-height:1.6}.text-link{font-weight:550;font-size:var(--text-sm);align-items:center;gap:16px;padding-block:9px;display:inline-flex}.text-link svg{transition:transform .18s}.text-link:hover svg{transform:translate(3px,-1px)}.hero-link{margin-top:23px}.hero-art{padding-top:9px;position:relative;transform:rotate(-3deg)}.hero-art-content{transform:rotate(var(--hero-sway,0deg));transform-origin:50% -24px;pointer-events:none}@media (hover:none),(pointer:coarse),(prefers-reduced-motion:reduce){.hero-art-content{transition:none;transform:none}}.experience-layer{border:1px solid var(--line);background:var(--surface);border-radius:7px;align-items:center;gap:12px;min-height:100px;padding:20px;display:flex;box-shadow:0 5px #00000003}.experience-layer>span{font-family:var(--heading);font-size:var(--art-title);letter-spacing:-.5px}.experience-icon{background:var(--tint);width:31px;height:31px;font-size:var(--art-title);color:var(--green);border-radius:5px;flex-shrink:0;place-items:center;display:grid}.wiring{z-index:0;justify-content:space-around;height:56px;padding-inline:25px;display:flex;position:relative}.wiring>span{border-left:1px dashed #acb7af;width:1px;height:100%}.wiring-caption{text-align:center;white-space:normal;background:var(--bg);width:max-content;max-width:100%;font-family:var(--mono);font-size:var(--text-xs);color:var(--muted);padding:5px 8px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.system-layer{z-index:1;color:#e3ebe5;background:#223c2e;border-radius:7px;padding:19px 20px 21px;position:relative;box-shadow:0 10px 24px #1836220d}.system-layer-label{font-family:var(--mono);font-size:var(--text-xs);letter-spacing:1px;color:#c5d5cb;align-items:center;gap:8px;display:flex}.system-layer .status-dot{background:#93c9a4}.system-cells{margin-top:18px;display:flex}.system-cells>div{font-family:var(--heading);font-size:var(--art-cell);border-right:1px solid #47604f;flex:1;padding-left:16px}.system-cells>div:first-child{padding-left:0}.system-cells>div:last-child{border-right:0}.system-cells span{font-family:var(--mono);font-size:var(--text-xs);color:#a1b7a9;margin-bottom:5px;display:block}.art-caption{color:var(--muted);font-size:var(--text-xs);justify-content:center;align-items:center;gap:7px;margin-top:18px;display:flex}.art-caption svg{width:12px}[data-stage=back] .hero-art{transform:rotate(0)}.hero-art{transition:transform .2s}.stage-invitation{border-block:1px solid var(--line);color:var(--muted);align-items:center;gap:18px;padding:17px 0;display:flex}.small-index{font-family:var(--mono);font-size:var(--text-xs);color:var(--green);letter-spacing:.5px}.stage-invitation .invitation-copy{font-size:var(--text-sm)}.invitation-arrow{color:var(--green);font-size:var(--art-title);margin-left:auto}.work-section{padding-top:61px}.section-heading{justify-content:space-between;align-items:flex-end;margin-bottom:38px;display:flex}.section-heading h2{font-size:var(--h2);letter-spacing:-1.1px;margin-top:10px}.count{font-family:var(--mono);font-size:var(--text-xs);color:var(--faint);letter-spacing:0;vertical-align:middle;margin-left:10px;font-weight:400}.section-aside{font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.8px;color:var(--muted);padding-bottom:7px}.project{grid-template-columns:1fr 1.25fr;align-items:center;gap:65px;padding:14px 0 49px;display:grid}.project+.project{border-top:1px solid var(--line);padding-top:49px}.project-info{min-width:0;position:relative}.project h3{font-size:var(--h3);letter-spacing:-1.2px;justify-content:space-between;align-items:center;margin-top:9px;display:flex}.project h3 svg{width:21px;color:var(--faint)}.project-info>p{color:var(--muted);font-size:var(--text-base);max-width:65ch;margin-top:14px;line-height:1.6}.project-tags{flex-wrap:wrap;gap:7px;margin-top:20px;display:flex}.project-tags>span{color:var(--muted);font-size:var(--text-xs);border:1px solid var(--line);border-radius:3px;padding:5px 8px}.project-link{margin-top:17px}.project-visual{border:1px solid var(--line);background:var(--surface);border-radius:8px;min-width:0;overflow:hidden}.visual-toolbar{min-height:42px;font-family:var(--mono);font-size:var(--text-xs);color:var(--muted);border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:8px 14px;display:flex}.window-dots{gap:4px;display:flex}.window-dots i{background:var(--line);border-radius:50%;width:5px;height:5px}.visual-view-label{font-size:var(--text-xs);letter-spacing:.7px}.project-screenshot{aspect-ratio:16/9;background:#fff;display:block;position:relative;overflow:hidden}.project-screenshot img{object-fit:cover;width:100%;height:100%;transition:transform .22s;display:block}.project-screenshot:hover img{transform:scale(1.025)}.screenshot-open{color:#28392f;background:#f5f6f5;border:1px solid #dce1dd;border-radius:50%;place-items:center;width:33px;height:33px;display:grid;position:absolute;bottom:12px;right:12px}.screenshot-open svg{width:15px}.annotation{color:var(--green);font-family:var(--mono);font-size:var(--text-xs);border-left:1px solid var(--green);gap:7px;margin-top:19px;padding-left:12px;line-height:1.6;display:flex}.system-view{color:#e1e9e4;background:#16231c;min-height:332px}.trace-panel,.deployment-panel{padding:23px 25px 0}.system-topline{font-family:var(--mono);font-size:var(--text-xs);letter-spacing:.4px;color:#9cac9f;justify-content:space-between;gap:12px;display:flex}.system-topline>span:first-child{align-items:center;gap:8px;display:flex}.trace-steps{margin:23px 0 18px;padding:0;list-style:none}.trace-steps li{align-items:center;gap:13px;padding-bottom:19px;display:flex;position:relative}.trace-steps li:last-child{padding-bottom:0}.trace-steps li:not(:last-child):before{content:"";background:#3a4d40;width:1px;height:23px;position:absolute;top:27px;left:12px}.trace-node{z-index:1;width:26px;height:26px;font-family:var(--mono);font-size:var(--text-xs);color:#97a99e;border:1px solid #425347;border-radius:50%;flex-shrink:0;place-items:center;transition:color .18s,background .18s;display:grid;position:relative}.trace-done .trace-node{color:#b9e6c4;background:#2d4d38;border-color:#53795e}.trace-running .trace-node{color:#e0ba7d;border-color:#bf9b60}.trace-steps strong{font-size:var(--text-sm);font-weight:500;display:block}.trace-steps li>div>span{font-size:var(--text-xs);color:#a6b5ac;margin-top:3px;display:block}.trace-steps code{font-family:var(--mono);font-size:var(--text-xs);color:#a4bbaa;margin-left:auto}.system-bottomline{font-size:var(--text-xs);color:#a6b5ac;border-top:1px solid #34463a;justify-content:space-between;align-items:center;gap:10px;padding:12px 0;display:flex}.system-bottomline button{color:#d6e3da;font-size:var(--text-sm);background:0 0;border:0;min-height:28px;padding:5px 0 5px 10px}.system-bottomline button>span{font-size:var(--text-base);margin-left:5px}.system-bottomline button:hover{color:#a5e1b4}.system-bottomline code{font-family:var(--mono);font-size:var(--text-xs)}.deployment-flow{justify-content:space-between;align-items:center;margin-block:49px 34px;display:flex}.flow-node{text-align:center;flex:1;min-width:0}.flow-symbol{color:#b4d6bd;width:49px;height:49px;font-family:var(--mono);font-size:var(--text-lg);background:#253e2e;border:1px solid #48604e;border-radius:8px;place-items:center;margin:0 auto 14px;display:grid}.cloud-symbol{font-size:var(--brand)}.flow-node strong{font-size:var(--text-sm);font-weight:500;display:block}.flow-node>span:last-child{font-size:var(--text-xs);color:#a6b5ac;margin-top:6px;display:block}.earlier-section{border-block:1px solid var(--line);grid-template-columns:1fr 1.25fr;gap:65px;padding:54px 0 61px;display:grid}.earlier-intro h2{font-size:var(--h2);letter-spacing:-.8px;margin-top:16px;line-height:1.1}.earlier-intro p{font-size:var(--text-sm);color:var(--muted);margin-top:15px;line-height:1.6}.earlier-item{border-bottom:1px solid var(--line);align-items:center;gap:19px;padding:18px 0;display:flex}.earlier-item:first-child{padding-top:0}.earlier-item:last-child{border:0;padding-bottom:0}.earlier-number{font-family:var(--mono);color:var(--faint);font-size:var(--text-xs)}.earlier-item h3{font-family:var(--body);font-size:var(--text-lg);font-weight:550}.earlier-item p{font-size:var(--text-base);color:var(--muted);margin-top:5px;line-height:1.6}.earlier-item code{white-space:normal;text-align:right;color:var(--green);font-family:var(--mono);font-size:var(--text-xs);margin-left:auto}.about-section{grid-template-columns:1fr 1.25fr;gap:65px;padding-block:65px;display:grid}.about-section h2{font-size:var(--h2);letter-spacing:-1px;margin-top:14px}.about-copy{padding-top:3px}.about-copy p{max-width:65ch;color:var(--muted);font-size:var(--text-lg);line-height:1.6}.about-copy p+p{margin-top:13px}.contact-section{background:var(--tint);border:1px solid var(--line);border-radius:7px;justify-content:space-between;align-items:center;gap:25px;padding:37px 40px;display:flex}.contact-section h2{font-size:var(--h2);letter-spacing:-.9px;margin-top:10px}.contact-section p{color:var(--muted);font-size:var(--text-sm);margin-top:10px}.email-link{font-family:var(--heading);font-size:var(--email);letter-spacing:-.7px;align-items:center;gap:22px;display:flex}.contact-action{min-width:0;max-width:100%}.contact-profiles{flex-wrap:wrap;column-gap:28px;margin-top:12px;display:flex}.email-link>span{overflow-wrap:anywhere;min-width:0}.email-link>svg{flex-shrink:0}a.email-link:hover{color:var(--green)}.site-footer{font-size:var(--text-xs);color:var(--muted);justify-content:space-between;align-items:center;gap:18px;padding-top:32px;padding-bottom:32px;display:flex}.runtime-status{font-family:var(--mono);font-size:var(--text-xs);align-items:center;gap:7px;display:flex}.runtime-status .status-dot{flex-basis:5px;width:5px;height:5px}.site-footer a span{margin-left:9px}.skip-link{z-index:20;background:var(--text);color:var(--bg);padding:12px 20px;position:fixed;top:10px;left:10px;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.error-page{flex-direction:column;justify-content:center;max-width:700px;min-height:100vh;margin:auto;padding:100px 32px;display:flex}.error-page h1{font-size:var(--hero);letter-spacing:-2px;margin:20px 0;line-height:1.1}.error-page p{color:#656e68;max-width:440px;line-height:1.6}.error-page .text-link{width:fit-content;margin-top:25px}.error-code{font-family:var(--mono);font-size:var(--text-xs);color:#277457}.error-flow{font-family:var(--mono);color:#656e68;font-size:var(--text-sm);border-block:1px solid #dce1dd;margin-top:25px;padding:26px 0}.error-flow span{color:#a06e2c}.visual-toolbar,.system-topline,.trace-steps code,.trace-steps li>div>span,.system-bottomline{font-size:var(--text-xs)}.stage-invitation{text-align:left;background:0 0;border-inline:0;width:100%}.stage-invitation:hover{color:var(--text);background:var(--tint)}.stage-invitation .invitation-copy{flex:1}.project h3{display:block}.project-title-link{justify-content:space-between;align-items:center;gap:12px;display:flex}.project-title-link:hover{color:var(--green)}.project-title-link svg{flex-shrink:0}.system-topline,.system-bottomline{flex-wrap:wrap}.system-bottomline{line-height:1.6}.system-topline>span:first-child{min-height:22px}.trace-steps strong{line-height:1.5}.trace-steps code{white-space:nowrap}.site-footer{flex-wrap:wrap}.runtime-status{flex-wrap:wrap;line-height:1.7}.contribution-details{font-size:var(--text-base);color:var(--muted);margin-top:16px;line-height:1.6}.contribution-details summary{cursor:pointer;color:var(--green);align-items:center;gap:5px;width:fit-content;padding-block:5px;list-style:none;display:flex}.contribution-details summary::-webkit-details-marker{display:none}.contribution-marker{border-top:.28em solid #0000;border-bottom:.28em solid #0000;border-left:.4em solid;flex-shrink:0;width:0;height:0}.contribution-details[data-expanded=true] .contribution-marker,.contribution-details[open]:not([data-expanded=false]) .contribution-marker{transform:rotate(90deg)}.contribution-details summary:focus-visible{outline:3px solid var(--green);outline-offset:4px}.contribution-content{display:flow-root}.contribution-details ul{margin:12px 0 0;padding-left:18px}.contribution-details li+li{margin-top:10px}.contribution-details strong{color:var(--text);font-weight:550}.trace-scenarios{flex-wrap:wrap;gap:8px;margin-top:17px;display:flex}.trace-scenarios button{color:#a6b5ac;font-size:var(--text-sm);background:0 0;border:1px solid #48604e;border-radius:4px;min-height:36px;padding:8px 11px}.trace-scenarios button[aria-pressed=true]{color:#d6ebdc;background:#2d4d38;border-color:#7da58a}.trace-steps li:not(:last-child):before{height:auto;bottom:0}.trace-steps li>div{min-width:0}.trace-steps li>div>span{line-height:1.6}@media (max-width:1050px){.shell{padding-inline:32px}.site-header{gap:20px}.site-header nav{gap:18px}.hero{grid-template-columns:1fr;gap:40px}.hero-art{justify-self:center;width:100%;max-width:440px}.project,.earlier-section,.about-section{gap:32px}.project{grid-template-columns:1fr}.project-info>p{max-width:65ch}.project-visual{width:100%}.earlier-item code{display:none}.contact-section{flex-direction:column;align-items:flex-start}.contact-action{width:100%;container-type:inline-size}.email-link{font-size:min(var(--email), calc((100cqi - 36px) / 12));gap:12px}.email-link>span{white-space:nowrap;overflow-wrap:normal}}@media (max-width:760px){:root{--text-xs:12px;--text-sm:15px;--text-base:16px;--text-lg:18px;--h2:32px;--h3:32px;--hero:clamp(38px, 9vw, 52px);--brand:24px}html{scroll-padding-top:152px}.shell{padding-inline:24px}.site-header{isolation:isolate;height:auto;min-height:62px;margin-bottom:62px;padding-block:12px}.site-header:before{content:"";z-index:1;background:var(--bg);position:absolute;inset:0}.header-main{z-index:2;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;width:100%;display:flex;position:relative}.stage-switch-row{z-index:0;background:var(--bg);opacity:1;padding:4px 24px 8px;transition:transform .22s,opacity .18s;display:block;position:absolute;top:100%;left:0;right:0;transform:translateY(0)}.site-header[data-stage-hidden=true] .stage-switch-row{opacity:0;pointer-events:none;transform:translateY(-100%)}.site-header[data-stage-hidden=true] .stage-switch-row:has(:focus-visible){opacity:1;pointer-events:auto;transform:translateY(0)}.site-header nav{gap:14px;margin-left:0}.stage-switch{justify-content:center;width:100%}.stage-switch>span{flex:1;justify-content:center;padding:8px 11px}.hero{gap:36px;padding:36px 0}.hero h1{letter-spacing:-1.5px}.hero-art{width:calc(100% - 22px);max-width:420px;margin-inline:auto}.experience-layer{gap:10px;padding:16px}.wiring{height:64px}.system-cells>div{padding-left:12px}.stage-invitation{gap:12px}.small-index{flex-shrink:0}.work-section{padding-top:40px}.section-heading{margin-bottom:30px}.section-aside{display:none}.project{gap:24px;padding-bottom:40px}.project+.project{padding-top:40px}.project-tags{margin-top:16px}.project-link{margin-top:12px}.earlier-section,.about-section{grid-template-columns:1fr;gap:26px;padding-block:40px}.earlier-intro br,.desktop-break{display:none}.contact-section{flex-direction:column;align-items:flex-start;gap:28px;padding:28px 24px}.site-footer{padding-block:28px}.runtime-status{order:3;width:100%}.system-bottomline{gap:8px}}@media (max-width:400px){.shell{padding-inline:20px}.site-header{gap:12px}.site-header nav{gap:10px}.brand{gap:7px}.brand-mark{width:30px;height:30px}.stage-switch-row{padding-inline:20px}.eyebrow{letter-spacing:.8px;flex-wrap:wrap;gap:7px}.small-index{display:none}.trace-panel,.deployment-panel{padding-inline:16px}.visual-toolbar{padding-inline:12px}.window-dots{display:none}.experience-layer{padding-inline:12px}.trace-steps li{gap:10px}.deployment-flow{flex-direction:column;gap:12px;margin-block:28px}.flow-node{flex:none;width:100%}.flow-symbol{margin-bottom:8px}}@media (max-width:350px){.site-header nav{justify-content:space-between;width:100%}html{scroll-padding-top:190px}.trace-panel,.deployment-panel,.system-layer{padding-inline:12px}.system-cells>div{padding-left:8px}.contact-section{padding-inline:18px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}.project-screenshot:hover img{transform:none}}.trace-failed .trace-node{color:#ffd59a;background:#493421;border-color:#c68e46}.trace-failed strong{color:#ffd59a}.process-visual{background:0 0;border:0;overflow:visible}.process-visual .system-view{border-radius:8px;overflow:hidden}.system-topline>span:first-child{font-family:var(--body);font-size:var(--text-sm);letter-spacing:0;color:#d6e3da}.system-cells code{font-family:var(--mono);font-size:var(--text-xs);overflow-wrap:anywhere;line-height:1.6;display:block}.system-cells>div{min-width:0}.request-packet{background:#b9e6c4;border-radius:50%;width:7px;height:7px;animation:.9s ease-in-out both request-travel;position:absolute;top:0;left:50%}@media (hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){.hero-art:hover .request-packet{animation-iteration-count:infinite}}@keyframes request-travel{0%{opacity:0;top:0}15%{opacity:1}85%{opacity:1}to{opacity:0;top:100%}}.branch-panel{padding:24px 25px 0}.branch-graph{margin-top:50px;position:relative}.branch-graph svg{aspect-ratio:10/3;width:100%;height:auto;display:block;overflow:visible}.branch-graph path{fill:none;stroke-width:2px;vector-effect:non-scaling-stroke}.git-main{stroke:#52695b}.git-feature{stroke:#a0ccb0;stroke-dasharray:800;stroke-dashoffset:800px}.git-feature.active{stroke-dashoffset:0;transition:stroke-dashoffset 2.1s}.commit{fill:#18241e;stroke:#52695b;stroke-width:2px;vector-effect:non-scaling-stroke;transition:fill .18s,stroke .18s}.commit.active,.commit.merged{fill:#b9e6c4;stroke:#b9e6c4}.git-main-label,.git-feature-label{font-family:var(--mono);font-size:var(--text-xs);color:#a6b5ac;position:absolute}.git-main-label{top:-28px;left:0}.git-feature-label{top:80.55%;left:25%}.pr-badge{font-family:var(--mono);font-size:var(--text-xs);color:#9cac9f;border:1px solid #52695b;border-radius:20px;padding:3px 10px;position:absolute;top:-30px;right:0}.pr-badge.active{color:#b9e6c4;border-color:#8fc8a6}.branch-legend{flex-wrap:wrap;gap:12px 20px;margin:36px 0 26px;padding:0;list-style:none;display:flex}.branch-legend li{color:#a6b5ac;font-size:var(--text-sm)}.branch-legend li.complete{color:#d6ebdc}.branch-legend li span{font-family:var(--mono);font-size:var(--text-xs);color:#8b9f91;margin-right:6px}.deployment-flow{grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-block:40px 20px;display:grid;position:relative}.flow-node{z-index:2;min-height:140px;position:relative}.delivery-track{background:#48604e;height:1px;position:absolute;top:24px;left:16.666%;right:16.666%}.delivery-runner{z-index:1;background:#d9ffe3;border-radius:50%;width:7px;height:7px;display:none;position:absolute;top:21px;left:calc(16.666% - 3px)}.delivery-playing .delivery-runner{animation:2.4s linear both delivery-travel;display:block}@keyframes delivery-travel{0%{opacity:0;left:calc(16.666% - 3px)}5%{opacity:1}95%{opacity:1}to{opacity:0;left:calc(83.333% - 3px)}}.flow-arrived .flow-symbol{color:#d9ffe3;background:#31573c;border-color:#99d2a9;box-shadow:0 0 0 5px #91cea712}.flow-arrived strong{color:#b9e6c4}.contact-request{border-left:1px solid var(--green);min-width:0;padding-left:22px}.contact-command,.contact-explanation{font-family:var(--mono);font-size:var(--text-xs);color:var(--green);display:block}.contact-command{margin-bottom:9px}.contact-explanation{max-width:34ch;margin-top:12px}@media (max-width:1050px){.earlier-item code{display:block}}@media (max-width:760px){.earlier-item{flex-wrap:wrap}.earlier-item code{text-align:left;margin-left:36px}.earlier-list[data-code-stacked=true]:not([data-stacked=true]) .earlier-item code{flex-basis:calc(100% - 36px)}.earlier-list[data-stacked=true] .earlier-item{flex-direction:column;align-items:flex-start;gap:12px}.earlier-list[data-stacked=true] .earlier-item code{margin-left:0}.contact-request{padding-left:16px}}@media (max-width:400px){.branch-panel{padding-inline:16px}.deployment-flow{grid-template-rows:repeat(3,140px);grid-template-columns:1fr;margin-block:28px 8px}.flow-node{width:100%}.delivery-track{width:1px;height:auto;inset:24px auto 116px 50%}.delivery-runner{left:calc(50% - 3px)}.delivery-playing .delivery-runner{animation-name:delivery-travel-vertical}@keyframes delivery-travel-vertical{0%{opacity:0;top:21px}5%{opacity:1}95%{opacity:1}to{opacity:0;top:calc(100% - 119px)}}}@media (prefers-reduced-motion:reduce){.delivery-playing .delivery-runner,.request-packet{display:none}}.portfolio:before{content:"";z-index:-1;pointer-events:none;opacity:0;background-image:radial-gradient(circle,#ffffff0a .8px,#0000 1px);background-size:24px 24px;transition:opacity .3s;position:absolute;inset:0}.portfolio[data-stage=back]:before{opacity:1}[data-stage=back] :is(button,a):focus-visible{outline-color:var(--green)}[data-stage=back] .hero h1>span{color:var(--text)}[data-stage=back] .status-dot{background:var(--ok)}[data-stage=back] .system-layer{color:var(--text);background:var(--panel);border:1px solid var(--line);box-shadow:inset 0 1px #ffffff0a}[data-stage=back] .system-layer-label,[data-stage=back] .system-cells span{color:var(--muted)}[data-stage=back] .system-cells>div{border-color:var(--line)}[data-stage=back] .wiring>span{border-color:var(--faint)}[data-stage=back] .request-packet,[data-stage=back] .delivery-runner{background:var(--running)}[data-stage=back] .process-visual{background:var(--panel);border:1px solid var(--line)}[data-stage=back] .system-view{background:var(--panel);color:var(--text);box-shadow:inset 0 1px #ffffff0a,0 12px 30px #0000001f}[data-stage=back] .system-topline,[data-stage=back] .system-bottomline,[data-stage=back] .trace-steps li>div>span,[data-stage=back] .trace-steps code,[data-stage=back] .flow-node>span:last-child,[data-stage=back] .git-main-label,[data-stage=back] .git-feature-label,[data-stage=back] .branch-legend li{color:var(--muted)}[data-stage=back] .system-topline>span:first-child{color:var(--text)}[data-stage=back] .system-bottomline{border-color:var(--line)}[data-stage=back] .trace-steps li:not(:last-child):before,[data-stage=back] .delivery-track{background:var(--faint)}[data-stage=back] .trace-node,[data-stage=back] .flow-symbol{background:var(--surface);color:var(--muted);border-color:var(--faint)}[data-stage=back] .trace-running .trace-node{border-color:var(--running);color:var(--running)}[data-stage=back] .trace-running strong{color:var(--running)}[data-stage=back] .trace-done .trace-node{border-color:var(--ok);color:var(--ok)}[data-stage=back] .trace-failed .trace-node{background:var(--surface);border-color:var(--fail);color:var(--fail)}[data-stage=back] .trace-failed strong{color:var(--fail)}[data-stage=back] .trace-scenarios button{background:var(--surface);color:var(--muted);border-color:var(--faint)}[data-stage=back] .trace-scenarios button[aria-pressed=true]{color:var(--green);border-color:var(--green)}[data-stage=back] .stage-switch>span.active{color:var(--green)}[data-stage=back] .system-bottomline button{color:var(--text)}[data-stage=back] .system-bottomline button:hover{color:var(--green)}[data-stage=back] .git-main{stroke:var(--faint)}[data-stage=back] .git-feature{stroke:var(--muted)}[data-stage=back] .commit{fill:var(--surface);stroke:var(--faint)}[data-stage=back] .commit.active,[data-stage=back] .commit.merged{fill:var(--ok);stroke:var(--ok)}[data-stage=back] .pr-badge{color:var(--muted);border-color:var(--faint)}[data-stage=back] .pr-badge.active{color:var(--ok);border-color:var(--ok)}[data-stage=back] .branch-legend li.complete{color:var(--text)}[data-stage=back] .branch-legend li span{color:var(--faint)}[data-stage=back] .flow-arrived .flow-symbol{background:var(--surface);color:var(--ok);border-color:var(--ok);box-shadow:0 0 0 5px color-mix(in srgb, var(--ok) 8%, transparent)}[data-stage=back] .flow-arrived strong{color:var(--ok)}[data-stage=back] .annotation,[data-stage=back] .contact-command,[data-stage=back] .contact-explanation,[data-stage=back] .earlier-item code{color:var(--muted)}[data-stage=back] .annotation,[data-stage=back] .contact-request{border-color:var(--line)}[data-stage=back] .project-tags>span{background:var(--surface)}@media (prefers-reduced-motion:reduce){.portfolio,.portfolio:before,.site-header,.stage-switch-row{transition:none}[data-stage=back] .process-visual{opacity:1;animation:none}}.reveal{opacity:1;transform:none}html.js-reveal .reveal[data-reveal-state=hidden]{opacity:0;transform:translateY(16px)}html.js-reveal .reveal[data-reveal-state=revealing]{opacity:1;transition:opacity .5s cubic-bezier(.2, .7, .2, 1) var(--reveal-delay,0s), transform .5s cubic-bezier(.2, .7, .2, 1) var(--reveal-delay,0s);transform:translateY(0)}html.js-reveal .reveal[data-reveal-state=visible],html.js-reveal .reveal.reveal-immediate{opacity:1;transition:none;transform:none}@media (prefers-reduced-motion:reduce){html.js-reveal .reveal{opacity:1!important;transition:none!important;transform:none!important}}
