:root{color-scheme:dark;--bg: #0f111a;--bg-elevated: #151a23;--card-bg: var(--bg-elevated);--text: #e9edf7;--muted: #b7bfce;--border: #252c3a;--accent: #63b3ff;--accent-strong: #4aa7ff;--shadow: 0 16px 40px rgba(0, 0, 0, .38);--code-bg: #0b0e14;--code-border: #222a39;--code-inline-bg: rgba(99, 179, 255, .16);--nav-bg: rgba(15, 17, 26, .68);--code-inset: rgba(255, 255, 255, .04);--font-body: "Inter", "Helvetica Neue", Arial, sans-serif;--font-heading: "Merriweather", "Georgia", "Times New Roman", serif;--font-code: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--radius: 16px;--container: 1080px;--transition: .18s ease}:root[data-theme=light]{color-scheme:light;--bg: #f5f7fb;--bg-elevated: #ffffff;--card-bg: #ffffff;--text: #121826;--muted: #566074;--border: #e0e6f2;--accent: #2563eb;--accent-strong: #1d4ed8;--shadow: 0 16px 36px rgba(15, 17, 26, .12);--code-bg: #eef2ff;--code-border: #d6ddff;--code-inline-bg: rgba(37, 99, 235, .12);--nav-bg: rgba(245, 247, 251, .82);--code-inset: rgba(15, 17, 26, .06)}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-body);line-height:1.7;letter-spacing:-.005em;font-size:14px}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,.button:focus-visible,.badge:focus-visible,.theme-toggle:focus-visible,.back-to-top:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 85%,white);outline-offset:3px;border-color:var(--accent)}a:hover,button:hover{color:var(--accent-strong)}img{max-width:100%;border-radius:calc(var(--radius) - 4px)}main{min-height:60vh}.container{max-width:var(--container);margin:0 auto;padding:0 24px}.skip-link{position:absolute;left:16px;top:12px;padding:10px 16px;border-radius:999px;border:1px solid var(--accent);background:var(--bg-elevated);color:var(--accent-strong);font-size:14px;letter-spacing:.02em;transform:translateY(-200%);transition:transform var(--transition),box-shadow var(--transition);z-index:20}.skip-link:focus-visible{transform:translateY(0);box-shadow:var(--shadow)}.section{padding:52px 0}.section+.section{border-top:1px solid var(--border)}.section-title{font-family:var(--font-heading);font-weight:500;letter-spacing:-.02em;font-size:22px;margin:0 0 28px}h1,h2,h3{font-family:var(--font-heading);font-weight:500;letter-spacing:-.03em;margin:0 0 16px}h1{font-size:clamp(30px,4.2vw,44px)}h2{font-size:clamp(22px,2.8vw,28px)}h3{font-size:clamp(18px,2.2vw,22px)}p{margin:0 0 18px;color:var(--muted);font-size:16px}.section a{color:var(--accent)}.section a:hover{color:var(--accent-strong)}button{font-family:inherit;border:1px solid var(--border);background:transparent;color:var(--text);padding:9px 16px;border-radius:999px;cursor:pointer;transition:border-color var(--transition),color var(--transition),background var(--transition),box-shadow var(--transition)}button:hover{box-shadow:0 10px 22px #0000002e}button[data-active=true]{background:var(--bg-elevated);color:var(--accent-strong);border-color:var(--accent)}.card{background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);padding:26px;box-shadow:none;transition:border-color var(--transition),box-shadow var(--transition),transform var(--transition)}.card:hover{border-color:color-mix(in srgb,var(--accent) 60%,var(--border));box-shadow:var(--shadow);transform:translateY(-3px)}.card a{color:inherit;text-decoration:none;display:block}.about-card p{color:var(--text)}.about-card p+p{color:var(--muted);font-size:15px;line-height:1.7}.card-link{padding:0}.card-link__content{display:flex;flex-direction:column;gap:12px;padding:24px;height:100%}.card-link__content h3,.card-link__content p{margin:0}.card+.card{border-top:1px solid var(--border)}.grid .card{border-left:0;border-right:0}.grid{display:grid;gap:28px}.grid-2{grid-template-columns:1fr}.grid-3{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.badge{display:inline-flex;align-items:center;padding:6px 14px;border:1px solid var(--accent);border-radius:999px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--accent-strong);background:var(--bg-elevated);transition:border-color var(--transition),color var(--transition),background var(--transition),box-shadow var(--transition),transform var(--transition)}.badge:hover{box-shadow:0 6px 12px #0000002e;transform:translateY(-1px)}.badge--icon{gap:0;padding:8px 12px;font-size:18px}.badge--icon i{display:inline-flex;align-items:center;justify-content:center;font-size:20px;line-height:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.button{display:inline-flex;align-items:center;padding:7px 16px;border-radius:999px;border:1px solid var(--accent);color:var(--accent-strong);background:var(--bg-elevated);font-size:12px;letter-spacing:.04em;text-transform:uppercase;transition:border-color var(--transition),color var(--transition),background var(--transition),box-shadow var(--transition)}.button:hover{border-color:var(--accent-strong);color:var(--accent-strong);box-shadow:0 10px 22px #2563eb2e}.intro-actions{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.intro-actions__right{display:inline-flex;align-items:center;gap:12px}.back-to-top{position:fixed;right:28px;bottom:28px;width:42px;height:42px;padding:0;border-radius:50%;border:1px solid var(--border);background:var(--bg-elevated);color:var(--accent-strong);display:inline-flex;align-items:center;justify-content:center;font-size:18px;box-shadow:var(--shadow);opacity:0;transform:translateY(12px);pointer-events:none;transition:opacity var(--transition),transform var(--transition),border-color var(--transition),color var(--transition),background var(--transition)}.back-to-top[data-visible=true]{opacity:1;transform:translateY(0);pointer-events:auto}.back-to-top:hover{border-color:var(--accent);color:var(--accent-strong)}nav{position:sticky;top:0;background:color-mix(in srgb,var(--nav-bg) 85%,var(--bg-elevated));backdrop-filter:blur(18px);border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent);box-shadow:0 12px 28px #0f111a14;z-index:10}.nav-inner{display:flex;align-items:center;justify-content:center;gap:16px;padding:20px 0}.nav-links{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:6px 8px;border-radius:999px;border:1px solid color-mix(in srgb,var(--border) 85%,transparent);background:color-mix(in srgb,var(--bg-elevated) 80%,transparent);box-shadow:0 12px 24px #0f111a14}.nav-links a{font-size:15px;color:var(--muted);position:relative;padding:10px 18px;border-radius:999px;transition:color var(--transition),background var(--transition),box-shadow var(--transition),border-color var(--transition)}.nav-links a.active{color:var(--text);position:relative;font-weight:600;background:color-mix(in srgb,var(--accent) 8%,transparent);border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);box-shadow:0 10px 20px #2563eb29}.nav-links a:hover{color:var(--text);background:color-mix(in srgb,var(--accent) 6%,transparent)}.nav-links a.active:after,.nav-links a:hover:after{display:none}.theme-toggle{position:relative;display:inline-flex;align-items:center;justify-content:center;width:38px;height:34px;padding:0;border-radius:999px;background:color-mix(in srgb,var(--bg-elevated) 70%,transparent);border:1px solid color-mix(in srgb,var(--border) 70%,transparent);color:var(--muted);transition:border-color var(--transition),color var(--transition),background var(--transition),transform var(--transition),box-shadow var(--transition)}.theme-toggle:hover{border-color:var(--accent);color:var(--accent-strong);background:color-mix(in srgb,var(--accent) 12%,transparent);box-shadow:0 10px 20px #2563eb29;transform:translateY(-1px)}.theme-toggle__icon{position:absolute;display:inline-flex;width:18px;height:18px;transition:opacity .26s cubic-bezier(.4,0,.2,1),transform .32s cubic-bezier(.2,.9,.2,1)}.theme-toggle__icon i{width:100%;height:100%;display:inline-flex;align-items:center;justify-content:center;font-size:18px;line-height:1}:root[data-theme=dark] .theme-toggle__icon--moon{opacity:1;transform:translateY(0) rotate(0) scale(1)}:root[data-theme=dark] .theme-toggle__icon--sun{opacity:0;transform:translateY(-8px) rotate(-60deg) scale(.6)}:root[data-theme=light] .theme-toggle__icon--sun{opacity:1;transform:translateY(0) rotate(0) scale(1)}:root[data-theme=light] .theme-toggle__icon--moon{opacity:0;transform:translateY(8px) rotate(60deg) scale(.6)}footer{padding:48px 0 72px;border-top:1px solid var(--border);color:var(--muted);font-size:14px}.post-meta{display:flex;gap:12px;align-items:center;flex-wrap:wrap;color:var(--muted);font-size:13px}.tag-row{display:flex;flex-wrap:wrap;gap:10px}.post-content{color:var(--text)}.post-content p,.post-content li{line-height:1.85;color:var(--muted);font-size:14px}.post-content h2,.post-content h3,.post-content h4{margin-top:32px}.post-content :is(h2,h3,h4,h5,h6){scroll-margin-top:calc(var(--nav-height, 84px) + 18px)}.doc-layout{margin-top:32px;padding-top:32px;border-top:1px solid var(--border);display:grid;grid-template-columns:minmax(220px,300px) minmax(0,1fr);gap:clamp(28px,4vw,52px);align-items:start}.doc-layout__toc{min-width:0}.doc-layout__main{min-width:0;border-left:1px solid var(--border);padding-left:clamp(22px,4vw,56px)}.toc{margin:0;padding:18px;background:color-mix(in srgb,var(--bg-elevated) 88%,transparent);border:1px solid color-mix(in srgb,var(--border) 92%,transparent);border-radius:calc(var(--radius) - 4px);box-shadow:0 10px 24px #00000014}.toc__details{margin:0}.toc__summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 0 14px;border-bottom:1px solid var(--border);cursor:pointer}.toc__summary::-webkit-details-marker{display:none}.toc__title{font-size:15px;font-family:var(--font-heading);font-weight:600;letter-spacing:-.02em;color:var(--text)}.toc__chevron{width:10px;height:10px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg);opacity:.7;transition:transform var(--transition),opacity var(--transition)}.toc__details[open] .toc__chevron{transform:rotate(-135deg);opacity:.85}.toc__nav{margin-top:14px}.toc__list{margin:0;position:relative;padding:10px 10px 10px 20px;border:1px solid color-mix(in srgb,var(--border) 85%,transparent);border-radius:calc(var(--radius) - 8px);background:color-mix(in srgb,var(--bg) 55%,transparent);display:grid;gap:10px;list-style:none}.toc__list:before{content:"";position:absolute;left:10px;top:10px;bottom:10px;width:2px;border-radius:999px;background:color-mix(in srgb,var(--border) 92%,transparent)}.toc__list:after{content:"";position:absolute;left:10px;width:2px;height:14px;border-radius:999px;top:var(--toc-thumb-top, 10px);background:color-mix(in srgb,var(--accent) 92%,white);box-shadow:0 6px 14px color-mix(in srgb,var(--accent) 25%,transparent);transition:top .22s ease}.toc__item{margin-left:calc(var(--level, 0) * 14px)}.toc__link{display:block;position:relative;padding:7px 10px;border-left:2px solid transparent;border-radius:12px;color:color-mix(in srgb,var(--muted) 92%,var(--text));font-size:13px;line-height:1.45;text-decoration:none;transition:background-color var(--transition),color var(--transition),border-color var(--transition)}.toc__link:hover{background:color-mix(in srgb,var(--bg-elevated) 70%,transparent);color:var(--text)}.toc__link.is-active{background:color-mix(in srgb,var(--bg-elevated) 92%,transparent);border-left-color:color-mix(in srgb,var(--accent) 92%,white);color:var(--text);font-weight:600}@media(min-width:961px){.doc-layout__toc{position:sticky;top:calc(var(--nav-height, 84px) + 24px);align-self:start}.toc__summary{cursor:default;pointer-events:none}.toc__chevron{display:none}}@media(max-width:960px){.doc-layout{grid-template-columns:1fr;gap:22px}.doc-layout__main{border-left:0;padding-left:0}.toc__summary{padding-bottom:12px}}@media(max-width:720px){.toc__title{font-size:14px}.toc__link{font-size:12px}}.post-content a{color:var(--accent)}.post-content a:hover{color:var(--accent-strong)}.post-content ul,.post-content ol{padding-left:22px;margin:16px 0}.post-content ol{padding-left:36px}.post-content table{width:100%;border-collapse:collapse;margin:24px 0;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:0 18px 30px #0000001f}.post-content th,.post-content td{text-align:left;padding:14px 18px;border-bottom:1px solid var(--border);font-size:15px}.post-content th{font-family:var(--font-heading);font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--text);background:color-mix(in srgb,var(--bg-elevated) 70%,var(--bg))}.post-content tbody tr:last-child td{border-bottom:none}.post-content tbody tr:nth-child(2n){background:color-mix(in srgb,var(--bg-elevated) 75%,transparent)}.post-content td{color:var(--muted)}.post-content blockquote{margin:24px 0;padding:16px 20px;border-left:3px solid var(--accent);background:var(--bg-elevated);border-radius:var(--radius)}.post-content blockquote p{margin:0;color:var(--text)}.post-content .callout{margin:24px 0;padding:14px 18px;border-radius:var(--radius);border-left:3px solid;font-size:.95em;line-height:1.7}.post-content .callout strong:first-child{display:block;font-size:.78em;letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px;opacity:.8}.post-content .callout-note{background:#63b3ff14;border-color:var(--accent);color:var(--text)}.post-content .callout-tip{background:#34d39914;border-color:#34d399;color:var(--text)}.post-content .callout-warning{background:#fbbf2414;border-color:#fbbf24;color:var(--text)}:root[data-theme=light] .post-content .callout-note{background:#2563eb0f}:root[data-theme=light] .post-content .callout-tip{background:#05966912;border-color:#059669}:root[data-theme=light] .post-content .callout-warning{background:#d9770612;border-color:#d97706}.post-content code{font-family:var(--font-code);font-size:.9em;padding:2px 6px;border-radius:6px;background:var(--code-inline-bg);color:inherit}.post-content pre{position:relative;overflow-x:auto;padding:20px 22px;border-radius:calc(var(--radius) + 2px);border:1px solid var(--code-border);background:var(--code-bg);margin:20px 0;box-shadow:inset 0 0 0 1px var(--code-inset)}.post-content pre code{background:transparent;padding:0;font-size:.92em}.code-copy{position:absolute;top:12px;right:12px;display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--code-border) 85%,transparent);background:color-mix(in srgb,var(--code-bg) 88%,transparent);color:var(--muted);font-size:12px;cursor:pointer;opacity:1;pointer-events:auto;transition:border-color var(--transition),color var(--transition),background var(--transition)}.code-copy:hover{border-color:var(--accent);color:var(--accent-strong);background:color-mix(in srgb,var(--code-bg) 70%,transparent)}.code-copy i{font-size:16px}.post-content .tag-row .button{align-items:center;gap:8px}.post-content .tag-row .button i,.post-actions .tag-row .button i{font-size:20px}.breadcrumb{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:12px}@media(min-width:860px){.grid-2{grid-template-columns:repeat(2,1fr)}}@media(max-width:720px){.grid-2{grid-template-columns:1fr}.section{padding:56px 0}.nav-inner{flex-direction:row;align-items:center;justify-content:center;gap:10px;padding-left:12px;padding-right:12px}.nav-links{flex-wrap:nowrap;gap:6px;padding:4px 6px}.nav-links a{font-size:13px;padding:7px 10px}.nav-links a.active{box-shadow:none}.theme-toggle{width:34px;height:30px}.post-content ul,.post-content ol{padding-left:24px}.post-content ol{padding-left:30px}.post-content li{font-size:16px;line-height:1.75}.code-copy{padding:6px 12px;font-size:13px}.code-copy i{font-size:18px}}@media(max-width:540px){.nav-links{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.nav-links::-webkit-scrollbar{display:none}.nav-links a{padding:6px 8px}.intro-actions{justify-content:flex-start}.intro-actions__right{width:100%;justify-content:flex-start}}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}
