@charset "UTF-8";/*!* Canon base — the foundation the migrated surfaces stand on.
*
* Before this file existed the canon had no base at all: no reset, no body, no
* tokens outside a surface scope. Every canon stylesheet was scoped to
* `.article-surface` / `.home-page` / `.page-surface`, and the whole thing stood
* on the theme's `style.scss` — 43 KB of the incumbent design, loaded on every
* page, quietly supplying the reset, the frame and the CSS variables. Anything
* the canon did not explicitly restyle fell back to the look it was replacing.
*
* This file owns that foundation:
* 1. the reset
* 2. the canon tokens, at the root instead of inside a surface
* 3. the theme variable names still read by the surviving components, mapped
* onto canon tokens so there is only ever one accent
* 4. the frame primitives the layout is built from
* 5. base links
*
* `canon-keep.scss` carries the few theme components not restyled yet, and
* nothing else of the theme's stylesheet loads.*//*!* Canon surface tokens — shared by the migrated surfaces (homepage, article).
* Import into a surface stylesheet and include the mixins on that surface's
* scope element, so the palette, ramp and elevation have one source of truth.*//*!* Inter, self-hosted — the chrome face.
*
* This face used to be declared inside `home.scss`, which meant Inter loaded on
* the homepage and nowhere else: every other surface fell back to whatever sans
* the operating system supplied, so the rail rendered in a different font on
* every page but home. Faces belong in the shared layer, not in a surface.
*
* One variable file covers 400-700, which is the whole range the chrome uses.*/@font-face{font-family:inter;font-style:normal;font-weight:400 700;font-display:swap;src:url(/fonts/inter/inter-latin.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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}/*!* Lato, self-hosted. The theme injected this face with an async <script> in the
* footer, which guarantees a flash of unstyled text on every page. Serving it
* from /fonts/lato removes that and the third-party request.*/@font-face{font-family:lato;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/lato/lato-regular-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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:lato;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/lato/lato-regular-700.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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:lato;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/lato/lato-italic-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+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}.reading-progress-bar{position:fixed;top:0;left:0;width:100%;height:3px;background:0 0;z-index:9999}.reading-progress-fill{height:100%;background:var(--progress-accent,var(--accent-color));width:0%;transition:width .1s ease-out}h1 .header-link,h2 .header-link,h3 .header-link,h4 .header-link,h5 .header-link,h6 .header-link{-webkit-transform:translateX(-100%);opacity:0;padding:0 5px;transform:translateX(-100%);transition:opacity .2s ease-in;will-change:transform,opacity}h1:hover .header-link,h2:hover .header-link,h3:hover .header-link,h4:hover .header-link,h5:hover .header-link,h6:hover .header-link{opacity:1}.custom-box{display:flex;gap:.75rem;padding:1rem 1.25rem;margin:1.5rem 0;border-radius:6px;border-left:4px solid;background:var(--card-background);line-height:1.6}.custom-box-icon{flex-shrink:0;font-size:12px;line-height:1.5}.custom-box-content{flex:1;min-width:0}.custom-box-content>:first-child{margin-top:0}.custom-box-content>:last-child{margin-bottom:0}.custom-box-info{border-left-color:#3498db;background:color-mix(in srgb,#3498db 8%,var(--card-background))}.custom-box-warning{border-left-color:#f39c12;background:color-mix(in srgb,#f39c12 8%,var(--card-background))}.custom-box-alert{border-left-color:#e74c3c;background:color-mix(in srgb,#e74c3c 8%,var(--card-background))}.custom-box-tip{border-left-color:#2ecc71;background:color-mix(in srgb,#2ecc71 8%,var(--card-background))}.custom-box-ai{border-left-color:#8e44ad;background:color-mix(in srgb,#8e44ad 8%,var(--card-background))}*,*::before,*::after{box-sizing:border-box}html{font-size:62.5%;overflow-y:scroll;-webkit-text-size-adjust:100%}body{margin:0;background:var(--h-ground);color:var(--h-ink);font-family:var(--h-font);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main,article,aside,figure,figcaption,footer,header,nav,section,details,summary{display:block}h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd{margin:0}img,picture,video,canvas,svg{max-width:100%}img{height:auto}table{border-collapse:collapse;border-spacing:0}button,input,select,textarea{font:inherit;color:inherit}button{background:0 0;border:0;cursor:pointer}hr{border:0;border-top:1px solid var(--h-line)}[hidden]{display:none!important}:root{--h-ground:#fafafa;--h-sheet:#ffffff;--h-fill:#f4f5f7;--h-fill-strong:#eceef1;--h-ink:#0f1115;--h-ink-2:#4b5563;--h-ink-3:#6b7280;--h-line:#e6e8ec;--h-line-strong:#d3d7de;--h-accent:#2563eb;--h-accent-ink:#ffffff;--h-accent-soft:#eef4ff;--h-r-control:8px;--h-r-panel:12px;--h-e1:0 1px 2px rgba(15, 17, 21, 0.04), 0 1px 3px rgba(15, 17, 21, 0.06);--h-e2:0 2px 4px rgba(15, 17, 21, 0.05), 0 12px 28px rgba(15, 17, 21, 0.08);--h-font:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--h-prose:"Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--h-mono:ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", monospace;--progress-accent:var(--h-accent);--h-gutter:40px;--h-rail:176px;--h-side:258px;--h-gap:32px}@media(max-width:1279px){:root{--h-gutter:32px;--h-rail:164px;--h-side:240px;--h-gap:28px}}@media(max-width:1023px){:root{--h-gutter:24px;--h-gap:24px}}@media(max-width:767px){:root{--h-gutter:20px}}@media(max-width:479px){:root{--h-gutter:16px}}[data-scheme=dark]{--h-ground:#0b0d10;--h-sheet:#14171c;--h-fill:#1c2027;--h-fill-strong:#232830;--h-ink:#f2f4f7;--h-ink-2:#a7aeb8;--h-ink-3:#8b95a3;--h-line:#232a33;--h-line-strong:#2e3641;--h-accent:#7ba2ff;--h-accent-ink:#0b0d10;--h-accent-soft:#17233f;--h-e1:0 1px 2px rgba(0, 0, 0, 0.4), 0 1px 3px rgba(0, 0, 0, 0.35);--h-e2:0 2px 6px rgba(0, 0, 0, 0.45), 0 14px 30px rgba(0, 0, 0, 0.5)}:root{--main-top-padding:36px;--section-separation:24px;--container-padding:15px;--widget-separation:24px;--menu-icon-separation:14px;--left-sidebar-max-width:100%;--right-sidebar-max-width:100%;--body-background:var(--h-ground);--accent-color:var(--h-accent);--accent-color-darker:var(--h-accent);--accent-color-text:var(--h-accent-ink);--body-text-color:var(--h-ink-2);--card-background:var(--h-sheet);--card-background-selected:var(--h-fill);--card-text-color-main:var(--h-ink);--card-text-color-secondary:var(--h-ink-2);--card-text-color-tertiary:var(--h-ink-3);--card-separator-color:var(--h-line);--card-border-radius:var(--h-r-panel);--card-padding:20px;--small-card-padding:25px 20px;--article-font-family:var(--h-prose);--article-font-size:17px;--article-line-height:1.85;--blockquote-border-size:4px;--blockquote-background-color:var(--h-fill);--heading-border-size:4px;--link-background-color:37, 99, 235;--link-background-opacity:0.14;--link-background-opacity-hover:0.22;--pre-background-color:#0f1115;--pre-text-color:#f2f4f7;--code-background-color:var(--h-fill);--code-text-color:var(--h-ink-2);--table-border-color:var(--h-line);--tr-even-background-color:var(--h-fill);--sys-font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", "Droid Sans", "Helvetica Neue";--zh-font-family:"PingFang SC", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei";--base-font-family:var(--h-font);--code-font-family:var(--h-mono);--shadow-l1:var(--h-e1);--shadow-l2:var(--h-e1);--shadow-l3:var(--h-e2);--shadow-l4:var(--h-e2);--tag-border-radius:6px;--scrollbar-thumb:var(--h-line-strong);--scrollbar-track:transparent}.container{margin-left:auto;margin-right:auto}.flex{display:flex;flex-direction:row}.flex.column{flex-direction:column}.flex.on-phone--column{flex-direction:column}@media(min-width:768px){.flex.on-phone--column{flex-direction:unset}}.flex .full-width{width:100%}main.main{min-width:0;max-width:100%;flex-grow:1;display:flex;flex-direction:column;gap:var(--section-separation)}.main-container{min-height:100vh;align-items:flex-start;padding:0 var(--container-padding);gap:var(--section-separation);padding-top:var(--main-top-padding)}a{text-decoration:none;color:var(--h-accent)}a.link{box-shadow:0 -2px rgba(var(--link-background-color),var(--link-background-opacity))inset;transition:box-shadow .3s ease}a.link:hover{box-shadow:0 -1.4em rgba(var(--link-background-color),var(--link-background-opacity-hover))inset}.section-title{text-transform:uppercase;margin:0 0 10px;display:block;font-size:11px;font-weight:600;letter-spacing:.09em;color:var(--h-ink-3)}.section-title a{color:var(--h-ink-3)}