.blog-page{max-width:680px;margin:0 auto;padding:clamp(50px,10vw,80px) clamp(20px,5vw,40px);animation:.6s ease-out fadeIn}.blog-header{text-align:center;margin-bottom:60px}.blog-title{color:var(--gray-050);letter-spacing:-.025em;text-wrap:balance;margin-bottom:12px;font-size:clamp(32px,6vw + 1rem,48px);font-weight:700;line-height:1.1}.blog-subtitle{color:var(--gray-400);margin-bottom:24px;font-size:clamp(16px,2vw + .5rem,18px);line-height:1.6}.blog-meta{flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;font-size:15px;display:flex}.back-link,.home-link{color:var(--gray-400);align-items:center;gap:6px;font-size:14px;text-decoration:none;transition:color .3s;display:inline-flex}.blog-header .home-link,.blog-nav .back-link{margin-bottom:24px}.back-link:hover,.home-link:hover{color:var(--clay-hdr)}.archive-link,.rss-link{color:var(--gray-400);align-items:center;gap:6px;text-decoration:none;transition:color .3s;display:inline-flex}.archive-link:hover,.rss-link:hover{color:var(--clay-hdr)}.archive-link .phicon,.rss-link .phicon{color:inherit}.blog-nav{margin-bottom:32px}.blog-posts{margin-bottom:40px}.blog-entry{border-left:1px solid var(--gray-600);contain:layout style;content-visibility:auto;contain-intrinsic-size:auto 120px;opacity:0;margin-bottom:36px;margin-left:-16px;margin-right:-16px;padding:16px 16px 16px 17px;transition:opacity .5s ease-out,transform .5s ease-out,border-color .2s;transform:translateY(20px)}.blog-entry.visible{opacity:1;transform:none}.blog-entry:hover{border-left-color:var(--clay-hdr)}.blog-entry:last-child{margin-bottom:0}.blog-entry-link{color:inherit;text-decoration:none;display:block}.blog-entry-link:visited{color:inherit}.blog-entry-title{letter-spacing:-.01em;margin-bottom:6px;font-size:clamp(16px,1vw + .9rem,18px);font-weight:500;line-height:1.3;transition:color .2s}.blog-entry:hover .blog-entry-title{color:var(--gray-050-hdr)}.blog-entry-title a{color:var(--gray-050);align-items:center;gap:6px;text-decoration:none;transition:color .3s;display:inline-flex}.blog-entry-title a:hover{color:var(--clay-hdr)}.blog-entry-meta{color:var(--gray-200);margin-bottom:10px;font-size:14px;font-weight:400}.blog-entry-meta .separator{margin:0 4px}.blog-entry-description{color:var(--gray-400);margin-bottom:12px;font-size:clamp(14px,1vw + .8rem,16px);line-height:1.7}.blog-entry-tags{flex-wrap:wrap;gap:8px;display:flex}.tag{color:var(--gray-500);background:0 0;border:none;align-items:center;padding:0;font-size:13px;text-decoration:none;transition:color .2s;display:inline-flex}.tag:before{content:"#";opacity:.6;margin-right:1px;transition:opacity .2s}.tag:hover,.tag.active{color:var(--clay-hdr)}.tag:hover:before,.tag.active:before{opacity:1}.blog-post{margin-bottom:48px}.blog-post-header{text-align:center;margin-bottom:48px}.blog-post-title{color:var(--gray-050);letter-spacing:-.02em;text-wrap:balance;margin-bottom:16px;font-size:clamp(24px,4vw + 1rem,36px);font-weight:700;line-height:1.2}.blog-post-meta{color:var(--gray-400);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;margin-bottom:16px;font-size:14px;display:flex}.blog-post-tags{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.blog-post-content{color:var(--gray-400);font-size:clamp(16px,1vw + .9rem,17px);line-height:1.8}.blog-post-content h2{color:var(--gray-050);letter-spacing:-.01em;margin-top:48px;margin-bottom:16px;font-size:clamp(20px,2vw + 1rem,24px);font-weight:600}.blog-post-content h3{color:var(--gray-050);margin-top:32px;margin-bottom:12px;font-size:clamp(17px,1.5vw + .8rem,20px);font-weight:500}.blog-post-content h4{color:var(--gray-200);margin-top:24px;margin-bottom:8px;font-size:17px;font-weight:500}.blog-post-content p{margin-bottom:20px}.blog-post-content a{color:var(--clay-hdr);text-decoration:underline;text-decoration-color:var(--clay-alpha-30);text-underline-offset:3px;transition:text-decoration-color .2s}.blog-post-content a:hover{text-decoration-color:var(--clay-hdr)}.blog-post-content ul,.blog-post-content ol{margin-bottom:20px;padding-left:24px}.blog-post-content li{margin-bottom:8px}.blog-post-content li::marker{color:var(--gray-600)}.blog-post-content blockquote{border-left:3px solid var(--clay-hdr);color:var(--gray-400);margin:24px 0;padding-left:20px;font-style:italic}.blog-post-content blockquote p:last-child{margin-bottom:0}.blog-post-content img{max-width:100%;height:auto;margin:24px 0}.blog-post-content hr{border:none;border-top:1px solid var(--gray-800);margin:40px 0}.blog-post-content code{background:var(--gray-850);padding:2px 6px;font-family:JetBrains Mono,Fira Code,SF Mono,monospace;font-size:.9em}.blog-post-content pre{border:none;border-left:1px solid var(--gray-600);scrollbar-width:thin;scrollbar-color:var(--gray-700)var(--gray-900);background:0 0;margin:24px 0;padding:16px 0 16px 20px;overflow-x:auto}.blog-post-content pre code{color:var(--gray-200);background:0 0;padding:0;font-size:14px;line-height:1.6}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#637777;font-style:italic}.token.punctuation{color:#89ddff}.token.namespace{opacity:.7}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:#f78c6c}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#c3e88d}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{color:#89ddff}.token.atrule,.token.attr-value,.token.keyword{color:#c792ea}.token.function,.token.class-name{color:#82aaff}.token.regex,.token.important,.token.variable{color:#f07178}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.highlight-line{background:color-mix(in srgb,var(--clay)10%,transparent);border-left:3px solid var(--clay-hdr);width:calc(100% + 40px);margin-left:-20px;padding-left:17px;display:inline-block}.token.deleted{background:#f43f5e26}.token.inserted{background:#22c55e26}.blog-post-content pre::-webkit-scrollbar{background:0 0;height:8px}.blog-post-content pre::-webkit-scrollbar-track{background:var(--gray-900);border-radius:4px}.blog-post-content pre::-webkit-scrollbar-thumb{background:var(--gray-700);border-radius:4px}.blog-post-content pre::-webkit-scrollbar-thumb:hover{background:var(--gray-600)}.blog-post-content table{border-collapse:collapse;width:100%;margin:24px 0}.blog-post-content th,.blog-post-content td{text-align:left;border-bottom:1px solid var(--gray-800);padding:12px}.blog-post-content th{color:var(--gray-200);font-weight:500}.blog-footer{color:var(--gray-600);justify-content:space-between;align-items:center;margin-top:40px;font-size:14px;display:flex}@media (width<=768px){.blog-header{margin-bottom:48px}.blog-entry{margin-bottom:32px;margin-left:-12px;margin-right:-12px;padding:12px}.blog-meta{flex-direction:column;gap:10px}.blog-meta .separator{display:none}.blog-post-content pre{padding:12px 0 12px 16px}.blog-post-content pre code{font-size:13px}}@media (width<=480px){.blog-header{margin-bottom:40px}.blog-entry{margin-bottom:28px;margin-left:-10px;margin-right:-10px;padding:10px}.blog-entry-meta{font-size:13px}.blog-footer{text-align:center;flex-direction:column;gap:16px}}.blog-search{max-width:400px;margin:0 auto 48px}.search-input-wrapper{border-bottom:1px solid var(--gray-700);align-items:center;transition:border-color .2s;display:flex;position:relative}.search-input-wrapper .phicon{color:var(--gray-500);pointer-events:none;flex-shrink:0}#blog-search{width:100%;color:var(--gray-200);background:0 0;border:none;border-radius:0;padding:8px 0 8px 12px;font-family:inherit;font-size:15px}#blog-search::placeholder{color:var(--gray-500)}#blog-search:focus{outline:none}.search-input-wrapper:focus-within{border-bottom-color:var(--clay-hdr)}#blog-search::-webkit-search-cancel-button,#blog-search::-webkit-search-decoration{-webkit-appearance:none;appearance:none}.empty-state{text-align:center;color:var(--gray-500);padding:64px 24px}.empty-state .phicon{width:48px;height:48px;margin:0 auto 16px}.empty-state p{margin-bottom:20px;font-size:16px}.clear-search-btn{color:var(--gray-500);border:1px solid var(--gray-700);cursor:pointer;background:0 0;align-items:center;gap:6px;padding:10px 20px;font-family:inherit;font-size:14px;transition:border-color .2s,color .2s;display:inline-flex}.clear-search-btn:hover{border-color:var(--gray-500);color:var(--gray-300)}.reading-progress{background:linear-gradient(90deg,var(--clay)0%,var(--clay-hdr)100%);z-index:1000;width:0;height:2px;transition:width .1s ease-out;position:fixed;bottom:0;left:0}.toc{border:none;border-left:1px solid var(--gray-600);background:0 0;margin:32px 0;padding:16px 0 16px 20px}.toc details{margin:0}.toc summary{letter-spacing:.03em;text-transform:uppercase;color:var(--gray-400);cursor:pointer;user-select:none;align-items:center;gap:8px;padding-bottom:0;font-size:13px;font-weight:600;list-style:none;transition:color .2s;display:flex}.toc summary:hover{color:var(--gray-200)}.toc summary::-webkit-details-marker{display:none}.toc summary:before{content:"▶";color:var(--gray-500);font-size:10px;transition:transform .2s}.toc details[open] summary:before{transform:rotate(90deg)}.toc summary:focus-visible{outline:2px solid var(--clay-hdr);outline-offset:4px;box-shadow:var(--focus-glow);border-radius:4px}.toc ul,.toc ol{margin:12px 0 0;padding:0 0 0 18px;list-style:none}.toc li{margin:0;padding:6px 0;font-size:14px;line-height:1.4}.toc li ol,.toc li ul{margin:4px 0 0 16px}.toc li li{color:var(--gray-500);padding:4px 0;font-size:13px}.toc li li:before{content:"—";color:var(--gray-600);margin-right:8px}.toc a{color:var(--gray-400);text-decoration:none;transition:color .2s}.toc a:hover{color:var(--clay-hdr)}.toc>details>nav{display:contents}.code-block{margin:24px 0;position:relative}.code-block pre{margin:0;padding-top:36px}.code-lang{color:var(--gray-500);text-transform:uppercase;letter-spacing:.5px;pointer-events:none;font-size:11px;font-weight:500;position:absolute;top:8px;left:12px}.copy-btn{width:32px;height:32px;color:var(--gray-600);cursor:pointer;opacity:0;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:opacity .2s,color .2s;display:flex;position:absolute;top:8px;right:8px}.code-block:hover .copy-btn{opacity:1}.copy-btn:hover{color:var(--gray-300)}.copy-btn:active{transform:scale(.95)}.copy-btn.copied{color:var(--clay-hdr)}.copy-btn .phicon{width:16px;height:16px}.mermaid-container{border:none;border-left:1px solid var(--gray-600);background:0 0;margin:24px 0;overflow:visible}.mermaid-controls{background:0 0;border-bottom:none;justify-content:flex-start;align-items:center;gap:8px;padding:0 0 12px 20px;display:flex}.mermaid-controls button{width:32px;height:32px;color:var(--gray-600);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:color .15s;display:flex}.mermaid-controls button:hover{color:var(--gray-300)}.mermaid-controls button:active{transform:scale(.95)}.mermaid-zoom-level{text-align:center;min-width:48px;color:var(--gray-400);font-variant-numeric:tabular-nums;font-size:13px;font-weight:500}.mermaid-viewport{cursor:grab;min-height:80px;padding:20px;position:relative;overflow:visible}.mermaid-viewport:active{cursor:grabbing}.mermaid-viewport .mermaid{background:0 0;border:none;margin:0;padding:0;display:block}.mermaid svg{user-select:none;width:auto;height:auto;display:block;background:0 0!important;max-width:none!important}.mermaid rect[class=""],.mermaid svg>rect,.mermaid .sequenceDiagram>rect{fill:#0000!important;stroke:none!important}.mermaid .node rect,.mermaid .node circle,.mermaid .node polygon,.mermaid .node ellipse{fill:var(--gray-950)!important;stroke:var(--gray-600)!important;stroke-width:1px!important;rx:0!important;ry:0!important}.mermaid .node .label,.mermaid .nodeLabel{color:var(--gray-300)!important}.mermaid .edgeLabel{background-color:var(--gray-950)!important;color:var(--gray-500)!important}.mermaid .edgePath path,.mermaid .flowchart-link{stroke:var(--gray-600)!important;stroke-width:1px!important}.mermaid .marker,.mermaid marker path{fill:var(--gray-600)!important;stroke:var(--gray-600)!important}.mermaid .actor{fill:#0000!important;stroke:var(--gray-600)!important;stroke-width:1px!important;rx:0!important;ry:0!important}.mermaid .actor-line{stroke:var(--gray-700)!important;stroke-dasharray:4 4!important}.mermaid .messageLine0,.mermaid .messageLine1{stroke:var(--gray-600)!important;stroke-width:1px!important}.mermaid .messageText{fill:var(--gray-400)!important}.mermaid .note{fill:#0000!important;stroke:var(--clay)!important;stroke-width:1px!important}.mermaid .noteText{fill:var(--gray-400)!important}.mermaid .activation0,.mermaid .activation1,.mermaid .activation2{fill:#0000!important;stroke:var(--gray-600)!important;stroke-width:1px!important}.mermaid text{fill:var(--gray-300)!important}.mermaid .labelText,.mermaid .cluster-label text{fill:var(--gray-400)!important}.mermaid .cluster rect{fill:var(--gray-950)!important;stroke:var(--gray-700)!important;stroke-width:1px!important;stroke-dasharray:4 4!important}.series-nav{border:none;border-left:1px solid var(--gray-600);background:0 0;margin:32px 0;padding:16px 0 16px 20px}.series-header{align-items:center;gap:8px;margin-bottom:16px;display:flex}.series-label{color:var(--gray-500);text-transform:uppercase;letter-spacing:.5px;font-size:12px}.series-name{color:var(--gray-200);font-size:14px}.series-list{margin:0;padding:0 0 0 20px;list-style-position:inside}.series-list li{color:var(--gray-400);margin:8px 0;font-size:14px}.series-list li.current{color:var(--gray-050);font-weight:500}.series-list li.current::marker{color:var(--gray-050)}.series-list a{color:var(--gray-400);text-decoration:none;transition:color .2s}.series-list a:hover,.series-list li:has(a:hover),.series-list li:has(a:hover)::marker{color:var(--clay-hdr)}.related-posts{margin:48px 0}.related-posts h2{color:var(--gray-200);margin-bottom:20px;font-size:18px;font-weight:500}.related-posts-grid{gap:16px;display:grid}.related-post-card{border:none;border-left:1px solid var(--gray-600);color:inherit;background:0 0;flex-direction:column;gap:4px;padding:12px 0 12px 16px;text-decoration:none;transition:border-color .2s;display:flex}.related-post-card:visited{color:inherit}.related-post-card:hover{border-left-color:var(--clay-hdr)}.related-post-title{color:var(--gray-200);font-size:15px;font-weight:500;line-height:1.4}.related-post-date{color:var(--gray-500);font-size:13px}.post-navigation{grid-template-columns:1fr 1fr;gap:16px;margin:48px 0;display:grid}.prev-post,.next-post{border:none;border-left:1px solid var(--gray-600);color:inherit;background:0 0;flex-direction:column;gap:4px;padding:12px 0 12px 16px;text-decoration:none;transition:border-color .2s;display:flex}.prev-post:visited,.next-post:visited{color:inherit}.prev-post:hover{border-left-color:var(--clay-hdr)}.prev-post:empty,.next-post:empty,.prev-post:empty:hover,.next-post:empty:hover{border-left-color:#0000;border-right-color:#0000}.next-post{text-align:right;border-left:none;border-right:1px solid var(--gray-600);padding:12px 16px 12px 0}.next-post:hover{border-right-color:var(--clay-hdr)}.nav-label{color:var(--gray-500);text-transform:uppercase;letter-spacing:.5px;align-items:center;gap:6px;font-size:12px;display:flex}.next-post .nav-label{justify-content:flex-end}.nav-title{color:var(--gray-300);font-size:15px;font-weight:500;line-height:1.4}.archives-content{margin-top:32px}.archive-year{margin-bottom:40px}.archive-year h2{color:var(--clay-hdr);border-bottom:1px solid var(--gray-850);margin-bottom:16px;padding-bottom:8px;font-size:24px;font-weight:700}.archive-list{margin:0;padding:0;list-style:none}.archive-list li{border-bottom:1px solid var(--gray-850);align-items:baseline;gap:16px;padding:12px 0;display:flex}.archive-list li:last-child{border-bottom:none}.archive-list time{color:var(--gray-500);flex-shrink:0;font-family:JetBrains Mono,monospace;font-size:13px}.archive-list a{color:var(--gray-300);font-size:15px;text-decoration:none;transition:color .2s}.archive-list a:hover{color:var(--clay-hdr)}.post-author{font-style:italic}@media (width<=768px){.post-navigation{grid-template-columns:1fr}.next-post{text-align:left;border-right:none;border-left:1px solid var(--gray-600);padding:12px 0 12px 16px}.next-post:hover{border-right-color:#0000;border-left-color:var(--clay-hdr)}.next-post .nav-label{justify-content:flex-start}.archive-list li{flex-direction:column;gap:4px}}@media (width<=600px){.toc,.series-nav{padding:12px 0 12px 16px}}@media (width<=480px){#blog-search{padding:8px 0 8px 10px;font-size:14px}.search-input-wrapper .phicon{width:14px;height:14px}.reading-progress{height:2px}}@media (prefers-reduced-motion:reduce){.reading-progress{transition:none}.blog-entry{opacity:1!important;transform:none!important}}@media (hover:none) and (pointer:coarse){.tag:active,.copy-btn:active,.blog-entry-title a:active,.archive-link:active,.rss-link:active,.back-link:active,.home-link:active{opacity:.7;transform:scale(.98)}.tag{min-height:44px}}@media (hover:none) and (pointer:coarse),(width<=768px){.code-block .copy-btn{opacity:1}}.tag:focus-visible,.copy-btn:focus-visible,.mermaid-controls button:focus-visible,.clear-search-btn:focus-visible,.prev-post:focus-visible,.next-post:focus-visible,.related-post-card:focus-visible{outline:2px solid var(--clay-hdr);outline-offset:4px;box-shadow:var(--focus-glow)}@media (forced-colors:active){.blog-entry,.toc,.series-nav,.code-block pre,.tag{border:1px solid canvastext}.reading-progress{background:canvastext}}@media print{*{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}body{color:#333;background-color:#fff;font-size:11pt}.blog-page{max-width:100%;margin:0;padding:20pt}.blog-title,.blog-post-title{color:#000;font-size:18pt}.blog-subtitle{color:#666;font-size:12pt}.blog-entry-title,.blog-post-content h2,.blog-post-content h3{color:#000}.blog-entry-meta,.blog-post-meta{color:#666;font-size:10pt}.blog-entry-description,.blog-post-content{color:#333;font-size:10pt;line-height:1.5}.back-link,.home-link,.reading-progress,.copy-btn,.mermaid-controls{display:none!important}.blog-entry,.blog-post,.toc,.series-nav{page-break-inside:avoid;content-visibility:visible;border-left-color:#ccc}.blog-post-content a{color:#06c;text-decoration:underline}.blog-post-content pre{background:#f5f5f5;border-left-color:#ccc;padding:8pt}.blog-post-content code{background:#f0f0f0}.tag{color:#666}}