*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--paper:#f3ead7;--paper-dim:#e8dcc0;--card:#faf3e3;--wood:#2e2117;--wood-light:#4a3626;--ink:#2b2015;--ink-dim:#6e5c48;--gold:#a97a2e;--gold-bright:#c99a3f;--line:rgba(43,32,21,.14);--line-strong:rgba(43,32,21,.28);--mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;--serif:"Lora","Iowan Old Style",Georgia,serif;--lvl0:rgba(169,122,46,.14);--lvl1:rgba(169,122,46,.36);--lvl2:rgba(169,122,46,.58);--lvl3:rgba(169,122,46,.8);--lvl4:#a97a2e}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}html,body{width:100%;background:var(--paper)}body{font-family:var(--serif);color:var(--ink);line-height:1.7;-webkit-font-smoothing:antialiased}#root{width:100%;min-height:100vh;display:flex;flex-direction:column}a{color:inherit}button{font:inherit}::selection{background:#c99a3f4d}.site-header{position:sticky;top:0;z-index:30;display:flex;justify-content:space-between;align-items:baseline;gap:8px 16px;flex-wrap:wrap;max-width:760px;width:100%;margin:0 auto;padding:22px 24px 14px;background:var(--paper);border-bottom:1px solid var(--line)}.site-header:before{content:"";position:fixed;inset:0 0 auto;height:4px;background:var(--wood);border-bottom:1px solid var(--gold)}.brand{font-family:var(--serif);font-weight:700;font-size:20px;color:var(--wood);text-decoration:none}.brand span{color:var(--gold)}.site-nav{display:flex;gap:20px;flex-wrap:wrap}.site-nav a{font-family:var(--mono);font-size:12px;text-decoration:none;color:var(--ink-dim);transition:color .2s}.site-nav a:hover,.site-nav a:focus-visible{color:var(--gold)}.site-nav a[aria-current=page]{color:var(--wood);border-bottom:1px solid var(--gold)}@media (max-width:520px){.site-nav{gap:14px}}.page{flex:1;width:100%;max-width:760px;margin:0 auto;padding:0 24px 80px}.minor{font-family:var(--mono);font-weight:400;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);margin:40px 0 10px}.prose{max-width:640px;margin-top:16px;font-size:15.5px}.dim{color:var(--ink-dim)}.more{display:inline-block;margin-top:14px;font-family:var(--mono);font-size:12px;color:var(--gold);text-decoration:none}.more:hover{text-decoration:underline}.hero{padding:56px 0 8px}.hero h1{font-family:var(--serif);font-weight:700;font-size:clamp(30px,5vw,40px);line-height:1.15;color:var(--wood)}.hero .tag{margin-top:8px;color:var(--gold);font-style:italic;font-size:16px}.hero .intro{margin-top:18px;max-width:620px;font-size:16px}.links{display:flex;flex-wrap:wrap;gap:20px;margin-top:18px}.links a{font-family:var(--mono);font-size:12.5px;color:var(--gold);text-decoration:none;border-bottom:1px solid var(--line-strong);padding-bottom:1px}.links a:hover{border-color:var(--gold)}.entry{display:block;padding:22px 0;border-bottom:1px solid var(--line);text-decoration:none;color:inherit}.entry:last-of-type{border-bottom:0}.entry h3{font-family:var(--serif);font-weight:700;font-size:18px;line-height:1.35;color:var(--wood);transition:color .2s}.entry p{margin-top:8px;font-size:15px}.entry-meta{margin-top:8px;font-family:var(--mono);font-size:11.5px;color:var(--ink-dim)}.post-entry p{color:var(--ink-dim)}.post-entry:hover h3,.post-entry:focus-visible h3{color:var(--gold)}.index{margin-top:40px;border-top:1px solid var(--line)}.index-entry h3 span{color:var(--gold);font-weight:400;transition:margin .2s}.index-entry p{color:var(--ink-dim)}.index-entry:hover h3,.index-entry:focus-visible h3{color:var(--gold)}@media (prefers-reduced-motion:no-preference){.index-entry:hover h3 span{margin-left:4px}}.contact{flex-direction:column;gap:8px;align-items:flex-start;margin-top:0}.page-head+.arcade-grid{margin-top:28px}.proj-head{display:flex;justify-content:space-between;align-items:baseline;gap:14px}.proj-head .year{font-family:var(--mono);font-size:11.5px;color:var(--ink-dim)}.proj .sub{color:var(--gold);font-style:italic;font-size:14.5px;margin-top:2px}.pf{font-size:14.5px}.pf-label{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);margin-right:8px}.subproj{margin-top:16px;padding-left:16px;border-left:2px solid var(--line-strong)}.subproj h4{font-family:var(--serif);font-weight:700;font-size:15.5px;color:var(--wood)}.stack{margin-top:12px;font-family:var(--mono);font-size:11.5px;color:var(--ink-dim)}.pf-links{display:flex;flex-wrap:wrap;gap:18px;margin-top:10px}.pf-links a{font-family:var(--mono);font-size:12px;color:var(--gold);text-decoration:none}.pf-links a:hover{text-decoration:underline}.research{list-style:none}.research li{padding:12px 0;border-top:1px solid var(--line)}.research li:first-child{border-top:0}.r-title{font-weight:700;color:var(--wood);font-size:15px}.r-status{margin-left:10px;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--gold)}.research p{margin-top:4px;font-size:14px;color:var(--ink-dim)}.page-head{padding:48px 0 14px;border-bottom:1px solid var(--line)}.page-head h1{font-family:var(--serif);font-weight:700;font-size:30px;color:var(--wood)}.page-head p{margin-top:6px;color:var(--ink-dim)}.article{padding-top:40px}.article .more{margin:0 0 22px}.article h1{font-family:var(--serif);font-weight:700;font-size:30px;line-height:1.25;color:var(--wood)}.md{margin-top:28px;font-size:16px;line-height:1.85}.md h2{font-family:var(--serif);font-weight:700;font-size:21px;color:var(--wood);margin:32px 0 10px}.md h3{font-family:var(--serif);font-weight:700;font-size:17px;color:var(--wood);margin:24px 0 8px}.md p{margin:0 0 16px}.md ul,.md ol{margin:0 0 16px;padding-left:22px}.md li{margin-bottom:6px}.md a{color:var(--gold)}.md code{font-family:var(--mono);font-size:.88em;background:var(--paper-dim);border-radius:3px;padding:1px 5px}.md pre{background:var(--wood);color:var(--paper-dim);border-radius:4px;padding:14px 16px;overflow-x:auto;margin:0 0 16px;border-top:2px solid var(--gold)}.md pre code{background:none;padding:0;color:inherit}.md blockquote{border-left:2px solid var(--gold);padding-left:14px;color:var(--ink-dim);margin:0 0 16px}.md hr{border:0;border-top:1px solid var(--line);margin:24px 0}.arcade-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}@media (max-width:640px){.arcade-grid{grid-template-columns:1fr}}.game-frame canvas{width:100%;height:auto;display:block;border-radius:4px;border:1px solid var(--line-strong)}.game-meta{display:flex;gap:18px;flex-wrap:wrap;margin-top:10px;font-family:var(--mono);font-size:11px;color:var(--ink-dim)}.game-meta b{color:var(--gold)}.game-hint{margin-top:4px;font-size:13px;color:var(--ink-dim)}.stack-frame{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,340px) 1fr;column-gap:24px;align-content:start}.stack-frame .stack-board{grid-row:1/5}.stack-frame .game-meta{margin-top:0}@media (max-width:640px){.stack-frame{grid-template-columns:1fr}.stack-frame .stack-board{grid-row:auto}.stack-frame .game-meta{margin-top:10px}}@media (min-width:641px){.stack-frame .stack-ladder{flex-direction:column;gap:4px;counter-reset:tier}.stack-frame .stack-ladder li:after{display:none}.stack-frame .stack-ladder li:before{content:counter(tier,decimal-leading-zero) " ";counter-increment:tier;color:var(--line-strong)}}.game-reset{margin-left:auto;background:none;border:0;padding:0;font:inherit;color:var(--gold);cursor:pointer;text-decoration:underline}.stack-board{position:relative;display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:6px;aspect-ratio:1;background:var(--wood);border:1px solid var(--line-strong);border-radius:6px;box-shadow:inset 0 2px 6px #00000059;touch-action:none;outline:none}.stack-board:focus-visible{outline:2px solid var(--gold-bright);outline-offset:2px}.stack-tile{display:grid;place-items:center;text-align:center;border-radius:4px;padding:2px;background:#f3ead71a;font-family:var(--mono);font-size:11px;font-weight:700;line-height:1.15;overflow-wrap:anywhere}.stack-tile[class*=" t"]{box-shadow:inset 0 -3px #0000002e,0 1px 2px #0000004d;color:var(--wood)}.stack-tile.t1{background:#f3ead7}.stack-tile.t2{background:#eadbb9}.stack-tile.t3{background:#dfc795}.stack-tile.t4{background:#d2b074}.stack-tile.t5{background:#c39756}.stack-tile.t6{background:#a97a2e;color:#f3ead7}.stack-tile.t7{background:#8c6127;color:#f3ead7}.stack-tile.t8{background:#704c24;color:#f3ead7}.stack-tile.t9{background:#57391d;color:#f3ead7}.stack-tile.t10{background:#422c1a;color:#e8c77e}.stack-tile.t11{background:#1c140d;color:#e8c77e;box-shadow:inset 0 0 0 2px #e8c77e}.stack-over{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;gap:10px;justify-items:center;text-align:center;background:#2e2117d1;border-radius:6px;color:var(--paper);font-size:14px;padding:16px}.stack-over button{font:inherit;font-family:var(--mono);font-size:12px;padding:6px 14px;border-radius:4px;border:1px solid var(--gold-bright);background:var(--gold);color:var(--paper);cursor:pointer}.stack-ladder{list-style:none;padding:0;margin:10px 0 0;display:flex;flex-wrap:wrap;gap:2px 0;font-family:var(--mono);font-size:10.5px;color:var(--ink-dim)}.stack-ladder li:not(:last-child):after{content:"→";margin:0 5px;color:var(--line-strong)}.stack-ladder li.reached{color:var(--gold);font-weight:700}.timeline{margin-top:24px}.tl-row{display:grid;grid-template-columns:64px 1fr;gap:18px;padding:12px 0;border-top:1px solid var(--line)}.tl-row:first-child{border-top:0}.tl-row .y{font-family:var(--mono);color:var(--gold);font-size:12.5px;padding-top:2px}.tl-row .e{color:var(--wood);font-size:15px;font-weight:700}.tl-row .d{color:var(--ink-dim);font-size:14px;margin-top:2px}.grid-wrap{overflow-x:auto;padding-bottom:6px}.cgrid{display:flex;gap:3px;min-width:max-content}.cgrid .col{display:flex;flex-direction:column;gap:3px}.cgrid .cell{width:10px;height:10px;border-radius:2px;background:var(--lvl0)}.cell[data-l="0"]{background:var(--lvl0)}.cell[data-l="1"]{background:var(--lvl1)}.cell[data-l="2"]{background:var(--lvl2)}.cell[data-l="3"]{background:var(--lvl3)}.cell[data-l="4"]{background:var(--lvl4)}.cgrid-legend{display:flex;align-items:center;gap:6px;margin-top:12px;font-size:11px;color:var(--ink-dim)}.cgrid-legend .cell{width:10px;height:10px;border-radius:2px}.go{color:var(--gold);text-decoration:none}footer{display:flex;justify-content:center;flex-wrap:wrap;gap:8px 22px;padding:26px 24px 30px;border-top:1px solid var(--line);font-family:var(--mono);font-size:11.5px;color:var(--ink-dim)}footer a{color:var(--gold);text-decoration:none}footer a:hover{text-decoration:underline}.tama{position:fixed;right:18px;bottom:18px;z-index:50;display:flex;flex-direction:column;align-items:flex-end;gap:12px}.tama-egg{position:relative;border:2px solid var(--gold);border-radius:50% 50% 46% 46%/58% 58% 42% 42%;background:radial-gradient(ellipse at 32% 22%,#6b4f38 0%,var(--wood-light) 38%,var(--wood) 100%);box-shadow:inset 0 -6px 12px #00000073,inset 0 3px 6px #ffecc82e,0 6px 16px #2e211759}.tama-screen{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#d9d4a6;border:2px solid #1c140d;border-radius:6px;box-shadow:inset 0 2px 5px #0000004d}.pet{fill:#3b3a22;transition:transform .3s}.pet-look-left{transform:translate(-18%)}.pet-look-right{transform:translate(18%)}.tama-screen.dark{background:#4a4733}.tama-screen.dark .pet{fill:#2a281a}.tama-screen.dark .tama-status{color:#d9d4a6}.tama-screen.evolving{background:#eeead0}.tama-mess{position:absolute;right:8px;bottom:26px;display:flex;gap:3px}.tama-mess svg,.tama-skull{fill:#3b3a22}.tama-skull{position:absolute;top:8px;left:8px}.tama-zz{position:absolute;top:8px;right:10px;font-family:var(--mono);font-size:11px;color:#d9d4a6}.tama-mini{width:62px;height:72px;padding:0;cursor:pointer;display:grid;place-items:center}.tama-mini .tama-screen{width:34px;height:34px;margin-top:6px}.tama-mini:focus-visible{outline:2px solid var(--gold-bright);outline-offset:3px}.tama-alert{position:absolute;top:6px;right:8px;width:8px;height:8px;border-radius:50%;background:var(--gold-bright);box-shadow:0 0 0 2px var(--wood)}.tama-panel{width:238px;padding:22px 22px 18px;text-align:center;border-radius:50% 50% 42% 42%/36% 36% 28% 28%}.tama-name{font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--gold-bright);margin-bottom:8px}.tama-panel .tama-screen{height:118px;padding:10px 8px 6px;margin:0 6px}.tama-status{margin-top:8px;min-height:1.4em;font-family:var(--mono);font-size:10.5px;color:#3b3a22}.tama-meters{display:flex;justify-content:center;gap:14px;margin-top:10px;font-family:var(--mono);font-size:10px;color:var(--paper-dim)}.tama-meter{display:flex;align-items:center;gap:5px}.tama-pips{display:flex;gap:2px}.tama-pips i{width:7px;height:7px;border:1px solid var(--gold);background:transparent}.tama-pips i.on{background:var(--gold-bright)}.tama-form{display:flex;gap:6px;margin-top:10px}.tama-form input{flex:1;min-width:0;font-family:var(--mono);font-size:12px;padding:5px 7px;border:1px solid var(--gold);border-radius:4px;background:var(--paper);color:var(--ink)}.tama-form button{font-family:var(--mono);font-size:11px;padding:5px 9px;border:1px solid var(--gold);border-radius:4px;background:var(--gold);color:var(--wood);cursor:pointer}.tama-buttons{display:grid;grid-template-columns:repeat(3,1fr);gap:8px 6px;margin:12px 8px 0}.tama-buttons button{display:flex;flex-direction:column;align-items:center;gap:3px;background:none;border:0;cursor:pointer;font-family:var(--mono);font-size:9.5px;color:var(--paper-dim)}.tama-buttons i{width:18px;height:18px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#f1d58e,var(--gold-bright) 45%,var(--gold) 100%);box-shadow:0 2px #6b4c1c,0 3px 4px #0006}.tama-buttons button:active i{transform:translateY(2px);box-shadow:0 0 #6b4c1c,0 1px 2px #0006}.tama-buttons button:hover,.tama-buttons button:focus-visible{color:var(--gold-bright)}.tama-buttons button:focus-visible{outline:none}.tama-buttons button:focus-visible i{outline:2px solid var(--paper);outline-offset:2px}.tama-away{display:block;margin:10px auto 0;background:none;border:0;cursor:pointer;font-family:var(--mono);font-size:9.5px;color:#e8dcc08c}.tama-away:hover,.tama-away:focus-visible{color:var(--gold-bright)}.tama-close{position:absolute;top:20px;right:40px;width:22px;height:22px;border-radius:50%;border:1px solid var(--gold);background:var(--wood);color:var(--gold-bright);font-size:13px;line-height:1;cursor:pointer}.tama-close:hover,.tama-close:focus-visible{background:var(--gold);color:var(--wood);outline:none}.tama-choices{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:10px 10px 0;font-family:var(--mono);font-size:10px;color:var(--paper-dim)}.tama-choices button{width:34px;height:26px;border:1px solid var(--gold);border-radius:4px;background:var(--gold);color:var(--wood);font-size:14px;cursor:pointer;box-shadow:0 2px #6b4c1c}.tama-choices button:active{transform:translateY(2px);box-shadow:none}.tama-choices button:focus-visible{outline:2px solid var(--paper);outline-offset:2px}.tama-stats{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;margin:10px 12px 0;text-align:left;font-family:var(--mono);font-size:10px;color:var(--paper-dim)}.tama-stats dt{color:var(--gold-bright)}.tama-stats dd{margin:0}.tama-bubble{position:relative;max-width:220px;display:flex;align-items:flex-start;gap:6px;padding:8px 8px 8px 11px;margin-right:4px;background:var(--paper);border:2px solid var(--wood);border-radius:10px;box-shadow:0 2px 0 var(--gold),0 6px 14px #2e211740;font-family:var(--mono);font-size:11px;line-height:1.45;color:var(--ink)}.tama-bubble:after{content:"";position:absolute;right:22px;bottom:-8px;width:12px;height:12px;background:var(--paper);border-right:2px solid var(--wood);border-bottom:2px solid var(--wood);transform:rotate(45deg)}.tama-bubble a,.tama-bubble button:not(.tama-bubble-x){flex:1;padding:0;border:0;background:none;font:inherit;text-align:left;color:inherit;cursor:pointer;text-decoration:underline;text-decoration-color:var(--gold);text-underline-offset:2px}.tama-bubble a:hover,.tama-bubble button:not(.tama-bubble-x):hover{color:var(--gold)}.tama-bubble span{flex:1}.tama-bubble-x{padding:0 2px;border:0;background:none;font-size:13px;line-height:1;color:var(--ink-dim);cursor:pointer}.tama-bubble-x:hover,.tama-bubble-x:focus-visible{color:var(--gold)}@keyframes tama-hop{0%,to{transform:translateY(0)}40%{transform:translateY(-14%)}}@keyframes tama-pop{0%{opacity:0;transform:translateY(6px) scale(.96)}}@keyframes tama-chomp{0%,to{transform:scale(1)}50%{transform:scale(1.05,.95)}}@media (prefers-reduced-motion:no-preference){.pet-hop{animation:tama-hop .5s ease-out 2}.pet-eat{animation:tama-chomp .3s ease-in-out 3}.pet-win{animation:tama-hop .4s ease-out 3}.tama-bubble{animation:tama-pop .25s ease-out}}@media (max-width:480px){.tama{right:12px;bottom:12px}}
