@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/chakra-petch-thai-500-normal.DeexCGiz.woff2) format("woff2"),url(/_astro/chakra-petch-thai-500-normal.CJG_V2_m.woff) format("woff");unicode-range:U+02D7,U+0303,U+0331,U+0E01-0E5B,U+200C-200D,U+25CC}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format("woff2"),url(/_astro/chakra-petch-vietnamese-500-normal.BVzUBLGs.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/chakra-petch-latin-ext-500-normal.gA6791b0.woff2) format("woff2"),url(/_astro/chakra-petch-latin-ext-500-normal.BCHeNDEx.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Chakra Petch;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/chakra-petch-latin-500-normal.BR1ody1F.woff2) format("woff2"),url(/_astro/chakra-petch-latin-500-normal.CnUQnZ4D.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/chakra-petch-thai-600-normal.C620THcd.woff2) format("woff2"),url(/_astro/chakra-petch-thai-600-normal.BiM5MXH8.woff) format("woff");unicode-range:U+02D7,U+0303,U+0331,U+0E01-0E5B,U+200C-200D,U+25CC}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format("woff2"),url(/_astro/chakra-petch-vietnamese-600-normal.Pvj4qcw_.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/chakra-petch-latin-ext-600-normal.CdGvbdDU.woff2) format("woff2"),url(/_astro/chakra-petch-latin-ext-600-normal.nL80L4xU.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Chakra Petch;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/chakra-petch-latin-600-normal.DVQm9bgb.woff2) format("woff2"),url(/_astro/chakra-petch-latin-600-normal.DQKfcdKo.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/chakra-petch-thai-700-normal.B7WL5pBr.woff2) format("woff2"),url(/_astro/chakra-petch-thai-700-normal.vZLZ_5L8.woff) format("woff");unicode-range:U+02D7,U+0303,U+0331,U+0E01-0E5B,U+200C-200D,U+25CC}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,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) format("woff2"),url(/_astro/chakra-petch-vietnamese-700-normal.gQuUA8Wu.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/chakra-petch-latin-ext-700-normal.DAkvJhej.woff2) format("woff2"),url(/_astro/chakra-petch-latin-ext-700-normal.BeviJPUl.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Chakra Petch;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/chakra-petch-latin-700-normal.CnDBPjkL.woff2) format("woff2"),url(/_astro/chakra-petch-latin-700-normal.D1s_c2du.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-vietnamese-wght-normal.CtlIRbEm.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-latin-ext-wght-normal.MQgHevqp.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-latin-wght-normal.DdeTHZLK.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--paper: #f2ebdd;--paper-raised: #faf4e8;--paper-deep: #e8decc;--ink: #191714;--ink-soft: #5f5a52;--ink-faint: #746d62;--line: #d8cebd;--line-strong: #b9ad99;--tomato: #d9472b;--tomato-dark: #b9361f;--on-tomato: #fffaf0;--cat: #f39a3d;--cat-dark: #e8792b;--pig: #f3a7b9;--pig-dark: #e98ba0;--corgi: #e8792b;--corgi-cream: #f7e8d4;--green: #5c7258;--max: 1200px;--reading: 700px;--font-display: "Archivo Variable", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;--font-body: "Public Sans Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;--font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace}html[data-theme=dark]{color-scheme:dark;--paper: #171310;--paper-raised: #211b16;--paper-deep: #2a211a;--ink: #f4ede1;--ink-soft: #c9bfae;--ink-faint: #a99e8d;--line: #3a2f26;--line-strong: #554538;--tomato: #ff6b4a;--tomato-dark: #ff8a6d;--on-tomato: #171310;--cat: #f5a44d;--cat-dark: #ed8332;--pig: #f3a7b9;--pig-dark: #e98ba0;--corgi: #ef8a38;--corgi-cream: #f7e8d4;--green: #8aab80}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;min-height:100vh;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:17px;line-height:1.75;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}img,svg{display:block;max-width:100%}img{height:auto}a{color:inherit;text-decoration:none}button,input,textarea,select{font:inherit}button{cursor:pointer}::selection{background:var(--tomato);color:var(--on-tomato)}:focus-visible{outline:2px solid var(--tomato);outline-offset:3px;border-radius:2px}.container{width:min(100% - 48px,var(--max));margin-inline:auto}.narrow{width:min(100% - 48px,var(--reading));margin-inline:auto}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip-link{position:fixed;top:12px;left:12px;z-index:300;padding:10px 14px;background:var(--ink);color:var(--paper);transform:translateY(-170%);transition:transform .16s ease}.skip-link:focus{transform:translateY(0)}.page-wipe{position:fixed;inset:0;z-index:250;pointer-events:none;background:var(--tomato);transform:translateY(101%);transition:transform .26s cubic-bezier(.7,0,.2,1)}.is-leaving .page-wipe{transform:translateY(0)}.cursor-ring{position:fixed;top:0;left:0;z-index:240;pointer-events:none;width:34px;height:34px;border:1.5px solid var(--tomato);border-radius:50%;opacity:.55;transition:width .16s ease,height .16s ease,background .16s ease,opacity .16s ease;mix-blend-mode:multiply}.cursor-ring.is-active{width:52px;height:52px;background:var(--tomato);opacity:.28}@media(pointer:coarse),(prefers-reduced-motion:reduce){.cursor-ring{display:none}}.site-header{position:sticky;top:0;z-index:80;background:color-mix(in srgb,var(--paper) 92%,transparent);border-bottom:1px solid var(--line);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);transition:background .2s ease,border-color .2s ease}@supports not (background: color-mix(in srgb,red 50%,blue)){.site-header{background:var(--paper)}}.home-page .site-header.is-home:not(.is-scrolled){background:transparent;border-color:transparent;backdrop-filter:none}.site-header.is-scrolled{background:color-mix(in srgb,var(--paper) 94%,transparent);border-color:var(--line)}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:76px}.brand{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:1.12rem;font-weight:750;letter-spacing:-.045em;white-space:nowrap}.brand-mark{width:34px;height:29px;color:var(--ink);transition:transform .18s ease}.brand:hover .brand-mark{transform:translateY(-2px) rotate(-3deg)}.nav{display:flex;align-items:center;gap:26px;margin-left:auto}.nav a{position:relative;padding:8px 0;color:var(--ink-soft);font-size:.9rem;font-weight:550;transition:color .16s ease}.nav a:after{content:"";position:absolute;left:0;right:100%;bottom:1px;height:2px;background:var(--tomato);transition:right .18s ease}.nav a:hover:after,.nav a[aria-current=page]:after{right:0}.header-actions{display:flex;align-items:center;gap:2px}.icon-button{display:inline-grid;place-items:center;width:38px;height:38px;padding:0;border:1px solid transparent;border-radius:2px;color:var(--ink-soft);background:transparent;transition:color .16s ease,background .16s ease,border-color .16s ease}.icon-button:hover{color:var(--tomato);background:var(--paper-deep);border-color:var(--line)}.icon-button svg{width:18px;height:18px}html[data-theme=dark] .icon-sun,html:not([data-theme=dark]) .icon-moon{display:none}.section-kicker{margin:0 0 8px;color:var(--tomato);font-family:var(--font-display);font-size:.72rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;padding-bottom:13px;border-bottom:2px solid var(--ink)}.section-title{margin:0;font-family:var(--font-display);font-size:1.35rem;font-weight:750;letter-spacing:-.035em}.section-intro{max-width:42em;margin:18px 0 0;color:var(--ink-soft);font-size:.94rem}.section-footnote{margin:14px 0 0;color:var(--ink-faint);font-size:.76rem}.text-link{display:inline-block;padding-bottom:2px;border-bottom:1px solid currentColor;color:var(--ink-soft);font-size:.86rem;transition:color .16s ease}.button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 20px;border:2px solid var(--ink);border-radius:2px;background:transparent;color:var(--ink);font-family:var(--font-display);font-size:.9rem;font-weight:700;transition:transform .16s ease,background .16s ease,color .16s ease,border-color .16s ease}.button:hover{transform:translate(-2px,-2px);background:var(--ink);color:var(--paper)}.button-primary{border-color:var(--tomato);background:var(--tomato);color:var(--on-tomato);box-shadow:5px 5px 0 var(--ink)}.button-primary:hover{border-color:var(--tomato-dark);background:var(--tomato-dark);color:var(--on-tomato);box-shadow:7px 7px 0 var(--ink)}.stack-row{display:flex;flex-wrap:wrap;gap:7px;margin:18px 0}.stack-row span{padding:3px 8px;border:1px solid var(--line-strong);background:var(--paper-raised);color:var(--ink-soft);font-size:.72rem;line-height:1.4}.tag-row{display:flex;flex-wrap:wrap;gap:8px 10px}.tag{display:inline-flex;align-items:center;color:var(--ink-soft);font-size:.76rem;transition:color .16s ease}.tag:before{content:"#";margin-right:1px;color:var(--tomato)}.tag:hover{color:var(--tomato)}.reading{color:var(--ink-faint);font-size:.76rem;white-space:nowrap}.page-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,.55fr);gap:48px;align-items:end;padding:76px 0 30px;border-bottom:2px solid var(--ink)}.page-title{margin:0;font-family:var(--font-display);font-size:clamp(3.6rem,8vw,7rem);font-weight:800;line-height:.86;letter-spacing:-.07em}.page-description{max-width:28em;margin:0 0 4px;justify-self:end;color:var(--ink-soft);font-size:.98rem;line-height:1.75}.room-experience{position:relative;min-height:500vh;touch-action:pan-y}.room-poster{position:fixed;inset:0;z-index:0;overflow:hidden;background:var(--paper)}.room-poster img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.room-poster-lit,html[data-theme=light] .room-poster-dark{display:none}html[data-theme=light] .room-poster-lit{display:block}.room-canvas{position:fixed;inset:0;z-index:1;width:100%;height:100%;opacity:0;pointer-events:none;transition:opacity .7s ease}.room-experience.is-ready .room-canvas{opacity:1}.room-experience.is-ready .room-poster{opacity:0;transition:opacity .7s ease;pointer-events:none}.room-veil{position:fixed;inset:0;z-index:2;pointer-events:none;background:transparent}.room-veil:before,.room-veil:after{content:"";position:absolute;top:0;bottom:0;width:min(22vw,280px);background:color-mix(in srgb,var(--paper) 46%,transparent)}.room-veil:before{left:0}.room-veil:after{right:0}.room-content{position:relative;z-index:3}.room-station{display:flex;align-items:center;min-height:100vh;padding:11vh max(24px,calc((100vw - var(--max)) / 2))}.room-station:nth-child(odd){justify-content:flex-start}.room-station:nth-child(2n){justify-content:flex-end}.station-panel{width:min(620px,calc(100vw - 96px));padding:34px 38px;background:color-mix(in srgb,var(--paper-raised) 94%,transparent);border:2px solid var(--ink);box-shadow:10px 10px #19171429;opacity:.48;transform:translateY(20px);transition:opacity .3s ease,transform .3s ease}html[data-theme=dark] .station-panel{box-shadow:10px 10px #0000006b}.room-station.is-active .station-panel{opacity:1;transform:translateY(0)}.station-panel-hero{width:min(700px,calc(100vw - 96px));padding:40px 44px}.station-kicker{margin:0 0 16px;color:var(--tomato);font-family:var(--font-display);font-size:.76rem;font-weight:750;letter-spacing:.1em;text-transform:uppercase}.station-wordmark{display:flex;align-items:baseline;gap:.05em;margin:0 0 24px;font-family:var(--font-display);font-size:clamp(4.5rem,10vw,8.2rem);font-weight:850;line-height:.82;letter-spacing:-.075em}.wordmark-dot{display:inline-block;width:.15em;height:.15em;flex:0 0 auto;background:var(--tomato);transform:translateY(-.02em)}.station-lede{max-width:12em;margin:0 0 16px;font-family:var(--font-display);font-size:clamp(1.45rem,2.6vw,2.15rem);font-weight:650;line-height:1.24;letter-spacing:-.035em}.station-copy{max-width:35em;margin:0 0 18px;color:var(--ink-soft);font-size:.96rem;line-height:1.8}.station-actions{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin-top:24px}.station-hint{margin:24px 0 0;color:var(--ink-faint);font-size:.76rem}.station-label{margin:0 0 12px;color:var(--tomato);font-family:var(--font-display);font-size:.72rem;font-weight:750;letter-spacing:.06em;text-transform:uppercase}.station-panel h2{margin:0 0 8px;font-family:var(--font-display);font-size:clamp(2rem,4.2vw,3.2rem);font-weight:800;line-height:.98;letter-spacing:-.055em}.station-subtitle{margin:0;color:var(--ink-soft);font-size:.94rem}.station-project-head{display:grid;grid-template-columns:1fr 100px;gap:18px;align-items:start;margin-bottom:18px}.station-mascot{width:94px;margin-left:auto}.station-mascot-small{width:70px;margin:0}.station-panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:20px}.station-footnote{margin:16px 0 0;color:var(--ink-faint);font-size:.74rem}.mascot-line{display:grid;gap:6px;margin:18px 0;color:var(--ink-soft);font-size:.88rem}.mascot-line b{color:var(--ink);font-weight:650}.poke-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px}.poke-button{padding:7px 11px;border:1px dashed var(--line-strong);border-radius:2px;background:transparent;color:var(--ink-soft);font-size:.76rem;transition:color .16s ease,border-color .16s ease,background .16s ease}.poke-button:hover{border-color:var(--tomato);background:var(--paper-deep);color:var(--tomato)}.repo-list{display:grid;margin-top:12px;border-top:1px solid var(--line)}.repo-row{display:grid;grid-template-columns:1fr 1.45fr auto;gap:14px;align-items:baseline;padding:10px 0;border-bottom:1px solid var(--line);transition:color .16s ease}.repo-row:hover{color:var(--tomato)}.repo-name{font-family:var(--font-display);font-size:.84rem;font-weight:700;overflow-wrap:anywhere}.repo-description{color:var(--ink-soft);font-size:.76rem;line-height:1.45;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.repo-meta{color:var(--ink-faint);font-size:.7rem;white-space:nowrap}.note-list{display:grid;margin-top:12px;border-top:1px solid var(--line)}.note-row-link{display:grid;grid-template-columns:86px 1fr auto;gap:14px;align-items:baseline;padding:12px 0;border-bottom:1px solid var(--line);transition:color .16s ease}.note-row-link:hover{color:var(--tomato)}.note-row-link time,.note-row-link small{color:var(--ink-faint);font-size:.72rem}.note-row-link span{font-family:var(--font-display);font-size:.9rem;font-weight:650;line-height:1.4}.room-skip{position:absolute;top:92px;right:max(24px,calc((100vw - var(--max)) / 2));z-index:40;padding:7px 10px;border:1px solid var(--line-strong);background:var(--paper);color:var(--ink-soft);font-size:.72rem;opacity:.72;transition:opacity .16s ease,color .16s ease}.room-skip:hover,.room-skip:focus{opacity:1;color:var(--tomato)}.room-progress{position:fixed;top:50%;right:26px;z-index:30;width:18px;height:230px;transform:translateY(-50%)}.room-progress-track{position:absolute;top:0;right:8px;bottom:0;width:1px;background:var(--line-strong)}.room-progress-fill{display:block;width:100%;height:calc(var(--room-progress, 0) * 100%);background:var(--tomato)}.room-progress-dots{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:space-between}.room-progress-dots i{width:8px;height:8px;border:1px solid var(--ink);border-radius:50%;background:var(--paper)}.room-experience.is-static{min-height:0}.room-experience.is-static .room-canvas,.room-experience.is-static .room-progress,.room-experience.is-static .room-skip{display:none}.room-experience.is-static .room-poster{position:absolute;top:0;height:100vh;opacity:1}.room-experience.is-static .room-veil{display:none}.room-experience.is-static .room-station{min-height:auto;padding:44px 24px}.room-experience.is-static .station-panel{opacity:1;transform:none}.notes-intro{display:flex;align-items:center;gap:18px;padding:24px 0 10px;color:var(--ink-soft)}.notes-intro p{margin:0;font-size:.92rem}.notes-intro-mascot{width:58px;flex:0 0 auto}.note-index{padding:10px 0 92px}.note-row{display:grid;grid-template-columns:120px minmax(0,1fr) 170px;gap:28px;margin:0 -16px;padding:26px 16px;border-bottom:1px solid var(--line);transition:background .16s ease}.note-row:first-child{border-top:2px solid var(--ink)}.note-row:hover{background:var(--paper-raised)}.note-row-date{padding-top:6px;color:var(--ink-faint);font-size:.8rem;font-variant-numeric:tabular-nums}.note-row-main h2{margin:0 0 6px;font-family:var(--font-display);font-size:1.45rem;font-weight:750;line-height:1.25;letter-spacing:-.035em}.note-row-main h2 a{transition:color .16s ease}.note-row-main h2 a:hover{color:var(--tomato)}.note-row-main p{margin:0;color:var(--ink-soft);font-size:.92rem;line-height:1.75}.note-row-meta{display:flex;flex-direction:column;align-items:flex-end;gap:8px;padding-top:6px}.project-feature-list{padding:44px 0 76px}.project-feature{position:relative;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(320px,.9fr);gap:48px;align-items:center;padding:34px 0 64px;border-bottom:2px solid var(--ink)}.project-cover{display:block;padding:10px;border:2px solid var(--ink);background:var(--paper-raised);box-shadow:10px 10px 0 var(--tomato);transform:rotate(-1deg);transition:transform .2s ease,box-shadow .2s ease}.project-cover:hover{transform:rotate(0) translate(-2px,-2px);box-shadow:14px 14px 0 var(--tomato)}.project-cover img{width:100%;aspect-ratio:16 / 10;object-fit:cover;object-position:top center;filter:saturate(.92) contrast(1.03)}.project-feature-body h2{margin:8px 0;font-family:var(--font-display);font-size:clamp(2.2rem,4vw,3.6rem);font-weight:800;line-height:.95;letter-spacing:-.06em}.project-feature-body h2 a:hover{color:var(--tomato)}.project-subtitle{margin:0 0 14px;color:var(--tomato);font-family:var(--font-display);font-size:1.02rem;font-weight:650}.project-feature-body>p:not(.section-kicker):not(.project-subtitle){max-width:34em;color:var(--ink-soft);line-height:1.8}.project-actions{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin-top:24px}.project-feature-mascot{position:absolute;right:4px;bottom:26px;width:100px;transform:rotate(6deg)}.repo-section{padding-bottom:96px}.repo-index{margin-top:22px;border-top:2px solid var(--ink)}.repo-index-row{display:grid;grid-template-columns:64px minmax(0,1fr) 130px;gap:20px;align-items:start;padding:18px 0;border-bottom:1px solid var(--line);transition:background .16s ease}.repo-index-number{color:var(--tomato);font-family:var(--font-display);font-size:1.1rem;font-weight:750}.repo-index-body strong{display:block;margin-bottom:3px;font-family:var(--font-display);font-size:1rem;font-weight:700}.repo-index-body small{display:block;max-width:48em;color:var(--ink-soft);font-size:.84rem;line-height:1.6}.repo-index-meta{display:flex;flex-direction:column;align-items:flex-end;gap:3px;color:var(--ink-faint);font-size:.72rem}.about-layout{display:grid;grid-template-columns:minmax(0,680px) 300px;gap:72px;align-items:start;padding:48px 0 96px}.about-copy h2{margin-top:0}.about-sidebar{display:grid;gap:24px;position:sticky;top:104px}.about-sidebar-block{padding:20px;border:2px solid var(--ink);background:var(--paper-raised)}.about-sidebar-block h2{margin:0 0 14px;font-family:var(--font-display);font-size:1.1rem;font-weight:750}.mascot-roster{display:grid;gap:12px}.mascot-roster-item{display:grid;grid-template-columns:50px 1fr;gap:12px;align-items:center}.mascot-roster-art{width:50px}.mascot-roster-item strong{display:block;font-size:.86rem}.mascot-roster-item span{display:block;color:var(--ink-soft);font-size:.76rem;line-height:1.5}.about-index{margin:0;padding:0;list-style:none}.about-index li{padding:7px 0;border-bottom:1px solid var(--line);color:var(--ink-soft);font-size:.82rem}.about-index li:last-child{border-bottom:0}.archive{padding:12px 0 88px}.archive-year{display:grid;grid-template-columns:180px minmax(0,1fr);gap:40px;padding:28px 0 40px;border-top:2px solid var(--ink)}.archive-year-title{margin:0;color:var(--tomato);font-family:var(--font-display);font-size:clamp(3rem,5vw,4.5rem);font-weight:800;line-height:.86;letter-spacing:-.07em}.archive-list{margin:0;padding:0;list-style:none}.archive-list li{display:grid;grid-template-columns:62px minmax(0,1fr) auto;gap:16px;align-items:baseline;padding:11px 0;border-bottom:1px solid var(--line)}.archive-list time{color:var(--ink-faint);font-size:.78rem;font-variant-numeric:tabular-nums}.archive-list a{font-size:.96rem}.archive-tags{color:var(--ink-faint);font-size:.74rem;text-align:right}.topic-index{padding-top:46px;padding-bottom:88px}.topic-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:48px}.topic-item{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--line)}.topic-name{font-size:.94rem;transition:color .16s ease}.topic-count{color:var(--ink-faint);font-size:.77rem;font-variant-numeric:tabular-nums}.topic-item:hover .topic-name{color:var(--tomato)}.project-detail{padding-bottom:40px}.project-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,.85fr);gap:64px;align-items:center;padding:68px 0 56px;border-bottom:2px solid var(--ink)}.project-title{margin:8px 0 12px;font-family:var(--font-display);font-size:clamp(3.4rem,8vw,7rem);font-weight:850;line-height:.84;letter-spacing:-.075em}.project-summary{max-width:32em;color:var(--ink-soft);font-size:1.02rem;line-height:1.8}.project-meta-table{display:grid;grid-template-columns:.7fr 1.3fr;gap:0;margin:24px 0 0;border-top:1px solid var(--line)}.project-meta-table div{padding:10px 0;border-bottom:1px solid var(--line)}.project-meta-table dt{margin-bottom:3px;color:var(--ink-faint);font-size:.7rem}.project-meta-table dd{margin:0;font-size:.84rem;line-height:1.5}.project-hero-art{position:relative;padding:12px;border:2px solid var(--ink);background:var(--paper-raised);box-shadow:12px 12px 0 var(--tomato);transform:rotate(1deg)}.project-hero-art>img:not(.character-portrait){width:100%;aspect-ratio:16 / 10;object-fit:cover;object-position:top center}.project-hero-mascot{position:absolute;right:-34px;bottom:-38px;width:110px;filter:drop-shadow(4px 4px 0 rgba(25,23,20,.18))}.project-art-note{margin:12px 0 0;color:var(--ink-faint);font-size:.72rem;text-align:right}.project-body-layout{display:grid;grid-template-columns:minmax(0,700px) 230px;gap:64px;align-items:start;padding:64px 0 72px}.project-prose{min-width:0}.project-sidebar{position:sticky;top:104px;padding:20px;border:2px solid var(--ink);background:var(--paper-raised)}.project-sidebar a{display:block;padding:7px 0;color:var(--ink-soft);font-size:.82rem;border-bottom:1px solid var(--line)}.project-sidebar a:hover{color:var(--tomato)}.project-sidebar-rule{height:18px}.project-stack-list{margin:0 0 18px;padding:0;list-style:none}.project-stack-list li{padding:6px 0;border-bottom:1px solid var(--line);color:var(--ink-soft);font-size:.8rem}.project-gallery{padding-bottom:64px}.project-screens{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 24px;padding-top:26px}.project-screen{margin:0}.project-screen.is-wide{grid-column:1 / -1}.project-screen img{width:100%;border:2px solid var(--ink);background:var(--paper-raised)}.project-screen figcaption{margin-top:8px;color:var(--ink-faint);font-size:.74rem}.project-footer{display:flex;justify-content:space-between;gap:18px;padding-top:22px;padding-bottom:72px;border-top:2px solid var(--ink)}.back-link{color:var(--ink-soft);font-size:.86rem}.article-layout{display:grid;grid-template-columns:minmax(0,var(--reading)) 200px;gap:72px;justify-content:center;align-items:start;padding:64px 0 96px}.article-header{margin-bottom:40px;padding-bottom:32px;border-bottom:2px solid var(--ink)}.article-meta{display:flex;flex-wrap:wrap;gap:8px 20px;color:var(--ink-faint);font-size:.8rem;font-variant-numeric:tabular-nums}.article-title{max-width:12em;margin:18px 0;font-family:var(--font-display);font-size:clamp(2.4rem,5vw,4.2rem);font-weight:800;line-height:1.02;letter-spacing:-.06em}.article-description{margin:0;color:var(--ink-soft);font-size:1.08rem;line-height:1.75}.article-tags{margin-top:18px}.article-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:18px;margin-top:48px;padding-top:20px;border-top:1px solid var(--line)}.article-corgi{width:52px;order:2}.article-footer .back-link:last-child{order:3}.post-nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:24px;border-top:1px solid var(--line)}.post-nav a{padding:18px 0}.post-nav a:first-child{padding-right:24px;border-right:1px solid var(--line)}.post-nav a:last-child{padding-left:24px;text-align:right}.post-nav span{display:block;margin-bottom:4px;color:var(--ink-faint);font-size:.74rem}.post-nav strong{display:block;font-family:var(--font-display);font-size:.96rem;font-weight:650;line-height:1.5;transition:color .16s ease}.post-nav a:hover strong{color:var(--tomato)}.toc{position:sticky;top:104px;max-height:calc(100vh - 132px);overflow-y:auto;padding-top:14px;border-top:2px solid var(--ink)}.toc-title{margin:0 0 12px;color:var(--ink-faint);font-size:.74rem}.toc ul{display:grid;gap:8px;margin:0;padding:0;list-style:none}.toc li.depth-3{padding-left:12px}.toc a{color:var(--ink-soft);font-size:.8rem;line-height:1.5;transition:color .16s ease}.toc a:hover{color:var(--tomato)}.prose{color:var(--ink);font-size:1.06rem;line-height:1.82}.prose>:first-child{margin-top:0}.prose p{margin:0 0 1.35em}.prose h2,.prose h3,.prose h4{scroll-margin-top:100px;font-family:var(--font-display);font-weight:750;line-height:1.25;letter-spacing:-.035em}.prose h2{margin:2.3em 0 .7em;font-size:1.55rem}.prose h2:before{content:"";display:inline-block;width:.42em;height:.42em;margin-right:.48em;background:var(--tomato);vertical-align:.1em}.prose h3{margin:2em 0 .6em;font-size:1.2rem}.prose h4{margin:1.8em 0 .5em;font-size:1.02rem}.prose a{color:var(--tomato-dark);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.prose a:hover{color:var(--tomato)}.prose strong{font-weight:700}.prose ul,.prose ol{margin:0 0 1.4em;padding-left:1.25em}.prose li{margin:.35em 0}.prose blockquote{margin:2em 0;padding:14px 0 14px 22px;border-left:4px solid var(--tomato);color:var(--ink-soft)}.prose blockquote>:last-child{margin-bottom:0}.prose hr{margin:2.6em 0;border:0;border-top:1px solid var(--line)}.prose img{margin:2em auto;border:2px solid var(--ink)}.prose code{padding:.16em .38em;border-radius:2px;background:var(--paper-deep);font-family:var(--font-mono);font-size:.88em}.prose pre{margin:1.8em 0;padding:20px 22px;overflow-x:auto;border:2px solid var(--ink);border-radius:2px;background:#171413;color:#f5ede0;font-size:.88rem;line-height:1.7}.prose pre code{padding:0;background:transparent;color:inherit;font-size:inherit}.prose table{width:100%;margin:2em 0;border-collapse:collapse;font-size:.92rem}.prose th,.prose td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}.prose th{color:var(--ink-soft);font-weight:600}.prose kbd{padding:.15em .45em;border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:2px;background:var(--paper-deep);font-family:var(--font-mono);font-size:.82em}.search-wrap{padding:36px 0 96px}.search-shell{max-width:760px;padding:22px 0;border-top:2px solid var(--ink);border-bottom:1px solid var(--line)}.search-fallback{margin:0;padding:28px 0;color:var(--ink-soft);text-align:center;line-height:1.9}.search-fallback code{padding:.15em .4em;border-radius:2px;background:var(--paper-deep);font-family:var(--font-mono);font-size:.88em}:root{--pagefind-ui-primary: var(--tomato);--pagefind-ui-text: var(--ink);--pagefind-ui-background: var(--paper);--pagefind-ui-border: var(--line);--pagefind-ui-tag: var(--paper-deep);--pagefind-ui-border-width: 1px;--pagefind-ui-border-radius: 2px;--pagefind-ui-font: var(--font-body)}.pagefind-ui__result{padding:18px 0;border-top:1px solid var(--line)}.pagefind-ui__result-link{color:var(--ink);font-weight:600}.not-found{display:grid;place-items:center;min-height:62vh;padding:64px 0 96px;text-align:center}.not-found-panel{max-width:560px;padding:36px 40px;border:2px solid var(--ink);background:var(--paper-raised);box-shadow:10px 10px 0 var(--tomato)}.not-found-mascot{width:120px;margin:0 auto 10px}.not-found-code{margin:0;color:var(--tomato);font-family:var(--font-display);font-size:clamp(4rem,12vw,7rem);font-weight:850;line-height:.8;letter-spacing:-.08em}.not-found h1{margin:12px 0;font-family:var(--font-display);font-size:clamp(1.7rem,3vw,2.4rem);font-weight:800;letter-spacing:-.04em}.not-found p{max-width:30rem;margin:0 auto 26px;color:var(--ink-soft)}.site-footer{position:relative;z-index:4;margin-top:40px;background:var(--paper);border-top:2px solid var(--ink)}.footer-grid{display:grid;grid-template-columns:1.2fr .8fr .9fr;gap:48px;padding:32px 0 28px}.footer-brand .brand{margin-bottom:10px}.footer-brand p{margin:0;color:var(--ink-soft);font-size:.86rem}.footer-nav{display:grid;grid-template-columns:repeat(2,auto);gap:8px 24px;align-content:start}.footer-nav a{color:var(--ink-soft);font-size:.86rem;transition:color .16s ease}.footer-nav a:hover{color:var(--tomato)}.footer-subscribe p{margin:0 0 6px;color:var(--ink-faint);font-size:.76rem}.footer-rss{display:inline-block;padding-bottom:2px;border-bottom:1px solid var(--tomato);color:var(--tomato);font-size:.9rem}.footer-subscribe small{display:block;margin-top:8px;color:var(--ink-faint);font-size:.7rem}.footer-bottom{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px;padding:14px 0 24px;border-top:1px solid var(--line);color:var(--ink-faint);font-size:.74rem}.footer-bottom p{margin:0}@media(max-width:1100px){.project-hero{gap:40px}.project-body-layout{grid-template-columns:minmax(0,1fr)}.project-sidebar{position:static}}@media(max-width:980px){.page-head{grid-template-columns:1fr;gap:18px}.page-description{justify-self:start}.project-hero{grid-template-columns:1fr;gap:32px}.project-hero-art{width:min(100%,560px)}.project-hero-mascot{right:-12px}.room-station{padding:8vh 24px}.station-panel,.station-panel-hero{width:min(640px,calc(100vw - 72px))}.project-feature{grid-template-columns:minmax(0,1fr);gap:30px}.project-feature-mascot{width:84px}.about-layout{grid-template-columns:minmax(0,1fr);gap:32px}.about-sidebar{position:static;grid-template-columns:1fr 1fr}.article-layout{grid-template-columns:minmax(0,var(--reading))}.toc{display:none}.footer-grid{grid-template-columns:1fr 1fr}.footer-subscribe{grid-column:1 / -1}}@media(max-width:760px){.container,.narrow{width:min(100% - 32px,var(--max))}.header-inner{flex-wrap:wrap;gap:10px 16px;padding:11px 0 8px}.nav{order:3;width:100%;gap:20px;margin-left:0;padding-bottom:4px;overflow-x:auto;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}.nav a{flex:0 0 auto;padding:4px 0 6px;font-size:.86rem}.page-head{padding:52px 0 24px}.page-title{font-size:clamp(3.2rem,18vw,5.2rem)}.section-head{align-items:flex-start}.room-experience{min-height:500vh}.room-station{padding:12vh 16px;justify-content:center}.station-panel,.station-panel-hero{width:calc(100vw - 32px);padding:24px 22px;box-shadow:7px 7px #19171429}.station-wordmark{font-size:clamp(4rem,20vw,6.8rem)}.station-lede{font-size:clamp(1.35rem,6vw,1.9rem)}.room-progress{inset:auto auto 14px 50%;width:180px;height:3px;transform:translate(-50%)}.room-progress-track{inset:1px 0 auto;width:100%;height:1px}.room-progress-fill{width:calc(var(--room-progress, 0) * 100%);height:100%}.room-progress-dots{display:none}.room-skip{top:104px;right:16px}.station-project-head{grid-template-columns:1fr 70px}.station-mascot{width:70px}.repo-row{grid-template-columns:1fr;gap:2px}.repo-meta{justify-self:start}.note-row-link{grid-template-columns:72px 1fr}.note-row-link small{display:none}.note-row{grid-template-columns:minmax(0,1fr) auto;gap:6px 18px;padding:20px 12px}.note-row-main{grid-column:1 / -1;grid-row:1}.note-row-date{grid-column:1;grid-row:2;padding-top:0}.note-row-meta{grid-column:2;grid-row:2;flex-direction:row;align-items:center;padding-top:0}.note-row-meta .tag-row{display:none}.project-feature-list{padding-top:30px}.project-feature{padding-bottom:48px}.project-cover{box-shadow:7px 7px 0 var(--tomato)}.repo-index-row{grid-template-columns:42px minmax(0,1fr);gap:12px}.repo-index-meta{grid-column:2;flex-direction:row;gap:10px;align-items:center}.about-sidebar{grid-template-columns:1fr}.about-layout{padding-top:32px}.archive-year{grid-template-columns:1fr;gap:12px;padding-bottom:28px}.archive-list li{grid-template-columns:54px minmax(0,1fr)}.archive-tags{display:none}.topic-grid{grid-template-columns:1fr}.project-hero{grid-template-columns:1fr;padding:44px 0 40px;gap:36px}.project-hero-art{box-shadow:8px 8px 0 var(--tomato)}.project-hero-mascot{width:84px;right:-16px;bottom:-24px}.project-body-layout{padding-top:42px}.project-screens{grid-template-columns:1fr}.project-screen.is-wide{grid-column:auto}.article-layout{padding:40px 0 70px}.article-title{font-size:clamp(2rem,9vw,3rem)}.article-corgi{display:none}.post-nav{grid-template-columns:1fr}.post-nav a:first-child{padding-right:0;border-right:0;border-bottom:1px solid var(--line)}.post-nav a:last-child{padding-left:0;text-align:left}.not-found-panel{padding:28px 22px;box-shadow:7px 7px 0 var(--tomato)}.footer-grid{grid-template-columns:1fr;gap:24px;padding-top:26px}.footer-subscribe{grid-column:auto}.footer-bottom{align-items:flex-start;flex-direction:column}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.room-experience{min-height:0}.room-canvas,.room-progress,.room-skip{display:none}.room-poster{position:absolute;height:100vh}.room-station{min-height:auto;padding:44px 24px;justify-content:center}.station-panel{opacity:1;transform:none}}[hidden]{display:none!important}.station-intro{align-items:flex-end;justify-content:center}.station-intro .station-panel-hero{width:min(760px,64vw);margin-bottom:3vh;padding:28px 34px}.station-intro .station-wordmark{font-size:clamp(3.6rem,7vw,6rem);margin-bottom:16px}.station-intro .station-lede{font-size:clamp(1.25rem,2.1vw,1.75rem);margin-bottom:12px}.station-intro .station-copy{max-width:42em;margin-bottom:12px}.station-panel-toggle{display:none;width:100%;align-items:center;justify-content:space-between;gap:16px;padding:17px 20px;border:0;background:transparent;color:var(--ink);font-family:var(--font-display);text-align:left}.station-panel-toggle-title{font-size:.88rem;font-weight:750;letter-spacing:-.02em}.station-panel-toggle-action{color:var(--tomato);font-size:.72rem;font-weight:650;white-space:nowrap}.station-panel-body{min-width:0}.room-progress-dots i.is-active{background:var(--tomato);border-color:var(--tomato);transform:scale(1.25)}@media(max-width:1280px){.room-station{align-items:flex-end;justify-content:center;padding:10vh 16px 14vh}.station-panel,.station-panel-hero{width:calc(100vw - 32px);max-height:50vh;padding:0;display:flex;flex-direction:column;box-shadow:7px 7px #19171429}.station-panel-toggle{display:flex}.station-panel-body{max-height:55vh;padding:0 20px 22px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.station-panel-hero .station-wordmark{font-size:clamp(3.4rem,16vw,5.2rem)}.station-panel-hero .station-lede{font-size:clamp(1.25rem,5.6vw,1.65rem)}.station-panel-hero .station-copy{font-size:.92rem}.station-panel.is-collapsed{max-height:none}.station-panel.is-open{max-height:38vh}.station-panel.is-open .station-panel-body{max-height:32vh}.station-intro .station-panel-hero{width:min(760px,calc(100vw - 32px));margin-bottom:0}.room-progress{bottom:12px}}.room-experience.is-static .station-panel{max-height:none}.room-experience.is-static .station-panel-toggle{display:none!important}.room-experience.is-static .station-panel-body[hidden]{display:block!important;max-height:none;overflow:visible}@media(prefers-reduced-motion:reduce){.station-panel{max-height:none}.station-panel-toggle{display:none!important}.station-panel-body[hidden]{display:block!important;max-height:none;overflow:visible}}:root,html[data-theme=dark]{color-scheme:dark;--paper: #05080f;--paper-raised: #0b111a;--paper-deep: #111a26;--ink: #e8f5f7;--ink-soft: #9dafb9;--ink-faint: #6c7f8a;--line: rgba(93, 220, 234, .16);--line-strong: rgba(93, 220, 234, .38);--tomato: #ff4fa3;--tomato-dark: #4debff;--on-tomato: #05080f;--cat: #f59a3d;--cat-dark: #c9611c;--pig: #f3a7b9;--pig-dark: #d97794;--corgi: #e8792b;--corgi-cream: #f5e8d4;--green: #4e8c78;--cyan: #4debff;--magenta: #ff4fa3;--amber: #ff9a3d;--grid: rgba(77, 235, 255, .035);--glass: rgba(8, 14, 22, .97);--glass-strong: rgba(8, 14, 22, .995);--veil: rgba(5, 8, 15, .74);--font-display: "Chakra Petch", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-body: "Public Sans Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif}html[data-theme=light]{color-scheme:dark;--paper: #2b2924;--paper-raised: #36322c;--paper-deep: #433d35;--ink: #f4ead7;--ink-soft: #c8b9a5;--ink-faint: #9d8e7c;--line: rgba(244, 234, 215, .14);--line-strong: rgba(244, 234, 215, .34);--tomato: #d5924e;--tomato-dark: #e1b37d;--on-tomato: #211c17;--cat: #f59a3d;--cat-dark: #c9611c;--pig: #f3a7b9;--pig-dark: #d97794;--corgi: #e8792b;--corgi-cream: #f5e8d4;--green: #6d8065;--cyan: #ccae7b;--magenta: #bf7657;--amber: #e0a25a;--grid: rgba(244, 234, 215, .028);--glass: rgba(47, 42, 36, .97);--glass-strong: rgba(47, 42, 36, .995);--veil: rgba(43, 41, 36, .72)}body{background-color:var(--paper);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:48px 48px,48px 48px}body:before{content:"";position:fixed;inset:0;z-index:1;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0 1px,transparent 1px 4px);opacity:.44}.site-header{background:color-mix(in srgb,var(--paper) 90%,transparent);border-bottom:1px solid var(--line-strong);box-shadow:0 8px 24px #0000002e}.home-page .site-header.is-home:not(.is-scrolled){background:transparent;border-color:transparent;box-shadow:none}.site-header.is-scrolled{background:var(--glass-strong)}html[data-theme=light] .site-header{background:color-mix(in srgb,var(--paper) 92%,transparent)}html[data-theme=light] .home-page .site-header.is-home:not(.is-scrolled){background:transparent}.brand{color:var(--ink);font-family:var(--font-display);font-size:1.12rem;font-weight:700;letter-spacing:.04em;text-transform:lowercase}.brand-mark{width:36px;height:36px;filter:none}.brand:hover .brand-mark{transform:translateY(-2px) rotate(-3deg);filter:none}.nav a{color:var(--ink-soft);font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em}.nav a:after{height:1px;background:var(--tomato);box-shadow:none}.nav a:hover,.nav a[aria-current=page]{color:var(--ink)}.icon-button{border-color:var(--line);color:var(--ink-soft);background:transparent}.icon-button:hover{color:var(--tomato);background:var(--paper-deep);border-color:var(--line-strong);box-shadow:none}.button{border-color:var(--line-strong);color:var(--ink);background:var(--paper-raised);font-family:var(--font-display);letter-spacing:.04em}.button:hover{border-color:var(--tomato);background:var(--paper-deep);color:var(--ink);box-shadow:none}.button-primary{border-color:var(--tomato);background:var(--tomato);color:var(--on-tomato);box-shadow:4px 4px 0 var(--ink)}.button-primary:hover{border-color:var(--tomato-dark);background:var(--tomato-dark);color:var(--on-tomato);box-shadow:5px 5px 0 var(--ink)}.text-link{color:var(--ink-soft);border-color:var(--line-strong)}.text-link:hover{color:var(--tomato)}.section-kicker,.station-kicker,.station-label,.page-kicker{color:var(--tomato);font-family:var(--font-display);letter-spacing:.1em}.section-head{border-bottom:1px solid var(--line-strong);box-shadow:none}.section-title,.page-title,.station-panel h2,.project-title,.article-title,.station-wordmark{font-family:var(--font-display);color:var(--ink);text-shadow:none}.page-head{border-bottom:1px solid var(--line-strong)}.page-description{color:var(--ink-soft)}.stack-row span{border-color:var(--line);background:var(--paper-raised);color:var(--ink-soft)}.tag{color:var(--ink-soft)}.tag:before{color:var(--tomato)}.tag:hover{color:var(--tomato);text-shadow:none}.site-footer{background:var(--paper-raised);border-top:1px solid var(--line-strong)}html[data-theme=light] .site-footer{background:var(--paper-raised)}.footer-nav a,.footer-brand p,.footer-bottom{color:var(--ink-soft)}.footer-rss{color:var(--tomato);border-color:var(--tomato)}.footer-subscribe small{color:var(--ink-faint)}.cursor-ring{border-color:var(--tomato);mix-blend-mode:normal;box-shadow:none}.cursor-ring.is-active{background:var(--tomato);opacity:.22}.page-wipe{background:var(--tomato)}.room-veil:before,.room-veil:after{background:color-mix(in srgb,var(--paper) 44%,transparent)}.station-panel,.station-panel-hero{background:var(--paper-raised);border:1px solid var(--line-strong);box-shadow:0 18px 42px #00000047;filter:none;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);clip-path:polygon(0 0,calc(100% - 18px) 0,100% 18px,100% 100%,18px 100%,0 calc(100% - 18px))}.station-panel:before{content:"";position:absolute;inset:0;pointer-events:none;background:#ffffff03}.station-panel{position:relative}.station-panel>*{position:relative;z-index:1}.station-panel-toggle{color:var(--ink)}.station-panel-toggle-title{color:var(--tomato);font-family:var(--font-display);letter-spacing:.07em}.station-panel-toggle-action{color:var(--ink-soft)}.station-wordmark{color:var(--ink);text-shadow:none}.wordmark-dot{background:var(--tomato);box-shadow:none}.station-lede{color:var(--ink)}.station-copy,.station-panel p,.station-panel li{color:var(--ink-soft)}.station-panel h2{text-shadow:none}.station-subtitle{color:var(--tomato)}.poke-button{border-color:var(--line-strong);background:transparent;color:var(--ink-soft)}.poke-button:hover{border-color:var(--tomato);color:var(--tomato)}.station-mascot{filter:none}.repo-row,.note-row-link,.repo-list,.note-list{border-color:var(--line)}.repo-row:hover,.note-row-link:hover{background:#ffffff09}.repo-name,.note-row-link span{color:var(--ink)}.repo-description,.repo-meta,.note-row-link time,.note-row-link small,.station-footnote{color:var(--ink-faint)}.room-progress-track{background:var(--line-strong)}.room-progress-fill{background:var(--tomato);box-shadow:none}.room-progress-dots i{border-color:var(--line-strong);background:var(--paper)}.room-progress-dots i.is-active{background:var(--tomato);border-color:var(--tomato);box-shadow:none}.room-skip{border-color:var(--line-strong);background:var(--glass);color:var(--ink-soft)}.station-repos{justify-content:flex-start}.station-repos .station-panel{width:min(560px,calc(100vw - 96px))}.station-repos-head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;align-items:start}.station-repos-heading{min-width:0}.station-repos-heading h2{margin-bottom:10px}.station-repos .station-repos-mascot{width:84px;margin:-10px -2px -6px 0}.room-experience.is-character-hover,.room-experience.is-character-hover .room-content{cursor:grab}.room-experience.is-character-dragging,.room-experience.is-character-dragging .room-content{cursor:grabbing;user-select:none}.room-experience .station-panel,.room-experience .site-header,.room-experience .site-footer{cursor:default}.room-experience .station-panel a,.room-experience .station-panel button{cursor:pointer}html[data-theme=light] .room-progress-fill{background:var(--amber)}.notes-intro{border-color:var(--line-strong);background:var(--glass);color:var(--ink-soft)}.note-row{border-color:var(--line)}.note-row:hover{background:#ffffff09}.note-row-date{color:var(--ink-faint)}.note-row-main h2{color:var(--ink)}.note-row-main p{color:var(--ink-soft)}.project-feature{border-color:var(--line-strong)}.project-cover{border-color:var(--line-strong);background:var(--glass);box-shadow:none}.project-feature-body h2{color:var(--ink)}.project-feature-body>p:not(.section-kicker):not(.project-subtitle){color:var(--ink-soft)}.repo-index-row:hover{background:var(--paper-raised)}.repo-index-body small,.repo-index-meta,.section-intro,.section-footnote{color:var(--ink-soft)}.project-hero-art{border-color:var(--line-strong);background:var(--glass);box-shadow:5px 5px 0 var(--tomato)}.project-meta-table dt,.project-art-note{color:var(--ink-faint)}.project-meta-table dd{color:var(--ink)}.project-sidebar,.about-sidebar-block{border-color:var(--line-strong);background:var(--glass);box-shadow:none}.project-sidebar a,.project-stack-list li,.about-index li{border-color:var(--line);color:var(--ink-soft)}.project-screen img{border-color:var(--line-strong);background:var(--paper-raised);filter:saturate(.92) contrast(1.02)}.project-screen figcaption{color:var(--ink-faint)}.project-footer{border-color:var(--line-strong)}.back-link{color:var(--ink-soft)}.back-link:hover{color:var(--tomato)}.article-header{border-color:var(--line-strong)}.article-meta,.article-description,.article-footer,.toc a,.prose blockquote{color:var(--ink-soft)}.article-title{color:var(--ink);text-shadow:none}.prose,.prose h2,.prose h3,.prose h4{color:var(--ink)}.prose h2:before{background:var(--tomato);box-shadow:none}.prose a{color:var(--tomato)}.prose a:hover{color:var(--tomato-dark)}.prose li::marker{color:var(--tomato)}.prose blockquote{border-color:var(--tomato);background:var(--paper-raised)}.prose code,.prose kbd{background:var(--paper-deep);color:var(--tomato)}.prose pre{border-color:var(--line-strong);background:#080b10;box-shadow:none}html[data-theme=light] .prose pre{background:#1d1b18}.prose th,.prose td{border-color:var(--line)}.prose th{color:var(--tomato)}.about-copy,.about-sidebar-block h2,.mascot-roster-item strong{color:var(--ink)}.mascot-roster-item span{color:var(--ink-soft)}.topic-grid{border-color:var(--line-strong)}.topic-item{border-color:var(--line)}.topic-name{color:var(--ink)}.topic-item:hover .topic-name{color:var(--tomato);text-shadow:none}.topic-count{color:var(--ink-faint)}.archive-year{border-color:var(--line-strong)}.archive-year-title{color:var(--tomato);text-shadow:none}.archive-list li{border-color:var(--line)}.archive-list a{color:var(--ink)}.archive-list a:hover{color:var(--tomato)}.archive-list time,.archive-tags{color:var(--ink-faint)}.search-shell{border-color:var(--line-strong)}.search-fallback{color:var(--ink-soft)}.search-fallback code{background:var(--paper-deep);color:var(--tomato)}:root{--pagefind-ui-primary: var(--tomato);--pagefind-ui-text: var(--ink);--pagefind-ui-background: var(--paper-raised);--pagefind-ui-border: var(--line-strong);--pagefind-ui-tag: var(--paper-deep);--pagefind-ui-border-width: 1px;--pagefind-ui-border-radius: 0;--pagefind-ui-font: var(--font-body)}.pagefind-ui__result{border-color:var(--line)}.pagefind-ui__result-link{color:var(--ink)}.pagefind-ui__result-link:hover{color:var(--tomato)}.character-portrait{display:block;height:auto;object-fit:contain}.project-feature-mascot,.project-hero-mascot,.article-corgi,.not-found-mascot,.notes-intro-mascot,.mascot-roster-art,.station-mascot{filter:drop-shadow(0 8px 14px rgba(0,0,0,.18))}.project-feature-mascot{width:132px}.project-hero-mascot{width:142px;right:-44px;bottom:-54px}.article-corgi{width:64px}.mascot-roster-art{width:58px}.station-mascot{width:104px}.station-mascot-small{width:82px}.not-found-panel{border-color:var(--line-strong);background:var(--glass);box-shadow:none}.not-found-code{color:var(--tomato);text-shadow:none}.not-found h1{color:var(--ink)}.not-found p{color:var(--ink-soft)}.download-control{display:inline-flex;flex-direction:column;align-items:flex-start;gap:4px}.download-status{color:var(--ink-faint);font-size:.7rem;line-height:1.4}.download-status:empty{display:none}.download-control a[aria-busy=true]{opacity:.65;pointer-events:none}.section-title:after,.page-title:after{content:"";display:block;width:42px;height:2px;margin-top:8px;background:var(--tomato);box-shadow:none}.room-mode-label{display:inline-flex;margin:0 0 14px;padding:3px 8px;border:1px solid var(--line-strong);color:var(--tomato);font-family:var(--font-display);font-size:.66rem;letter-spacing:.12em;line-height:1.3;text-shadow:none}html[data-theme=light] .room-mode-label{color:var(--amber);border-color:var(--line-strong);text-shadow:none}.station-intro .station-panel-hero{width:min(1040px,78vw);padding:22px 28px}.station-intro .hero-panel-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:32px;align-items:center}.station-intro .station-wordmark{font-size:clamp(3.2rem,5.2vw,4.8rem);margin-bottom:10px}.station-intro .station-lede{font-size:clamp(1.15rem,1.8vw,1.45rem);margin-bottom:0}.station-intro .station-copy{font-size:.9rem;line-height:1.65;margin:0 0 12px}.station-intro .station-actions,.station-intro .station-hint{margin-top:12px}@media(max-width:1280px){.station-intro .station-panel-hero{width:min(760px,calc(100vw - 32px));padding:0}.station-intro .hero-panel-grid{display:block}}@media(max-width:760px){.station-panel,.station-panel-hero{filter:none}.download-control{align-items:flex-start}.project-feature-mascot{width:94px;right:-4px;bottom:12px}.project-hero-mascot{width:108px;right:-18px;bottom:-34px}.article-corgi{width:52px}.room-veil:before,.room-veil:after{width:16vw}.station-repos .station-repos-mascot{width:64px;margin-top:-4px}}.reading-progress{position:fixed;top:0;left:0;right:0;z-index:95;height:3px;pointer-events:none;background:transparent}.reading-progress-fill{display:block;width:100%;height:100%;background:var(--tomato);transform:scaleX(0);transform-origin:left center;transition:transform 90ms linear}.code-block-shell{position:relative;margin:1.8em 0}.code-block-shell>pre{margin:0}.code-copy-button{position:absolute;top:10px;right:10px;z-index:2;padding:5px 9px;border:1px solid var(--line-strong);background:var(--glass-strong);color:var(--ink-soft);font-family:var(--font-mono);font-size:.66rem;transition:color .16s ease,border-color .16s ease,background .16s ease}.code-copy-button:hover{border-color:var(--tomato);color:var(--tomato)}.code-copy-button.is-copied{border-color:var(--green);color:var(--green)}.project-title-row{display:flex;flex-wrap:wrap;align-items:center;gap:14px}.project-title-row h2{margin-bottom:8px}.project-status{--status-color: var(--ink-faint);display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border:1px solid var(--status-color);color:var(--status-color);font-family:var(--font-display);font-size:.66rem;font-weight:650;line-height:1.35;white-space:nowrap}.project-status:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}.status-active{--status-color: var(--cyan)}.status-maintained{--status-color: var(--amber)}.status-experimental{--status-color: var(--magenta)}.status-archived{--status-color: var(--ink-faint)}.project-hero-copy>.project-status{margin:0 0 14px}:root,html[data-theme=dark]{--heat-0: rgba(105, 132, 144, .12);--heat-1: #174452;--heat-2: #1d6f7e;--heat-3: #2fa4b5;--heat-4: #55dbe9}html[data-theme=light]{--heat-0: rgba(244, 234, 215, .09);--heat-1: #5b4b3b;--heat-2: #85613f;--heat-3: #b17b45;--heat-4: #e0a25a}.contribution-heatmap{--contribution-cell: 11px;--contribution-gap: 3px;padding:18px;border:1px solid var(--line-strong);background:var(--paper-raised)}.contribution-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:16px}.contribution-head .section-kicker{margin-bottom:5px}.contribution-head h2{margin:0;color:var(--ink);font-family:var(--font-display);font-size:1.1rem;font-weight:700}.contribution-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;margin:0 0 18px;border:1px solid var(--line);background:var(--line)}.contribution-stats div{padding:12px 14px;background:var(--paper-raised)}.contribution-stats dt{color:var(--ink-faint);font-size:.68rem}.contribution-stats dd{margin:2px 0 0;color:var(--ink);font-family:var(--font-display);font-size:1.35rem;font-weight:700}.contribution-chart{max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain;padding-bottom:6px;scrollbar-width:thin}.contribution-months{display:grid;grid-template-columns:repeat(var(--contribution-weeks),var(--contribution-cell));gap:var(--contribution-gap);min-width:max-content;margin-left:26px;color:var(--ink-faint);font-size:.56rem;line-height:1}.contribution-months span{min-width:var(--contribution-cell);white-space:nowrap}.contribution-chart-body{display:flex;gap:7px;min-width:max-content}.contribution-weekdays{display:grid;grid-template-rows:repeat(7,var(--contribution-cell));gap:var(--contribution-gap);width:18px;padding-top:1px;color:var(--ink-faint);font-size:.52rem;line-height:var(--contribution-cell);text-align:right}.contribution-grid{display:flex;gap:var(--contribution-gap);outline:none}.contribution-grid:focus-visible{outline:1px solid var(--tomato);outline-offset:5px}.contribution-week{display:grid;grid-template-rows:repeat(7,var(--contribution-cell));gap:var(--contribution-gap)}.contribution-cell{position:relative;width:var(--contribution-cell);height:var(--contribution-cell);padding:0;border:1px solid rgba(255,255,255,.05);border-radius:1px;outline:0}.contribution-cell:hover,.contribution-cell:focus{border-color:var(--ink)}.contribution-cell:after{content:attr(data-tooltip);position:absolute;left:50%;bottom:calc(100% + 7px);z-index:20;width:max-content;max-width:220px;padding:5px 7px;border:1px solid var(--line-strong);background:var(--glass-strong);color:var(--ink);font-family:var(--font-body);font-size:.66rem;line-height:1.4;opacity:0;pointer-events:none;transform:translate(-50%,3px);transition:opacity .12s ease,transform .12s ease}.contribution-cell:hover:after,.contribution-cell:focus:after{opacity:1;transform:translate(-50%)}.contribution-cell.level-0,.contribution-legend .level-0{background:var(--heat-0)}.contribution-cell.level-1,.contribution-legend .level-1{background:var(--heat-1)}.contribution-cell.level-2,.contribution-legend .level-2{background:var(--heat-2)}.contribution-cell.level-3,.contribution-legend .level-3{background:var(--heat-3)}.contribution-cell.level-4,.contribution-legend .level-4{background:var(--heat-4)}.contribution-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 20px;margin-top:8px;color:var(--ink-faint);font-size:.64rem}.contribution-legend{display:flex;align-items:center;gap:4px}.contribution-legend i{display:block;width:9px;height:9px;border:1px solid rgba(255,255,255,.05)}.contribution-heatmap.is-compact{--contribution-cell: 8px;--contribution-gap: 3px;padding:13px;margin-top:16px;background:var(--paper-deep)}.contribution-heatmap.is-compact .contribution-head{margin-bottom:10px}.contribution-heatmap.is-compact .contribution-foot{margin-top:4px}.station-contributions .section-kicker{font-size:.6rem}.station-contributions h2{font-size:.92rem}.repo-contributions{margin-top:30px}.about-contributions{margin-top:0;margin-bottom:96px}.character-speech{position:fixed;top:var(--speech-y);left:var(--speech-x);z-index:45;width:min(340px,calc(100vw - 32px));padding:10px 13px 11px;border:1px solid var(--line-strong);background:var(--glass-strong);box-shadow:0 14px 36px #00000047;opacity:0;pointer-events:none;transform:translate(-50%,calc(-100% - 14px)) scale(.97);transition:opacity .18s ease,transform .18s ease}.character-speech:after{content:"";position:absolute;left:50%;bottom:-7px;width:12px;height:12px;border-right:1px solid var(--line-strong);border-bottom:1px solid var(--line-strong);background:var(--glass-strong);transform:translate(-50%) rotate(45deg)}.character-speech.is-visible{opacity:1;transform:translate(-50%,calc(-100% - 14px)) scale(1)}.character-speech-name{display:block;margin-bottom:3px;color:var(--tomato);font-family:var(--font-display);font-size:.65rem;font-weight:700;letter-spacing:.08em}.character-speech p{margin:0;color:var(--ink);font-size:.82rem;line-height:1.55}.character-speech[data-kind=pig] .character-speech-name{color:var(--magenta)}.character-speech[data-kind=corgi] .character-speech-name{color:var(--amber)}@media(max-width:760px){.contribution-heatmap{padding:14px}.contribution-stats{grid-template-columns:1fr}.contribution-stats div{padding:9px 12px}.contribution-heatmap.is-compact .contribution-weekdays{display:none}.contribution-heatmap.is-compact .contribution-months{margin-left:0}.about-contributions{margin-bottom:64px}.character-speech{width:min(310px,calc(100vw - 32px))}}@media(prefers-reduced-motion:reduce){.reading-progress-fill,.character-speech,.contribution-cell:after{transition:none}}
