@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.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(/_astro/bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.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(/_astro/bricolage-grotesque-latin-wght-normal.DLoelf7F.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:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/jetbrains-mono-latin-500-normal.BWZEU5yA.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-500-normal.CJOVTJB7.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/jetbrains-mono-latin-400-normal.V6pRDFza.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-400-normal.6-qcROiO.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/jetbrains-mono-latin-400-italic.B9rkokqX.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-400-italic.Bkkwkp6n.woff)format("woff")}:root{--bg:#0a0a0a;--bg-elevated:#111;--bg-card:#0f0f0f;--text:#e8e6e3;--text-muted:#a8a39c;--text-dim:#7a756f;--border:#2a2a2a;--border-light:#1c1c1c;--accent:#d4cfc6;--state-queued:#7a756f;--state-running:#c9a227;--state-retry:#b87d4a;--state-succeeded:#6b9e7a;--state-failed:#c47070;--font-display:"Bricolage Grotesque Variable", Bricolage Grotesque, system-ui, sans-serif;--font-body:"Bricolage Grotesque Variable", Bricolage Grotesque, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--radius:3px;--transition:.18s ease;--phi:1.61803;--s1:1.618rem;--s2:2.618rem;--max-width:970px;--header-h:4.75rem;--text-sm:1rem;--text-base:1.0625rem;--text-md:1.125rem;--text-lg:1.3125rem;--type-h1:clamp(2.5rem, 5.8vw, 4.1rem);--type-h2:clamp(1.85rem, 3.4vw, 2.55rem);--type-label:.8125rem;--type-ui:.875rem;--leading:1.75;--measure:38.8rem}*,:before,:after{box-sizing:border-box}html{background:var(--bg)}html:focus-within{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading);-webkit-font-smoothing:antialiased;margin:0}img{max-width:100%;height:auto;display:block}a{color:var(--accent);text-decoration:none}a:hover{color:var(--text)}:focus-visible{outline:2px solid var(--state-running);outline-offset:3px}.skip{z-index:200;background:var(--text);color:var(--bg);padding:.75rem 1rem;font-weight:600;position:absolute;top:0;left:-9999px}.skip:focus{top:1rem;left:1rem}.wrap{width:min(100% - clamp(1.5rem, 6vw, 2.6rem), var(--max-width));margin-inline:auto}.site-header{z-index:100;backdrop-filter:blur(10px);border-bottom:1px solid var(--border-light);background:#0a0a0af0;position:sticky;top:0}.site-header__inner{min-height:var(--header-h);justify-content:space-between;align-items:center;gap:1.25rem;padding-block:.4rem;display:flex}.brand{line-height:0;display:inline-flex}.brand img{object-fit:contain;width:auto;height:50px}.nav{align-items:center;gap:1.5rem;display:flex}.nav a{font-size:var(--type-ui);color:var(--text-muted);font-weight:500}.nav a:hover,.nav a[aria-current=page]{color:var(--text)}.nav .btn--primary{color:var(--bg)}.nav .btn--primary:hover{background:var(--text);color:var(--bg)}.nav .btn{font-weight:600;display:none}@media (width>=900px){.nav .btn{display:inline-flex}}.btn{font-size:var(--type-ui);border-radius:var(--radius);transition:background var(--transition), color var(--transition);align-items:center;padding:.7rem 1.15rem;font-weight:600;display:inline-flex}.btn--primary{background:var(--accent);color:var(--bg)}.btn--primary:hover{background:var(--text);color:var(--bg)}.btn--ghost{border:1px solid var(--border);color:var(--text-muted)}.btn--ghost:hover{color:var(--text);border-color:var(--accent)}main{padding-bottom:var(--s2)}.hero{padding:clamp(var(--s2), 8vw, 3.4rem) 0 var(--s2);border-bottom:1px solid var(--border-light)}article .hero{border-bottom:0;padding-bottom:0}.hero-grid{gap:var(--s2);align-items:end;display:grid}.hero h1{font-family:var(--font-display);font-size:var(--type-h1);letter-spacing:-.03em;text-transform:none;margin:0 0 1rem;font-weight:560;line-height:1.12}.hero--home h1{max-width:16ch;font-weight:500}.hero h1 .mark{font-family:var(--font-mono);letter-spacing:-.04em;word-spacing:-.35em;white-space:nowrap;font-size:.86em;font-style:italic;font-weight:400}.lede{max-width:34rem;color:var(--text-muted);font-size:var(--text-lg);line-height:var(--leading);margin:0 0 1.5rem}.hero-actions{flex-wrap:wrap;gap:.75rem;display:flex}article .hero-actions{margin-top:var(--s2)}.portrait{justify-self:center;margin:0}.portrait img{width:min(100%,22rem);height:auto}.kicker{font-family:var(--font-mono);font-size:var(--type-label);letter-spacing:.1em;text-transform:uppercase;color:var(--text-dim);margin:0 0 .55rem;font-weight:500}.band{padding:var(--s2) 0}.band+.band{border-top:1px solid var(--border-light)}.band h2,.page-title{font-family:var(--font-display);font-size:var(--type-h2);letter-spacing:-.03em;text-transform:none;margin:0 0 .85rem;font-weight:560;line-height:1.18}.band p,.prose p{max-width:var(--measure);color:var(--text-muted);font-size:var(--text-md);margin:0 0 1rem}.band p:last-child,.prose p:last-child{margin-bottom:0}.runlog{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);margin:0;padding:1rem 1.1rem}.runlog__meta{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);justify-content:space-between;gap:1rem;margin-bottom:.75rem;font-size:.6875rem;display:flex}.runlog ol{margin:0;padding:0;list-style:none}.runlog li{font-family:var(--font-mono);border-top:1px solid var(--border-light);grid-template-columns:6.6rem 1fr auto;align-items:baseline;gap:.7rem;padding:.28rem 0;font-size:.8125rem;line-height:1.7;display:grid}.runlog li:first-child{border-top:0}.runlog .state{font-weight:500}.runlog .node{color:var(--text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.runlog .note{color:var(--text-dim);text-align:right}.runlog [data-state=queued] .state{color:var(--state-queued)}.runlog [data-state=running] .state{color:var(--state-running)}.runlog [data-state=retry] .state{color:var(--state-retry)}.runlog [data-state=succeeded] .state{color:var(--state-succeeded)}.runlog [data-state=failed] .state{color:var(--state-failed)}.runlog [data-state=running] .state:after{content:"";background:var(--state-running);vertical-align:.08em;border-radius:50%;width:.4em;height:.4em;margin-left:.4em;animation:1.6s ease-in-out infinite pulse;display:inline-block}@keyframes pulse{50%{opacity:.25}}.work-list{margin:1.25rem 0 0;padding:0;list-style:none}.work-list a{border-bottom:1px solid var(--border-light);color:inherit;grid-template-columns:2.2rem 1fr;gap:.9rem;padding:1.05rem 0;display:grid}.work-list a:hover{color:inherit}.work-list a:hover .work-list__title{color:var(--accent)}.work-list a:hover .work-list__go{color:var(--text);transform:translate(.2em)}.work-list li:last-child a{border-bottom:0}.work-list__index{font-family:var(--font-mono);color:var(--text-dim);padding-top:.4rem;font-size:.75rem}.work-list__head{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.work-list__title{font-family:var(--font-display);letter-spacing:-.03em;color:var(--text);text-transform:none;margin:0 0 .25rem;font-size:1.35rem;font-weight:560}.work-list__go{font-family:var(--font-mono);color:var(--text-dim);transition:color var(--transition), transform var(--transition);flex:none;font-size:.75rem}.work-list__summary{color:var(--text-muted);max-width:42rem;font-size:var(--text-sm);margin:0}.work-list__meta{font-family:var(--font-mono);letter-spacing:.04em;color:var(--text-dim);margin:.45rem 0 0;font-size:.6875rem}.split{gap:var(--s1);display:grid}.split h2{font-size:1.45rem}.meta{color:var(--text-dim);font-size:var(--text-sm);flex-wrap:wrap;gap:.4rem 1.1rem;margin:0 0 1.25rem;padding:0;list-style:none;display:flex}.stack{flex-wrap:wrap;gap:.35rem;margin:0 0 1.5rem;padding:0;list-style:none;display:flex}.stack li{font-family:var(--font-mono);color:var(--accent);border:1px solid var(--border);border-radius:var(--radius);padding:.2rem .45rem;font-size:.75rem}.prose h2{font-family:var(--font-display);color:var(--text);margin:2rem 0 .7rem;font-size:1.45rem;font-weight:560}.prose ul{max-width:var(--measure);color:var(--text-muted);margin:0 0 1rem;padding-left:1.1rem}.prose li+li{margin-top:.4rem}.terms{max-width:40rem}.terms dt{color:var(--text);margin-top:1.35rem;font-weight:560}.terms dd{color:var(--text-muted);margin:.3rem 0 0}.site-footer{border-top:1px solid var(--border-light);padding:var(--s1) 0 var(--s2);color:var(--text-dim);font-size:var(--type-ui)}.site-footer__inner{flex-wrap:wrap;justify-content:space-between;gap:.5rem 1.5rem;display:flex}.site-footer a{color:var(--text-muted)}.site-footer a:hover{color:var(--text)}.site-footer__links{flex-wrap:wrap;gap:.5rem 1.25rem;display:flex}@media (width<=719px){.nav{gap:.9rem}.nav a{font-size:.75rem}.runlog li{grid-template-columns:6.5rem 1fr}.runlog .note{text-align:left;grid-column:2}.portrait{order:-1}.portrait img{width:min(72vw,18rem)}}@media (width>=720px){.hero-grid{grid-template-columns:minmax(0,1fr) minmax(14rem,20rem);align-items:end;gap:clamp(1.5rem,5vw,3rem)}.portrait{justify-self:end}.split{gap:var(--s2);grid-template-columns:1fr 1fr}.runlog li{grid-template-columns:7.5rem 1fr auto}}@media (prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}.runlog [data-state=running] .state:after{animation:none}}
