:root{--a-max-width:740px;--a-pad-x:clamp(1rem,4vw,2rem);--a-pad-y:clamp(2rem,4vw,3.5rem);--a-font-serif:var(--font-dm-serif),var(--font-fraunces),Georgia,"Times New Roman",serif;--a-font-sans:var(--font-jakarta),var(--font-inter),-apple-system,BlinkMacSystemFont,sans-serif;--a-font-mono:"Fira Code","Cascadia Code",Consolas,"Courier New",monospace;--a-sz-body:1.125rem;--a-sz-sm:0.875rem;--a-sz-xs:0.75rem;--a-sz-h1:clamp(2rem,5vw,2.875rem);--a-sz-h2:clamp(1.5rem,3.5vw,2rem);--a-sz-h3:clamp(1.25rem,2.5vw,1.5rem);--a-sz-h4:1.125rem;--a-lh-body:1.875;--a-lh-tight:1.2;--a-lh-snug:1.5;--a-sp-xs:0.5rem;--a-sp-sm:1rem;--a-sp-md:1.5rem;--a-sp-lg:2rem;--a-sp-xl:3rem;--a-sp-2xl:4rem;--a-r:12px;--a-r-sm:8px;--a-r-xs:4px;--a-t:150ms ease;--a-bg:#fff;--a-bg-subtle:#f8f9fa;--a-bg-muted:#f1f3f4;--a-text:#1a1a1a;--a-text-muted:#6b7280;--a-text-faint:#9ca3af;--a-border:#e5e7eb;--a-border-mid:#d1d5db;--a-link:#06c;--a-link-hover:#049;--a-accent:#2563eb;--a-accent-soft:#eff6ff;--a-quote-border:#2563eb;--a-quote-bg:#f0f7ff;--a-code-bg:#f1f3f4;--a-code-text:#1a1a1a;--a-pre-bg:#1e1e2e;--a-pre-text:#cdd6f4;--a-head-bg:#f1f3f4;--a-tbl-border:#e5e7eb;--a-progress:#2563eb;--a-sh-sm:0 1px 4px rgba(0,0,0,.07);--a-sh-md:0 4px 20px rgba(0,0,0,.08)}@media (prefers-color-scheme:dark){:root{--a-bg:#0f0f0f;--a-bg-subtle:#161616;--a-bg-muted:#1e1e1e;--a-text:#e8e8e8;--a-text-muted:#9ca3af;--a-text-faint:#6b7280;--a-border:#2a2a2a;--a-border-mid:#3a3a3a;--a-link:#60a5fa;--a-link-hover:#93c5fd;--a-accent:#3b82f6;--a-accent-soft:rgba(59,130,246,.12);--a-quote-border:#3b82f6;--a-quote-bg:rgba(59,130,246,.08);--a-code-bg:#1e1e1e;--a-code-text:#e8e8e8;--a-pre-bg:#0d0d0d;--a-pre-text:#cdd6f4;--a-head-bg:#1e1e1e;--a-tbl-border:#2a2a2a;--a-progress:#60a5fa;--a-sh-sm:0 1px 4px rgba(0,0,0,.3);--a-sh-md:0 4px 20px rgba(0,0,0,.3)}}@media (prefers-reduced-motion:reduce){.reading-progress{display:none!important}}.reading-progress{position:fixed;top:0;left:0;height:3px;background:var(--a-progress);z-index:9999;transition:width 80ms linear;border-radius:0 2px 2px 0;will-change:width;pointer-events:none}.article-wrapper{background:var(--a-bg);min-height:100vh}.article-container{max-width:var(--a-max-width);margin:0 auto;padding:var(--a-pad-y) var(--a-pad-x)}.article-breadcrumb{display:flex;align-items:center;gap:.375rem;margin-bottom:var(--a-lg,2rem);flex-wrap:wrap}.article-breadcrumb-link{font-family:var(--a-font-sans);font-size:var(--a-sz-sm);color:var(--a-text-muted);text-decoration:none;transition:color var(--a-t)}.article-breadcrumb-link:hover{color:var(--a-link)}.article-breadcrumb-sep{color:var(--a-text-faint);font-size:var(--a-sz-sm);-webkit-user-select:none;-moz-user-select:none;user-select:none}.article-breadcrumb-current{font-family:var(--a-font-sans);font-size:var(--a-sz-sm);color:var(--a-text-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:280px}.article-header{margin-bottom:var(--a-sp-lg)}.article-title{font-family:var(--a-font-serif);font-size:var(--a-sz-h1);font-weight:700;line-height:var(--a-lh-tight);letter-spacing:-.02em;color:var(--a-text);margin:0 0 var(--a-sp-md)}.article-meta{display:flex;align-items:center;gap:var(--a-sp-xs);flex-wrap:wrap;padding-bottom:var(--a-sp-md);border-bottom:1px solid var(--a-border)}.article-meta-date,.article-meta-reading,.article-meta-updated{font-family:var(--a-font-sans);font-size:var(--a-sz-sm);color:var(--a-text-muted)}.article-meta-dot{color:var(--a-text-faint);-webkit-user-select:none;-moz-user-select:none;user-select:none;font-size:var(--a-sz-xs)}.article-meta-updated{font-style:italic}.article-hero{margin-bottom:var(--a-sp-xl)}.article-hero .blog-hero-wrapper{border-radius:var(--a-r)!important;box-shadow:var(--a-sh-md);margin-bottom:0;transition:box-shadow var(--a-t)}.article-hero .blog-hero-wrapper:hover{box-shadow:0 6px 28px rgba(0,0,0,.12)}.article-hero-figcaption{display:flex;flex-direction:column;align-items:center;gap:.2rem;margin-top:.625rem;padding:0 .5rem}.article-hero-caption{font-family:var(--a-font-sans);font-size:var(--a-sz-sm);color:var(--a-text-muted);text-align:center;line-height:var(--a-lh-snug)}.article-hero-credit{font-family:var(--a-font-sans);font-size:var(--a-sz-xs);color:var(--a-text-faint)}.article-body{font-family:var(--a-font-serif);font-size:var(--a-sz-body);line-height:var(--a-lh-body);color:var(--a-text)}.article-body p{margin:0 0 var(--a-sp-md);color:var(--a-text)}.article-body p:last-child{margin-bottom:0}.article-body h2{font-size:var(--a-sz-h2);font-weight:700;letter-spacing:-.02em;margin:var(--a-sp-xl) 0 var(--a-sp-sm);padding-bottom:var(--a-sp-xs);border-bottom:2px solid var(--a-border)}.article-body h2,.article-body h3{font-family:var(--a-font-sans);line-height:var(--a-lh-tight);color:var(--a-text)}.article-body h3{font-size:var(--a-sz-h3);font-weight:600;margin:var(--a-sp-lg) 0 var(--a-sp-xs)}.article-body h4{font-family:var(--a-font-sans);font-size:var(--a-sz-h4);font-weight:600;line-height:var(--a-lh-snug);color:var(--a-text);margin:var(--a-sp-md) 0 var(--a-sp-xs)}.article-body a{color:var(--a-link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;transition:color var(--a-t)}.article-body a:hover{color:var(--a-link-hover)}.article-body strong{font-weight:700}.article-body em{font-style:italic}.article-body del,.article-body s{color:var(--a-text-muted)}.article-body code{font-family:var(--a-font-mono);font-size:.875em;background:var(--a-code-bg);color:var(--a-code-text);padding:.15em .45em;border-radius:var(--a-r-xs);border:1px solid var(--a-border)}.article-body pre{background:var(--a-pre-bg);color:var(--a-pre-text);padding:var(--a-sp-md);border-radius:var(--a-r-sm);overflow-x:auto;margin:var(--a-sp-lg) 0;line-height:1.65;box-shadow:var(--a-sh-sm);-webkit-overflow-scrolling:touch}.article-body pre code{background:none;border:none;padding:0;font-size:.875rem;color:inherit}.article-body blockquote{margin:var(--a-sp-lg) 0;padding:var(--a-sp-sm) var(--a-sp-md);border-left:4px solid var(--a-quote-border);background:var(--a-quote-bg);border-radius:0 var(--a-r-sm) var(--a-r-sm) 0;font-style:italic}.article-body blockquote p{color:var(--a-text-muted);margin:0}.article-body blockquote p+p{margin-top:var(--a-sp-xs)}.article-body ol,.article-body ul{margin:var(--a-sp-sm) 0 var(--a-sp-md);padding-left:1.75rem}.article-body li{margin:.45rem 0;line-height:var(--a-lh-body)}.article-body ul li::marker{color:var(--a-text-muted)}.article-body ol li::marker{color:var(--a-text-muted);font-weight:600}.article-body li>ol,.article-body li>ul{margin:.375rem 0}.article-body hr{border:none;border-top:1px solid var(--a-border);margin:var(--a-sp-xl) 0}.article-body table{width:100%;border-collapse:collapse;margin:var(--a-sp-lg) 0;font-family:var(--a-font-sans);font-size:.9375rem;border-radius:var(--a-r-sm);overflow:hidden;box-shadow:var(--a-sh-sm)}.article-body td,.article-body th{border:1px solid var(--a-tbl-border);padding:.75rem 1rem;text-align:left}.article-body th{background:var(--a-head-bg);font-family:var(--a-font-sans);font-weight:600;font-size:var(--a-sz-sm);letter-spacing:.025em;color:var(--a-text-muted)}.article-body tbody tr:nth-child(2n){background:var(--a-bg-subtle)}.article-body tbody tr:hover{background:var(--a-bg-muted)}.article-body img,.article-body video{max-width:100%;height:auto;border-radius:var(--a-r-sm);display:block;margin:var(--a-sp-lg) auto;box-shadow:var(--a-sh-md)}.article-body video{width:100%;background:#000}.article-share{margin:var(--a-sp-xl) 0;padding:var(--a-sp-md) 0;border-top:1px solid var(--a-border);border-bottom:1px solid var(--a-border)}.article-share-label{font-family:var(--a-font-sans);font-size:var(--a-sz-xs);font-weight:600;color:var(--a-text-faint);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.75rem}.share-buttons{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.share-btn{display:inline-flex;align-items:center;gap:.375rem;padding:.45rem .875rem;border-radius:9999px;font-family:var(--a-font-sans);font-size:var(--a-sz-sm);font-weight:500;cursor:pointer;transition:background-color var(--a-t),border-color var(--a-t),color var(--a-t),transform var(--a-t);border:1px solid var(--a-border);background:var(--a-bg);color:var(--a-text);text-decoration:none;line-height:1;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.share-btn:hover{background:var(--a-bg-muted);border-color:var(--a-border-mid);transform:translateY(-1px)}.share-btn:active{transform:translateY(0)}.share-btn:focus-visible{outline:2px solid var(--a-accent);outline-offset:2px}.share-btn svg{width:15px;height:15px;flex-shrink:0}.share-btn--copied{background:#dcfce7;border-color:#86efac;color:#166534}@media (prefers-color-scheme:dark){.share-btn--copied{background:#14532d;border-color:#166534;color:#86efac}}.article-footer{margin-top:var(--a-sp-xl);padding-top:var(--a-sp-lg);border-top:1px solid var(--a-border)}.article-back-link{display:inline-flex;align-items:center;gap:.375rem;font-family:var(--a-font-sans);font-size:var(--a-sz-sm);font-weight:500;color:var(--a-text-muted);text-decoration:none;padding:.5rem 0;transition:color var(--a-t);border-radius:var(--a-r-xs)}.article-back-link:hover{color:var(--a-link)}.article-back-link:focus-visible{outline:2px solid var(--a-accent);outline-offset:4px}@media (max-width:768px){:root{--a-pad-y:1.5rem;--a-sz-body:1rem}.article-container{padding:var(--a-pad-y) 1rem}.article-breadcrumb-current{max-width:160px}.article-body h2{margin-top:var(--a-sp-xl)}.article-body h3{margin-top:var(--a-sp-lg)}.article-body pre{padding:var(--a-sp-sm);border-radius:var(--a-r-xs);font-size:.8125rem}.article-body blockquote{padding:var(--a-sp-sm) var(--a-sp-sm)}.article-body table{font-size:.875rem;display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.article-body td,.article-body th{padding:.5rem .75rem}}@media (max-width:480px){.article-breadcrumb-current{max-width:100px}.share-btn{padding:.4rem .75rem;font-size:.8125rem}}