.blog-header-nav{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:40px;display:flex}.blog-header-nav-right{align-items:center;gap:16px;display:flex}.blog-header{margin-bottom:60px}.blog-title{font-family:var(--font-display);color:var(--gray-050);letter-spacing:-.03em;text-wrap:balance;margin-bottom:12px;font-size:clamp(36px,7vw + 1rem,56px);font-weight:400;line-height:1.1}.blog-subtitle{color:var(--gray-400);font-size:clamp(16px,2vw + .5rem,18px);line-height:1.6}.back-link,.home-link,.archive-link,.rss-link{color:var(--gray-400);transition:color var(--transition-base);align-items:center;gap:6px;text-decoration:none;display:inline-flex}.back-link,.home-link{font-size:14px}.blog-nav .back-link{margin-bottom:24px}.back-link:hover,.home-link:hover,.archive-link:hover,.rss-link:hover{color:var(--accent)}.blog-nav{margin-bottom:32px}.blog-posts{margin-bottom:40px}.blog-entry{contain:layout style;content-visibility:auto;contain-intrinsic-size:auto 120px;opacity:0;border-left:none;margin-bottom:12px;margin-left:-16px;margin-right:-16px;padding:16px;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{background:var(--white-alpha-2);border-radius:var(--radius-sm)}.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;transition:color var(--transition-fast);margin-bottom:6px;font-size:clamp(16px,1vw + .9rem,18px);font-weight:500;line-height:1.3}.blog-entry:hover .blog-entry-title{color:var(--gray-050-hdr)}.blog-entry-title a{color:var(--gray-050);transition:color var(--transition-base);align-items:center;gap:6px;text-decoration:none;display:inline-flex}.blog-entry-title a:hover{color:var(--accent)}.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);transition:color var(--transition-fast);background:0 0;border:none;align-items:center;padding:0;font-size:13px;text-decoration:none;display:inline-flex}.tag:before{content:"#";opacity:.6;transition:opacity var(--transition-fast);margin-right:1px}.tag:hover,.tag.active{color:var(--accent)}.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{font-family:var(--font-display);color:var(--gray-050);letter-spacing:-.02em;text-wrap:balance;margin-bottom:16px;font-size:clamp(28px,5vw + 1rem,42px);font-weight:400;line-height:1.2}.blog-category-label{text-transform:uppercase;letter-spacing:.08em;color:var(--accent);margin-bottom:12px;font-size:12px;font-weight:500;display:block}.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{font-family:var(--font-display);color:var(--gray-050);letter-spacing:-.01em;margin-top:48px;margin-bottom:16px;font-size:clamp(22px,2vw + 1rem,28px);font-weight:400}.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(--accent);text-decoration:underline;text-decoration-color:var(--accent-alpha-30);text-underline-offset:3px;transition:text-decoration-color var(--transition-fast)}.blog-post-content a:hover{text-decoration-color:var(--accent)}.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{background:var(--white-alpha-2);border:var(--border-surface);border-radius:var(--radius-lg);padding:var(--card-padding);color:var(--gray-400);margin:24px 0;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{background:var(--white-alpha-8);border:none;width:48px;height:1px;margin:48px auto}.blog-post-content code{font-family:var(--font-mono);background:var(--white-alpha-5);color:var(--accent);border-radius:var(--radius-xs);padding:2px 6px;font-size:.9em}.blog-post-content pre{background:var(--white-alpha-3);border:var(--border-surface-strong);border-radius:var(--radius-lg);padding:var(--card-padding);scrollbar-width:thin;scrollbar-color:var(--gray-700)transparent;margin:24px 0;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(--accent)10%,transparent);border-left:3px solid var(--accent);width:calc(100% + 40px);margin-left:-20px;padding-left:17px;padding-right:20px;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:var(--radius-xs)}.blog-post-content pre::-webkit-scrollbar-thumb{background:var(--gray-700);border-radius:var(--radius-xs)}.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:10px;margin-left:-12px;margin-right:-12px;padding:12px}.blog-post-content pre{padding:12px 16px}.blog-post-content pre code{font-size:13px}}@media (width<=480px){.blog-header{margin-bottom:40px}.blog-entry{margin-bottom:8px;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 0 48px}.search-input-wrapper{border-bottom:1px solid var(--gray-700);transition:border-color var(--transition-fast);align-items:center;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);-webkit-appearance:none;appearance:none;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-visible{outline:none}.search-input-wrapper:focus-within{border-bottom-color:var(--accent)}#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;transition:border-color var(--transition-fast),color var(--transition-fast);background:0 0;align-items:center;gap:6px;padding:10px 20px;font-family:inherit;font-size:14px;display:inline-flex}.clear-search-btn:hover{border-color:var(--gray-500);color:var(--gray-300)}.toc{padding:var(--card-padding);background:var(--white-alpha-2);border:var(--border-surface);border-radius:var(--radius-lg);margin:32px 0}.toc details{margin:0}.toc summary{letter-spacing:.08em;text-transform:uppercase;color:var(--accent);cursor:pointer;user-select:none;transition:color var(--transition-fast);align-items:center;gap:8px;padding-bottom:0;font-size:11px;font-weight:500;list-style:none;display:flex}.toc summary:hover{color:var(--gray-050)}.toc summary::-webkit-details-marker{display:none}.toc summary:before{content:"▶";color:var(--accent);transition:transform var(--transition-fast);font-size:8px}.toc details[open] summary:before{transform:rotate(90deg)}.toc summary:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:var(--radius-xs);box-shadow:var(--focus-glow)}.toc ul,.toc ol{flex-direction:column;gap:2px;margin:12px 0 0;padding:0;list-style:none;display:flex}.toc li{border-radius:var(--radius-sm);transition:background var(--transition-fast);margin:0;padding:6px 10px;font-size:14px;line-height:1.4}.toc li:has(>a:hover),.toc li:has(>a.active){background:var(--white-alpha-3)}.toc li ol,.toc li ul{margin:4px 0 0 12px}.toc li li{color:var(--gray-500);padding:4px 10px;font-size:13px}.toc li li:before{content:"—";color:var(--gray-600);margin-right:8px}.toc a{color:var(--gray-400);transition:color var(--transition-fast);text-decoration:none}.toc a:hover,.toc a.active{color:var(--accent)}.toc>details>nav{display:contents}.code-block{background:var(--white-alpha-5);border:var(--border-surface-stronger);border-radius:var(--radius-lg);margin:24px 0;position:relative;overflow:hidden}.code-block pre{background:var(--white-alpha-3);border:var(--border-surface);border-radius:var(--radius-md);padding:var(--card-padding);margin:0 8px 8px}.code-lang{font-family:var(--font-mono);color:var(--gray-500);text-transform:uppercase;letter-spacing:.5px;border-bottom:var(--border-surface-strong);padding:10px 16px;font-size:11px;font-weight:500;display:block}.copy-btn{width:32px;height:32px;color:var(--gray-600);cursor:pointer;opacity:0;transition:opacity var(--transition-fast),color var(--transition-fast);background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:6px;right:12px}.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(--accent)}.copy-btn .phicon{width:16px;height:16px}.blog-post-content pre.mermaid{background:0 0;border:none;padding:20px 0;overflow-x:auto}.mermaid svg{user-select:none;width:auto;height:auto;margin:0 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,.mermaid .statediagram-state rect,.mermaid .state-default rect,.mermaid .classGroup rect,.mermaid .entityBox{fill:var(--gray-900)!important;stroke:var(--gray-600)!important;stroke-width:1px!important;rx:8px!important;ry:8px!important}.mermaid .node .label,.mermaid .nodeLabel{color:var(--gray-300)!important;font-family:Geist,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif!important}.mermaid .edgePath path,.mermaid .flowchart-link,.mermaid .transition path,.mermaid [class*=statediagram] path.transition,.mermaid .relation,.mermaid .relationshipLine{stroke:var(--gray-600)!important;stroke-width:1px!important}.mermaid .marker,.mermaid marker path,.mermaid defs marker path.relation{fill:var(--gray-600)!important;stroke:var(--gray-600)!important}.mermaid .edgeLabel{background-color:var(--gray-900)!important;color:var(--gray-500)!important}.mermaid .edgeLabel rect,.mermaid .transition .label rect,.mermaid [class*=statediagram] .edgeLabel rect{fill:var(--gray-900)!important;stroke:none!important;rx:4px!important;ry:4px!important;opacity:.8!important}.mermaid .transition .label text,.mermaid [class*=statediagram] .edgeLabel text{fill:var(--gray-500)!important}.mermaid text,.mermaid span,.mermaid p,.mermaid foreignObject div{font-family:Geist,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif!important}.mermaid text{fill:var(--gray-300)!important}.mermaid .labelText,.mermaid .cluster-label text{fill:var(--gray-400)!important}.mermaid .cluster rect,.mermaid .statediagram-cluster rect{fill:var(--gray-950)!important;stroke:var(--gray-700)!important;stroke-width:1px!important;stroke-dasharray:4 4!important;rx:8px!important;ry:8px!important}.mermaid .note,.mermaid .statediagram-note rect{fill:#0000!important;stroke:var(--accent)!important;stroke-width:1px!important;rx:8px!important;ry:8px!important}.mermaid .noteText,.mermaid .statediagram-note text{fill:var(--gray-400)!important}.mermaid .actor{fill:#0000!important;stroke:var(--gray-600)!important;stroke-width:1px!important;rx:8px!important;ry:8px!important}.mermaid .actor-line,.mermaid .loopLine{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,.mermaid .loopText,.mermaid .loopText>tspan,.mermaid .relationshipLabel text{fill:var(--gray-400)!important}.mermaid .activation0,.mermaid .activation1,.mermaid .activation2{fill:#0000!important;stroke:var(--gray-600)!important;stroke-width:1px!important}.mermaid .labelBox{fill:var(--gray-900)!important;stroke:var(--gray-600)!important;rx:4px!important;ry:4px!important}.mermaid .start-state,.mermaid .end-state-inner{fill:var(--gray-400)!important;stroke:var(--gray-400)!important}.mermaid .end-state-outer{fill:#0000!important;stroke:var(--gray-400)!important}.mermaid .fork-join{fill:var(--gray-600)!important;stroke:none!important}.mermaid .classGroup text,.mermaid .classLabel text,.mermaid .entityLabel text,.mermaid .attributeBoxEven,.mermaid .attributeBoxOdd{fill:var(--gray-300)!important}.mermaid .classGroup line,.mermaid .divider{stroke:var(--gray-600)!important}.mermaid .cardinality text,.mermaid .composition,.mermaid .aggregation,.mermaid .dependency{fill:var(--gray-600)!important}.mermaid .grid .tick line{stroke:var(--gray-800)!important}.mermaid .grid .tick text{fill:var(--gray-500)!important}.mermaid .section{fill:var(--gray-950)!important;stroke:none!important}.mermaid .task{rx:4px!important;ry:4px!important}.mermaid .today{stroke:var(--accent)!important;stroke-width:2px!important}.mermaid .pieTitleText{fill:var(--gray-300)!important}.mermaid text.slice{fill:var(--gray-050)!important;paint-order:stroke fill!important;stroke:var(--gray-950)!important;stroke-width:3px!important;stroke-linejoin:round!important;font-size:13px!important;font-weight:600!important}.mermaid path.slice{stroke:var(--gray-950)!important;stroke-width:1px!important}.mermaid .legend text{fill:var(--gray-400)!important}.series-nav{padding:var(--card-padding);background:var(--white-alpha-2);border:var(--border-surface);border-radius:var(--radius-lg);margin:32px 0}.series-header{flex-direction:column;gap:4px;margin-bottom:16px;display:flex}.series-label{color:var(--accent);text-transform:uppercase;letter-spacing:.08em;font-size:11px;font-weight:500}.series-name{color:var(--gray-050);font-size:15px;font-weight:500}.series-list{counter-reset:series;flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.series-list li{counter-increment:series;color:var(--gray-400);border-radius:var(--radius-sm);transition:background var(--transition-fast);margin:0;padding:8px 12px 8px 32px;font-size:14px;position:relative}.series-list li:before{content:counter(series);color:var(--gray-600);font-variant-numeric:tabular-nums;font-size:13px;font-weight:500;position:absolute;left:10px}.series-list li.current{color:var(--gray-050);background:color-mix(in srgb,var(--accent)6%,transparent);font-weight:500}.series-list li.current:before{color:var(--accent)}.series-list a{color:var(--gray-400);transition:color var(--transition-fast);text-decoration:none}.series-list a:hover{color:var(--accent)}.series-list li:has(a:hover){background:var(--white-alpha-3)}.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,.prev-post,.next-post{border:var(--border-surface);border-radius:var(--radius-md);color:inherit;transition:background var(--transition-fast);background:0 0;flex-direction:column;gap:4px;padding:12px 16px;text-decoration:none;display:flex}.related-post-card:visited,.prev-post:visited,.next-post:visited{color:inherit}.related-post-card:hover,.prev-post:hover,.next-post:hover{background:var(--white-alpha-2)}.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:empty,.next-post:empty{border-color:#0000}.prev-post:empty:hover,.next-post:empty:hover{background:0 0}.next-post{text-align:right}.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(--accent);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);font-size:13px;font-family:var(--font-mono);flex-shrink:0}.archive-list a{color:var(--gray-300);transition:color var(--transition-fast);font-size:15px;text-decoration:none}.archive-list a:hover{color:var(--accent)}.post-author{font-style:italic}@media (width<=768px){.post-navigation{grid-template-columns:1fr}.next-post{text-align:left}.next-post .nav-label{justify-content:flex-start}.archive-list li{flex-direction:column;gap:4px}}@media (width<=600px){.toc,.series-nav{padding:12px 16px}}@media (width<=480px){#blog-search{padding:8px 0 8px 10px;font-size:14px}.search-input-wrapper .phicon{width:14px;height:14px}}@media (prefers-reduced-motion:reduce){.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,.clear-search-btn:focus-visible,.prev-post:focus-visible,.next-post:focus-visible,.related-post-card:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:var(--radius-xs);box-shadow:var(--focus-glow)}@media (forced-colors:active){.blog-entry,.toc,.series-nav,.code-block pre,.tag{border:1px solid canvastext}}@media print{.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,.blog-search,.blog-header-nav,.post-navigation,.blog-footer{display:none!important}.blog-entry,.blog-post{page-break-inside:avoid;content-visibility:visible}.toc,.series-nav{page-break-inside:avoid;content-visibility:visible;background:#f9f9f9;border:1px solid #ccc}.toc details{display:block}.toc details>summary{display:none}.toc details>nav,.toc details>ol,.toc details>ul{display:block!important}.series-list li.current{background:#f0f0f0}.series-list li.current:before,.series-label,.blog-category-label{color:#8b6914}.blog-post-content a{color:#06c;text-decoration:underline}.blog-post-content a[href^=http]:after{content:" (" attr(href)")";color:#666;word-break:break-all;font-size:8pt;font-weight:400}.blog-post-content pre{background:#f5f5f5;border-color:#ccc;padding:8pt}.blog-post-content code{color:#8b6914;background:#f0f0f0}.highlight-line{background:#f5f0e0;border-left-color:#8b6914}.mermaid svg{max-width:100%!important}.mermaid text{fill:#333!important}.mermaid .node rect,.mermaid .node circle,.mermaid .node polygon,.mermaid .node ellipse{fill:#f5f5f5!important;stroke:#999!important}.mermaid .edgePath path,.mermaid .flowchart-link,.mermaid marker path{fill:#666!important;stroke:#666!important}.mermaid .edgeLabel{color:#555!important;background-color:#fff!important}.mermaid .edgeLabel rect{fill:#fff!important}.mermaid .cluster rect{fill:#fafafa!important;stroke:#ccc!important}.mermaid .note,.mermaid .today{stroke:#8b6914!important}.mermaid .noteText{fill:#555!important}.tag{color:#666}}