@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100 900;src:url(/inter-variable.woff2) format("woff2")}:root{--wa-font-family-body:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif!important}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important}.wa-heading-l,.wa-heading-m,.wa-heading-s,wa-dialog::part(title){font-weight:400;letter-spacing:.04em}:root{--blog-primary:#6366f1;--blog-primary-hover:#4f46e5;--blog-primary-muted:rgba(99,102,241,.1);--blog-accent:#22d3ee;--blog-accent-hover:#06b6d4;--blog-bg:#f5f5f5;--blog-surface:#fff;--blog-surface-raised:#f3f4f6;--blog-border:#e5e7eb;--blog-border-dashed:#d1d5db;--blog-text:#111827;--blog-text-secondary:#374151;--blog-text-muted:#6b7280;--blog-text-light:#9ca3af;--blog-font:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--blog-font-mono:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;--blog-radius:8px;--blog-radius-sm:4px;--blog-radius-lg:12px;--blog-shadow-sm:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);--blog-shadow-md:0 4px 16px rgba(0,0,0,.08),0 2px 8px rgba(0,0,0,.04);--blog-header-height:64px;--blog-content-max:720px;--blog-toc-width:216px;--blog-layout-gap:128px;--blog-transition:0.18s ease}*,:after,:before{box-sizing:border-box}html{overflow-x:hidden;scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{color:var(--blog-text);font-family:var(--blog-font);font-size:16px;line-height:1.6;margin:0;opacity:0;overflow-x:clip;padding:0;transition:opacity .4s ease}body.loaded{opacity:1}wa-page::part(navigation-toggle){display:none}wa-page::part(skip-to-content){display:none}a:focus-visible{border-radius:var(--wa-panel-border-radius);outline:var(--wa-focus-ring);outline-offset:var(--wa-focus-ring-offset)}.blog-toc-link:focus-visible{outline-offset:-4px}header{background:var(--wa-color-gray-95);background-image:radial-gradient(circle,color-mix(in srgb,var(--wa-color-gray-80) 30%,var(--wa-color-gray-90) 70%) 1px,transparent 1px);background-size:17px 20px;border-bottom:1px dashed var(--wa-color-gray-80);padding:var(--wa-space-m) var(--wa-space-s) var(--wa-space-m) var(--wa-space-s);position:sticky;z-index:3}header h1{background:var(--wa-color-surface-default);border:1px dashed var(--wa-color-gray-80);border-radius:var(--wa-panel-border-radius);box-shadow:var(--wa-shadow-s);color:var(--wa-color-gray-50);opacity:.8;padding:var(--wa-space-xs)}header h1.wa-body-s{font-size:var(--wa-font-size-s)!important;font-weight:400!important;line-height:var(--wa-line-height-normal)!important;margin:0!important}#home{background-color:var(--wa-color-surface-default);border-radius:var(--wa-panel-border-radius);box-shadow:inset var(--wa-shadow-s);display:grid;padding:var(--wa-space-2xs);place-items:center;user-select:none!important;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important}#home img{left:8px;position:relative;top:1px}#home:focus-visible{border-radius:var(--wa-panel-border-radius);outline:var(--wa-focus-ring);outline-offset:var(--wa-focus-ring-offset)}.blog-listing-page{display:flex;flex-direction:column;min-height:calc(98vh - var(--blog-header-height))}.blog-listing-hero{margin:0 auto;max-width:560px;padding:52px 24px 36px;text-align:center}.blog-listing-hero h1{color:var(--blog-text);font-size:clamp(1.5rem,4vw,2rem);font-weight:300;letter-spacing:.04em;margin:0 0 10px}.blog-listing-hero p{color:var(--blog-text-muted);font-size:.93rem;line-height:1.65;margin:0}.blog-listing-divider{border:none;border-top:1px dashed var(--blog-border-dashed);margin:0 24px}.blog-listing-main{margin:0 auto;max-width:1020px;padding:36px 24px 80px;width:100%}.blog-loading{align-items:center;color:var(--blog-text-muted);display:flex;flex-direction:column;font-size:.88rem;justify-content:center;padding:80px 24px}.blog-loading-spinner{animation:a .7s linear infinite;border:2px solid var(--blog-border);border-radius:50%;border-top-color:var(--blog-primary);height:26px;margin-bottom:16px;width:26px}@keyframes a{to{transform:rotate(1turn)}}.blog-empty{color:var(--blog-text-muted);display:none;padding:64px 24px;text-align:center}.blog-empty-icon{font-size:2rem;margin-bottom:12px;opacity:.35}.blog-empty h2{color:var(--blog-text);font-size:1rem;font-weight:500;margin:0 0 6px}.blog-empty p{font-size:.88rem;margin:0}.blog-posts-grid{display:grid;gap:22px;grid-template-columns:repeat(auto-fill,minmax(296px,1fr))}.blog-card{animation:b .35s ease both;background:var(--blog-surface);border:1px dashed var(--blog-border-dashed);border-radius:var(--blog-radius);box-shadow:var(--blog-shadow-sm);color:inherit;display:flex;flex-direction:column;overflow:hidden;text-decoration:none;transition:transform var(--blog-transition),box-shadow var(--blog-transition),border-color var(--blog-transition)}@keyframes b{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.blog-card:hover{border-color:var(--blog-primary);box-shadow:var(--blog-shadow-md);transform:translateY(-3px)}.blog-card-image{display:block;object-fit:cover;width:100%}.blog-card-image-placeholder{align-items:center;background-color:var(--blog-surface-raised);background-image:radial-gradient(circle,rgba(156,163,175,.25) 1px,transparent 0);background-size:17px 20px;display:flex;justify-content:center;width:100%}.blog-card-image-placeholder svg{color:var(--blog-text-light);height:36px;opacity:.5;width:36px}.blog-card-body{display:flex;flex:1;flex-direction:column;gap:8px;padding:18px 20px 20px}.blog-card-category{background:var(--blog-primary-muted);border-radius:999px;color:var(--blog-primary);display:inline-block;font-size:.69rem;font-weight:600;letter-spacing:.09em;padding:2px 9px;text-decoration:none;text-transform:uppercase;width:fit-content}.blog-card-meta{align-items:center;color:var(--blog-text-light);display:flex;flex-wrap:wrap;font-size:.77rem;gap:6px}.blog-card-meta-dot{color:var(--blog-border-dashed);line-height:1}.blog-card-title{color:var(--blog-text);font-size:1.02rem;font-weight:600;letter-spacing:-.01em;line-height:1.38;margin:0}.blog-card-description{color:var(--blog-text-muted);display:-webkit-box;font-size:.86rem;-webkit-line-clamp:3;line-clamp:3;line-height:1.6;margin:0;-webkit-box-orient:vertical;overflow:hidden}.blog-card-read-more{align-items:center;color:var(--blog-primary);display:flex;font-size:.8rem;font-weight:500;gap:4px;margin-top:auto;padding-top:6px;transition:gap var(--blog-transition)}.blog-card-read-more:after{content:"→";transition:transform var(--blog-transition)}.blog-card:hover .blog-card-read-more{gap:8px}.blog-listing-footer{border-top:1px dashed var(--blog-border-dashed);color:var(--blog-text-light);font-size:.78rem;margin-top:auto;padding:24px 24px 32px;text-align:center}.blog-listing-footer a{color:var(--blog-primary);text-decoration:none}.blog-listing-footer a:hover{text-decoration:underline}.blog-listing-footer a:focus-visible{border-radius:var(--wa-panel-border-radius);outline:var(--wa-focus-ring);outline-offset:var(--wa-focus-ring-offset)}.blog-post-page{display:flex;flex-direction:column;min-height:calc(100vh - var(--blog-header-height))}.blog-breadcrumb{align-items:center;color:var(--blog-text-light);display:flex;font-size:.8rem;gap:6px;margin:0 auto;max-width:calc(var(--blog-toc-width) + var(--blog-layout-gap) + var(--blog-content-max) + 48px);padding:20px 24px 0}.blog-breadcrumb a{color:var(--blog-text-muted);text-decoration:none;transition:color var(--blog-transition)}.blog-breadcrumb a:hover{color:var(--blog-primary)}.blog-breadcrumb-sep{color:var(--blog-border-dashed)}.blog-post-layout{align-items:start;display:grid;gap:var(--blog-layout-gap);grid-template-columns:var(--blog-toc-width) minmax(0,var(--blog-content-max));margin:0 auto;max-width:calc(var(--blog-toc-width) + var(--blog-layout-gap) + var(--blog-content-max) + 48px);padding:32px 24px 80px}.blog-toc-nav{max-height:calc(100vh - var(--blog-header-height) - 48px);overflow-y:auto;position:sticky;scrollbar-color:var(--blog-border) transparent;scrollbar-width:thin;top:calc(var(--blog-header-height) + 20px)}.blog-toc-nav::-webkit-scrollbar{width:3px}.blog-toc-nav::-webkit-scrollbar-track{background:transparent}.blog-toc-nav::-webkit-scrollbar-thumb{background:var(--blog-border);border-radius:2px}.blog-toc-label{color:var(--blog-text-light);font-size:.68rem;font-weight:600;letter-spacing:.1em;margin:0 0 10px;padding-left:14px;text-transform:uppercase}.blog-toc-list{border-left:2px solid var(--blog-border);list-style:none}.blog-toc-item,.blog-toc-list{margin:0;padding:0}.blog-toc-link{border-left:2px solid transparent;border-radius:0 var(--blog-radius-sm) var(--blog-radius-sm) 0;color:var(--blog-text-muted);display:block;font-size:.8rem;line-height:1.45;margin-left:-2px;padding:5px 12px;text-decoration:none;transition:color var(--blog-transition),border-color var(--blog-transition)}.blog-toc-link.active,.blog-toc-link:hover{color:var(--blog-primary)}.blog-toc-link.active{background:var(--blog-primary-muted);border-left-color:var(--blog-primary);font-weight:500}.blog-toc-item--h3>.blog-toc-link{font-size:.75rem;padding-left:24px}.blog-article{min-width:0}.blog-post-header{border-bottom:1px dashed var(--blog-border-dashed);margin-bottom:36px;padding-bottom:18px}.blog-post-category{background:var(--blog-primary-muted);border-radius:999px;color:var(--blog-primary);display:inline-block;font-size:.69rem;font-weight:600;letter-spacing:.09em;margin-bottom:14px;padding:3px 10px;text-decoration:none;text-transform:uppercase}.blog-post-title{color:var(--blog-text);font-size:clamp(1.55rem,4vw,2.1rem);font-weight:300;letter-spacing:.02em;line-height:1.25;margin:0 0 14px}.blog-post-subtitle{color:var(--blog-text-muted);font-size:1.03rem;font-weight:400;line-height:1.55;margin:0 0 18px}.blog-post-meta{align-items:center;color:var(--blog-text-light);display:flex;flex-wrap:wrap;font-size:.81rem;gap:6px 14px}.blog-post-meta-author{color:var(--blog-text-muted);font-weight:500}.blog-post-meta-sep{color:var(--blog-border-dashed)}.blog-post-image-wrap{margin-bottom:36px}.blog-post-image{border-radius:var(--blog-radius);display:block;width:100%}.blog-post-image-placeholder{align-items:center;background-color:var(--blog-surface);background-image:radial-gradient(circle,rgba(156,163,175,.25) 1px,transparent 0);background-size:17px 20px;border-radius:var(--blog-radius);display:flex;justify-content:center;width:100%}.blog-post-image-placeholder svg{color:var(--blog-text-light);height:48px;opacity:.3;width:48px}.blog-post-body{color:var(--blog-text-secondary);font-size:1rem;line-height:1.8}.blog-post-body p{margin:0 0 1.4em}.blog-post-body p:last-child{margin-bottom:0}.blog-post-body h2{border-top:1px dashed var(--blog-border-dashed);color:var(--blog-text);font-size:1.3rem;font-weight:600;letter-spacing:-.015em;margin:2.4em 0 .75em;padding-top:1em;scroll-margin-top:calc(var(--blog-header-height) + 24px)}.blog-post-body h2:first-child{border-top:none;margin-top:0;padding-top:0}.blog-post-body h3{color:var(--blog-text);font-size:1.03rem;font-weight:600;margin:1.8em 0 .5em;scroll-margin-top:calc(var(--blog-header-height) + 24px)}.blog-post-body h4{color:var(--blog-text-muted);font-size:.85rem;font-weight:600;letter-spacing:.07em;margin:1.6em 0 .5em;text-transform:uppercase}.blog-post-body a{color:var(--blog-primary);text-decoration:underline;text-decoration-color:rgba(99,102,241,.4);text-decoration-thickness:1px;text-underline-offset:3px;transition:color var(--blog-transition),text-decoration-color var(--blog-transition)}.blog-post-body a:hover{color:var(--blog-primary-hover);text-decoration-color:var(--blog-primary-hover)}.blog-post-body blockquote{background:rgba(34,211,238,.04);border-left:3px solid var(--blog-accent);border-radius:0 var(--blog-radius-sm) var(--blog-radius-sm) 0;color:var(--blog-text-muted);font-style:italic;margin:1.8em 0;padding:14px 18px}.blog-post-body blockquote p{margin:0}.blog-post-body blockquote cite{color:var(--blog-text-light);display:block;font-size:.84rem;font-style:normal;margin-top:8px}.blog-post-body blockquote cite:before{content:"— "}.blog-post-body ol,.blog-post-body ul{margin:0 0 1.4em;padding-left:1.5em}.blog-post-body li{line-height:1.7;margin-bottom:.4em}.blog-post-body ul li::marker{color:var(--blog-primary)}.blog-post-body ol li::marker{color:var(--blog-primary);font-size:.9em;font-weight:600}.blog-post-body code{background:var(--blog-surface-raised);border:1px solid var(--blog-border);border-radius:var(--blog-radius-sm);color:#4f46e5;font-family:var(--blog-font-mono);font-size:.875em;padding:1px 5px}.blog-post-body pre{background:#1a1a2e;border:1px solid hsla(0,0%,100%,.06);border-radius:var(--blog-radius);margin:1.6em 0;overflow-x:auto;padding:20px}.blog-post-body pre code{background:none;border:none;color:#a5b4fc;font-family:var(--blog-font-mono);font-size:.875rem;padding:0}.blog-post-body strong{color:var(--blog-text);font-weight:600}.blog-post-body em{font-style:italic}.blog-post-body hr{border:none;border-top:1px dashed var(--blog-border-dashed);margin:2.2em 0}.blog-post-body figure{margin:2em 0}.blog-post-body img{border:1px dashed var(--blog-border-dashed);border-radius:var(--blog-radius);display:block;height:auto;max-width:100%}.blog-post-body figcaption{color:var(--blog-text-light);font-size:.82rem;font-style:italic;margin-top:8px;text-align:center}.fn-ref{display:inline;line-height:0}.fn-link,.fn-ref{position:relative}.fn-link{background:var(--blog-primary-muted);border-radius:999px;color:var(--blog-primary)!important;cursor:pointer;display:inline-block;font-family:var(--blog-font);font-size:.7rem;font-weight:700;line-height:1.4;padding:1px 5px;text-decoration:none!important;transition:background var(--blog-transition),color var(--blog-transition);vertical-align:super;z-index:1}.fn-link:hover{background:var(--blog-primary);color:#fff!important}.fn-popup{background:var(--blog-surface);border:1px dashed var(--blog-border-dashed);border-radius:var(--blog-radius);box-shadow:var(--blog-shadow-md);color:var(--blog-text-muted);font-family:var(--blog-font);font-size:.81rem;font-style:normal;font-weight:400;left:50%;line-height:1.55;max-width:calc(100vw - 48px);opacity:0;padding:11px 13px;pointer-events:none;position:absolute;top:calc(100% + 10px);transform:translateX(-50%) translateY(-6px);transition:opacity .18s ease,visibility .18s ease,transform .18s ease;vertical-align:baseline;visibility:hidden;width:280px;z-index:2}.fn-popup:after{border:6px solid transparent;border-bottom:6px solid var(--blog-border-dashed);transform:translateX(-50%)}.fn-popup:after,.fn-popup:before{bottom:100%;content:"";left:50%;position:absolute;top:auto}.fn-popup:before{border:5px solid transparent;border-bottom:5px solid var(--blog-surface);transform:translateX(-50%) translateY(1px);z-index:1}.fn-ref.fn-active .fn-popup,.fn-ref:hover .fn-popup{opacity:1;pointer-events:auto;transform:translateX(-50%) translateY(0);visibility:visible}.fn-popup.fn-flip-right{left:auto;right:-8px;transform:translateY(-6px)}.fn-popup.fn-flip-right:after,.fn-popup.fn-flip-right:before{left:auto;right:14px;transform:none}.fn-ref.fn-active .fn-popup.fn-flip-right,.fn-ref:hover .fn-popup.fn-flip-right{transform:translateY(0)}.fn-popup.fn-flip-left{left:-8px;transform:translateY(-6px)}.fn-popup.fn-flip-left:after,.fn-popup.fn-flip-left:before{left:14px;transform:none}.fn-ref.fn-active .fn-popup.fn-flip-left,.fn-ref:hover .fn-popup.fn-flip-left{transform:translateY(0)}.blog-post-footnotes{border-top:1px dashed var(--blog-border-dashed);margin-top:48px;padding-top:24px}.blog-post-footnotes-heading{color:var(--blog-text-light);font-size:.68rem;font-weight:600;letter-spacing:.1em;margin:0 0 14px;text-transform:uppercase}.blog-post-footnotes ol{margin:0;padding-left:1.4em}.blog-post-footnotes li{color:var(--blog-text-muted);font-size:.82rem;line-height:1.58;margin-bottom:8px}.blog-post-footnotes li:target{background:var(--blog-primary-muted);border-radius:var(--blog-radius-sm);margin-left:-5px;padding:2px 5px}.fn-backref{color:var(--blog-primary)!important;font-size:.9em;margin-left:4px;opacity:.55;text-decoration:none!important;transition:opacity var(--blog-transition)}.fn-backref:hover{opacity:1}.blog-post-end-mark{display:block;margin-left:auto;margin-right:auto;margin-top:48px;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:transparent}.back-to-top-page{display:flex;justify-content:flex-end;margin-top:20px}.back-to-top-page a{align-items:center;color:var(--blog-text-light);display:flex;font-size:.79rem;gap:5px;padding:4px 0;text-decoration:none;transition:color var(--blog-transition)}.back-to-top-page a:before{content:"↑"}.back-to-top-page a:hover{color:var(--blog-primary)}.blog-post-footer{border-top:1px dashed var(--blog-border-dashed);color:var(--blog-text-light);font-size:.78rem;margin-top:auto;padding:22px 18px 28px;text-align:center}.blog-post-footer a{color:var(--blog-primary);text-decoration:none}.blog-post-footer a:hover{text-decoration:underline}@media (max-width:900px){.blog-post-layout{gap:24px;grid-template-columns:1fr;padding-top:24px}.blog-toc-nav{background:var(--blog-surface);border:1px dashed var(--blog-border-dashed);border-radius:var(--blog-radius);box-shadow:var(--blog-shadow-sm);max-height:none;padding:14px 16px;position:static}.blog-toc-label{margin-bottom:8px;padding-left:0}.blog-toc-list{border-left:none;display:flex;flex-wrap:wrap;gap:4px}.blog-toc-item{flex-shrink:0;max-width:100%;min-width:0}.blog-toc-link{background:var(--blog-surface-raised);border-left:none;border:1px dashed var(--blog-border-dashed);border-radius:999px;font-size:.77rem;margin-left:0;max-width:100%;overflow:hidden;padding:4px 10px;text-overflow:ellipsis;white-space:nowrap}.blog-toc-link.active{background:var(--blog-primary-muted);border-color:var(--blog-primary);color:var(--blog-primary)}.blog-toc-item--h3>.blog-toc-link{font-size:.73rem;opacity:.8;padding-left:10px}.blog-breadcrumb{padding:16px 24px 0}header h1{display:none}header svg{height:32px;width:188px}}@media (max-width:640px){.blog-post-layout{padding:20px 16px 48px}.blog-breadcrumb{padding:14px 16px 0}.blog-listing-hero{padding:32px 16px 24px}.blog-listing-main{padding:28px 16px 48px}.blog-posts-grid{grid-template-columns:1fr}.blog-post-title{font-size:1.4rem}.blog-post-subtitle{font-size:.95rem}.blog-post-body{font-size:.97rem}.blog-post-body h2{font-size:1.15rem}.fn-popup{font-size:.79rem}.blog-listing-divider{margin:0 16px}}