@font-face{font-family:Cantarell;font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/cantarell-latin-400.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--accent-text:#d61c59;--accent-soft:#fff0f5;--focus:#222;--canvas:#fff;--surface:#fff;--surface-muted:#f7f7f8;--hover:#f0f0f2;--text:#202024;--text-soft:#505057;--muted:#686870;--footer-text:#767676;--border:#e8e8ec;--border-hover:#c9c9d0;--control-border:#85858e;--header-fill:#fff;--button-fill:#222;--button-hover:#111;--button-pressed:#000;--button-text:#fff;--nav-active-fill:#222;--nav-active-text:#fff;--selection:#e5e5e5;--note:#38bdf8;--note-soft:#eff9ff;--tip:#34d399;--tip-soft:#edfcf5;--warning:#fbbf24;--warning-soft:#fffae8;--caution:#f87171;--caution-soft:#fff3f0;--important:#a78bfa;--important-soft:#f6f2ff;--overlay:rgb(9 9 11 / .8);--radius-card:22px;--radius-surface:16px;--radius-control:999px;--card-border:#eeeef1;--shadow-rest:0 2px 8px rgb(32 32 36 / .025), 0 8px 24px rgb(32 32 36 / .025);--shadow-lift:0 6px 16px rgb(32 32 36 / .04), 0 16px 36px rgb(32 32 36 / .06);--gap:24px;--card-min:260px;--columns-max:4;--feed-max:1200px;--reading-max:760px;--page-gutter:32px;--article-padding:0px;--font-body:Cantarell, "Noto Sans SC", "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif;--font-code:"SFMono-Regular", Consolas, "Liberation Mono", monospace}:root[data-color-mode=dark]{color-scheme:dark;--canvas:#18181b;--surface:#18181b;--surface-muted:#242428;--hover:#303036;--text:#fafafa;--text-soft:#d4d4d8;--muted:#b0b0b8;--footer-text:#a6a6a6;--border:#35353c;--border-hover:#565660;--card-border:#35353c;--shadow-rest:0 2px 12px rgb(0 0 0 / .12);--shadow-lift:0 8px 28px rgb(0 0 0 / .24);--control-border:#83838e;--header-fill:#18181b;--accent-text:#ff8cb0;--accent-soft:#39232d;--focus:#eee;--selection:#444;--note-soft:#1c2b33;--tip-soft:#1c2d28;--warning-soft:#302b1d;--caution-soft:#332522;--important-soft:#292438}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:96px}body{margin:0;font:16px/1.6 var(--font-body);background:var(--canvas);color:var(--text);overflow-wrap:anywhere}a{color:inherit;text-decoration:none}a,button{-webkit-tap-highlight-color:transparent}button,input,textarea,select{font:inherit}button{color:inherit;cursor:pointer}button:disabled{cursor:wait;opacity:.65}a:hover{color:var(--text)}button,a{transition:color 160ms,background-color 160ms,border-color 160ms}img{display:block;max-width:100%;height:auto}h1,h2,h3,p{margin:0}button{border:0;background:0 0}:focus-visible{outline:2px solid var(--focus);outline-offset:4px}::selection{color:var(--text);background:var(--selection)}[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip-link{position:fixed;top:8px;left:8px;padding:12px 20px;z-index:100;background:var(--surface);border-radius:var(--radius-control);transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}.site-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:32px;min-height:80px;padding:16px max(var(--page-gutter),calc((100% - var(--feed-max))/2));background:var(--header-fill);border-bottom:1px solid transparent}.site-header.is-scrolled{border-bottom-color:var(--border)}.site-name{flex-shrink:0;font-size:22px;font-weight:700;letter-spacing:-.035em}.site-navigation{position:relative;min-width:0}.site-nav-toggle{display:none}.site-nav{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--text-soft)}.site-nav a{position:relative;padding:10px 16px;border-radius:var(--radius-control)}.site-nav a:hover{color:var(--text);background:var(--surface-muted)}.site-nav [aria-current=page],.site-nav [aria-current=page]:hover{color:var(--nav-active-text);font-weight:700;background:var(--nav-active-fill)}.site-main{width:min(var(--reading-max),calc(100% - var(--page-gutter) * 2));margin:32px auto 64px;min-height:calc(100vh - 296px)}.site-main--feed{width:min(var(--feed-max),calc(100% - var(--page-gutter) * 2))}.page-heading{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;padding:12px 0 16px;margin-bottom:24px}.page-heading h1{font-size:36px;font-weight:700;line-height:1.3;letter-spacing:-.035em}.page-heading p,.heading-meta>a{color:var(--muted);font-size:14px}.page-heading p{padding:5px 12px;border-radius:var(--radius-control);background:var(--surface-muted)}.heading-meta{display:flex;flex:1;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 24px}.heading-meta>a:hover{color:var(--accent-text)}.heading-hash{color:var(--muted);font-weight:400}.section-intro{margin-bottom:32px}.article-list{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--card-min)),1fr));gap:var(--gap);align-items:start}.article-list.is-masonry{display:block}.post-card{position:relative;min-width:0;overflow:hidden;border:1px solid var(--card-border);border-radius:var(--radius-card);background:var(--surface);box-shadow:var(--shadow-rest)}.post-card:hover,.post-card:focus-within{border-color:var(--border);box-shadow:var(--shadow-lift)}.card-cover{position:relative;display:block;aspect-ratio:16/10;margin:8px 8px 0;border-radius:calc(var(--radius-card) - 8px);overflow:hidden;background:var(--surface-muted)}.card-cover img{width:100%;height:100%;object-fit:cover}.card-body{padding:20px}.card-taxonomy{position:relative;z-index:2;display:flex;gap:12px;min-height:18px;color:var(--muted);font-size:12px;line-height:18px}.card-taxonomy a{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-title{margin-top:10px;font-size:18px;font-weight:700;line-height:1.5;letter-spacing:-.015em;text-wrap:balance}.card-title a::after{content:"";position:absolute;inset:0}.post-card a:hover,.post-card a:focus-visible{color:var(--text)}.card-title a:focus-visible{outline:none}.post-card:has(.card-title a:focus-visible){outline:2px solid var(--focus);outline-offset:3px}.card-summary{margin-top:8px;font-size:14px;line-height:1.75;color:var(--text-soft)}.card-title,.card-summary{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:2}.card-meta{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;margin-top:24px;font-size:12px;line-height:20px;color:var(--muted);font-variant-numeric:tabular-nums}.pagination{display:flex;align-items:center;justify-content:center;gap:12px;width:fit-content;max-width:100%;margin:40px auto 0;font-size:14px}.pagination-step{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:4px 8px;border-radius:var(--radius-control);white-space:nowrap;color:var(--text-soft)}.pagination-step[aria-disabled=true]{color:var(--muted);opacity:.5}.page-numbers{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;min-width:0;margin:0;padding:0;list-style:none;font-variant-numeric:tabular-nums}.page-number{position:relative;display:inline-flex;align-items:center;justify-content:center;width:40px;min-height:44px;color:var(--text-soft);border-radius:var(--radius-control)}.page-number::before{content:"";position:absolute;width:32px;height:32px;border:1px solid var(--border-hover);border-radius:50%}.page-number[aria-current=page]{color:var(--text);font-weight:700}.page-number[aria-current=page]::before{content:none}.page-number:hover::before{border-color:var(--text-soft)}.pagination a:is(:hover,:focus-visible){color:var(--text);background:var(--surface-muted)}.page-link{width:fit-content;display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 22px;border-radius:var(--radius-control);background:var(--button-fill);color:var(--button-text);font-size:14px}.page-link:is(:hover,:focus-visible){background:var(--button-hover);color:var(--button-text)}.page-link:active{background:var(--button-pressed)}.site-footer{position:relative;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px 32px;width:min(var(--feed-max),calc(100% - var(--page-gutter) * 2));margin-inline:auto;padding:24px 0 32px;border-top:1px solid var(--border);color:var(--footer-text);font-size:13px}.site-footer p span{margin-inline:6px}.color-modes{display:flex;flex-wrap:wrap;gap:6px;white-space:nowrap;font-size:13px}.color-modes button{min-height:44px;padding:10px 16px;border-radius:var(--radius-control)}.color-modes button:hover{color:var(--text);background:var(--surface-muted)}.color-modes [aria-pressed=true],.color-modes [aria-pressed=true]:hover{color:var(--nav-active-text);background:var(--nav-active-fill);font-weight:700}.timeline-year{display:grid;grid-template-columns:120px minmax(0,1fr);gap:24px;padding-bottom:16px;margin-bottom:32px}.timeline-year:last-child{border-bottom:0;margin-bottom:0}.timeline-year h2{display:flex;flex-direction:column;gap:4px;font-size:24px;font-weight:700}.timeline-year h2 span{font-size:13px;font-weight:400;color:var(--muted)}.timeline-year ul{list-style:none;margin:0;padding:0}.timeline-year li{display:flex;align-items:baseline;gap:24px;padding:10px 12px;margin-inline:-12px;border-radius:var(--radius-surface)}.timeline-year li:hover,.timeline-year li:focus-within{background:var(--surface-muted)}.timeline-year time{flex-shrink:0;font-size:13px;font-variant-numeric:tabular-nums;color:var(--muted)}.timeline-year li a{font-size:16px}.term-list{display:flex;flex-wrap:wrap;align-items:flex-start;gap:12px}.term-list>a{display:inline-flex;align-items:baseline;justify-content:space-between;gap:16px;max-width:100%;padding:10px 18px;border-radius:var(--radius-control);background:var(--surface-muted)}.term-list>a:hover,.term-list>a:focus-visible{color:var(--text);background:var(--hover)}.term-count{flex-shrink:0;color:var(--muted);font-size:13px;font-variant-numeric:tabular-nums}.friend-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:40px}.friend-card{min-width:0;padding:24px 20px;border:1px solid var(--card-border);background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow-rest)}.friend-card:hover,.friend-card:focus-visible{border-color:var(--border);color:var(--text);box-shadow:var(--shadow-lift)}.friend-card img{width:48px;height:48px;border-radius:50%;object-fit:cover;margin-bottom:20px}.friend-card h2,.friend-title{font-size:17px;line-height:1.5}.friend-card p{margin-top:8px;color:var(--muted);font-size:14px}.friend-section-heading{margin-bottom:24px}.friend-section-heading h2{font-size:22px;line-height:1.5}.friend-section-heading p{margin-top:8px;color:var(--muted);font-size:14px}.friend-card--away img{filter:grayscale(1)}.friend-card .friend-status{padding-top:12px;margin-top:16px;border-top:1px solid var(--border);font-size:12px}.search-form{display:flex;align-items:center;gap:12px;padding:6px 6px 6px 24px;border:1px solid var(--control-border);border-radius:var(--radius-control);background:var(--surface)}.search-form:hover{border-color:var(--focus)}.search-form:focus-within{border-color:var(--focus);outline:2px solid var(--focus);outline-offset:0}.search-form:has(button:focus-visible){outline:none}.search-form input{width:100%;min-width:0;padding-block:8px;color:var(--text);background:0 0;border:0;outline:none}.search-form input::placeholder{color:var(--muted);opacity:1}.search-form button{flex-shrink:0;min-height:44px;padding:8px 22px;color:var(--button-text);background:var(--button-fill);border-radius:var(--radius-control)}.search-form button:is(:hover,:focus-visible){background:var(--button-hover);color:var(--button-text)}.search-form button:focus-visible{outline-offset:2px}.search-form button:active{background:var(--button-pressed)}.search-status{margin:24px 0;color:var(--muted);font-size:14px}.search-status:empty{display:none}.not-found{text-align:center;padding:64px 0}.error-code{color:var(--text);font-size:clamp(80px,14vw,128px);line-height:1.2;font-weight:700;letter-spacing:-.06em}.not-found h1{margin-top:16px;font-size:24px}.not-found>div{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:24px;margin-top:32px}@media(min-width:640px){.friend-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:600px){:root{--page-gutter:20px;--gap:20px;--card-min:560px}.site-header{min-height:72px;padding-block:12px;gap:16px}.site-nav{flex-wrap:wrap;gap:2px;font-size:13px}.site-nav a{padding:9px 8px}.site-nav-toggle{display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border-radius:var(--radius-control);background:var(--surface-muted);color:var(--text)}.site-nav-toggle:hover,.site-nav-toggle[aria-expanded=true]{background:var(--hover)}.site-nav-icon,.site-nav-icon::before,.site-nav-icon::after{width:20px;height:2px;border-radius:var(--radius-control);background:currentColor}.site-nav-icon{position:relative}.site-nav-icon::before,.site-nav-icon::after{content:"";position:absolute;inset:0}.site-nav-icon::before{transform:translateY(-6px)}.site-nav-icon::after{transform:translateY(6px)}.site-nav-toggle[aria-expanded=true] .site-nav-icon{background:0 0}.site-nav-toggle[aria-expanded=true] .site-nav-icon::before{transform:rotate(45deg)}.site-nav-toggle[aria-expanded=true] .site-nav-icon::after{transform:rotate(-45deg)}.site-navigation.is-menu-ready .site-nav{position:absolute;top:calc(100% + 16px);right:0;display:flex;visibility:hidden;opacity:0;transform:translateY(-8px)scale(.96);transform-origin:top right;pointer-events:none;flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:4px;width:208px;max-width:calc(100vw - var(--page-gutter) * 2);max-height:calc(100vh - 96px);max-height:calc(100dvh - 96px);overflow-y:auto;overscroll-behavior:contain;padding:8px;border:1px solid var(--border);border-radius:var(--radius-surface);background:var(--surface);box-shadow:var(--shadow-lift);font-size:14px}.site-nav-toggle[aria-expanded=true]+.site-nav{visibility:visible;opacity:1;transform:none;pointer-events:auto}.site-navigation.is-menu-ready .site-nav a{display:flex;align-items:center;min-height:44px;padding:10px 16px}.site-navigation.is-menu-ready .site-nav a:focus-visible{outline-offset:-4px}.site-name{font-size:20px}.pagination{gap:4px;font-size:13px}.pagination-step{padding-inline:4px}.page-number{width:32px}.page-number::before{width:28px;height:28px}.site-main{margin-top:24px;margin-bottom:48px}.page-heading{margin-bottom:24px;padding-top:8px;gap:10px 16px}.page-heading h1{font-size:30px}.heading-meta{flex-basis:100%}.timeline-year{grid-template-columns:1fr;gap:8px;margin-bottom:24px;padding-bottom:24px}.timeline-year h2{flex-direction:row;align-items:baseline;gap:16px}.timeline-year li{gap:20px}.term-list{gap:10px}.term-list>a{padding-inline:14px;gap:12px}.friend-grid{gap:12px}.friend-card{padding:20px 16px}.site-footer{flex-wrap:wrap;gap:8px 20px;font-size:12px}.color-modes{flex-basis:100%;justify-content:center;margin-top:8px}}.surface{background:var(--surface);padding:var(--article-padding)}.reading-layout{position:relative}.reading-column{min-width:0}.article-heading{padding-bottom:8px;margin-bottom:32px}.article-meta{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}.article-heading h1{margin-top:16px;font-size:36px;line-height:1.4;font-weight:700;letter-spacing:-.025em}@supports(text-wrap:pretty){.article-heading h1{text-wrap:pretty}}.article-heading h1:first-child{margin-top:0}.article-tags{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:16px;font-size:13px;color:var(--muted)}.article-tags a{padding:5px 12px;border-radius:var(--radius-control);background:var(--surface-muted)}.article-tags a:hover{background:var(--hover)}.prose{line-height:1.85}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol,.prose blockquote,.prose table,.prose .code-block,.prose .video-embed{margin-block:16px}.prose h1,.prose h2,.prose h3,.prose h4{margin:36px 0 16px;line-height:1.4;scroll-margin-top:96px}.prose h1{font-size:28px}.prose h2{font-size:24px}.prose h3{font-size:20px}.prose h4{font-size:17px}.prose a{color:var(--accent-text);text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}.prose a:hover{color:var(--accent-text);text-decoration-thickness:2px}.prose ul,.prose ol{padding-left:24px}.prose li+li{margin-top:6px}.prose li>p{margin-block:8px}.prose img{margin-inline:auto;border-radius:var(--radius-surface)}.prose img[data-zoomable]{cursor:zoom-in}.content-image{position:relative;display:block;overflow:hidden;border-radius:var(--radius-surface);width:fit-content;max-width:100%;margin-inline:auto}.image-placeholder{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none;transition:opacity 200ms}[data-progressive-image]>img{position:relative;transition:opacity 200ms}.has-placeholder:not(.image-loaded)>img{opacity:0}.image-failed:not(.has-placeholder){color:var(--muted)}.prose blockquote{padding:16px 22px;margin-inline:0;border-radius:var(--radius-surface);background:var(--surface-muted);color:var(--text-soft)}.prose blockquote>:first-child{margin-top:0}.prose blockquote>:last-child{margin-bottom:0}.prose hr{margin:32px 0;border:0;border-top:1px solid var(--border)}.prose code{padding:2px 5px;color:var(--text);background:var(--surface-muted);border-radius:6px;font:.875em/1.6 var(--font-code)}.code-block{overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-surface);background:var(--surface-muted)}.code-toolbar{display:flex;align-items:center;justify-content:space-between;padding:4px 12px;border-bottom:1px solid var(--border);font-size:12px;color:var(--muted)}.copy-code{min-height:36px;padding:6px 12px;border-radius:var(--radius-control)}.copy-code:hover{background:var(--hover);color:var(--text)}.prose pre{max-width:100%;overflow-x:auto;margin:0;padding:16px;line-height:1.6;tab-size:4}.prose pre code{background:0 0;color:inherit;padding:0;border-radius:0;font-size:13px;white-space:pre;overflow-wrap:normal}.mermaid-block{min-width:0;margin:24px 0}.mermaid-diagram{max-width:100%;overflow-x:auto;padding:16px;border:1px solid var(--border);border-radius:var(--radius-surface);background:var(--surface);line-height:1.5}.mermaid-diagram>svg{display:block;margin-inline:auto}.mermaid-diagram .label p{margin:0}.mermaid-controls{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-bottom:8px}.mermaid-controls button{min-width:44px;min-height:44px;padding:8px 12px;border-radius:var(--radius-control);background:var(--surface-muted);font-size:13px}.mermaid-controls button:is(:hover,:focus-visible){background:var(--hover)}.mermaid-controls button:disabled{cursor:default;opacity:.45}.mermaid-controls output{min-width:54px;text-align:center;font-size:13px;font-variant-numeric:tabular-nums;color:var(--text-soft)}.mermaid-diagram.is-interactive{position:relative;height:clamp(260px,55vh,480px);padding:0;overflow:hidden;touch-action:none;user-select:none;cursor:grab}.mermaid-diagram.is-interactive>svg{position:absolute;top:0;left:0;margin:0;transform-origin:0 0}.mermaid-diagram.is-dragging{cursor:grabbing}.mermaid-diagram.is-dragging>svg{will-change:transform}.prose .mermaid-hint{margin:8px 0;color:var(--muted);font-size:12px}.mermaid-source{margin-top:8px}.mermaid-source>summary{width:fit-content;padding:8px 0;cursor:pointer;color:var(--muted);font-size:13px}.mermaid-source>summary:hover{color:var(--text)}.prose .mermaid-source .code-block{margin-block:8px 0}.prose .mermaid-status{margin-block:8px;color:var(--muted);font-size:13px}.prose table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:14px}.prose td,.prose th{border:1px solid var(--border-hover);padding:8px 12px}.prose th{background:var(--surface-muted);text-align:left}.prose input[type=checkbox]{accent-color:var(--button-fill)}.markdown-alert{--alert:var(--note);--alert-background:var(--note-soft);padding:20px 22px;margin-block:24px;border-radius:var(--radius-surface);color:var(--text);background:var(--alert-background)}.markdown-alert .alert-title{display:flex;align-items:center;gap:10px;color:var(--text);font-weight:700;margin:0 0 8px}.markdown-alert .alert-title::before{content:"";width:8px;height:8px;flex-shrink:0;background:var(--alert);border-radius:50%}.markdown-alert>:last-child{margin-bottom:0}.alert-tip{--alert:var(--tip);--alert-background:var(--tip-soft)}.alert-warning{--alert:var(--warning);--alert-background:var(--warning-soft)}.alert-caution{--alert:var(--caution);--alert-background:var(--caution-soft)}.alert-important{--alert:var(--important);--alert-background:var(--important-soft)}.video-embed{aspect-ratio:16/9}.video-embed iframe{width:100%;height:100%;border:0;border-radius:var(--radius-surface)}.x-embed{position:relative;width:100%;max-width:550px;margin:24px auto}.x-embed-frame{width:100%}.x-embed-frame.is-pending{position:absolute;inset:0 0 auto;visibility:hidden;pointer-events:none}.x-embed-frame iframe{max-width:100%;border:0}.prose .x-embed-source{margin-block:8px 0;font-size:13px;text-align:center}.x-embed-fallback>:first-child{margin-top:0}.x-embed-fallback>:last-child{margin-bottom:0}.article-footer{border-top:1px solid var(--border);margin-top:40px;padding-top:24px;font-size:13px;color:var(--muted)}.article-footer a{color:var(--accent-text);text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}.adjacent-posts{display:flex;gap:32px;margin:32px 0;padding:8px var(--article-padding)}.adjacent-posts>*{flex:1;min-width:0}.adjacent-post-placeholder{visibility:hidden}.adjacent-posts a:hover{color:var(--accent-text)}.adjacent-posts a:hover strong{text-decoration:underline;text-underline-offset:4px}.adjacent-posts span{color:var(--footer-text);display:block;font-size:13px;margin-bottom:8px}.adjacent-posts strong{font-size:15px;font-weight:500}.adjacent-posts>:last-child{text-align:right}.desktop-toc{display:none}.mobile-toc{margin-bottom:28px;padding:0 18px;background:var(--surface-muted);border-radius:var(--radius-surface);font-size:14px}.mobile-toc summary{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding-block:15px;list-style:none}.mobile-toc summary::-webkit-details-marker{display:none}.mobile-toc summary::after{content:"";width:7px;height:7px;margin-right:4px;border-right:1.5px solid;border-bottom:1.5px solid;transform:rotate(45deg)}.mobile-toc[open] summary::after{transform:rotate(225deg)}.mobile-toc[open]{padding-bottom:12px}#TableOfContents ul{list-style:none;margin:8px 0;padding-left:12px}#TableOfContents>ul{padding-left:0}#TableOfContents li{margin:6px 0}#TableOfContents a{color:var(--muted);display:block;padding:4px 8px;border-radius:10px;overflow-wrap:anywhere}#TableOfContents a:focus-visible{outline-offset:-2px}#TableOfContents a:hover{color:var(--text)}#TableOfContents a[aria-current=location]{color:var(--accent-text)}#TableOfContents a[aria-current=location]{font-weight:700}.comments{margin-top:40px;padding-top:28px;border-top:1px solid var(--border);font-size:14px}.comments h2{font-size:18px;margin-bottom:16px}.text-button{min-height:44px;border:1px solid var(--control-border);border-radius:var(--radius-control);padding:8px 20px}.text-button:is(:hover,:focus-visible){border-color:var(--focus);background:var(--surface-muted)}.text-button:active{background:var(--hover)}.comment-status{color:var(--muted);margin-block:8px}.comment-status:empty{display:none}.comment-heading,.comment-byline{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px 16px}.comment-heading{justify-content:space-between}.comments .comment-heading h2{margin:0}.comments .comment-heading{margin-bottom:16px;align-items:center}.comment-heading-actions{display:flex;align-items:center;gap:12px}.comment-heading span,.comment-byline time{color:var(--muted);font-size:13px}.comment-list{list-style:none;padding:0;margin:0 0 32px}.comment-item{padding-block:24px;border-bottom:1px solid var(--border);min-width:0;scroll-margin-top:24px}.comment-byline strong{overflow-wrap:anywhere}.comment-byline{flex-wrap:nowrap;gap:12px}.comment-author{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;min-width:0}.comment-byline time{font-variant-numeric:tabular-nums}.comment-byline time[role=button]{cursor:pointer;text-decoration:underline dotted;text-underline-offset:4px;border-radius:2px}.comment-byline time[role=button]:hover{color:var(--text)}.comment-parent{margin-block:8px 0;color:var(--muted);font-size:13px;overflow-wrap:anywhere}.comment-parent a,.comment-reply-context a{color:var(--accent-text);text-decoration:underline;text-underline-offset:3px}.comment-reply{flex-shrink:0;margin-left:auto;padding:4px 0;font-size:13px;color:var(--accent-text)}.comment-reply:is(:hover,:focus-visible){text-decoration:underline;text-underline-offset:4px}.comment-replies{margin:18px 0 0;padding-left:clamp(12px,3vw,24px);border-left:1px solid var(--border)}.comment-replies>.comment-item{padding-block:16px}.comment-replies>.comment-item:last-child{border-bottom:0;padding-bottom:0}.comment-replies-flat{padding-left:0;border-left:0}.comment-reply-context{margin-bottom:20px;padding-left:14px;border-left:2px solid var(--accent-text);overflow-wrap:anywhere}.comment-reply-context p{margin-block:0 8px}.comment-message{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.85;margin-top:10px}.comment-empty,.comment-note{color:var(--muted);line-height:1.75}.comment-form{margin-top:32px}.comment-form fieldset{border:0;padding:0;min-width:0;margin:0}.comment-form legend{font-weight:600;margin-bottom:20px;padding:0;font-size:16px}.comment-form label{display:block;margin-bottom:8px}.comment-form :is(input:not([type=checkbox]):not([type=hidden]),textarea){display:block;width:100%;padding:12px 14px;margin-bottom:20px;border:1px solid var(--control-border);border-radius:var(--radius-surface);background:var(--surface);color:var(--text)}.comment-form input[name=name]{max-width:320px}.comment-form textarea{resize:vertical;min-height:140px;line-height:1.75}.comment-form :is(input,textarea)::placeholder{color:var(--muted);opacity:1}.comment-form .comment-consent{display:flex;align-items:flex-start;gap:10px;margin-block:16px 24px;color:var(--text-soft);font-size:13px}.comment-consent input{flex-shrink:0;margin:4px 0 0;accent-color:var(--button-fill)}.comment-honeypot{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.comment-popover{position:fixed;inset:auto;z-index:50;width:min(448px,calc(100vw - 24px));max-height:calc(100dvh - 24px);margin:0;padding:20px;overflow-y:auto;scrollbar-width:none;overscroll-behavior:contain;border:1px solid var(--border);border-radius:var(--radius-surface);background:var(--surface);color:var(--text);box-shadow:var(--shadow-lift);font-size:14px}.comment-popover::-webkit-scrollbar{display:none}.comment-editor-heading{position:sticky;top:-20px;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-20px -20px 16px;padding:20px 20px 12px;background:var(--surface);border-bottom:1px solid var(--border)}.comment-editor-heading h3{font-size:16px;font-weight:600}.comment-editor-close{display:grid;place-items:center;flex-shrink:0;width:36px;height:36px;margin:-6px -6px -6px 0;border-radius:var(--radius-control);color:var(--muted)}.comment-editor-close:is(:hover,:focus-visible){color:var(--text);background:var(--surface-muted)}.comment-popover .comment-form{margin-top:0}.comment-identity-row{display:grid;grid-template-columns:minmax(0,2fr)minmax(0,3fr);gap:12px}.comment-popover .comment-form label{margin-bottom:6px}.comment-label-row{display:flex;align-items:center;gap:4px}.comment-form .comment-label-row{margin-bottom:6px}.comment-popover .comment-label-row label{margin-bottom:0}.comment-help{display:inline-grid;place-items:center;flex-shrink:0;width:24px;height:24px;padding:0;border-radius:var(--radius-control);color:var(--muted)}.comment-help svg{display:block;width:16px;height:16px}.comment-help:is(:hover,:focus-visible){color:var(--text);background:var(--surface-muted)}.comment-tooltip{position:fixed;inset:auto;z-index:51;width:max-content;max-width:min(300px,calc(100vw - 24px));margin:0;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--surface-muted);color:var(--text-soft);box-shadow:var(--shadow-lift);font-size:12px;font-weight:400;line-height:1.75;overflow-wrap:anywhere}.comment-popover .comment-form :is(input:not([type=checkbox]):not([type=hidden]),textarea){padding:9px 12px;margin-bottom:12px;border-radius:10px}.comment-popover .comment-form textarea{min-height:120px}.comment-popover .comment-note{font-size:12px;line-height:1.65}.comment-popover .comment-consent{margin-block:12px 16px}.comment-popover .comment-reply-context{margin-bottom:16px}.comment-popover .comment-reply-context p{margin:0}.comment-popover.has-status{overflow:hidden}.comment-popover.has-status .comment-editor-heading{z-index:3;border-color:transparent;background:0 0}.comment-popover.has-status .comment-editor-heading .comment-label-row,.comment-popover.has-status fieldset{visibility:hidden}.comment-feedback:focus{outline:none}.submission-verification:not([hidden]){display:flex;justify-content:center;width:100%;margin-block:12px}.comment-state-panel{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:safe center;gap:16px;padding:56px 28px 28px;overflow-y:auto;scrollbar-width:none;background:var(--surface);text-align:center}.comment-state-panel::-webkit-scrollbar{display:none}.comment-state-panel>*{flex-shrink:0}.comment-state-panel h3{font-size:18px;font-weight:600}.comment-state-panel .comment-status{max-width:30ch;margin:0;line-height:1.8}.comment-state-panel :is(.page-link,.text-button){margin-top:8px}.comment-state-symbol{width:48px;height:48px;color:var(--text)}.comment-state-symbol svg{display:block;width:100%;height:100%}.comment-state-symbol .comment-state-success{display:none}.comment-state-spinner{animation:comment-spin 1s linear infinite}.comment-state-panel[data-state=success] .comment-state-spinner{display:none}.comment-state-panel[data-state=success] .comment-state-success{display:block}@keyframes comment-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.comment-state-spinner{animation:none}}@media(max-width:600px){.comment-popover{padding:16px}.comment-editor-heading{top:-16px;margin:-16px -16px 16px;padding:16px 16px 12px}.comment-popover .comment-form :is(input:not([type=checkbox]),textarea){font-size:16px}}.comment-review .comment-note{margin-bottom:24px}.comment-review .comment-item{margin-bottom:24px}.comment-article-link{color:var(--accent-text);text-decoration:underline;text-underline-offset:4px}.friend-form-row{display:grid;grid-template-columns:minmax(0,1fr)minmax(0,1fr);gap:20px}.friend-form-row>div{min-width:0}.friend-application textarea{min-height:96px}.friend-application #friend-note{margin-top:16px}.friend-review .comment-item{overflow-wrap:anywhere}@media(max-width:600px){.friend-form-row{grid-template-columns:minmax(0,1fr);gap:0}}@media(min-width:1280px){.desktop-toc{display:block;position:absolute;left:calc(100% + 40px);top:0;width:180px;height:100%;font-size:13px}.toc-panel{position:sticky;top:104px;padding:8px 16px}.toc-panel>p{padding-bottom:8px;font-size:13px;font-weight:600}.desktop-toc #TableOfContents{max-height:calc(100vh - 172px);overflow-x:hidden;overflow-y:auto;scrollbar-width:thin}.mobile-toc{display:none}}@media(max-width:600px){.article-heading h1{font-size:28px}.prose{font-size:16px}.prose h1{font-size:24px}.prose h2{font-size:21px}.adjacent-posts{flex-direction:column}.adjacent-posts>:last-child{text-align:left}}.profile-heading{display:flex;align-items:center;gap:20px}.profile-heading h1{margin-top:0}.site-avatar{flex-shrink:0;aspect-ratio:1;border-radius:50%;object-fit:cover;background:var(--surface-muted)}.chroma{color:var(--text);background:0 0}.chroma .c,.chroma .c1,.chroma .cm,.chroma .cs,.chroma .cp{color:var(--muted);font-style:italic}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nt{color:var(--text);font-weight:600}.chroma .s,.chroma .s1,.chroma .s2,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .sh,.chroma .sx{color:#087a4b}.chroma .m,.chroma .mi,.chroma .mf,.chroma .mh,.chroma .il,.chroma .se{color:#975300}.chroma .nf,.chroma .nc,.chroma .nb,.chroma .na,.chroma .kt{color:#2463cc}.chroma .gd{color:#b42318;background:rgb(180 35 24/8%)}.chroma .gi{color:#237349;background:rgb(35 115 73/8%)}:root[data-color-mode=dark] .chroma :is(.s,.s1,.s2,.sb,.sc,.sd,.sh,.sx,.gi){color:#a1d4ae}:root[data-color-mode=dark] .chroma :is(.m,.mi,.mf,.mh,.il,.se){color:#e9ba85}:root[data-color-mode=dark] .chroma :is(.nf,.nc,.nb,.na,.kt){color:#99bfef}:root[data-color-mode=dark] .chroma .gd{color:#ffb4a0}:root{--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-spring:cubic-bezier(.2, .9, .3, 1.15);--motion-fast:160ms;--motion-enter:340ms;--motion-image:280ms}html{scrollbar-gutter:stable}::view-transition-old(root){animation:page-leave 140ms ease-out both}::view-transition-new(root){animation:page-arrive 260ms var(--ease-out)both}.site-header{view-transition-name:site-header}::view-transition-group(site-header){animation-duration:0s}::view-transition-old(site-header){display:none}::view-transition-new(site-header){animation:none}@keyframes page-leave{to{opacity:0}}@keyframes page-arrive{from{opacity:0;transform:translateY(6px)}}@keyframes section-arrive{from{opacity:.35;transform:translateY(8px)}}.page-heading,.friend-grid,.timeline{animation:section-arrive var(--motion-enter)var(--ease-out)backwards}html[data-article-transition]::view-transition-old(root){animation:page-leave 120ms ease-out both}html[data-article-transition]::view-transition-new(root){animation:article-page-arrive 280ms 160ms ease-out both}::view-transition-group(article-panel),::view-transition-group(article-title),::view-transition-group(article-cover){animation-duration:560ms;animation-timing-function:var(--ease-out)}::view-transition-group(article-panel){z-index:1}::view-transition-group(article-cover){z-index:2;border-radius:var(--radius-surface);overflow:clip}::view-transition-group(article-title){z-index:3}::view-transition-old(article-panel),::view-transition-new(article-panel){height:100%;mix-blend-mode:normal}::view-transition-old(article-panel){animation:page-leave 180ms ease-out both}::view-transition-new(article-panel){animation:article-page-arrive 280ms 200ms both}::view-transition-old(article-title),::view-transition-new(article-title){height:100%;object-fit:contain;object-position:left top;mix-blend-mode:normal}::view-transition-old(article-title){animation:page-leave 220ms both}::view-transition-new(article-title){animation:article-page-arrive 320ms 100ms both}html[data-article-transition-cover=true]::view-transition-old(article-title){animation:page-leave 90ms both}html[data-article-transition-cover=true]::view-transition-new(article-title){animation:article-page-arrive 240ms 240ms both}::view-transition-old(article-cover),::view-transition-new(article-cover){width:100%;height:100%;object-fit:cover;mix-blend-mode:normal}::view-transition-old(article-cover){animation:page-leave 180ms 380ms both}::view-transition-new(article-cover){animation:article-page-arrive 180ms 380ms both}::view-transition-old(article-cover):only-child{animation:page-leave 120ms both}::view-transition-new(article-cover):only-child{animation:article-page-arrive 220ms 160ms both}@keyframes article-page-arrive{from{opacity:0}to{opacity:1}}.reveal-pending{opacity:0}.post-card{contain:layout paint;transition:translate 360ms var(--ease-spring),border-color 200ms,box-shadow 280ms}.card-cover img{transition:opacity var(--motion-image)ease-out,transform 400ms var(--ease-out)}.image-placeholder,.content-image>img{transition:opacity var(--motion-image)ease-out}.page-link,.text-button,.friend-card,.color-modes button,.site-nav a,.term-list>a,.search-form button,.copy-code{transition:transform 280ms var(--ease-spring),translate 280ms var(--ease-spring),color var(--motion-fast),background-color var(--motion-fast),border-color var(--motion-fast),box-shadow 280ms}.page-link:active,.text-button:active,.color-modes button:active,.site-nav a:active,.term-list>a:active,.search-form button:active,.copy-code:active{transform:scale(.96)}.mobile-toc summary::after{transition:transform 280ms var(--ease-spring)}.mobile-toc[open]>nav{animation:disclosure-arrive 220ms var(--ease-out)}@keyframes disclosure-arrive{from{opacity:0;translate:0 4px}}@media(max-width:600px){.site-nav-icon{transition:background-color 160ms}.site-nav-icon::before,.site-nav-icon::after{transform-origin:center;transition:transform 280ms var(--ease-spring)}.site-navigation.is-menu-ready.is-menu-animated .site-nav{transition:opacity 180ms ease-out,transform 240ms var(--ease-out),visibility 0s 240ms}.site-navigation.is-menu-ready.is-menu-animated .site-nav-toggle[aria-expanded=true]+.site-nav{transition-delay:0s}}@media(hover:hover) and (pointer:fine){.post-card:hover,.friend-card:hover{translate:0 -4px}.page-link:hover,.term-list>a:hover{translate:0 -2px}.post-card:hover .card-cover img{transform:scale(1.025)}}.image-dialog{position:fixed;inset:0;width:100vw;height:100vh;height:100dvh;max-width:none;max-height:none;margin:0;padding:0;border:0;background:0 0;overflow:hidden;overscroll-behavior:contain}.image-dialog::backdrop{background:0 0}.image-dialog[data-state=preparing]{opacity:0}.image-dialog-scrim{position:absolute;inset:0;background:var(--overlay)}.image-dialog-stage{position:absolute;transform-origin:top left;contain:layout paint;border-radius:var(--radius-surface)}.image-dialog-stage img{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:contain}.preview-original{opacity:0}.image-dialog.has-original .preview-original{opacity:1}.image-dialog-close{position:absolute;top:max(16px,env(safe-area-inset-top));right:max(20px,env(safe-area-inset-right));display:grid;place-items:center;width:44px;height:44px;padding:12px;border-radius:50%;background:var(--surface);z-index:1}.image-dialog-close svg{display:block;width:20px;height:20px}.image-dialog-close:hover{background:var(--hover)}.image-dialog-status{position:absolute;bottom:max(16px,env(safe-area-inset-bottom));left:24px;right:24px;color:#fff;text-align:center;font-size:13px;pointer-events:none}.is-preview-source{visibility:hidden}@media(prefers-reduced-motion:reduce){::view-transition-old(*),::view-transition-new(*){animation:none!important}.reveal-pending{opacity:1}.post-card:hover,.post-card:hover .card-cover img,.page-link:hover,.friend-card:hover,.term-list>a:hover,.page-link:active,.text-button:active,.color-modes button:active,.site-nav a:active,.term-list>a:active,.search-form button:active,.copy-code:active{transform:none;translate:none}}