*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-body);font-size:16.5px;line-height:1.62}a{color:inherit}.pn-shell{width:100%;max-width:var(--max-width);margin-inline:auto;padding-inline:24px}.pn-skip{position:absolute;left:-9999px}.pn-skip:focus{left:8px;top:8px;background:var(--accent);color:var(--accent-ink);padding:8px 14px;z-index:10}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.pn-header{background:var(--surface);border-bottom:1px solid var(--border)}.pn-header-inner{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-block:14px;max-width:72rem}.pn-brand{display:inline-flex;align-items:center;gap:9px;font-weight:600;font-size:.98rem;text-decoration:none}.pn-brand-mark{width:4px;height:20px;background:var(--accent)}.pn-nav{display:flex;gap:20px;font-family:var(--font-mono);font-size:.76rem}.pn-nav a{color:var(--ink-muted);text-decoration:none}.pn-nav a:hover{color:var(--accent);text-decoration:underline}.pn-article{padding-block:28px 72px}.pn-crumbs{font-size:.74rem;color:var(--ink-muted);margin-bottom:22px}.pn-cluster,.pn-crumbs{font-family:var(--font-mono)}.pn-cluster{margin:0 0 10px;font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}.pn-h1{font-size:clamp(1.8rem,4vw,2.5rem);line-height:1.16;letter-spacing:-.02em;margin:0 0 14px;font-weight:600}.pn-dek{font-size:1.08rem;line-height:1.55;margin:0 0 22px}.pn-byline,.pn-dek{color:var(--ink-muted)}.pn-byline{display:flex;flex-wrap:wrap;gap:6px 16px;font-family:var(--font-mono);font-size:.74rem;padding:12px 0;border-block:1px solid var(--border)}.pn-byline-author a{color:var(--ink)}.pn-review{font-size:.82rem;margin:14px 0 0;padding:10px 14px;background:var(--surface);border-left:3px solid var(--border);color:var(--ink-muted)}.pn-review-done{border-left-color:var(--accent)}.pn-ruo{margin:22px 0;padding:13px 16px;border:1px solid var(--border);background:var(--surface);font-size:.83rem;line-height:1.55;color:var(--ink-muted)}.pn-ruo strong{color:var(--ink)}.pn-toc{margin:28px 0;padding:16px 20px;background:var(--surface);border:1px solid var(--border)}.pn-toc-title{margin:0 0 8px;font-family:var(--font-mono);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);font-weight:400}.pn-toc ol{margin:0;padding-left:1.4em;font-size:.88rem;line-height:1.85}.pn-toc a{color:var(--accent);text-decoration:none}.pn-toc a:hover{text-decoration:underline}.pn-body{margin-top:30px}.pn-h2{font-size:1.32rem;line-height:1.26;margin:2.3em 0 .5em;padding-bottom:.35em;border-bottom:2px solid var(--ink)}.pn-h2,.pn-h3{font-weight:600}.pn-h3{font-size:1.05rem;margin:1.7em 0 .4em;color:var(--accent)}.pn-p{margin:0 0 1.05em}.pn-cite{font-family:var(--font-mono);font-size:.7em;vertical-align:super;line-height:0;color:var(--accent);text-decoration:none}.pn-cite:before{content:"["}.pn-cite:after{content:"]"}.pn-ol,.pn-ul{margin:0 0 1.2em;padding-left:1.4em}.pn-ol li,.pn-ul li{margin-bottom:.4em}.pn-quote{margin:1.7em 0;padding:12px 16px;background:var(--surface);border-left:3px solid var(--accent);font-style:normal;font-size:.95rem}.pn-quote p{margin:0 0 .3em}.pn-cite-attr{font-family:var(--font-mono);font-size:.76rem;color:var(--ink-muted);font-style:normal}.pn-callout{margin:1.8em 0;padding:14px 16px;border:1px solid var(--border);border-left:3px solid var(--accent);background:var(--surface);font-size:.9rem}.pn-callout-warning{border-left-color:#c2410c;background:#fff7ed}.pn-callout-title{display:block;margin-bottom:4px;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}.pn-callout p{margin:0}.pn-table-wrap{margin:1.9em 0;overflow-x:auto}.pn-table{width:100%;border-collapse:collapse;font-size:.85rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;border:1px solid var(--border)}.pn-table td,.pn-table th{text-align:left;padding:8px 11px;border:1px solid var(--border);vertical-align:top}.pn-table th{background:var(--surface);font-family:var(--font-mono);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);font-weight:500}.pn-figure{margin:2em 0}.pn-img{width:100%;height:auto;display:block;border:1px solid var(--border)}.pn-figcaption{margin-top:7px;font-family:var(--font-mono);font-size:.75rem;color:var(--ink-muted)}.pn-takeaways{margin:2em 0;padding:18px 20px;background:var(--surface);border:1px solid var(--accent)}.pn-takeaways-title{margin:0 0 10px;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-weight:500}.pn-takeaways ul{margin:0;padding-left:1.3em;font-size:.92rem}.pn-takeaways li{margin-bottom:.45em}.pn-refs{margin-top:2.8em;padding-top:1.3em;border-top:2px solid var(--ink)}.pn-refs-title{font-size:1.05rem;margin:0 0 .9em;font-weight:600}.pn-refs-list{margin:0;padding-left:1.4em;font-size:.83rem;line-height:1.55}.pn-refs-list li{margin-bottom:.7em}.pn-refs-list a{color:var(--accent)}.pn-refs-meta{display:block;color:var(--ink-muted);font-size:.78rem}.pn-related{margin-top:2.6em;padding-top:1.2em;border-top:1px solid var(--border)}.pn-related-title{font-size:1.05rem;margin:0 0 .9em;font-weight:600}.pn-related ul{list-style:none;margin:0;padding:0}.pn-related li{padding:10px 0;border-bottom:1px solid var(--border)}.pn-related a{font-weight:600;color:var(--accent);text-decoration:none}.pn-related-dek{display:block;font-size:.84rem;color:var(--ink-muted);margin-top:2px}.pn-source{margin-top:3em;padding:20px 22px;border:1px solid var(--border);background:var(--surface)}.pn-source-title{font-size:1rem;margin:0 0 7px;font-weight:600}.pn-source-disclosure{margin:0 0 10px;font-family:var(--font-mono);font-size:.74rem;color:var(--ink-muted)}.pn-source-body{margin:0 0 14px;font-size:.9rem}.pn-source-link{display:inline-block;padding:9px 18px;background:var(--accent);color:var(--accent-ink);text-decoration:none;font-size:.85rem;font-weight:600;border-radius:var(--radius)}.pn-hero{padding-block:48px 32px;border-bottom:1px solid var(--border);background:var(--surface)}.pn-hero h1{font-size:clamp(2rem,5vw,2.9rem);line-height:1.1;letter-spacing:-.025em;margin:0 0 14px;font-weight:600}.pn-hero p{font-size:1.06rem;color:var(--ink-muted);margin:0;max-width:36em}.pn-list{list-style:none;margin:0;padding:0}.pn-list-item{padding-block:18px;border-bottom:1px solid var(--border)}.pn-list-item h2{font-size:1.16rem;margin:5px 0;font-weight:600;line-height:1.28}.pn-list-item h2 a{text-decoration:none}.pn-list-item h2 a:hover{color:var(--accent)}.pn-list-item p{margin:0;color:var(--ink-muted);font-size:.9rem}.pn-list-meta{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}.pn-footer{margin-top:72px;padding-block:34px 44px;background:var(--surface);border-top:1px solid var(--border);font-size:.83rem;color:var(--ink-muted)}.pn-footer-tag{margin:0 0 12px;color:var(--ink)}.pn-footer-nav{display:flex;gap:18px;margin-bottom:16px;font-family:var(--font-mono);font-size:.76rem}.pn-footer-ruo{margin:0 0 8px;max-width:50em;line-height:1.5}.pn-footer-legal{margin:0;font-size:.78rem}@media (max-width:640px){.pn-header-inner{flex-direction:column;align-items:flex-start;gap:10px}}