:root{--primary-start:#6366f1;--primary-end:#8b5cf6;--primary-gradient:linear-gradient(135deg, #6366f1, #8b5cf6);--secondary-start:#06b6d4;--secondary-end:#3b82f6;--secondary-gradient:linear-gradient(135deg, #06b6d4, #3b82f6);--accent-start:#f59e0b;--accent-end:#ef4444;--accent-gradient:linear-gradient(135deg, #f59e0b, #ef4444);--success:#10b981;--warning:#f59e0b;--error:#ef4444;--info:#3b82f6;--bg-base:#0a0a0f;--bg-elevated:#12121a;--bg-surface:#1a1a2e;--bg-overlay:#1a1a2ecc;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--text-muted:#64748b;--border-default:#94a3b81a;--border-hover:#94a3b833;--border-active:#6366f180;--space-xs:4px;--space-sm:8px;--space-md:12px;--space-lg:16px;--space-xl:24px;--space-2xl:32px;--space-3xl:48px;--space-4xl:64px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--font-family:Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans SC", "Noto Sans JP", "Noto Sans KR", sans-serif;--font-size-display:36px;--font-size-h1:28px;--font-size-h2:22px;--font-size-h3:18px;--font-size-body:14px;--font-size-small:12px;--font-size-caption:11px;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-display:1.2;--line-height-h1:1.3;--line-height-h2:1.4;--line-height-h3:1.4;--line-height-body:1.6;--line-height-small:1.5;--line-height-caption:1.4;--transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--transition-normal:.3s cubic-bezier(.4, 0, .2, 1);--transition-slow:.5s cubic-bezier(.4, 0, .2, 1)}[data-theme=light]{--bg-base:#f8fafc;--bg-elevated:#fff;--bg-surface:#f1f5f9;--bg-overlay:#fffc;--text-primary:#0f172a;--text-secondary:#475569;--text-muted:#94a3b8;--border-default:#0f172a14;--border-hover:#0f172a26;--border-active:#6366f180}:root{--ink-0:#0a0b10;--ink-1:#0f1118;--ink-2:#151823;--ink-3:#1c2030;--ink-4:#262b3d;--line:#232838;--line-2:#2f3550;--line-3:#404868;--t-0:#f1f3fa;--t-1:#bcc1d4;--t-2:#828aa3;--t-3:#535a73;--ac:#818cf8;--ac-hi:#a5b4fc;--ac-lo:#4f46e5;--ac-solid:#6366f1;--ac-glow:#6366f12e;--ac-line:#818cf85c;--ac-on:#fff;--ok:#4ade80;--warn:#fbbf24;--down:#f87171;--info:#60a5fa;--ff-display:"DM Sans","Inter","Noto Sans SC",system-ui,sans-serif;--ff-body:"Inter","Noto Sans SC",system-ui,sans-serif;--ff-mono:"JetBrains Mono",ui-monospace,monospace;--text-xs:.75rem;--text-sm:.8125rem;--text-base:1rem;--text-lg:1.25rem;--text-xl:1.563rem;--text-2xl:1.953rem;--text-3xl:2.441rem;--leading-tight:1.15;--leading-snug:1.35;--leading-normal:1.55;--leading-relaxed:1.7;--tracking-tight:-.025em;--tracking-normal:0;--tracking-wide:.04em;--r-xs:4px;--r-sm:6px;--r-md:9px;--r-lg:14px;--r-xl:20px;--r-pill:999px;--side-w:232px;--side-w-collapsed:64px;--top-h:60px;--gutter:32px;--sh-card:0 1px 0 #ffffff05 inset, 0 12px 28px -18px #000000b3;--sh-pop:0 1px 0 #ffffff08 inset, 0 20px 48px -20px #000c;--ease:cubic-bezier(.2,.7,.2,1);--dur:.18s;--header-bg:#0a0b10b8;--header-bg-pub:#0a0b10cc;--glow-1:#6366f11a;--glow-2:#4f46e50f}:root[data-theme=light]{--ink-0:#fbfbfd;--ink-1:#fff;--ink-2:#f4f5f8;--ink-3:#ebedf3;--ink-4:#dee1ea;--line:#e4e7ef;--line-2:#cdd2df;--line-3:#a8b0c4;--t-0:#15172a;--t-1:#404662;--t-2:#6b7290;--t-3:#9aa0b8;--ac:#4f46e5;--ac-hi:#6366f1;--ac-lo:#4338ca;--ac-solid:#6366f1;--ac-glow:#6366f11a;--ac-line:#4f46e559;--ac-on:#fff;--ok:#16a34a;--warn:#d97706;--down:#dc2626;--info:#2563eb;--sh-card:0 1px 0 #fff9 inset, 0 8px 22px -14px #1419371f;--sh-pop:0 1px 0 #fff9 inset, 0 18px 40px -16px #1419372e;--header-bg:#fbfbfdc7;--header-bg-pub:#fbfbfdd6;--glow-1:#6366f112;--glow-2:#4f46e50a}html{scroll-behavior:smooth;font-size:16px}body{font-family:var(--ff-body);font-size:var(--text-base);background:var(--ink-0);color:var(--t-0);line-height:var(--leading-normal);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-feature-settings:"kern" 1, "liga" 1, "calt" 1;transition:background var(--dur), color var(--dur);overflow-x:hidden}h1,h2,h3,h4,h5,h6{font-family:var(--ff-display);font-weight:600;line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);color:var(--t-0)}h1{font-size:var(--text-2xl);font-weight:700}h2{font-size:var(--text-xl)}h3{font-size:var(--text-lg)}h4{font-size:var(--text-base);font-weight:600}p{max-width:65ch}.display{font-family:var(--ff-display);font-size:var(--text-3xl);letter-spacing:-.035em;font-weight:700;line-height:1.1}.label{font-family:var(--ff-display);font-size:var(--text-sm);color:var(--t-2);font-weight:500}.caption{font-family:var(--ff-body);font-size:var(--text-xs);color:var(--t-3);line-height:var(--leading-snug)}.mono,.num{font-family:var(--ff-mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:.9em}.eyebrow{font-family:var(--ff-display);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--ac);font-weight:600}a{color:inherit;text-decoration:none}button,input,select,textarea{font-family:inherit}.grain{z-index:1;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:fixed;inset:0}:root[data-theme=light] .grain{opacity:.025}.glow{z-index:0;pointer-events:none;background:radial-gradient(900px 560px at 14% -8%, var(--glow-1), transparent 60%), radial-gradient(700px 500px at 100% 110%, var(--glow-2), transparent 60%);position:fixed;inset:0}.shell{z-index:2;grid-template-columns:var(--side-w) 1fr;min-height:100vh;display:grid;position:relative}.side{z-index:30;background:var(--ink-1);border-right:1px solid var(--line);flex-direction:column;align-self:start;height:100vh;display:flex;position:sticky;top:0}.side-brand{min-height:var(--top-h);border-bottom:1px solid var(--line);align-items:center;gap:11px;padding:10px 18px;display:flex}.side-brand .brand-link{flex:1;align-items:center;gap:11px;min-width:0;display:flex}.side-brand .mark{background:linear-gradient(150deg, var(--ac-hi), var(--ac-lo));width:26px;height:26px;font-family:var(--ff-display);color:var(--ac-on);box-shadow:0 0 0 1px var(--ac-line), 0 4px 14px -4px var(--ac-glow);border-radius:6px;flex-shrink:0;place-items:center;font-size:14px;font-weight:700;display:grid}.side-brand .name{font-family:var(--ff-display);font-weight:700;font-size:var(--text-base);letter-spacing:var(--tracking-tight)}.side-brand .name small{font-family:var(--ff-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--t-3);text-transform:uppercase;margin-top:1px;font-weight:500;display:block}.side-nav{flex:1;padding:14px 10px;overflow-y:auto}.side-label{font-family:var(--ff-display);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--t-3);padding:1px 8px 6px;font-size:11px;font-weight:600}.nav-group{border-radius:var(--r-md);transition:background var(--dur), border-color var(--dur);border:1px solid #0000;flex-direction:column;gap:2px;padding:7px;display:flex}.nav-group.on{background:0 0;border-color:#0000}.nav-group+.nav-group{margin-top:7px}.nav-item{cursor:pointer;text-align:left;width:100%;min-height:36px;color:var(--t-1);font-size:var(--text-sm);border-radius:var(--r-sm);transition:color var(--dur), background var(--dur);background:0 0;border:none;align-items:center;gap:11px;padding:8px 10px;font-weight:500;display:flex;position:relative}.nav-item svg{stroke:currentColor;opacity:.85;flex-shrink:0;width:17px;height:17px}.nav-item:hover{color:var(--t-0);background:var(--ink-2)}.nav-item.active{color:var(--t-0);background:var(--ink-3);box-shadow:inset 0 1px #ffffff06}.nav-item.active:before{content:"";background:var(--ac);border-radius:0 2px 2px 0;width:3px;height:18px;position:absolute;top:50%;left:-12px;transform:translateY(-50%)}.nav-item .count{font-family:var(--ff-body);color:var(--t-3);margin-left:auto;font-size:12px;font-weight:500}.side-foot{border-top:1px solid var(--line);padding:12px}.side-foot .nav-item{color:var(--t-2)}.side-foot .nav-item:hover{color:var(--t-0);background:var(--ink-2)}.side-collapse{border-radius:var(--r-sm);cursor:pointer;border:1px solid var(--line);background:var(--ink-2);width:30px;height:30px;color:var(--t-2);transition:all var(--dur);place-items:center;margin-left:auto;display:grid}.side-collapse:hover{border-color:var(--line-2);color:var(--t-0);background:var(--ink-3)}.side-collapse svg{stroke:currentColor;width:14px;height:14px;transition:transform var(--dur)}.shell.collapsed{--side-w:var(--side-w-collapsed)}.shell.collapsed .side-brand .name{display:none}.shell.collapsed .side-brand .brand-link{gap:0}.shell.collapsed .side-label{display:none}.shell.collapsed .nav-group{background:0 0;border-color:#0000;padding:6px}.shell.collapsed .nav-group.on{background:0 0;border-color:#0000}.shell.collapsed .nav-group+.nav-group{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}.shell.collapsed .nav-item{justify-content:center;padding:9px 0}.shell.collapsed .nav-item span:not(.count),.shell.collapsed .nav-item .count{display:none}.shell.collapsed .side-nav{padding:14px 8px}.shell.collapsed .side-foot{padding:12px 8px}.shell.collapsed .side-collapse svg{transform:rotate(180deg)}.shell.collapsed .side-brand{justify-content:center;gap:6px;padding:0 10px}.main{min-width:0}.topbar{z-index:20;height:var(--top-h);padding:0 var(--gutter);background:var(--header-bg);-webkit-backdrop-filter:blur(18px)saturate(1.3);backdrop-filter:blur(18px)saturate(1.3);border-bottom:1px solid var(--line);align-items:center;gap:16px;display:flex;position:sticky;top:0}.crumb{color:var(--t-2);align-items:center;gap:8px;font-size:12.5px;display:flex}.crumb a:hover{color:var(--t-0)}.crumb .sep{color:var(--t-3)}.crumb .cur{color:var(--t-0)}.topbar-spacer{flex:1}.searchbar{width:340px;max-width:38vw;position:relative}.searchbar input{background:var(--ink-2);border:1px solid var(--line);border-radius:var(--r-sm);width:100%;height:36px;color:var(--t-0);transition:border-color var(--dur), box-shadow var(--dur);outline:none;padding:0 12px 0 34px;font-size:13px}.searchbar input::placeholder{color:var(--t-3)}.searchbar input:focus{border-color:var(--ac-line);box-shadow:0 0 0 3px var(--ac-glow)}.searchbar svg{width:15px;height:15px;stroke:var(--t-3);position:absolute;top:50%;left:11px;transform:translateY(-50%)}.searchbar .kbd{font-family:var(--ff-mono);color:var(--t-3);border:1px solid var(--line);border-radius:var(--r-xs);padding:1px 5px;font-size:11px;position:absolute;top:50%;right:8px;transform:translateY(-50%)}.icon-btn{border-radius:var(--r-sm);cursor:pointer;width:36px;height:36px;color:var(--t-1);transition:all var(--dur);background:0 0;border:1px solid #0000;place-items:center;display:grid;position:relative}.icon-btn:hover{background:var(--ink-2);border-color:var(--line);color:var(--t-0)}.icon-btn svg{width:17px;height:17px}.icon-btn .pip{background:var(--ac);width:6px;height:6px;box-shadow:0 0 0 2px var(--ink-0);border-radius:50%;position:absolute;top:7px;right:8px}.user-chip{border-radius:var(--r-md);cursor:pointer;transition:all var(--dur);background:0 0;border:1px solid #0000;align-items:center;gap:9px;padding:4px 10px 4px 4px;font-family:inherit;display:flex}.user-chip:hover{background:var(--ink-2);border-color:var(--line)}.avatar{width:28px;height:28px;font-family:var(--ff-display);color:var(--ac-on);background:linear-gradient(150deg, var(--ac-hi), var(--ac-lo));border-radius:7px;place-items:center;font-size:12px;font-weight:600;display:grid}.user-chip .uname{color:var(--t-1);font-size:13px;font-weight:500}.user-chip>svg{width:13px;height:13px;stroke:var(--t-3);transition:transform var(--dur), color var(--dur);margin-right:4px}.user-menu-wrap.open .user-chip>svg{color:var(--t-1);transform:rotate(180deg)}.user-menu-wrap{position:relative}.user-menu{background:var(--ink-1);border:1px solid var(--line);border-radius:var(--r-md);min-width:280px;box-shadow:var(--sh-pop);z-index:80;opacity:0;pointer-events:none;transition:opacity var(--dur), transform var(--dur);padding:6px;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-4px)}.user-menu-wrap.open .user-menu{opacity:1;pointer-events:auto;transform:translateY(0)}.user-menu-head{border-bottom:1px solid var(--line);align-items:center;gap:11px;margin-bottom:6px;padding:12px 12px 14px;display:flex}.user-menu-head .avatar{width:36px;height:36px;font-size:14px}.user-menu-head .info .nm{color:var(--t-0);font-size:13.5px;font-weight:600}.user-menu-head .info .sub{font-family:var(--ff-body);color:var(--t-3);margin-top:2px;font-size:12px;font-weight:500}.user-menu-item{border-radius:var(--r-sm);cursor:pointer;color:var(--t-1);transition:all var(--dur);text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:9px 12px;font-family:inherit;font-size:13px;display:flex}.user-menu-item svg{stroke:currentColor;opacity:.7;flex-shrink:0;width:15px;height:15px}.user-menu-item:hover{background:var(--ink-2);color:var(--t-0)}.user-menu-item:hover svg{opacity:1}.user-menu-item .ext{font-family:var(--ff-body);color:var(--t-3);align-items:center;gap:6px;margin-left:auto;font-size:12px;font-weight:500;display:inline-flex}.user-menu-item .ext .pip{background:var(--ac);border-radius:50%;width:6px;height:6px}.user-menu-divider{background:var(--line);height:1px;margin:6px 0}.user-menu-item.danger{color:var(--down)}.user-menu-item.danger:hover{background:color-mix(in srgb, var(--down) 10%, transparent);color:var(--down)}.content{padding:30px var(--gutter) 72px;max-width:1760px;margin-inline:auto}.content--wide{max-width:1760px}.content--xwide{max-width:none}.content--reading{max-width:760px}.phead{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:32px;margin-bottom:22px;padding-bottom:22px;display:flex}.phead>div:first-child{min-width:0}.phead .eyebrow{margin-bottom:12px}.phead h1{font-size:var(--text-2xl);letter-spacing:var(--tracking-tight);text-wrap:balance;font-weight:700;line-height:1.1}.phead h1 em{color:var(--ac);font-style:normal}.phead .lede{font-size:var(--text-sm);color:var(--t-2);max-width:52ch;line-height:var(--leading-relaxed);margin-top:10px}.phead-meta{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.pub-header{z-index:20;background:var(--header-bg-pub);-webkit-backdrop-filter:blur(18px)saturate(1.3);backdrop-filter:blur(18px)saturate(1.3);border-bottom:1px solid var(--line);position:sticky;top:0}.pub-header-inner{align-items:center;gap:28px;max-width:1200px;height:64px;margin:0 auto;padding:0 28px;display:flex}.pub-logo{font-family:var(--ff-display);letter-spacing:-.01em;color:var(--t-0);align-items:center;gap:10px;font-size:16px;font-weight:600;display:flex}.pub-logo .mark{border-radius:7px;flex-shrink:0;width:28px;height:28px}.pub-nav{align-items:center;gap:4px;display:flex}.pub-nav a{color:var(--t-1);border-radius:var(--r-sm);transition:all var(--dur);padding:8px 14px;font-size:13.5px;font-weight:500;position:relative}.pub-nav a:hover{color:var(--t-0);background:var(--ink-2)}.pub-nav a.has-dot:after{content:"";background:var(--ac);border-radius:50%;width:6px;height:6px;position:absolute;top:7px;right:9px}.pub-nav a.active{color:var(--t-0);background:var(--ink-2)}.pub-spacer{flex:1}.pub-actions{align-items:center;gap:10px;display:flex}.pub-footer{border-top:1px solid var(--line);background:var(--ink-1)}.pub-footer-inner{grid-template-columns:1.4fr 1fr 1fr 1fr;gap:40px;max-width:1200px;margin:0 auto;padding:40px 28px;display:grid}.pub-footer h4{font-family:var(--ff-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--t-3);margin-bottom:14px;font-size:12px}.pub-footer a{color:var(--t-1);transition:color var(--dur);padding:5px 0;font-size:13px;display:block}.pub-footer a:hover{color:var(--ac)}.pub-footer .blurb{color:var(--t-2);max-width:34ch;font-size:13px;line-height:1.7}.pub-footer-base{border-top:1px solid var(--line);max-width:1200px;color:var(--t-3);font-size:12px;font-family:var(--ff-mono);justify-content:space-between;align-items:center;margin:0 auto;padding:18px 28px;display:flex}h1,h2,h3,h4{font-family:var(--ff-display);letter-spacing:var(--tracking-tight);font-weight:600;line-height:var(--leading-tight)}.eyebrow{font-family:var(--ff-display);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--ac);align-items:center;gap:8px;font-weight:600;display:flex}.eyebrow:before{content:"";background:var(--ac);width:22px;height:1px}.section-title{font-family:var(--ff-display);font-weight:600;font-size:var(--text-lg);letter-spacing:var(--tracking-tight);align-items:baseline;gap:14px;margin-bottom:16px;display:flex}.section-title .sub{font-family:var(--ff-mono);font-size:var(--text-xs);color:var(--t-3);letter-spacing:.04em}.section-title .line{background:var(--line);flex:1;height:1px;transform:translateY(-2px)}.prose{font-size:var(--text-base);line-height:var(--leading-relaxed);color:var(--t-1)}.prose h1,.prose h2,.prose h3,.prose h4{color:var(--t-0);line-height:var(--leading-snug);margin:1.6em 0 .6em}.prose h1{font-size:var(--text-2xl)}.prose h2{font-size:var(--text-xl);border-bottom:1px solid var(--line);padding-bottom:.3em}.prose h3{font-size:var(--text-lg)}.prose h4{font-size:var(--text-base);color:var(--t-1)}.prose p{margin:.9em 0}.prose a{color:var(--ac);text-underline-offset:2px;text-decoration:underline}.prose a:hover{color:var(--ac-hi)}.prose ul,.prose ol{margin:.9em 0;padding-left:1.5em}.prose li{margin:.3em 0}.prose ul li::marker{color:var(--ac)}.prose ol li::marker{color:var(--t-3);font-family:var(--ff-mono)}.prose blockquote{border-left:3px solid var(--ac-line);color:var(--t-2);background:var(--ink-2);border-radius:0 var(--r-sm) var(--r-sm) 0;margin:1.2em 0;padding:.4em 1em}.prose code{font-family:var(--ff-mono);background:var(--ink-3);border-radius:var(--r-xs);color:var(--ac);padding:2px 6px;font-size:.88em}.prose pre{background:var(--ink-1);border:1px solid var(--line);border-radius:var(--r-md);margin:1.2em 0;padding:16px 18px;overflow-x:auto}.prose pre code{color:var(--t-1);background:0 0;padding:0;font-size:13px}.prose table{border-collapse:collapse;width:100%;margin:1.2em 0;font-size:13px}.prose th,.prose td{border:1px solid var(--line);text-align:left;padding:8px 12px}.prose th{background:var(--ink-2);color:var(--t-0);font-family:var(--ff-mono);text-transform:uppercase;letter-spacing:.06em;font-size:12px}.prose hr{background:var(--line);border:none;height:1px;margin:2em 0}.prose img{border-radius:var(--r-md);max-width:100%;margin:1em 0}.btn{border-radius:var(--r-sm);height:38px;font-size:var(--text-sm);cursor:pointer;transition:all var(--dur);white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:7px;padding:0 16px;font-weight:600;display:inline-flex}.btn svg{stroke:currentColor;width:15px;height:15px}.btn-primary{background:var(--ac-solid);color:var(--ac-on)}.btn-primary:hover{background:var(--ac-hi);box-shadow:0 6px 18px -6px var(--ac-glow);transform:translateY(-1px)}.btn-primary:active{transform:translateY(0)}.btn-ghost{background:var(--ink-2);color:var(--t-1);border-color:var(--line)}.btn-ghost:hover{border-color:var(--line-2);color:var(--t-0);background:var(--ink-3)}.btn-line{color:var(--t-1);border-color:var(--line-2);background:0 0}.btn-line:hover{color:var(--ac);border-color:var(--ac-line)}.btn-danger{background:color-mix(in srgb, var(--down) 12%, transparent);color:var(--down);border-color:color-mix(in srgb, var(--down) 30%, transparent)}.btn-danger:hover{background:color-mix(in srgb, var(--down) 20%, transparent)}.btn-sm{height:30px;font-size:var(--text-xs);padding:0 12px}.btn-block{width:100%}.btn:disabled{opacity:.4;cursor:not-allowed}.card{background:var(--ink-1);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-card)}.card-pad{padding:22px}.card-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:16px 22px;display:flex}.card-head h3{font-size:var(--text-base);letter-spacing:var(--tracking-tight);font-weight:600}.card-head .head-sub{font-family:var(--ff-body);font-weight:500;font-size:var(--text-xs);color:var(--t-3)}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;display:grid}.stat{border:1px solid var(--line);border-radius:var(--r-md);background:var(--ink-1);padding:18px}.stat .k{font-family:var(--ff-display);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--t-3);font-weight:500}.stat .v{font-family:var(--ff-display);font-weight:700;font-size:var(--text-xl);letter-spacing:var(--tracking-tight);font-variant-numeric:tabular-nums;margin-top:6px}.stat .v small{font-size:var(--text-sm);color:var(--t-2);margin-left:3px;font-weight:400}.stat .delta{font-family:var(--ff-mono);font-size:var(--text-xs);margin-top:4px}.stat .delta.up{color:var(--ok)}.stat .delta.down{color:var(--down)}.stat .icon-wrap{background:var(--ac-glow);border-radius:8px;place-items:center;width:32px;height:32px;margin-bottom:12px;display:grid}.stat .icon-wrap svg{width:17px;height:17px;stroke:var(--ac)}.table-wrap{overflow-x:auto}table.tbl{border-collapse:collapse;width:100%;font-size:var(--text-sm)}table.tbl thead th{font-family:var(--ff-display);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--t-3);text-align:left;border-bottom:1px solid var(--line);white-space:nowrap;padding:12px 16px;font-weight:600}table.tbl tbody td{border-bottom:1px solid var(--line);color:var(--t-1);vertical-align:middle;padding:14px 16px}table.tbl tbody tr{transition:background var(--dur)}table.tbl tbody tr:hover{background:var(--ink-2)}table.tbl tbody tr:last-child td{border-bottom:none}.num-cell{font-family:var(--ff-body);font-variant-numeric:tabular-nums;color:var(--t-0);font-weight:500}.list{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--ink-1);overflow:hidden}.list-head,.list-row{align-items:center;gap:16px;padding:0 18px;display:grid}.list-head{border-bottom:1px solid var(--line);background:var(--ink-2);height:42px;font-family:var(--ff-body);letter-spacing:.05em;text-transform:uppercase;color:var(--t-3);font-size:12px;font-weight:600}.list-head .col{cursor:pointer;-webkit-user-select:none;user-select:none;transition:color var(--dur);align-items:center;gap:5px;display:inline-flex}.list-head .col:hover{color:var(--t-1)}.list-head .col.sort:after{content:"↓";color:var(--ac)}.list-row{border-bottom:1px solid var(--line);cursor:pointer;transition:background var(--dur);padding:16px 18px;position:relative}.list-row:last-child{border-bottom:none}.list-row:hover{background:var(--ink-2)}.list-row:before{content:"";background:var(--ac);transform-origin:50%;width:2px;transition:transform .2s;position:absolute;top:0;bottom:0;left:0;transform:scaleY(0)}.list-row:hover:before{transform:scaleY(1)}.badge{font-family:var(--ff-body);font-size:var(--text-xs);letter-spacing:.02em;border-radius:var(--r-xs);align-items:center;gap:5px;padding:3px 8px;font-weight:500;display:inline-flex}.badge-amber,.badge-accent{background:var(--ac-glow);color:var(--ac)}.badge-ok{background:color-mix(in srgb, var(--ok) 14%, transparent);color:var(--ok)}.badge-warn{background:color-mix(in srgb, var(--warn) 14%, transparent);color:var(--warn)}.badge-down{background:color-mix(in srgb, var(--down) 14%, transparent);color:var(--down)}.badge-info{background:color-mix(in srgb, var(--info) 14%, transparent);color:var(--info)}.badge-mute{background:var(--ink-3);color:var(--t-2);border:1px solid var(--line)}.tag{font-family:var(--ff-body);border-radius:var(--r-xs);color:var(--t-1);background:var(--ink-3);border:1px solid var(--line);letter-spacing:.02em;align-items:center;gap:4px;padding:3px 9px;font-size:12px;font-weight:500;display:inline-flex}.tag-cap{color:var(--ac);background:var(--ac-glow);border-color:var(--ac-line)}.tag-open{color:var(--ok);background:color-mix(in srgb, var(--ok) 12%, transparent);border-color:color-mix(in srgb, var(--ok) 30%, transparent)}.tag-ctx{color:var(--t-1);background:var(--ink-2);border-color:var(--line-2);font-weight:500}.dot{border-radius:50%;flex-shrink:0;width:6px;height:6px;display:inline-block}.d-ok{background:var(--ok)}.d-warn{background:var(--warn)}.d-down{background:var(--down)}.d-info{background:var(--info)}.d-mute{background:var(--t-3)}.mono-tile{width:38px;height:38px;font-family:var(--ff-display);border:1px solid var(--line);background:var(--ink-3);color:var(--t-1);border-radius:8px;flex-shrink:0;place-items:center;font-size:14px;font-weight:600;display:grid}.v-openai{color:#10a37f}.v-anthropic{color:#c87f3a}.v-google{color:#4285f4}.v-meta{color:#1877f2}.v-zhipu{color:#2a73c4}.v-doubao{color:#d44a87}.v-vivgrid{color:#8a5cd4}.v-venice{color:#2bb094}.v-wafer{color:#c4953a}.v-xiaomi{color:#ff6900}.v-default{color:var(--ac)}.cb-chat{background:color-mix(in srgb, var(--info) 14%, transparent);color:var(--info)}.cb-image{color:#ec4899;background:#ec489924}.cb-audio{background:color-mix(in srgb, var(--ok) 14%, transparent);color:var(--ok)}.cb-video{background:color-mix(in srgb, var(--warn) 14%, transparent);color:var(--warn)}.cb-embed{color:#06b6d4;background:#06b6d424}.cb-reason{color:#a855f7;background:#a855f724}.cb-tool{background:color-mix(in srgb, var(--ok) 14%, transparent);color:var(--ok)}.field{margin-bottom:16px}.field label{font-size:var(--text-xs);color:var(--t-2);font-weight:600;font-family:var(--ff-display);letter-spacing:var(--tracking-wide);text-transform:uppercase;margin-bottom:7px;display:block}.input,.select select,.textarea{background:var(--ink-2);border:1px solid var(--line);border-radius:var(--r-sm);width:100%;height:42px;color:var(--t-0);font-size:var(--text-sm);transition:border-color var(--dur), box-shadow var(--dur);outline:none;padding:0 14px}.textarea{resize:vertical;height:auto;min-height:96px;padding:12px 14px;line-height:1.6}.input::placeholder,.textarea::placeholder{color:var(--t-3)}.input:focus,.select select:focus,.textarea:focus{border-color:var(--ac-line);box-shadow:0 0 0 3px var(--ac-glow)}.select{position:relative}.select select{appearance:none;cursor:pointer;padding-right:32px}.select:after{content:"";border-right:1.5px solid var(--t-2);border-bottom:1.5px solid var(--t-2);pointer-events:none;width:7px;height:7px;position:absolute;top:50%;right:13px;transform:translateY(-65%)rotate(45deg)}.input-group{position:relative}.input-group .input{padding-left:40px}.input-group .input-icon{width:16px;height:16px;stroke:var(--t-3);position:absolute;top:50%;left:13px;transform:translateY(-50%)}.input-affix{position:relative}.input-affix .input{padding-right:110px}.input-affix .affix-btn{height:32px;padding:0 12px;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.check{cursor:pointer;color:var(--t-1);align-items:center;gap:9px;font-size:13px;display:inline-flex}.check input{appearance:none;border:1.5px solid var(--line-2);background:var(--ink-2);cursor:pointer;width:18px;height:18px;transition:all var(--dur);border-radius:4px;position:relative}.check input:checked{background:var(--ac-solid);border-color:var(--ac-solid)}.check input:checked:after{content:"";border:solid var(--ac-on);border-width:0 2px 2px 0;width:5px;height:10px;position:absolute;top:1px;left:5px;transform:rotate(45deg)}.switch{background:var(--ink-4);border-radius:var(--r-pill);cursor:pointer;width:38px;height:22px;transition:background var(--dur);border:1px solid var(--line);position:relative}.switch:after{content:"";background:var(--t-2);width:16px;height:16px;transition:all var(--dur);border-radius:50%;position:absolute;top:2px;left:2px}.switch.on{background:var(--ac-solid);border-color:var(--ac-solid)}.switch.on:after{background:var(--ac-on);left:18px}.slider{-webkit-appearance:none;background:var(--ink-4);border-radius:2px;outline:none;width:100%;height:4px}.slider::-webkit-slider-thumb{-webkit-appearance:none;background:var(--ac-solid);cursor:pointer;border:2px solid var(--ink-0);border-radius:50%;width:16px;height:16px}.slider::-moz-range-thumb{background:var(--ac-solid);cursor:pointer;border:2px solid var(--ink-0);border-radius:50%;width:16px;height:16px}.tabs{border-bottom:1px solid var(--line);gap:0;display:flex;overflow-x:auto}.tab{cursor:pointer;font-size:var(--text-sm);color:var(--t-2);white-space:nowrap;transition:color var(--dur);background:0 0;border:none;padding:12px 16px;font-weight:500;position:relative}.tab:hover,.tab.on{color:var(--t-0)}.tab.on:after{content:"";background:var(--ac);height:2px;position:absolute;bottom:-1px;left:12px;right:12px}.tab .n{font-family:var(--ff-mono);color:var(--t-3);margin-left:6px;font-size:12px}.tab.on .n{color:var(--ac)}.seg{background:var(--ink-2);border:1px solid var(--line);border-radius:var(--r-sm);gap:2px;padding:3px;display:inline-flex}.seg button{cursor:pointer;height:30px;color:var(--t-2);border-radius:var(--r-xs);transition:all var(--dur);background:0 0;border:none;align-items:center;gap:6px;padding:0 11px;font-size:12px;font-weight:500;display:inline-flex}.seg button:hover{color:var(--t-1)}.seg button.on{background:var(--ink-4);color:var(--t-0)}.seg svg{stroke:currentColor;width:14px;height:14px}.chip{color:var(--t-1);background:var(--ink-2);border:1px solid var(--line);border-radius:var(--r-pill);cursor:pointer;transition:all var(--dur);align-items:center;gap:6px;padding:6px 12px;font-size:12.5px;font-weight:500;display:inline-flex}.chip:hover{color:var(--t-0);border-color:var(--line-2)}.chip.on{color:var(--ac);border-color:var(--ac-line);background:var(--ac-glow)}.progress{background:var(--ink-4);border-radius:3px;height:6px;overflow:hidden}.progress>span{background:linear-gradient(90deg, var(--ac-lo), var(--ac));border-radius:3px;height:100%;display:block}.progress.thin{height:4px}.pager{font-family:var(--ff-mono);color:var(--t-2);justify-content:space-between;align-items:center;margin-top:24px;font-size:12px;display:flex}.pager .pages{gap:4px;display:flex}.pager .pages button{border:1px solid var(--line);background:var(--ink-2);min-width:32px;height:32px;color:var(--t-1);border-radius:var(--r-sm);cursor:pointer;transition:all var(--dur);padding:0 8px;font-family:inherit;font-size:12px}.pager .pages button:hover{border-color:var(--line-2);color:var(--t-0)}.pager .pages button.on{background:var(--ac-solid);border-color:var(--ac-solid);color:var(--ac-on);font-weight:600}.pager .pages button:disabled{opacity:.35;cursor:not-allowed}.divider{background:var(--line);border:none;height:1px;margin:24px 0}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;background:#0000008c;place-items:center;padding:24px;display:grid;position:fixed;inset:0}:root[data-theme=light] .modal-overlay{background:#14193759}.modal{background:var(--ink-1);border:1px solid var(--line);border-radius:var(--r-lg);width:100%;max-width:480px;box-shadow:var(--sh-pop);max-height:90vh;overflow-y:auto}.modal-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:18px 22px;display:flex}.modal-head h3{font-size:15px}.modal-body{padding:22px}.modal-foot{border-top:1px solid var(--line);justify-content:flex-end;gap:10px;padding:16px 22px;display:flex}.drawer-overlay{z-index:90;background:#00000080;position:fixed;inset:0}:root[data-theme=light] .drawer-overlay{background:#1419374d}.drawer{background:var(--ink-1);border-left:1px solid var(--line);width:520px;max-width:92vw;box-shadow:var(--sh-pop);z-index:95;flex-direction:column;display:flex;position:fixed;top:0;bottom:0;right:0}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes spin{to{transform:rotate(360deg)}}.rise{animation:rise .5s var(--ease) both}.spin{animation:.8s linear infinite spin}:focus-visible{outline:2px solid var(--ac-line);outline-offset:2px;border-radius:var(--r-xs)}.skip{z-index:100;background:var(--ink-3);border:1px solid var(--ac-line);border-radius:var(--r-sm);color:var(--t-0);padding:8px 14px;font-size:13px;position:absolute;top:8px;left:-9999px}.skip:focus{left:8px}.floating-theme{z-index:50;border-radius:var(--r-sm);cursor:pointer;border:1px solid var(--line);background:var(--ink-2);width:36px;height:36px;color:var(--t-2);transition:all var(--dur);place-items:center;display:grid;position:fixed;top:18px;right:18px}.floating-theme:hover{color:var(--t-0);background:var(--ink-3);border-color:var(--line-2)}.floating-theme svg{stroke:currentColor;width:16px;height:16px}@media (width>=1920px){:root{--side-w:260px;--gutter:40px}.content{padding:36px var(--gutter) 80px}.pub-header-inner,.pub-footer-inner,.pub-footer-base{max-width:1360px}}@media (width<=1100px){:root{--gutter:24px}}.side-backdrop,.topbar-hamburger{display:none}@media (width<=860px){.shell{grid-template-columns:1fr}.side{z-index:50;width:260px;height:100vh;transition:transform .25s var(--ease);box-shadow:var(--sh-pop);position:fixed;top:0;left:0;transform:translate(-100%)}.side.mobile-open{transform:translate(0)}.side-backdrop{z-index:40;opacity:0;pointer-events:none;transition:opacity .25s var(--ease);background:#00000080;display:block;position:fixed;inset:0}:root[data-theme=light] .side-backdrop{background:#14193766}.side-backdrop.show{opacity:1;pointer-events:auto}.topbar-hamburger{display:grid}.side-collapse,.searchbar{display:none}.pub-header-inner{gap:14px;padding:0 16px}.pub-nav{display:none}.pub-footer-inner{grid-template-columns:1fr 1fr;gap:28px;padding:28px 16px}.content{padding:22px 16px 56px}.user-chip .uname{display:none}.user-menu{min-width:260px;right:-8px}}@media (width<=560px){.pub-footer-inner{grid-template-columns:1fr}.stat-grid{grid-template-columns:1fr 1fr}}.pub-shell-inner{box-sizing:border-box;width:100%;max-width:1200px;margin:0 auto;padding-left:28px;padding-right:28px}@media (width>=1440px){.pub-shell-inner{max-width:1360px}}@media (width<=600px){.pub-shell-inner{padding-left:16px;padding-right:16px}}:root{--bg-base:var(--ink-0);--bg-elevated:var(--ink-1);--bg-surface:var(--ink-2);--bg-overlay:var(--header-bg);--text-primary:var(--t-0);--text-secondary:var(--t-1);--text-muted:var(--t-2);--border-default:var(--line);--border-hover:var(--line-2);--border-active:var(--ac-line);--primary-start:var(--ac-solid);--primary-end:var(--ac-hi);--primary-gradient:linear-gradient(135deg, var(--ac-solid), var(--ac-hi));--secondary-start:var(--info);--secondary-end:var(--info);--secondary-gradient:linear-gradient(135deg, var(--info), var(--info));--accent-start:var(--ac-solid);--accent-end:var(--ac-lo);--accent-gradient:linear-gradient(135deg, var(--ac-solid), var(--ac-lo));--success:var(--ok);--warning:var(--warn);--error:var(--down);--info:var(--info);--space-xs:4px;--space-sm:8px;--space-md:12px;--space-lg:16px;--space-xl:24px;--space-2xl:32px;--space-3xl:48px;--space-4xl:64px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--font-family:"Noto Sans SC", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans JP", "Noto Sans KR", sans-serif;--font-size-display:36px;--font-size-h1:28px;--font-size-h2:22px;--font-size-h3:18px;--font-size-body:14px;--font-size-small:12px;--font-size-caption:11px;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-display:1.2;--line-height-h1:1.3;--line-height-h2:1.4;--line-height-h3:1.4;--line-height-body:1.6;--line-height-small:1.5;--line-height-caption:1.4;--transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--transition-normal:.3s cubic-bezier(.4, 0, .2, 1);--transition-slow:.5s cubic-bezier(.4, 0, .2, 1)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scroll-behavior:smooth;font-size:16px}body{font-family:var(--ff-body);color:var(--t-0);background-color:var(--ink-0);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;min-height:100vh;transition:background-color var(--dur), color var(--dur);font-size:14px;line-height:1.55;overflow-x:hidden}a{color:var(--ac);transition:color var(--dur);text-decoration:none}a:hover{color:var(--ac-hi)}img{max-width:100%;height:auto;display:block}button{cursor:pointer;font-family:inherit}input,textarea,select{font-family:inherit;font-size:inherit}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--line-2);border:2px solid var(--ink-0);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--t-3)}::selection{background:var(--ac-glow);color:var(--t-0)}#app{z-index:2;position:relative}.fade-enter-active,.fade-leave-active{transition:opacity var(--transition-fast)}.fade-enter-from,.fade-leave-to{opacity:0}.slide-up-enter-active,.slide-up-leave-active{transition:all var(--transition-fast)}.slide-up-enter-from{opacity:0;transform:translateY(12px)}.slide-up-leave-to{opacity:0;transform:translateY(-12px)}.scale-enter-active,.scale-leave-active{transition:all .2s cubic-bezier(.4,0,.2,1)}.scale-enter-from,.scale-leave-to{opacity:0;transform:scale(.95)}.page-enter-active,.page-leave-active{transition:all var(--transition-fast)}.page-enter-from{opacity:0;transform:translateY(8px)}.page-leave-to{opacity:0;transform:translateY(-8px)}
