:root{--bg: #f6f8fb;--bg-grad-a: #eef2ff;--bg-grad-b: #f6f8fb;--surface: #ffffff;--surface-2: #f2f5fa;--surface-sunk: #f6f8fc;--header-bg: rgba(255, 255, 255, 0.82);--text: #111721;--text-2: #4b5666;--text-3: #78849a;--border: #e2e7f0;--border-strong: #ccd4e2;--brand: #3a52d8;--brand-ink: #2a3cae;--brand-soft: #eaeeff;--brand-ring: rgba(58, 82, 216, 0.28);--accent: #0f9070;--accent-soft: #e4f6f0;--btn-a: #3a52d8;--btn-b: #2a3cae;--btn-ink: #ffffff;--code-bg: #f5f7fc;--code-border: #e4e9f3;--code-ink: #1f2937;--shadow-sm: 0 1px 2px rgba(16, 24, 40, 0.05);--shadow: 0 4px 16px -6px rgba(16, 24, 40, 0.14), 0 1px 3px rgba(16, 24, 40, 0.05);--shadow-lg: 0 24px 48px -24px rgba(16, 24, 40, 0.28), 0 2px 6px rgba(16, 24, 40, 0.05);--r-sm: 8px;--r: 12px;--r-lg: 18px;--r-xl: 26px;--shell: 1480px;--rail: 300px;--gap: 40px;--header-h: 66px;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;color-scheme:light}:root[data-theme="dark"]{--bg: #0b0f17;--bg-grad-a: #121a2c;--bg-grad-b: #0b0f17;--surface: #121926;--surface-2: #172131;--surface-sunk: #0e1522;--header-bg: rgba(15, 22, 35, 0.84);--text: #e8eef8;--text-2: #a3b0c4;--text-3: #7f8da3;--border: #1f2a3c;--border-strong: #2e3c53;--brand: #8098ff;--brand-ink: #a7b7ff;--brand-soft: #1a2340;--brand-ring: rgba(128, 152, 255, 0.32);--accent: #3ddc9c;--accent-soft: #14302a;--btn-a: #45599f;--btn-b: #313f78;--btn-ink: #f4f7ff;--code-bg: #0d1420;--code-border: #1e293b;--code-ink: #d7e2f2;--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);--shadow: 0 4px 16px -6px rgba(0, 0, 0, 0.6), 0 1px 3px rgba(0, 0, 0, 0.4);--shadow-lg: 0 24px 48px -24px rgba(0, 0, 0, 0.75), 0 2px 6px rgba(0, 0, 0, 0.4);color-scheme:dark}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--bg: #0b0f17;--bg-grad-a: #121a2c;--bg-grad-b: #0b0f17;--surface: #121926;--surface-2: #172131;--surface-sunk: #0e1522;--header-bg: rgba(15, 22, 35, 0.84);--text: #e8eef8;--text-2: #a3b0c4;--text-3: #7f8da3;--border: #1f2a3c;--border-strong: #2e3c53;--brand: #8098ff;--brand-ink: #a7b7ff;--brand-soft: #1a2340;--brand-ring: rgba(128, 152, 255, 0.32);--accent: #3ddc9c;--accent-soft: #14302a;--btn-a: #45599f;--btn-b: #313f78;--btn-ink: #f4f7ff;--code-bg: #0d1420;--code-border: #1e293b;--code-ink: #d7e2f2;--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);--shadow: 0 4px 16px -6px rgba(0, 0, 0, 0.6), 0 1px 3px rgba(0, 0, 0, 0.4);--shadow-lg: 0 24px 48px -24px rgba(0, 0, 0, 0.75), 0 2px 6px rgba(0, 0, 0, 0.4);color-scheme:dark}}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:0.001ms !important;transition-duration:0.001ms !important}}body{margin:0;background-color:var(--bg);background-image:radial-gradient(120% 60% at 50% -10%, var(--bg-grad-a) 0%, var(--bg-grad-b) 60%);background-repeat:no-repeat;color:var(--text);font-family:var(--font-sans);font-size:16.5px;line-height:1.7;font-feature-settings:"cv05" 1, "ss01" 1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100%;display:flex;flex-direction:column}main{flex:1 0 auto}h1,h2,h3,h4,h5,h6{margin:0 0 0.5em;font-weight:700;line-height:1.25;letter-spacing:-0.018em;color:var(--text);text-wrap:pretty}h1{font-size:clamp(1.95rem, calc(1.3rem + 2.4vw), 2.75rem);font-weight:800}h2{font-size:clamp(1.35rem, calc(1.1rem + 1vw), 1.7rem)}h3{font-size:1.22rem}h4{font-size:1.06rem}p,ul,ol,dl,blockquote,pre,table,figure{margin:0 0 1.15em}p:last-child{margin-bottom:0}a{color:var(--brand);text-decoration:none;transition:color 0.16s ease, background-color 0.16s ease, border-color 0.16s ease}a:hover{color:var(--brand-ink)}img,svg,video{max-width:100%}img{height:auto}hr{height:1px;border:0;margin:2.25rem 0;background:var(--border)}ul,ol{padding-left:1.35em}small{font-size:0.86em}code,kbd,samp,pre{font-family:var(--font-mono);font-size:0.88em;font-variant-ligatures:none}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}::selection{background:var(--brand-ring);color:var(--text)}.icon{width:1em;height:1em;flex:none;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;vertical-align:-0.14em}.skip-link{position:absolute;left:50%;top:0;transform:translate(-50%, -120%);z-index:200;padding:0.6rem 1.1rem;background:var(--brand);color:#fff;border-radius:0 0 var(--r-sm) var(--r-sm);font-weight:600}.skip-link:focus{transform:translate(-50%, 0);color:#fff}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:99px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--text-3)}.shell{width:100%;max-width:var(--shell);margin:0 auto;padding:0 24px}.layout{padding:44px 24px 72px}.layout--with-rail{display:grid;grid-template-columns:minmax(0, 1fr) var(--rail);gap:var(--gap);align-items:start}.layout__main{min-width:0}.rail{min-width:0}.rail__inner{position:sticky;top:calc(var(--header-h) + 20px);display:grid;gap:18px;max-height:calc(100vh - var(--header-h) - 40px);overflow-y:auto;overscroll-behavior:contain;padding-right:2px}.section-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px;margin-bottom:22px}.section-title{display:flex;align-items:center;gap:0.5em;margin:0;font-size:1.28rem;letter-spacing:-0.02em}.section-title .icon{color:var(--brand);stroke-width:1.9}.section-note{margin:0;color:var(--text-3);font-size:0.92rem}@media (max-width: 1000px){.layout--with-rail{grid-template-columns:minmax(0, 1fr)}.rail__inner{position:static;max-height:none;overflow:visible;grid-template-columns:repeat(auto-fit, minmax(260px, 1fr))}.panel--toc{display:none}}@media (max-width: 640px){.shell{padding:0 16px}.layout{padding:28px 16px 56px}body{font-size:16px}}.site-header{position:sticky;top:0;z-index:100;background:var(--header-bg);border-bottom:1px solid var(--border);backdrop-filter:saturate(180%) blur(14px);-webkit-backdrop-filter:saturate(180%) blur(14px)}.site-header__inner{display:flex;align-items:center;gap:18px;min-height:var(--header-h)}.brand{display:inline-flex;align-items:center;gap:11px;color:var(--text);font-weight:700}.brand:hover{color:var(--text)}.brand:hover .brand__mark{transform:translateY(-1px) rotate(-3deg)}.brand__mark{display:grid;place-items:center;width:36px;height:36px;border-radius:11px;background:linear-gradient(140deg, var(--brand) 0%, var(--accent) 130%);color:#fff;font-family:var(--font-mono);font-size:0.78rem;font-weight:700;letter-spacing:0.02em;box-shadow:var(--shadow-sm);transition:transform 0.2s ease}.brand__text{display:grid;line-height:1.2}.brand__name{font-size:1rem;letter-spacing:-0.02em}.brand__role{color:var(--text-3);font-size:0.74rem;font-weight:500;letter-spacing:0.02em}.site-nav{margin-left:auto}.site-nav__list{display:flex;align-items:center;gap:2px;margin:0;padding:0;list-style:none}.site-nav__link{display:inline-flex;align-items:center;gap:0.45em;padding:0.44rem 0.7rem;border-radius:var(--r-sm);color:var(--text-2);font-size:0.92rem;font-weight:600}.site-nav__link .icon{color:var(--text-3)}.site-nav__link:hover{background:var(--surface-2);color:var(--text)}.site-nav__link:hover .icon{color:var(--brand)}.site-nav__link.is-active{background:var(--brand-soft);color:var(--brand-ink)}.site-nav__link.is-active .icon{color:var(--brand)}.site-header__actions{display:flex;align-items:center;gap:6px}.icon-btn{display:grid;place-items:center;width:38px;height:38px;padding:0;border:1px solid var(--border);border-radius:11px;background:var(--surface);color:var(--text-2);cursor:pointer;transition:color 0.16s ease, border-color 0.16s ease, background 0.16s ease, transform 0.16s ease}.icon-btn .icon{width:1.14em;height:1.14em}.icon-btn:hover{color:var(--brand);border-color:var(--brand-ring);transform:translateY(-1px)}.icon-btn__moon,.icon-btn__close{display:none}:root[data-theme="dark"] .icon-btn__sun{display:none}:root[data-theme="dark"] .icon-btn__moon{display:grid}.icon-btn--menu{display:none}.icon-btn--menu.is-open .icon-btn__open{display:none}.icon-btn--menu.is-open .icon-btn__close{display:grid}.read-progress{position:absolute;left:0;right:0;bottom:-1px;height:2px;overflow:hidden}.read-progress span{display:block;height:100%;background:linear-gradient(90deg, var(--brand), var(--accent));transform:scaleX(0);transform-origin:0 50%;will-change:transform}@media (max-width: 860px){.brand__role{display:none}.icon-btn--menu{display:grid}.site-nav{position:absolute;top:calc(var(--header-h) - 4px);right:16px;left:16px;margin-left:0;padding:8px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-lg);opacity:0;visibility:hidden;transform:translateY(-8px);transition:opacity 0.18s ease, transform 0.18s ease, visibility 0.18s}.site-nav.is-open{opacity:1;visibility:visible;transform:translateY(0)}.site-nav__list{flex-direction:column;align-items:stretch;gap:2px}.site-nav__link{padding:0.62rem 0.8rem;font-size:0.97rem}.site-header__actions{margin-left:auto}}.hero{position:relative;overflow:hidden;border-bottom:1px solid var(--border)}.hero::before{content:"";position:absolute;inset:-40% -10% auto;height:420px;background:radial-gradient(45% 55% at 22% 40%, var(--brand-ring) 0%, transparent 70%),radial-gradient(40% 50% at 78% 20%, var(--accent-soft) 0%, transparent 72%);opacity:0.85;pointer-events:none}.hero__inner{position:relative;display:grid;grid-template-columns:minmax(0, 1fr) 280px;gap:48px;align-items:center;padding:68px 24px 64px}.hero__eyebrow{display:inline-flex;align-items:center;gap:0.5em;margin:0 0 14px;padding:0.34rem 0.8rem;border:1px solid var(--border);border-radius:99px;background:var(--surface);color:var(--text-2);font-size:0.8rem;font-weight:600;letter-spacing:0.01em;box-shadow:var(--shadow-sm)}.hero__eyebrow .icon{color:var(--accent)}.hero__title{margin:0 0 14px;font-size:clamp(2.1rem, calc(1.4rem + 3vw), 3.15rem);font-weight:800;letter-spacing:-0.035em}.hero__lede{max-width:56ch;margin:0 0 26px;color:var(--text-2);font-size:1.06rem}.hero__actions{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:26px}.hero__aside{display:grid;justify-items:center;gap:22px}.hero__avatar{width:168px;height:168px;border-radius:50%;object-fit:cover;border:3px solid var(--surface);box-shadow:var(--shadow-lg),0 0 0 1px var(--border)}.hero__stats{display:grid;grid-auto-flow:column;gap:8px;margin:0;padding:14px 6px;width:100%;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-sm);text-align:center}.hero__stats div+div{border-left:1px solid var(--border)}.hero__stats dt{color:var(--text-3);font-size:0.7rem;font-weight:600;letter-spacing:0.08em;text-transform:uppercase}.hero__stats dd{margin:2px 0 0;font-family:var(--font-mono);font-size:1.3rem;font-weight:700;letter-spacing:-0.03em}@media (max-width: 900px){.hero__inner{grid-template-columns:minmax(0, 1fr);padding:44px 24px 40px}.hero__aside{grid-auto-flow:column;justify-items:start;align-items:center;gap:24px}.hero__avatar{width:112px;height:112px}}@media (max-width: 640px){.hero__inner{padding:32px 16px}.hero__aside{grid-auto-flow:row;justify-items:center}}.btn{display:inline-flex;align-items:center;gap:0.5em;padding:0.66rem 1.15rem;border:1px solid transparent;border-radius:11px;font-size:0.94rem;font-weight:600;cursor:pointer;transition:transform 0.16s ease, box-shadow 0.16s ease, background 0.16s ease, border-color 0.16s ease, color 0.16s ease}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0)}.btn--sm{padding:0.42rem 0.8rem;font-size:0.86rem}.btn--primary{background:linear-gradient(140deg, var(--btn-a) 0%, var(--btn-b) 120%);color:var(--btn-ink);box-shadow:0 8px 18px -10px var(--brand-ring)}.btn--primary:hover{color:var(--btn-ink);box-shadow:0 12px 24px -10px var(--brand-ring)}.btn--ghost{border-color:var(--border-strong);background:var(--surface);color:var(--text)}.btn--ghost:hover{border-color:var(--brand-ring);color:var(--brand)}.chip{display:inline-flex;align-items:center;gap:0.35em;padding:0.2rem 0.6rem;border:1px solid var(--border);border-radius:99px;background:var(--surface);color:var(--text-2);font-size:0.78rem;font-weight:600;line-height:1.6;white-space:nowrap}.chip:hover{border-color:var(--brand-ring);color:var(--brand)}.chip .icon{width:0.95em;height:0.95em}.chip--cat{border-color:transparent;background:var(--brand-soft);color:var(--brand-ink)}.chip--cat:hover{background:var(--brand-soft);color:var(--brand-ink)}.chip--tool{border-color:transparent;background:var(--accent-soft);color:var(--accent)}.chip__count{padding-left:0.4em;border-left:1px solid var(--border-strong);margin-left:0.15em;color:var(--text-3);font-family:var(--font-mono);font-size:0.9em}.chip-row,.tag-cloud{display:flex;flex-wrap:wrap;gap:7px}.tag-cloud--page{margin-top:18px}.chip--tag.is-sm{font-size:0.74rem}.chip--tag.is-md{font-size:0.82rem}.chip--tag.is-lg{font-size:0.9rem;font-weight:600}.chip--tag.is-xl{font-size:0.98rem;font-weight:700;border-color:var(--brand-ring);color:var(--brand)}.tag-list{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}.badge{display:inline-grid;place-items:center;min-width:1.7em;padding:0 0.42em;border-radius:99px;background:var(--surface-2);color:var(--text-3);font-family:var(--font-mono);font-size:0.72rem;font-weight:600;line-height:1.7}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;color:var(--text-3);font-size:0.83rem}.meta__item{display:inline-flex;align-items:center;gap:0.4em}.meta__item .icon{width:0.98em;height:0.98em}.meta__item--updated{padding:0.05rem 0.5rem;border-radius:99px;background:var(--accent-soft);color:var(--accent);font-weight:600}.meta__item--updated .icon{color:var(--accent)}.card{position:relative;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-sm);transition:border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease}.post-list{display:grid;gap:18px}.post-card{padding:26px 28px 22px}.post-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow);transform:translateY(-2px)}.post-card__title{margin:0 0 10px;font-size:1.32rem;letter-spacing:-0.026em}.post-card__title a{color:var(--text)}.post-card__title a:hover{color:var(--brand)}.post-card__excerpt{margin:14px 0 16px;color:var(--text-2);font-size:0.97rem}.read-more{display:inline-flex;align-items:center;gap:0.4em;margin-top:16px;font-size:0.9rem;font-weight:600}.read-more .icon{transition:transform 0.18s ease}.read-more:hover .icon{transform:translateX(3px)}.card--mini{display:grid;gap:4px;padding:16px 18px}.card--mini__date{color:var(--text-3);font-size:0.76rem;font-family:var(--font-mono)}.card--mini__title{color:var(--text);font-weight:600;font-size:0.97rem;line-height:1.4}.card--mini:hover{border-color:var(--brand-ring);box-shadow:var(--shadow)}.card--mini:hover .card--mini__title{color:var(--brand)}.panel{padding:18px 20px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-sm)}.panel__title{display:flex;align-items:center;gap:0.5em;margin:0 0 14px;font-size:0.76rem;font-weight:700;letter-spacing:0.09em;text-transform:uppercase;color:var(--text-3)}.panel__title .icon{color:var(--brand);width:1.15em;height:1.15em}.panel__title--plain{justify-content:center;text-transform:none;letter-spacing:-0.02em;font-size:1.02rem;color:var(--text);margin-bottom:2px}.panel--profile{text-align:center}.panel--profile .panel__note{margin:0 0 14px;color:var(--text-3);font-size:0.86rem}.panel__avatar{width:72px;height:72px;border-radius:50%;object-fit:cover;margin-bottom:12px;border:2px solid var(--surface);box-shadow:var(--shadow),0 0 0 1px var(--border)}.rail-list{margin:0;padding:0;list-style:none;display:grid;gap:2px}.rail-list a{display:block;padding:0.4rem 0.5rem;border-radius:var(--r-sm);color:var(--text-2);font-size:0.9rem;line-height:1.45}.rail-list a:hover{background:var(--surface-2);color:var(--brand)}.rail-list a time{display:block;color:var(--text-3);font-family:var(--font-mono);font-size:0.72rem}.rail-list--numbered{counter-reset:rail}.rail-list--numbered li{counter-increment:rail}.rail-list--numbered a{padding-left:2.1rem;position:relative}.rail-list--numbered a::before{content:counter(rail,decimal-leading-zero);position:absolute;left:0.5rem;top:0.42rem;color:var(--text-3);font-family:var(--font-mono);font-size:0.72rem;font-weight:600}.rail-list--rows a{display:flex;align-items:center;justify-content:space-between;gap:10px}.toc__list{margin:0;padding:0;list-style:none;border-left:2px solid var(--border)}.toc__list ul{margin:0;padding:0;list-style:none}.toc__list li{list-style:none}.toc__list a{display:block;padding:0.28rem 0.7rem;margin-left:-2px;border-left:2px solid transparent;color:var(--text-2);font-size:0.87rem;line-height:1.45}.toc__list a:hover{color:var(--brand)}.toc__list a.is-active{border-left-color:var(--brand);background:var(--brand-soft);color:var(--brand-ink);font-weight:600}.toc__list ul a{padding-left:1.45rem;font-size:0.82rem}.toc__list ul ul a{padding-left:2.1rem}.toc__item--h3 a{padding-left:1.45rem;font-size:0.82rem}.pager{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;margin-top:34px}.pager__btn{display:inline-flex;align-items:center;gap:0.4em;padding:0.48rem 0.85rem;border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface);color:var(--text-2);font-size:0.88rem;font-weight:600}.pager__btn:hover{border-color:var(--brand-ring);color:var(--brand)}.pager__btn.is-disabled{opacity:0.42;pointer-events:none}.pager__count{padding:0 0.7rem;color:var(--text-3);font-family:var(--font-mono);font-size:0.82rem}.page-head,.post-head{margin-bottom:30px;padding-bottom:24px;border-bottom:1px solid var(--border)}.page-head__title,.post-head__title{margin:0 0 12px}.page-head__lede,.post-head__lede{margin:0 0 18px;color:var(--text-2);font-size:1.06rem}.post-head .meta{margin-bottom:14px}.crumb{display:inline-flex;align-items:center;gap:0.4em;margin-bottom:16px;color:var(--text-3);font-size:0.85rem;font-weight:600}.crumb:hover{color:var(--brand)}.year,.group{margin-bottom:40px;scroll-margin-top:calc(var(--header-h) + 20px)}.year__title,.group__title{display:flex;align-items:center;gap:0.55em;margin:0 0 16px;font-size:1.3rem;letter-spacing:-0.025em}.year__title .icon,.group__title .icon{color:var(--brand)}.year__title{font-family:var(--font-mono);font-size:1.5rem}.timeline{margin:0;padding:0 0 0 18px;list-style:none;border-left:2px solid var(--border);display:grid;gap:4px}.timeline__item{position:relative;display:grid;grid-template-columns:92px minmax(0, 1fr);gap:14px;padding:10px 12px;border-radius:var(--r);transition:background 0.16s ease}.timeline__item::before{content:"";position:absolute;left:-23px;top:1.15rem;width:8px;height:8px;border-radius:50%;background:var(--border-strong);border:2px solid var(--bg);transition:background 0.16s ease}.timeline__item:hover{background:var(--surface)}.timeline__item:hover::before{background:var(--brand)}.timeline__date{color:var(--text-3);font-family:var(--font-mono);font-size:0.78rem;padding-top:0.22rem;white-space:nowrap}.timeline__title{display:block;color:var(--text);font-weight:600;letter-spacing:-0.015em}.timeline__title:hover{color:var(--brand)}.timeline__meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}.related{margin:44px 0 0}.related__grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(240px, 1fr));gap:12px}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:40px 0 0}.post-nav__link{display:grid;gap:6px;padding:16px 18px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-sm)}.post-nav__link:hover{border-color:var(--brand-ring);box-shadow:var(--shadow)}.post-nav__link--next{text-align:right}.post-nav__label{display:inline-flex;align-items:center;gap:0.35em;color:var(--text-3);font-size:0.74rem;font-weight:700;letter-spacing:0.08em;text-transform:uppercase}.post-nav__link--next .post-nav__label{justify-content:flex-end}.post-nav__title{color:var(--text);font-weight:600;line-height:1.4}.post-nav__link:hover .post-nav__title{color:var(--brand)}.support{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:18px;margin:44px 0 0;padding:24px 28px;border:1px solid var(--border);border-radius:var(--r-lg);background:linear-gradient(120deg, var(--brand-soft) 0%, var(--surface) 70%)}.support h2{margin:0 0 4px;font-size:1.1rem}.support p{margin:0;color:var(--text-2);font-size:0.94rem}.search{margin-bottom:26px}.search__field{display:flex;align-items:center;gap:12px;padding:0 16px;border:1px solid var(--border-strong);border-radius:14px;background:var(--surface);box-shadow:var(--shadow-sm);transition:border-color 0.16s ease, box-shadow 0.16s ease}.search__field .icon{color:var(--text-3);width:1.2em;height:1.2em}.search__field:focus-within{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-ring)}.search__field:focus-within .icon{color:var(--brand)}.search__field input{flex:1;min-width:0;padding:0.9rem 0;border:0;background:none;color:var(--text);font:inherit;font-size:1rem}.search__field input:focus{outline:none}.search__field input::placeholder{color:var(--text-3)}.search__field input::-webkit-search-cancel-button{filter:grayscale(1) opacity(0.6)}.search__status{margin:10px 2px 0;color:var(--text-3);font-size:0.86rem}.notfound{padding:90px 24px 110px;text-align:center}.notfound__code{margin:0;font-family:var(--font-mono);font-size:clamp(4rem, 12vw, 7rem);font-weight:700;line-height:1;letter-spacing:-0.05em;background:linear-gradient(140deg, var(--brand), var(--accent));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.notfound__title{margin:12px 0 8px}.notfound__note{margin:0 0 26px;color:var(--text-2)}.notfound .hero__actions{justify-content:center;margin-bottom:0}.back-to-top{position:fixed;right:22px;bottom:22px;z-index:90;display:grid;place-items:center;width:42px;height:42px;border:1px solid var(--border);border-radius:13px;background:var(--surface);color:var(--text-2);box-shadow:var(--shadow);opacity:0;visibility:hidden;transform:translateY(10px);transition:opacity 0.2s ease, transform 0.2s ease, visibility 0.2s, color 0.16s ease}.back-to-top.is-visible{opacity:1;visibility:visible;transform:translateY(0)}.back-to-top:hover{color:var(--brand);border-color:var(--brand-ring)}@media (max-width: 640px){.post-card{padding:20px 20px 18px}.post-nav{grid-template-columns:1fr}.post-nav__link--next{text-align:left}.post-nav__link--next .post-nav__label{justify-content:flex-start}.timeline__item{grid-template-columns:minmax(0, 1fr);gap:2px}.support{padding:20px}}.share{margin:40px 0 0;padding:22px 26px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface)}.share__title{margin:0 0 14px;font-size:1rem;letter-spacing:-0.015em}.share__list{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.share__link{display:inline-flex;align-items:center;gap:0.5em;padding:0.45rem 0.85rem;border:1px solid var(--border-strong);border-radius:99px;background:var(--surface);color:var(--text-2);font-family:inherit;font-size:0.88rem;font-weight:600;cursor:pointer;transition:color 0.16s ease, border-color 0.16s ease, transform 0.16s ease}.share__link .icon{color:var(--text-3)}.share__link:hover{color:var(--brand);border-color:var(--brand-ring);transform:translateY(-1px)}.share__link:hover .icon{color:var(--brand)}.share__link.is-done{color:var(--accent);border-color:var(--accent)}.share__link.is-done .icon{color:var(--accent)}.comments{margin:44px 0 0}.comments .section-title{margin-bottom:18px}.prose{font-size:1.03rem;line-height:1.75;color:var(--text)}.prose>*:first-child{margin-top:0}.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{margin-top:2.1em;scroll-margin-top:calc(var(--header-h) + 20px)}.prose h1{font-size:clamp(1.5rem, calc(1.2rem + 1.2vw), 1.95rem);margin-top:1.6em}.prose h2{padding-bottom:0.35em;border-bottom:1px solid var(--border)}.prose p{margin:0 0 1.15em}.prose strong{font-weight:700;color:var(--text)}.prose a{font-weight:500;text-decoration:underline;text-decoration-color:var(--brand-ring);text-decoration-thickness:1.5px;text-underline-offset:0.18em}.prose a:hover{text-decoration-color:var(--brand)}.prose ul,.prose ol{padding-left:1.4em}.prose li{margin-bottom:0.35em}.prose li>ul,.prose li>ol{margin:0.35em 0 0.35em}.prose blockquote{margin:1.5em 0;padding:0.9rem 1.2rem;border-left:3px solid var(--brand);border-radius:0 var(--r) var(--r) 0;background:var(--brand-soft);color:var(--text-2)}.prose blockquote>*:last-child{margin-bottom:0}.prose img{display:block;max-width:100%;height:auto;margin:1.6em auto;border-radius:var(--r);border:1px solid var(--border);box-shadow:var(--shadow-sm)}.prose code{padding:0.14em 0.4em;border:1px solid var(--code-border);border-radius:6px;background:var(--code-bg);color:var(--brand-ink);font-size:0.86em;white-space:nowrap}.prose pre code{padding:0;border:0;background:none;color:inherit;font-size:inherit;white-space:pre}.js .prose #markdown-toc{display:none}.prose table:not(.table):not(.dataTable){width:100%;border-collapse:separate;border-spacing:0;border:1px solid var(--border);border-radius:var(--r);font-size:0.93rem}.prose table:not(.table):not(.dataTable) th,.prose table:not(.table):not(.dataTable) td{padding:0.62rem 0.9rem;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.prose table:not(.table):not(.dataTable) thead th{background:var(--surface-2);color:var(--text-2);font-size:0.8rem;font-weight:700;letter-spacing:0.04em;text-transform:uppercase;white-space:nowrap}.prose table:not(.table):not(.dataTable) tbody tr:last-child td{border-bottom:0}.prose table:not(.table):not(.dataTable) tbody tr:hover td{background:var(--surface-2)}.code-wrap{position:relative;margin:1.5em 0}.prose div.highlight,.prose pre.highlight,.prose>pre{margin:0;padding:1rem 1.1rem;border:1px solid var(--code-border);border-radius:var(--r);background:var(--code-bg);color:var(--code-ink);overflow-x:auto;font-size:0.86rem;line-height:1.65;-webkit-overflow-scrolling:touch}.prose div.highlight pre{margin:0;padding:0;border:0;background:none;overflow:visible}.prose .highlighter-rouge{margin:0}.copy-btn{position:absolute;top:8px;right:8px;padding:0.24rem 0.6rem;border:1px solid var(--border-strong);border-radius:7px;background:var(--surface);color:var(--text-3);font-family:var(--font-sans);font-size:0.72rem;font-weight:600;letter-spacing:0.03em;cursor:pointer;opacity:0;transition:opacity 0.16s ease, color 0.16s ease, border-color 0.16s ease}.copy-btn:focus-visible{opacity:1}.copy-btn.is-done{color:var(--accent);border-color:var(--accent);opacity:1}.copy-btn.is-failed{color:var(--text-2);opacity:1}.code-wrap:hover .copy-btn{opacity:1}.copy-btn:hover{color:var(--brand);border-color:var(--brand-ring)}@media (hover: none){.copy-btn{opacity:1}}.prose pre.mermaid{margin:1.8em 0;padding:1.2rem;border:1px solid var(--border);border-radius:var(--r);background:var(--surface);overflow-x:auto;text-align:center;line-height:normal}.prose pre.mermaid:not([data-processed]){color:transparent}.prose pre.mermaid svg{max-width:100%;height:auto}.table-wrap{margin:0 0 1.15em;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-wrap>table{margin:0}.tool-widget{margin:1.8em 0;color:var(--text);font-family:var(--font-sans)}.tool-widget ul,.tool-widget ol{padding-left:0;margin:0;list-style:none}.tool-widget li{margin-bottom:0}.tool-widget code{white-space:normal}.tool-widget img{margin:0;border:0;box-shadow:none}.tool-widget .container-fluid,.tool-widget .container{padding:0}.tool-widget .row{margin-left:0;margin-right:0}.tool-widget [class^="col-"],.tool-widget [class*=" col-"]{padding-left:0;padding-right:0}.tool-widget h1,.tool-widget h2,.tool-widget h3,.tool-widget h4,.tool-widget h5,.tool-widget h6{margin-top:0;padding-bottom:0;border-bottom:0}.tool-widget .card{margin-bottom:16px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-sm)}.tool-widget .card-header{padding:0.7rem 1.1rem;border-bottom:1px solid var(--border);border-radius:var(--r-lg) var(--r-lg) 0 0;background:var(--surface-2);color:var(--text);font-size:0.98rem;font-weight:700;letter-spacing:-0.015em}.tool-widget .card-body{padding:1.1rem}.tool-widget .table{--bs-table-bg: transparent;--bs-table-color: var(--text);--bs-table-border-color: var(--border);--bs-table-striped-bg: var(--surface-2);--bs-table-striped-color: var(--text);--bs-table-hover-bg: var(--surface-2);--bs-table-hover-color: var(--text);color:var(--text);border-color:var(--border);margin-bottom:0}.tool-widget .table>:not(caption)>*>*{border-color:var(--border);background-color:transparent;color:var(--text)}.tool-widget thead th,.tool-widget .thead-light th,.tool-widget thead.thead-light th{background:var(--surface-2) !important;color:var(--text-2) !important;font-size:0.8rem;font-weight:700;letter-spacing:0.03em;text-transform:uppercase}.tool-widget .form-control,.tool-widget .form-select,.tool-widget .form-control-plaintext,.tool-widget input[type="text"],.tool-widget input[type="number"],.tool-widget input[type="search"],.tool-widget select,.tool-widget textarea{border:1px solid var(--border-strong);border-radius:var(--r-sm);background-color:var(--surface);color:var(--text)}.tool-widget .form-control::placeholder,.tool-widget .form-select::placeholder,.tool-widget .form-control-plaintext::placeholder,.tool-widget input[type="text"]::placeholder,.tool-widget input[type="number"]::placeholder,.tool-widget input[type="search"]::placeholder,.tool-widget select::placeholder,.tool-widget textarea::placeholder{color:var(--text-3)}.tool-widget .form-control:focus,.tool-widget .form-select:focus,.tool-widget .form-control-plaintext:focus,.tool-widget input[type="text"]:focus,.tool-widget input[type="number"]:focus,.tool-widget input[type="search"]:focus,.tool-widget select:focus,.tool-widget textarea:focus{border-color:var(--brand);background-color:var(--surface);color:var(--text);box-shadow:0 0 0 3px var(--brand-ring)}.tool-widget .form-control:disabled,.tool-widget .form-control[readonly],.tool-widget .form-select:disabled,.tool-widget .form-select[readonly],.tool-widget .form-control-plaintext:disabled,.tool-widget .form-control-plaintext[readonly],.tool-widget input[type="text"]:disabled,.tool-widget input[type="text"][readonly],.tool-widget input[type="number"]:disabled,.tool-widget input[type="number"][readonly],.tool-widget input[type="search"]:disabled,.tool-widget input[type="search"][readonly],.tool-widget select:disabled,.tool-widget select[readonly],.tool-widget textarea:disabled,.tool-widget textarea[readonly]{background-color:var(--surface-2);color:var(--text-3)}.tool-widget .form-select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23788' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.tool-widget label,.tool-widget .form-label,.tool-widget .col-form-label{color:var(--text-2);font-weight:600}.tool-widget .input-group-text{border-color:var(--border-strong);background:var(--surface-2);color:var(--text-2)}.tool-widget .alert{border-radius:var(--r);border-color:var(--border)}.tool-widget pre,.tool-widget .tool-output{border:1px solid var(--code-border);border-radius:var(--r);background:var(--code-bg);color:var(--code-ink)}.tool-widget .dataTables_wrapper{color:var(--text-2)}.tool-widget .dataTables_wrapper .dataTables_length,.tool-widget .dataTables_wrapper .dataTables_filter,.tool-widget .dataTables_wrapper .dataTables_info,.tool-widget .dataTables_wrapper .dataTables_paginate,.tool-widget .dataTables_wrapper .dataTables_processing{color:var(--text-2)}.tool-widget .dataTables_wrapper .dataTables_paginate .paginate_button{color:var(--text-2) !important;border-color:var(--border)}.tool-widget .dataTables_wrapper .dataTables_paginate .paginate_button:hover{border-color:var(--brand-ring);background:var(--surface-2);color:var(--brand) !important}.tool-widget .dataTables_wrapper .dataTables_paginate .paginate_button.current,.tool-widget .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{border-color:var(--brand-ring);background:var(--brand-soft);color:var(--brand-ink) !important}.tool-widget table.dataTable{color:var(--text);border-color:var(--border)}.tool-widget table.dataTable tbody tr{background-color:transparent}.tool-widget table.dataTable tbody tr:hover{background-color:var(--surface-2)}.tool-widget table.dataTable thead th,.tool-widget table.dataTable thead td{border-bottom-color:var(--border)}:root{--hl-comment: #6b7a90;--hl-keyword: #9333c4;--hl-string: #0a7d55;--hl-number: #b7521a;--hl-func: #2554c7;--hl-name: #0f766e;--hl-const: #b3541e;--hl-op: #5b6472;--hl-error: #c0392b;--hl-lineno: #9aa5b5;--hl-hl-bg: #fff6d6}:root[data-theme="dark"]{--hl-comment: #7d8da3;--hl-keyword: #d59bff;--hl-string: #7fdcaa;--hl-number: #ffb37a;--hl-func: #8ab4ff;--hl-name: #5eead4;--hl-const: #ffc08a;--hl-op: #9aa8bd;--hl-error: #ff8f85;--hl-lineno: #4d5b70;--hl-hl-bg: #253048}@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--hl-comment: #7d8da3;--hl-keyword: #d59bff;--hl-string: #7fdcaa;--hl-number: #ffb37a;--hl-func: #8ab4ff;--hl-name: #5eead4;--hl-const: #ffc08a;--hl-op: #9aa8bd;--hl-error: #ff8f85;--hl-lineno: #4d5b70;--hl-hl-bg: #253048}}.highlight .hll{background-color:var(--hl-hl-bg)}.highlight .lineno,.highlight .gl{color:var(--hl-lineno);user-select:none}.highlight .c,.highlight .ch,.highlight .cd,.highlight .cm,.highlight .cp,.highlight .cpf,.highlight .c1,.highlight .cs{color:var(--hl-comment);font-style:italic}.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .kv{color:var(--hl-keyword);font-weight:600}.highlight .o,.highlight .ow,.highlight .p,.highlight .pi{color:var(--hl-op)}.highlight .s,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .dl,.highlight .sd,.highlight .s2,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx,.highlight .s1,.highlight .ss,.highlight .sr{color:var(--hl-string)}.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mx{color:var(--hl-number)}.highlight .n,.highlight .nx,.highlight .py{color:inherit}.highlight .na,.highlight .nl,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:var(--hl-name)}.highlight .nb,.highlight .bp,.highlight .ne,.highlight .nf,.highlight .fm{color:var(--hl-func);font-weight:500}.highlight .nc,.highlight .nn,.highlight .no,.highlight .nd,.highlight .ni,.highlight .nt{color:var(--hl-const)}.highlight .err,.highlight .gr{color:var(--hl-error)}.highlight .gd{color:var(--hl-error)}.highlight .gi{color:var(--hl-string)}.highlight .gh,.highlight .gu{color:var(--hl-func);font-weight:700}.highlight .ge{font-style:italic}.highlight .gs{font-weight:700}.highlight .gt,.highlight .gp{color:var(--hl-comment)}.highlight .w{color:transparent}.site-footer{margin-top:32px;border-top:1px solid var(--border);background:var(--surface);color:var(--text-2);font-size:0.93rem}.site-footer__grid{display:grid;grid-template-columns:minmax(0, 1.6fr) repeat(2, minmax(0, 1fr));gap:36px;padding:48px 24px 36px}.site-footer__about p{max-width:46ch;margin:14px 0 0;color:var(--text-3);font-size:0.9rem}.brand--footer{margin-bottom:2px}.site-footer__col h2{margin:0 0 12px;color:var(--text-3);font-size:0.74rem;font-weight:700;letter-spacing:0.09em;text-transform:uppercase}.site-footer__col .footer-links{margin:0;padding:0;list-style:none;display:grid;gap:2px}.site-footer__col .footer-links a{display:inline-flex;align-items:center;gap:0.6em;padding:0.2rem 0;color:var(--text-2);font-size:0.92rem;line-height:1.5}.site-footer__col .footer-links a .icon{color:var(--text-3);width:1.05em;height:1.05em;transition:color 0.16s ease}.site-footer__col .footer-links a:hover{color:var(--brand)}.site-footer__col .footer-links a:hover .icon{color:var(--brand)}.site-footer__legal{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;gap:8px 20px;padding:18px 24px 26px;border-top:1px solid var(--border);color:var(--text-3);font-size:0.84rem}.site-footer__legal p{margin:0}@media (max-width: 760px){.site-footer__grid{grid-template-columns:minmax(0, 1fr);gap:28px;padding:34px 16px 28px}.site-footer__legal{padding:16px 16px 24px}}
