:root{--font-sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-mono: "IBM Plex Mono", "SF Mono", ui-monospace, Menlo, monospace;--text-xs: 12px;--text-sm: 13.5px;--text-base: 15.5px;--text-md: 17px;--text-lg: 20px;--text-xl: 26px;--text-2xl: 34px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 24px;--space-6: 32px;--space-7: 48px;--space-8: 64px;--space-9: 96px;--measure: 640px;--gutter: 28px;--bg: oklch(.985 .004 75);--bg-soft: oklch(.965 .005 75);--bg-elev: oklch(.995 .003 75);--fg: oklch(.22 .008 60);--fg-muted: oklch(.5 .008 60);--fg-faint: oklch(.55 .008 60);--rule: oklch(.9 .006 70);--rule-soft: oklch(.94 .005 70);--accent: oklch(.5 .1 155);--accent-soft: oklch(.5 .1 155 / .1);--ease: cubic-bezier(.22, .61, .36, 1);--dur-fast: .14s;--dur: .22s}[data-theme=dark]{--bg: #24213A;--bg-soft: #2C2944;--bg-elev: #353250;--fg: #D0C8EC;--fg-heading: #EDE8F8;--fg-muted: #A8A0C0;--fg-faint: #8E88A8;--rule: #403C5C;--rule-soft: #36324E;--accent: #E8A0B8;--accent-soft: #E8A0B824}[data-theme=dark] .intro h1{background:linear-gradient(135deg,#e8a0b8,#b4a0e8);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}[data-theme=dark] .intro h1 .bloom{-webkit-text-fill-color:initial;background:none}[data-theme=dark] .intro p strong{color:#e0b8d0}[data-theme=dark] .section-label,[data-theme=dark] .section-label a{color:var(--accent)}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-sans);font-size:var(--text-base);line-height:1.6;color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;transition:background var(--dur) var(--ease),color var(--dur) var(--ease)}img,svg{display:block;max-width:100%}a{color:inherit;text-decoration:none;border-bottom:1px solid var(--rule);transition:border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}a:hover{border-bottom-color:var(--accent);color:var(--accent)}p{margin:0 0 1em;text-wrap:pretty}h1,h2,h3,h4{font-weight:500;letter-spacing:-.015em;margin:0;text-wrap:balance}hr{border:0;border-top:1px solid var(--rule-soft);margin:var(--space-7) 0}::selection{background:var(--accent-soft);color:var(--fg)}.page{max-width:var(--measure);margin:0 auto;padding:var(--space-8) var(--gutter) var(--space-9)}@media(max-width:640px){.page{padding:var(--space-7) var(--gutter) var(--space-8)}}.site-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--space-8)}.logo{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:500;letter-spacing:0;color:var(--fg);border:0;display:inline-flex;align-items:center;gap:6px}.logo .bracket{color:var(--fg-faint);transition:color var(--dur) var(--ease)}.logo:hover .bracket{color:var(--accent)}.logo:hover{color:var(--fg)}.nav{display:flex;align-items:center;gap:var(--space-5);font-family:var(--font-mono);font-size:var(--text-xs)}.nav a{border:0;color:var(--fg-muted);text-transform:lowercase;letter-spacing:.02em}.nav a:hover,.nav a[aria-current=page]{color:var(--fg)}.theme-toggle{width:28px;height:28px;border:1px solid var(--rule);background:transparent;border-radius:999px;cursor:pointer;display:grid;place-items:center;color:var(--fg-muted);padding:0;position:relative;transition:border-color var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease),background var(--dur-fast) var(--ease)}.theme-toggle:after{content:"";position:absolute;inset:-8px}.theme-toggle:hover{color:var(--fg);border-color:var(--fg-muted)}.theme-toggle svg{width:13px;height:13px}.theme-toggle .icon-sun{display:none}[data-theme=dark] .theme-toggle .icon-sun{display:block}[data-theme=dark] .theme-toggle .icon-moon{display:none}.intro{margin-bottom:var(--space-8)}.intro h1{font-size:var(--text-2xl);font-weight:600;line-height:1.2;letter-spacing:-.025em;color:var(--fg);margin-bottom:var(--space-5);max-width:560px}.intro h1 .bloom{display:inline-block;font-style:normal}.intro p{font-size:var(--text-base);color:var(--fg-muted);line-height:1.65;max-width:560px}.intro p strong{color:var(--fg);font-weight:500}.section{margin-top:var(--space-8)}.section+.section{margin-top:var(--space-8)}.section-label{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:500;text-transform:lowercase;letter-spacing:.04em;color:var(--fg-faint);margin-bottom:var(--space-4);display:flex;align-items:baseline;justify-content:space-between}.section-label a{border:0;color:var(--fg-faint)}.section-label a:hover{color:var(--accent)}.list{list-style:none;padding:0;margin:0}a.list-item-link{display:block;border:0;border-bottom:1px solid var(--rule-soft);padding:var(--space-3) 0;position:relative}a.list-item-link:last-child{border-bottom:0}a.list-item-link:hover{color:inherit}a.list-item-link:hover .title{color:var(--accent)}a.list-item-link .row{display:grid;grid-template-columns:70px 1fr auto;gap:var(--space-4);align-items:baseline}a.list-item-link .title{font-size:var(--text-base);color:var(--fg);font-weight:500;transition:color var(--dur-fast) var(--ease)}a.list-item-link .desc{font-size:var(--text-sm);color:var(--fg-muted);margin-top:2px;line-height:1.55}a.list-item-link .meta{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-faint);letter-spacing:.02em}a.list-item-link .arrow{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-faint);opacity:0;transform:translate(-4px);transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease),color var(--dur) var(--ease)}a.list-item-link:hover .arrow{opacity:1;transform:translate(0);color:var(--accent)}@media(max-width:560px){a.list-item-link .row{grid-template-columns:1fr;gap:var(--space-1)}a.list-item-link .arrow{display:none}}.tag{display:inline-block;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-muted);background:var(--bg-soft);border:1px solid var(--rule-soft);padding:2px 8px;border-radius:4px;letter-spacing:.02em;text-transform:lowercase}.post-tags{display:inline-flex;gap:var(--space-2);align-items:center;flex-wrap:wrap}.tag-toggle{display:none;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-muted);background:var(--bg-soft);border:1px solid var(--rule-soft);padding:2px 8px;border-radius:4px;cursor:pointer;letter-spacing:.02em;transition:background var(--dur-fast) var(--ease),color var(--dur-fast) var(--ease)}.tag-toggle:hover{color:var(--fg);background:var(--bg-elev)}@media(max-width:640px){.post-header .meta{flex-wrap:wrap}.post-header .meta .meta-sep{display:none}.post-header .meta .post-tags{width:100%;margin-top:var(--space-2)}.post-tags .tag-extra{display:none}.post-tags.expanded .tag-extra{display:inline-block}.tag-toggle{display:inline-flex;align-items:center}}.body a{border-bottom:1px solid var(--rule);color:var(--fg)}.body a:hover{color:var(--accent);border-bottom-color:var(--accent)}.site-footer{margin-top:var(--space-9);padding-top:var(--space-5);border-top:1px solid var(--rule-soft);display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-faint)}.site-footer a{border:0;color:var(--fg-muted)}.site-footer a:hover{color:var(--accent)}.site-footer .links{display:flex;gap:var(--space-4);flex-wrap:wrap}@media(max-width:560px){.site-header,.nav{gap:var(--space-3)}.site-footer{flex-direction:column;align-items:flex-start;gap:var(--space-3)}}.post-header{margin-bottom:var(--space-7)}.post-header .meta{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-faint);margin-bottom:var(--space-3);display:flex;gap:var(--space-3);align-items:center}.post-header h1{font-size:clamp(26px,5vw,34px);font-weight:500;line-height:1.2;letter-spacing:-.02em;margin-bottom:var(--space-3)}.post-header .lede{font-size:var(--text-md);color:var(--fg-muted);line-height:1.55}.prose{font-size:var(--text-md);line-height:1.7;color:var(--fg)}.prose h2{font-size:var(--text-lg);margin:var(--space-7) 0 var(--space-3);font-weight:600;letter-spacing:-.015em;color:var(--fg-heading, var(--fg))}.prose h3{font-size:18.5px;margin:var(--space-6) 0 var(--space-2);font-weight:600;color:var(--fg-heading, var(--fg))}.prose p{margin:0 0 1.1em;color:var(--fg)}.prose a{border-bottom:1px solid var(--rule)}.prose a:hover{color:var(--accent);border-bottom-color:var(--accent)}.prose blockquote{border-left:2px solid var(--accent);padding:2px 0 2px var(--space-4);margin:var(--space-5) 0;color:var(--fg-muted);font-style:italic}.prose code{font-family:var(--font-mono);font-size:.88em;background:var(--bg-soft);border:1px solid var(--rule-soft);padding:1px 5px;border-radius:3px}.prose pre{font-family:var(--font-mono);font-size:var(--text-sm);background:var(--bg-soft)!important;border:1px solid var(--rule-soft);padding:var(--space-4);border-radius:6px;overflow-x:auto;line-height:1.55;margin:var(--space-5) 0}.prose pre code{background:0;border:0;padding:0;font-size:inherit}[data-theme=dark] .prose pre span{color:var(--shiki-dark)!important}.prose ul,.prose ol{padding-left:1.4em;margin:0 0 1.1em}.prose li{margin-bottom:.4em}.prose hr{margin:var(--space-7) 0}.toc{margin-bottom:var(--space-6);border:1px solid var(--rule-soft);border-radius:6px;padding:var(--space-4);background:var(--bg-soft)}.toc details[open] summary{margin-bottom:var(--space-3)}.toc-title{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:500;color:var(--fg-muted);cursor:pointer;user-select:none}.toc ul{list-style:none;padding:0;margin:0}.toc-item{margin-bottom:var(--space-1)}.toc-item a{font-size:var(--text-sm);color:var(--fg-muted);text-decoration:none;border-bottom:none;transition:color var(--dur-fast) var(--ease)}.toc-item a:hover{color:var(--accent)}.toc-depth-3{padding-left:var(--space-4)}.back-link{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-muted);border:0;display:inline-flex;align-items:center;gap:4px;margin-bottom:var(--space-6)}.back-link:hover{color:var(--accent)}.year-group{margin-bottom:var(--space-7)}.year-group .year{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--fg-faint);margin-bottom:var(--space-2);letter-spacing:.04em}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
