@font-face{font-family:eb garamond;src:url(/fonts/eb-garamond-400.woff2)format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:eb garamond;src:url(/fonts/eb-garamond-400-italic.woff2)format('woff2');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:pt sans;src:url(/fonts/pt-sans-400.woff2)format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:pt sans;src:url(/fonts/pt-sans-700.woff2)format('woff2');font-weight:700;font-style:normal;font-display:swap}:root{color-scheme:light;--bg:#f8f2e2;--bg-sunk:#f0e7d0;--bg-panel:#fffdf6;--bg-raised:#fffefa;--bg-hover:#f4ebd6;--header-bg:#f2e4c1;--ink:#2c2a1f;--ink-soft:#48442f;--ink-dim:#6a6551;--ink-faint:#8a8571;--amber:#9a5f14;--amber-soft:#b8791f;--amber-dim:#c19a55;--crimson:#ab372c;--crimson-soft:#c0483b;--moss:#43713f;--glow:#2f7a4e;--line:rgba(92, 74, 38, 0.16);--line-strong:rgba(92, 74, 38, 0.32);--shadow-sm:0 1px 2px rgba(90, 74, 40, 0.12);--shadow:0 2px 4px rgba(90, 74, 40, 0.07), 0 8px 24px -12px rgba(90, 74, 40, 0.28);--shadow-lg:0 14px 40px -18px rgba(90, 74, 40, 0.42);--ring:0 0 0 3px rgba(154, 95, 20, 0.28);--link:#94571b;--link-line:rgba(148, 87, 27, 0.35);--link-hover:#7a4212;--font-head:'EB Garamond', 'PT Serif', Georgia, 'Times New Roman', serif;--font-text:'PT Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;--font-mono:ui-monospace, 'JetBrains Mono', 'Fira Mono', 'DejaVu Sans Mono', monospace;--wrap:74rem;--col-side:18.5rem;--measure:70ch;--gap:2.6rem;--pad-x:clamp(1.1rem, 4vw, 2.2rem);--head-h:4.25rem;--r-sm:6px;--r:12px;--r-lg:16px;--r-pill:999px;--t-fast:120ms ease;--t:220ms cubic-bezier(0.25, 0.6, 0.3, 1)}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--head-h) + 1.5rem)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}body{margin:0;background-color:var(--bg);background-image:radial-gradient(70rem 40rem at 10% -6%,rgba(196,138,52,.1),transparent 62%),radial-gradient(60rem 34rem at 98% 6%,rgba(90,140,90,7%),transparent 58%);background-attachment:fixed;color:var(--ink);font-family:var(--font-text);font-size:1.15rem;line-height:1.65;font-kerning:normal;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{font-family:var(--font-head);font-weight:400;line-height:1.18;letter-spacing:.005em;margin:0;color:var(--ink)}p,ul,ol,dl,figure,blockquote,pre,table{margin:0}a{color:var(--link);text-decoration:none}a:hover{color:var(--link-hover)}img,svg,video,canvas{max-width:100%;height:auto;display:block}button,input,textarea,select{font:inherit;color:inherit}code,kbd,samp,pre{font-family:var(--font-mono);font-size:.9em}hr{border:0;height:1px;background:var(--line)}::selection{background:rgba(224,167,88,.28);color:var(--ink)}:focus-visible{outline:2px solid var(--amber);outline-offset:2px;border-radius:var(--r-sm)}.icon{display:inline-block;vertical-align:-.15em;flex:none;fill:none;stroke:none}.icon-sprite{display:none}.ic-line{fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.ic-ring{fill:none;stroke:currentColor;stroke-width:1.25;opacity:.55}.ic-fill{fill:currentColor;stroke:none}.ic-mono{fill:currentColor;stroke:none;font-family:var(--font-text);font-size:9.5px;font-weight:700;letter-spacing:.02em}.skip-link{position:absolute;left:-9999px;top:0;z-index:100;padding:.7rem 1.1rem;background:var(--bg-raised);border:1px solid var(--line-strong);border-radius:0 0 var(--r)0}.skip-link:focus{left:0}.prose{font-size:1.15rem;line-height:1.75;color:var(--ink-soft);max-width:var(--measure)}.prose>*+*{margin-top:1.15em}.prose p,.prose li{color:var(--ink-soft)}.prose h2,.prose h3,.prose h4{color:var(--ink);margin-top:2.2em;margin-bottom:.6em;scroll-margin-top:calc(var(--head-h) + 1.25rem)}.prose h2{font-size:1.85rem;padding-bottom:.3em;border-bottom:1px solid var(--line)}.prose h3{font-size:1.45rem}.prose h4{font-size:1.2rem;font-family:var(--font-text);font-weight:700;letter-spacing:.01em}.prose :is(h2,h3,h4):target{animation:target-glow 1.6s ease-out}@keyframes target-glow{0%,35%{background:rgba(224,167,88,.14);box-shadow:-.7rem 0 rgba(224,167,88,.14),.7rem 0 rgba(224,167,88,.14)}100%{background:0 0;box-shadow:none}}.prose a{color:var(--link);border-bottom:1px solid var(--link-line)}.prose a:hover{color:var(--link-hover);border-bottom-color:initial;background:rgba(224,167,88,8%)}.prose ul,.prose ol{padding-left:1.35em}.prose li+li{margin-top:.35em}.prose ul{list-style:none;padding-left:1.5em}.prose ul>li{position:relative}.prose ul>li::before{content:'';position:absolute;left:-1.1em;top:.72em;width:.42em;height:.42em;border-radius:50%;background:var(--amber-dim);box-shadow:0 0 0 2px rgba(224,167,88,.14)}.prose ol{list-style:decimal}.prose ol::marker,.prose ol>li::marker{color:var(--amber-dim);font-family:var(--font-head)}.prose blockquote{margin:1.6em 0;padding:.1em 0 .1em 1.35em;border-left:3px solid var(--amber-dim);color:var(--ink-dim);font-family:var(--font-head);font-size:1.2rem;font-style:italic;line-height:1.6}.prose blockquote p+p{margin-top:.7em}.prose :not(pre)>code{background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--r-sm);padding:.12em .38em;color:var(--amber);white-space:nowrap}.prose pre{margin:1.5em 0;padding:1.05rem 1.15rem;background:#fdfaf0;border:1px solid var(--line);border-radius:var(--r);overflow-x:auto;line-height:1.55;box-shadow:var(--shadow-sm)}.prose pre code{background:0 0;border:0;padding:0;white-space:pre;color:inherit}.prose figure{margin:1.9em 0}.prose img{border-radius:var(--r);border:1px solid var(--line);box-shadow:var(--shadow);margin-inline:auto}.prose figcaption{margin-top:.6em;font-size:.9rem;color:var(--ink-dim);text-align:center;font-style:italic}.prose details{margin:1.6em 0;padding:.8rem 1.1rem;border:1px solid var(--line);border-radius:var(--r);background:var(--bg-panel)}.prose summary{cursor:pointer;font-family:var(--font-head);font-size:1.1rem;color:var(--ink-soft)}.prose summary:hover{color:var(--amber)}.prose details[open]>summary{margin-bottom:.8em;padding-bottom:.6em;border-bottom:1px solid var(--line)}.prose details>:last-child{margin-bottom:0}.prose hr{height:auto;background:0 0;margin:2.6em auto;text-align:center;overflow:visible}.prose hr::before{content:'· ❉ ·';color:var(--amber-dim);font-size:1.1rem;letter-spacing:.5em}.prose table{width:100%;border-collapse:collapse;font-size:.97rem;margin:1.7em 0;display:block;overflow-x:auto}.prose th,.prose td{padding:.55rem .8rem;border-bottom:1px solid var(--line);text-align:left}.prose thead th{color:var(--ink);font-family:var(--font-head);font-size:1.05rem;border-bottom-color:var(--line-strong);white-space:nowrap}.prose tbody tr:hover{background:var(--bg-panel)}.prose kbd{border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:var(--r-sm);padding:.05em .4em;background:var(--bg-raised);font-size:.85em}.prose mark{background:rgba(224,167,88,.25);color:var(--ink);border-radius:3px;padding:0 .2em}.prose .footnotes{margin-top:2.5em;padding-top:1.2em;border-top:1px solid var(--line);font-size:.95rem;color:var(--ink-dim)}.prose sup a{border:0;padding:0 .15em}.prose>:first-child{margin-top:0}.layout{max-width:var(--wrap);margin:0 auto;padding:2.2rem var(--pad-x)3.5rem;display:grid;gap:var(--gap);grid-template-columns:minmax(0,1fr)var(--col-side);align-items:start}body:not(.has-sidebar) .layout{grid-template-columns:minmax(0,1fr);max-width:58rem}.content{min-width:0}.sidebar{position:sticky;top:calc(var(--head-h) + 1.2rem);max-height:calc(100vh - var(--head-h) - 2.4rem);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line-strong)transparent;display:flex;flex-direction:column;gap:1.3rem}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:var(--r-pill)}.site-head{position:sticky;top:0;z-index:40;background:var(--header-bg);background:color-mix(in srgb,var(--header-bg) 88%,transparent);backdrop-filter:blur(12px)saturate(1.4);border-bottom:1px solid rgba(140,100,40,.18)}.site-head::after{content:'';position:absolute;inset-inline:0;bottom:-1px;height:1px;background:linear-gradient(90deg,transparent,rgba(154,95,20,.4),transparent);pointer-events:none}.site-head-in{max-width:var(--wrap);margin:0 auto;padding:0 var(--pad-x);min-height:var(--head-h);display:flex;align-items:center;gap:1.1rem}.brand{display:flex;align-items:center;gap:.6rem;color:var(--ink);flex:none;margin-right:auto}.brand-mark{display:block;border-radius:50%;flex:none}.brand-text{display:flex;flex-direction:column;line-height:1.1}.brand-name{font-family:var(--font-head);font-size:1.4rem;letter-spacing:.02em}.brand-sub{font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:#8a6236}.head-nav ul{display:flex;gap:.25rem;list-style:none;margin:0;padding:0}.head-nav a{display:block;padding:.42rem .8rem;border-radius:var(--r-pill);color:#5d4526;font-size:.97rem;white-space:nowrap}.head-nav a:hover{background:rgba(255,253,246,.72);color:var(--link-hover)}.head-nav a.is-active{background:var(--bg-panel);color:var(--amber);font-weight:700;box-shadow:var(--shadow-sm)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2.2rem;height:2.2rem;padding:0;background:0 0;border:1px solid var(--line);border-radius:var(--r-sm);color:var(--ink-soft);cursor:pointer}.icon-btn:hover{background:var(--bg-panel);color:var(--amber);border-color:var(--line-strong)}.nav-toggle{display:none;order:3}.nav-toggle .on-open{display:none}body.nav-open .nav-toggle .on-open{display:block}body.nav-open .nav-toggle .on-closed{display:none}@media(max-width:960px){.layout{grid-template-columns:minmax(0,1fr);max-width:58rem;gap:2rem}.sidebar{position:static;max-height:none;overflow:visible;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(17rem,100%),1fr));gap:1.2rem;align-items:start;padding-top:1rem;border-top:1px solid var(--line)}.widget-toc{display:none}}@media(max-width:800px){.site-head-in{flex-wrap:wrap;gap:.6rem;padding-block:.5rem}.nav-toggle{display:inline-flex}.head-nav{display:none;width:100%;order:4}body.nav-open .head-nav{display:block}.head-nav ul{flex-direction:column;align-items:stretch;gap:.15rem;padding-bottom:.4rem}.head-nav a{padding:.6rem .8rem;border-radius:var(--r);font-size:1.02rem}}@media(max-width:560px){:root{--gap:1.6rem}.brand-name{font-size:1.2rem}.brand-sub{display:none}}@media print{.site-head,.site-foot,.sidebar,.toc-inline,.post-nav,.pager,.hero{display:none!important}body{background:#fff;color:#000}.layout{display:block;padding:0;max-width:none}.prose a{border:0}.prose a::after{content:' (' attr(href)')';font-size:.85em;color:#555}}.hero{position:relative;min-height:clamp(15rem,32vw,21rem);display:flex;align-items:flex-end;overflow:hidden;isolation:isolate;border-bottom:1px solid var(--line)}.hero-media{position:absolute;inset:0;z-index:-2}.hero-media img{width:100%;height:100%;object-fit:cover;object-position:50% 42%}.hero::before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,var(--bg),rgba(24,32,24,.72) 34%,rgba(24,32,24,.3) 72%,rgba(24,32,24,.42)),linear-gradient(to right,rgba(16,24,18,.78),rgba(16,24,18,.12) 58%,transparent)}.hero-in{position:relative;width:100%;max-width:var(--wrap);margin:0 auto;padding:3rem var(--pad-x)2rem}.hero-kicker{font-family:var(--font-head);font-size:1rem;letter-spacing:.34em;text-transform:uppercase;color:#edbf7b;margin-bottom:.4rem}.hero-title{font-size:clamp(2.4rem,6vw,3.9rem);line-height:1.04;color:#fbf6e8;text-shadow:0 2px 22px rgba(0,0,0,.5)}.hero-tag{margin-top:.7rem;font-family:var(--font-head);font-size:clamp(1.1rem,2.2vw,1.4rem);font-style:italic;line-height:1.35;color:#e3e2cf;max-width:46ch}.home-intro{font-size:1.12rem;margin-bottom:2.4rem}.home-sec+.home-sec{margin-top:3rem}.sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:1.2rem;padding-bottom:.45rem;border-bottom:1px solid var(--line)}.sec-title{font-size:1.6rem;color:var(--ink)}.sec-title-sep{margin-top:2.6rem;margin-bottom:1.1rem;padding-bottom:.4rem;border-bottom:1px solid var(--line);font-size:1.3rem;color:var(--ink-dim)}.sec-more{font-size:.92rem;color:var(--ink-dim);white-space:nowrap;display:inline-flex;align-items:center;gap:.3rem}.sec-more:hover{color:var(--amber)}.cards{display:flex;flex-direction:column;gap:1.35rem}.grid{display:grid;gap:1.2rem}.grid-projects{grid-template-columns:repeat(auto-fill,minmax(min(17.5rem,100%),1fr))}.grid-projects.is-quiet{opacity:.75}.card{position:relative;display:flex;flex-direction:column;background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden}.card:hover{border-color:rgba(154,95,20,.35);box-shadow:var(--shadow-lg)}.post-card.has-thumb{display:grid;grid-template-columns:14.5rem minmax(0,1fr);align-items:stretch}.card-thumb{display:block;height:100%;background:var(--bg-sunk);border-right:1px solid var(--line);overflow:hidden}.card-thumb img{width:100%;height:100%;min-height:11rem;object-fit:cover}.card-cover{display:block;aspect-ratio:16/9;overflow:hidden;border-bottom:1px solid var(--line);background:var(--bg-sunk)}.card-cover img{width:100%;height:100%;object-fit:cover}.card-body{display:flex;flex-direction:column;gap:.5rem;padding:1.15rem 1.25rem 1.2rem;flex:1;min-width:0}.card-title{font-size:1.35rem;line-height:1.22;display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap}.card-title a{color:var(--ink)}.card:hover .card-title a{color:var(--amber)}.card-meta{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem;font-size:.83rem;color:var(--ink-faint)}.card-meta .dot{opacity:.5}.badge-lang{border:1px solid var(--line-strong);border-radius:var(--r-sm);padding:0 .3rem;font-size:.7rem;letter-spacing:.06em;color:var(--moss)}.card-summary{font-size:1.02rem;color:var(--ink-soft);line-height:1.6;flex:1}.card-foot{display:flex;align-items:center;justify-content:space-between;gap:.8rem;margin-top:.3rem;flex-wrap:wrap}.card-tags{display:flex;flex-wrap:wrap;gap:.3rem}.card-more{font-size:.9rem;color:var(--ink-dim);white-space:nowrap;display:inline-flex;align-items:center;gap:.3rem;margin-left:auto;font-weight:700}.card:hover .card-more{color:var(--amber)}.project-host{font-size:.85rem;color:var(--moss);display:flex;align-items:center;gap:.35rem;font-family:var(--font-mono);letter-spacing:-.01em}.notes{display:flex;flex-direction:column;gap:1.1rem}.note{padding:1rem 1.25rem 1.15rem}.note-date{display:inline-flex;align-items:center;gap:.35rem;font-size:.82rem;color:var(--ink-faint);border-bottom:0}.note-date:hover{color:var(--amber)}.note-date .icon{color:var(--amber-dim)}.note-body{margin-top:.5rem}.note-body>:first-child{margin-top:0}.note-body>:last-child{margin-bottom:0}.note-body img,.note-body .video video{max-height:30rem;width:auto;max-width:100%}.note-single .page-head{border-bottom:0;padding-bottom:0}.video{margin:1.9em 0}.video video{display:block;width:100%;height:auto;margin-inline:auto;background:var(--bg-sunk);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}.prose img.zoomable{cursor:zoom-in}.zoom{display:none;position:fixed;inset:0;z-index:90;padding:clamp(.6rem,3vw,2.5rem);background:rgba(24,20,14,.92);align-items:center;justify-content:center;cursor:zoom-out}.zoom.is-open{display:flex}.zoom img{max-width:100%;max-height:100%;width:auto;height:auto;border-radius:var(--r);box-shadow:var(--shadow-lg);cursor:default}.zoom-close{position:absolute;top:clamp(.6rem,2vw,1.4rem);right:clamp(.6rem,2vw,1.4rem);font-size:1.5rem;line-height:1;background:var(--bg-panel)}body.zoom-open{overflow:hidden}.pill{display:inline-flex;align-items:center;gap:.3rem;padding:.12rem .6rem;border-radius:var(--r-pill);border:1px solid var(--line);background:var(--bg-sunk);font-size:.79rem;color:var(--ink-dim)}a.pill:hover{color:var(--amber);border-color:rgba(154,95,20,.4);background:rgba(224,167,88,.16)}.pill-quiet{background:0 0;font-family:var(--font-mono);font-size:.75rem}.pill-lg{font-size:.95rem;padding:.3rem .85rem;font-family:var(--font-head)}.pill-count{color:var(--ink-faint);font-size:.8em;border-left:1px solid var(--line);padding-left:.4rem;margin-left:.1rem}.status{font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;padding:.16rem .5rem;border-radius:var(--r-pill);font-family:var(--font-text);white-space:nowrap;border:1px solid}.status-live{color:var(--moss)}.status-wip{color:var(--amber)}.status-archived{color:var(--ink-faint)}.btn{display:inline-flex;align-items:center;gap:.45rem;padding:.55rem 1.1rem;border-radius:var(--r-pill);border:1px solid transparent;background:var(--amber);color:#fff8e9;font-size:.97rem;font-weight:700;cursor:pointer}.btn:hover{background:var(--link-hover);color:#fff8e9;box-shadow:var(--shadow)}.btn:active{transform:translateY(1px)}.btn-sm{padding:.35rem .8rem;font-size:.88rem}.link-cards{list-style:none;margin:2rem 0 0;padding:0;display:grid;gap:.8rem;grid-template-columns:repeat(auto-fill,minmax(min(16.5rem,100%),1fr))}.prose .link-cards>li::before{content:none}.link-card{position:relative;display:flex}.link-card-a{flex:1;display:flex;align-items:flex-start;gap:.9rem;padding:1rem 1.1rem;background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm)}.link-card-a:hover{border-color:rgba(154,95,20,.38);background:var(--bg-raised);box-shadow:var(--shadow)}.link-card-icon{color:var(--amber);padding-top:.15rem}.link-card-body{display:flex;flex-direction:column;gap:.15rem;min-width:0}.link-card-title{font-family:var(--font-head);font-size:1.25rem;color:var(--ink);display:flex;align-items:center;gap:.35rem}.link-card-title .ext{color:var(--ink-faint);opacity:0}.link-card-a:hover .link-card-title .ext{opacity:1}.link-card-handle{font-family:var(--font-mono);font-size:.85rem;color:var(--moss);overflow-wrap:anywhere}.link-card-note{font-size:.92rem;color:var(--ink-dim);line-height:1.5;margin-top:.2rem}.link-card-copy{position:absolute;top:.6rem;right:.6rem;width:1.9rem;height:1.9rem;background:var(--bg-sunk)}.link-card-copy.is-done{color:var(--moss);border-color:var(--moss)}.widget{background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:1rem 1.15rem 1.1rem;box-shadow:var(--shadow-sm)}.widget-title{display:flex;align-items:center;gap:.4rem;margin-bottom:.75rem;padding-bottom:.5rem;border-bottom:1px solid var(--line);font-family:var(--font-text);font-size:.74rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint)}.widget-title .icon{color:var(--amber-dim)}.me{display:flex;align-items:flex-start;gap:.7rem}.me-mark{flex:none}.me-name{font-family:var(--font-head);font-size:1.2rem;color:var(--ink);line-height:1.2}.me-bio{margin-top:.25rem;font-size:.9rem;line-height:1.45;color:var(--ink-dim)}.me-links{display:flex;align-items:center;gap:.7rem;margin-top:.9rem;flex-wrap:wrap}.me-tg{display:inline-flex;align-items:center;gap:.3rem;font-size:.9rem;color:var(--ink-dim)}.me-tg:hover{color:var(--amber)}.side-list{list-style:none;margin:0;padding:0;font-size:.94rem}.side-list li{display:flex;align-items:center;gap:.45rem;padding:.32rem 0;border-bottom:1px dashed var(--line)}.side-list li:last-child{border-bottom:0}.side-list a{color:var(--ink-soft)}.side-list a:hover{color:var(--amber)}.dot-status{width:.45rem;height:.45rem;border-radius:50%;flex:none;margin-left:auto}.dot-live{background:var(--moss)}.dot-wip{background:var(--amber)}.dot-archived{background:var(--ink-faint);opacity:.6}.more-link{display:inline-flex;align-items:center;gap:.3rem;margin-top:.75rem;font-size:.86rem;color:var(--ink-dim)}.more-link:hover{color:var(--amber)}.tag-cloud{display:flex;flex-wrap:wrap;gap:.35rem;list-style:none;margin:0;padding:0}.side-social{list-style:none;margin:0;padding:0}.side-social-a{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.15rem .55rem;padding:.4rem .2rem;border-radius:var(--r-sm);color:var(--ink-soft)}.side-social-a:hover{background:var(--bg-hover);color:var(--amber)}.side-social-a .icon{grid-row:span 2;color:var(--amber-dim)}.side-social-a:hover .icon{color:var(--amber)}.side-social-t{font-size:.92rem;line-height:1.2}.side-social-h{font-family:var(--font-mono);font-size:.76rem;color:var(--ink-faint);overflow-wrap:anywhere}.toc-list{list-style:none;margin:0;padding:0;font-size:.9rem}.toc-a{display:block;padding:.26rem .4rem .26rem .65rem;border-left:2px solid transparent;color:var(--ink-dim);line-height:1.4}.toc-a.toc-l3{padding-left:1.45rem;font-size:.85rem;color:var(--ink-faint)}.toc-a.toc-l4{padding-left:2.2rem;font-size:.83rem;color:var(--ink-faint)}.toc-a:hover{color:var(--ink);border-left-color:var(--line-strong);background:var(--bg-hover)}.toc-a.is-active{color:var(--amber);border-left-color:var(--amber);background:rgba(224,167,88,.14);font-weight:700}.toc-inline{display:none}@media(max-width:960px){.toc-inline{display:block;margin:0 0 1.8rem;padding:.65rem .95rem;background:var(--bg-panel);border:1px solid var(--line);border-radius:var(--r)}.toc-inline summary{display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.74rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-dim)}.toc-inline summary .icon{color:var(--amber-dim)}.toc-inline[open] summary{margin-bottom:.6rem;padding-bottom:.5rem;border-bottom:1px solid var(--line)}}.page{min-width:0}.page-head{margin-bottom:1.7rem;padding-bottom:1rem;border-bottom:1px solid var(--line)}.page-kicker{font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--amber);margin-bottom:.4rem}.page-title{font-size:clamp(1.9rem,4vw,2.7rem);display:flex;align-items:baseline;gap:.7rem;flex-wrap:wrap}.page-title .icon{color:var(--amber-dim)}.page-lead{margin-top:.7rem;font-family:var(--font-head);font-size:1.22rem;font-style:italic;line-height:1.42;color:var(--ink-dim);max-width:72ch}.page-count{margin-top:.6rem;font-size:.85rem;color:var(--ink-faint)}.page-meta{display:flex;flex-wrap:wrap;gap:.4rem 1.1rem;margin-top:.9rem;font-size:.87rem;color:var(--ink-faint)}.meta-item{display:inline-flex;align-items:center;gap:.35rem}.meta-item .icon{color:var(--amber-dim)}.meta-item a{color:var(--ink-dim);border-bottom:1px dotted var(--line-strong)}.meta-item a:hover{color:var(--amber)}.section-intro{margin-bottom:2rem}.page-cover{margin:0 0 1.9rem}.page-cover img{width:100%;border-radius:var(--r-lg);border:1px solid var(--line);box-shadow:var(--shadow)}.page-cover figcaption{margin-top:.6rem;font-size:.9rem;color:var(--ink-dim);text-align:center;font-style:italic}.project-open{display:flex;align-items:center;gap:.9rem;margin-top:1.2rem;flex-wrap:wrap}.project-url{font-family:var(--font-mono);font-size:.88rem;color:var(--moss)}.project-repo{margin-top:.55rem;font-size:.92rem}.project-repo a{display:inline-flex;align-items:center;gap:.4rem;color:var(--ink-dim)}.project-repo a:hover{color:var(--amber)}.project-repo .icon{color:var(--ink-faint)}.project-tech{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.9rem}.empty{padding:2.5rem 0;color:var(--ink-faint);font-family:var(--font-head);font-size:1.25rem;font-style:italic;text-align:center}.post-source{display:flex;align-items:center;gap:.5rem;margin-top:2.5rem;padding:.7rem 1rem;border:1px solid var(--line);border-radius:var(--r);background:var(--bg-panel);font-size:.9rem;color:var(--ink-faint)}.post-source .icon{flex:none;color:var(--amber-dim)}.post-source a{color:var(--ink-dim);text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px}.post-source a:hover{color:var(--amber)}.post-nav{display:flex;gap:1rem;margin-top:3rem;padding-top:1.5rem;border-top:1px solid var(--line);flex-wrap:wrap}.post-nav-a{display:flex;align-items:center;gap:.6rem;flex:1 1 14rem;min-width:0;padding:.85rem 1rem;border:1px solid var(--line);border-radius:var(--r);background:var(--bg-panel);color:var(--ink-soft);box-shadow:var(--shadow-sm)}.post-nav-a:hover{border-color:rgba(154,95,20,.38);background:var(--bg-raised)}.post-nav-a.is-next{justify-content:flex-end;text-align:right}.post-nav-a .icon{color:var(--amber-dim);flex:none}.post-nav-label{display:block;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint)}.post-nav-title{display:block;font-family:var(--font-head);font-size:1.08rem;color:var(--ink);line-height:1.25}.pager{display:flex;align-items:center;justify-content:center;gap:1.2rem;margin-top:2.5rem;flex-wrap:wrap}.pager-a{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .9rem;border:1px solid var(--line);border-radius:var(--r-pill);background:var(--bg-panel);color:var(--ink-soft);font-size:.92rem}.pager-a:hover{border-color:rgba(154,95,20,.4);color:var(--amber)}.pager-a.is-off{opacity:.4;pointer-events:none;background:0 0}.pager-num{font-family:var(--font-head);font-size:1.02rem;color:var(--ink-dim);font-variant-numeric:tabular-nums}.page-404{text-align:center;padding-top:1.5rem}.e404{font-family:var(--font-head);font-size:clamp(5rem,16vw,9rem);line-height:.9;color:var(--amber-dim);opacity:.5}.page-404 .page-title,.page-404 .page-lead{justify-content:center;margin-inline:auto}.page-404 .page-head{border:0}.page-404 .page-actions{margin-top:1.6rem;display:flex;justify-content:center}.g404{margin-top:3rem;text-align:left}.site-foot{position:relative;margin-top:2rem;border-top:1px solid var(--line);background:var(--bg-sunk);overflow:hidden}.site-foot::before{content:'';position:absolute;inset:0;background-image:var(--foot-pattern);background-size:340px;background-position:50%;opacity:.07;filter:saturate(.65);pointer-events:none}.site-foot-in{position:relative;max-width:var(--wrap);margin:0 auto;padding:2rem var(--pad-x)2.4rem;display:flex;flex-wrap:wrap;align-items:flex-start;gap:1.5rem 2.5rem}.foot-brand{display:flex;align-items:center;gap:.75rem}.foot-name{font-family:var(--font-head);font-size:1.2rem;color:var(--ink)}.foot-tag{font-size:.88rem;color:var(--ink-faint);font-style:italic}.foot-nav{flex:1 1 16rem}.foot-nav ul{display:flex;flex-wrap:wrap;gap:.35rem 1.3rem;list-style:none;margin:0;padding:0}.foot-nav a{color:var(--ink-dim);font-size:.95rem;border-bottom:0}.foot-nav a:hover{color:var(--amber)}.foot-meta{display:flex;flex-direction:column;align-items:flex-end;gap:.5rem;margin-left:auto;font-size:.85rem;color:var(--ink-faint)}.foot-rss{display:inline-flex;align-items:center;gap:.35rem;color:var(--ink-dim)}.foot-rss:hover{color:var(--amber)}@media(max-width:700px){.foot-meta{align-items:flex-start;margin-left:0}.post-card.has-thumb{grid-template-columns:minmax(0,1fr)}.card-thumb{border-right:0;border-bottom:1px solid var(--line)}.card-thumb img{min-height:0;aspect-ratio:16/10}}.chroma{background:0 0;color:var(--ink-soft)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--ink-faint);font-style:italic}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt{color:var(--crimson-soft)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .ss{color:var(--amber-soft)}.chroma .sr,.chroma .si{color:var(--glow)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:var(--glow)}.chroma .nf,.chroma .fm{color:#245f8a}.chroma .nc,.chroma .nn,.chroma .ne{color:#7a5a10}.chroma .nt{color:var(--crimson-soft)}.chroma .na,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi{color:#6b4a9c}.chroma .nb,.chroma .bp{color:var(--moss)}.chroma .no,.chroma .nl,.chroma .py{color:var(--amber)}.chroma .o,.chroma .ow{color:var(--ink-dim)}.chroma .p{color:var(--ink-dim)}.chroma .err{color:var(--crimson);background:rgba(207,81,71,.12);border-radius:3px}.chroma .gd{color:var(--crimson-soft);background:rgba(207,81,71,.1);display:inline-block;width:100%}.chroma .gi{color:var(--moss);background:rgba(127,178,119,.12);display:inline-block;width:100%}.chroma .gh,.chroma .gu{color:var(--ink-dim);font-weight:700}.chroma .ge{font-style:italic}.chroma .gs{font-weight:700}.chroma .hl{background:rgba(224,167,88,.12);display:block;margin-inline:-1.15rem;padding-inline:1.15rem;box-shadow:inset 2px 0 0 var(--amber)}.chroma .lnt,.chroma .ln,.chroma .lnlinks{color:var(--ink-faint);opacity:.6;user-select:none;padding-right:.9rem}.highlight{margin:1.5em 0}.highlight>div,.highlight>pre{margin:0}.prose .highlight+.code-caption{margin-top:-1.1em;font-size:.85rem;color:var(--ink-faint);text-align:right;font-style:italic}