:root{--bg: #f7f8fc;--bg-deep: #eceef7;--surface: rgba(255, 255, 255, .72);--surface-solid: #ffffff;--surface-2: rgba(15, 23, 42, .04);--surface-3: rgba(15, 23, 42, .07);--border: rgba(15, 23, 42, .09);--border-strong: rgba(15, 23, 42, .16);--text: #0c1020;--text-soft: #364054;--muted: #626d84;--accent: #4f46e5;--accent-2: #0ea5e9;--accent-3: #d946ef;--accent-ink: #ffffff;--accent-wash: rgba(79, 70, 229, .1);--good: #0f8a55;--good-wash: rgba(15, 138, 85, .12);--warn: #b06a06;--warn-wash: rgba(176, 106, 6, .13);--bad: #c8352b;--bad-wash: rgba(200, 53, 43, .12);--shadow-sm: 0 1px 2px rgba(12, 16, 32, .05), 0 4px 12px rgba(12, 16, 32, .04);--shadow-md: 0 2px 6px rgba(12, 16, 32, .06), 0 18px 40px -12px rgba(12, 16, 32, .16);--shadow-lg: 0 4px 10px rgba(12, 16, 32, .07), 0 30px 70px -20px rgba(12, 16, 32, .28);--glow: rgba(79, 70, 229, .28);--aurora-1: rgba(99, 102, 241, .5);--aurora-2: rgba(14, 165, 233, .42);--aurora-3: rgba(217, 70, 239, .32);--aurora-alpha: .55;--mono: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;--sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI Variable Display", "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--r-sm: 10px;--r-md: 16px;--r-lg: 22px;--r-xl: 30px;--ease: cubic-bezier(.22, 1, .36, 1);--ease-soft: cubic-bezier(.4, 0, .2, 1);--wrap: 1120px}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--bg: #07080f;--bg-deep: #04050a;--surface: rgba(255, 255, 255, .045);--surface-solid: #12141f;--surface-2: rgba(255, 255, 255, .05);--surface-3: rgba(255, 255, 255, .09);--border: rgba(255, 255, 255, .09);--border-strong: rgba(255, 255, 255, .18);--text: #f0f2f9;--text-soft: #c5cbdb;--muted: #939cb3;--accent: #8b8cfb;--accent-2: #38bdf8;--accent-3: #e879f9;--accent-ink: #0b0c14;--accent-wash: rgba(139, 140, 251, .14);--good: #45d193;--good-wash: rgba(69, 209, 147, .14);--warn: #f0b846;--warn-wash: rgba(240, 184, 70, .14);--bad: #fb7d72;--bad-wash: rgba(251, 125, 114, .14);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .5);--shadow-md: 0 2px 8px rgba(0, 0, 0, .5), 0 22px 50px -18px rgba(0, 0, 0, .8);--shadow-lg: 0 4px 12px rgba(0, 0, 0, .55), 0 40px 90px -30px rgba(0, 0, 0, .95);--glow: rgba(139, 140, 251, .36);--aurora-1: rgba(99, 102, 241, .55);--aurora-2: rgba(14, 165, 233, .4);--aurora-3: rgba(217, 70, 239, .38);--aurora-alpha: .42}}:root[data-theme=dark]{--bg: #07080f;--bg-deep: #04050a;--surface: rgba(255, 255, 255, .045);--surface-solid: #12141f;--surface-2: rgba(255, 255, 255, .05);--surface-3: rgba(255, 255, 255, .09);--border: rgba(255, 255, 255, .09);--border-strong: rgba(255, 255, 255, .18);--text: #f0f2f9;--text-soft: #c5cbdb;--muted: #939cb3;--accent: #8b8cfb;--accent-2: #38bdf8;--accent-3: #e879f9;--accent-ink: #0b0c14;--accent-wash: rgba(139, 140, 251, .14);--good: #45d193;--good-wash: rgba(69, 209, 147, .14);--warn: #f0b846;--warn-wash: rgba(240, 184, 70, .14);--bad: #fb7d72;--bad-wash: rgba(251, 125, 114, .14);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .5);--shadow-md: 0 2px 8px rgba(0, 0, 0, .5), 0 22px 50px -18px rgba(0, 0, 0, .8);--shadow-lg: 0 4px 12px rgba(0, 0, 0, .55), 0 40px 90px -30px rgba(0, 0, 0, .95);--glow: rgba(139, 140, 251, .36);--aurora-1: rgba(99, 102, 241, .55);--aurora-2: rgba(14, 165, 233, .4);--aurora-3: rgba(217, 70, 239, .38);--aurora-alpha: .42}*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{margin:0;min-height:100vh;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.6;letter-spacing:-.006em;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}.aurora{position:fixed;inset:-20vmax;z-index:-1;pointer-events:none;opacity:var(--aurora-alpha);filter:blur(90px) saturate(130%)}.aurora span{position:absolute;display:block;border-radius:50%;will-change:transform}.aurora .a1{width:46vmax;height:46vmax;top:6%;left:-4%;background:radial-gradient(circle at 30% 30%,var(--aurora-1),transparent 65%);animation:drift-a 34s var(--ease-soft) infinite alternate}.aurora .a2{width:40vmax;height:40vmax;top:24%;right:-6%;background:radial-gradient(circle at 60% 40%,var(--aurora-2),transparent 65%);animation:drift-b 42s var(--ease-soft) infinite alternate}.aurora .a3{width:38vmax;height:38vmax;bottom:2%;left:28%;background:radial-gradient(circle at 50% 50%,var(--aurora-3),transparent 65%);animation:drift-c 50s var(--ease-soft) infinite alternate}@keyframes drift-a{to{transform:translate3d(12vmax,8vmax,0) scale(1.18)}}@keyframes drift-b{to{transform:translate3d(-14vmax,12vmax,0) scale(.86)}}@keyframes drift-c{to{transform:translate3d(8vmax,-12vmax,0) scale(1.14)}}.wrap{width:100%;max-width:var(--wrap);margin:0 auto;padding:0 22px}main.wrap{padding-bottom:40px}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}.skip{position:absolute;left:-9999px;top:0;background:var(--accent);color:var(--accent-ink);padding:10px 16px;border-radius:0 0 12px;z-index:100}.skip:focus{left:0}header.site{position:sticky;top:0;z-index:50;view-transition-name:site-header;backdrop-filter:blur(18px) saturate(180%);-webkit-backdrop-filter:blur(18px) saturate(180%);background:color-mix(in srgb,var(--bg) 72%,transparent);border-bottom:1px solid transparent;transition:border-color .35s var(--ease-soft),background .35s var(--ease-soft)}header.site.stuck{border-bottom-color:var(--border);background:color-mix(in srgb,var(--bg) 86%,transparent)}header.site .row{display:flex;align-items:center;gap:14px;height:66px}.brand{display:inline-flex;align-items:center;gap:9px;font-weight:700;font-size:17px;letter-spacing:-.02em;color:var(--text)}.brand:hover{text-decoration:none}.brand .mark{width:26px;height:26px;border-radius:8px;background:linear-gradient(140deg,var(--accent),var(--accent-3) 55%,var(--accent-2));box-shadow:0 0 0 1px var(--border),0 6px 16px -6px var(--glow);position:relative;overflow:hidden;flex:0 0 auto}.brand .mark:after{content:"";position:absolute;inset:0;background:linear-gradient(120deg,transparent 30%,rgba(255,255,255,.75) 50%,transparent 70%);transform:translate(-120%);animation:sheen 5.5s var(--ease-soft) infinite}@keyframes sheen{0%,62%{transform:translate(-120%)}88%,to{transform:translate(120%)}}nav.main{display:flex;gap:2px;margin-left:auto;align-items:center}nav.main a{position:relative;padding:8px 13px;border-radius:999px;font-size:14.5px;font-weight:500;color:var(--muted);transition:color .2s var(--ease-soft),background .25s var(--ease-soft)}nav.main a:hover{color:var(--text);background:var(--surface-2);text-decoration:none}nav.main a[aria-current=page]{color:var(--text);font-weight:600}nav.main a[aria-current=page]:after{content:"";position:absolute;left:13px;right:13px;bottom:2px;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--accent),var(--accent-3));view-transition-name:nav-underline}.theme-toggle{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;border:1px solid var(--border);background:var(--surface-2);color:var(--muted);cursor:pointer;transition:transform .35s var(--ease),color .2s,background .2s}.theme-toggle:hover{color:var(--text);background:var(--surface-3);transform:rotate(18deg)}.theme-toggle svg{width:17px;height:17px}.theme-toggle .moon{display:none}:root[data-theme=dark] .theme-toggle .moon{display:block}:root[data-theme=dark] .theme-toggle .sun{display:none}@media (prefers-color-scheme: dark){:root:not([data-theme=light]) .theme-toggle .moon{display:block}:root:not([data-theme=light]) .theme-toggle .sun{display:none}}@media (max-width: 640px){header.site .row{height:auto;padding:9px 0 4px;flex-wrap:wrap;row-gap:2px}nav.main{width:100%;order:3;margin:0 -22px;padding:0 18px 4px;overflow-x:auto;scrollbar-width:none}nav.main::-webkit-scrollbar{display:none}nav.main a{padding:6px 11px;font-size:14px}.theme-toggle{margin-left:auto}}.signin-link{font-size:14.5px;font-weight:600;padding:7px 14px;border-radius:999px;border:1px solid var(--border);background:var(--surface-2);color:var(--text);white-space:nowrap;transition:background .25s var(--ease-soft),border-color .25s var(--ease-soft)}.signin-link:hover{text-decoration:none;background:var(--surface-3);border-color:var(--border-strong)}.account-menu{position:relative}.avatar{width:36px;height:36px;border-radius:50%;border:1px solid var(--border);background:linear-gradient(140deg,var(--accent),var(--accent-3));color:var(--accent-ink);font:inherit;font-size:14px;font-weight:700;cursor:pointer;display:grid;place-items:center;box-shadow:0 4px 14px -6px var(--glow);transition:transform .3s var(--ease),box-shadow .3s var(--ease)}.avatar:hover{transform:translateY(-1px);box-shadow:0 6px 18px -6px var(--glow)}.account-menu .menu{position:absolute;top:calc(100% + 10px);right:0;min-width:244px;z-index:60;display:flex;flex-direction:column;padding:8px;border-radius:var(--r-md);border:1px solid var(--border);background:var(--surface-solid);box-shadow:var(--shadow-lg);animation:menu-in .22s var(--ease)}@keyframes menu-in{0%{opacity:0;transform:translateY(-6px) scale(.97)}}.account-menu .menu .who{margin:0;padding:8px 12px 12px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;line-height:1.35}.account-menu .menu .who strong{font-size:14.5px}.account-menu .menu .who span{overflow:hidden;text-overflow:ellipsis}.account-menu .menu a,.account-menu .menu button{display:flex;align-items:center;gap:8px;padding:9px 12px;margin-top:2px;border:0;border-radius:var(--r-sm);background:none;font:inherit;font-size:14.5px;color:var(--text);text-align:left;cursor:pointer;width:100%}.account-menu .menu a:hover,.account-menu .menu button:hover{background:var(--surface-2);text-decoration:none}.account-menu .menu [data-signout]{color:var(--bad)}.account-menu .menu .count{margin-left:auto;font-size:12.5px;font-weight:700;color:var(--muted);background:var(--surface-2);border-radius:999px;padding:1px 8px}@media (max-width: 640px){.signin-link{padding:6px 12px;font-size:14px}}h1{font-size:clamp(30px,5vw,44px);line-height:1.1;letter-spacing:-.033em;font-weight:720;margin:0 0 10px}h2{font-size:clamp(21px,2.6vw,26px);letter-spacing:-.022em;font-weight:680;margin:52px 0 8px}h3{font-size:17px;font-weight:650;letter-spacing:-.015em;margin:26px 0 8px}.lede{color:var(--text-soft);font-size:clamp(16px,1.9vw,18.5px);line-height:1.6;margin:0 0 22px;max-width:65ch}.note{color:var(--muted);font-size:14.5px;max-width:68ch;margin:0 0 18px}.muted{color:var(--muted)}.small{font-size:13.5px}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.gradient-text{background:linear-gradient(100deg,var(--accent),var(--accent-3) 45%,var(--accent-2));-webkit-background-clip:text;background-clip:text;color:transparent}.panel{background:var(--surface);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--shadow-md);padding:clamp(20px,3vw,34px)}.chip{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;letter-spacing:-.005em;padding:4px 11px;border-radius:999px;background:var(--surface-2);color:var(--muted);border:1px solid var(--border);white-space:nowrap;line-height:1.5}.chip.accent{background:var(--accent-wash);color:var(--accent);border-color:transparent}.chip.good{background:var(--good-wash);color:var(--good);border-color:transparent}.chip.ok{background:var(--accent-wash);color:var(--accent);border-color:transparent}.chip.warn{background:var(--warn-wash);color:var(--warn);border-color:transparent}.chip.bad{background:var(--bad-wash);color:var(--bad);border-color:transparent}.chip .dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:0 0 auto}.chip.live .dot{animation:pulse 2.2s var(--ease-soft) infinite}@keyframes pulse{0%,to{box-shadow:0 0 0 0 currentColor;opacity:1}50%{box-shadow:0 0 0 5px transparent;opacity:.55}}.meter{display:inline-flex;align-items:center;gap:8px}.meter .bars{display:inline-flex;gap:3px;align-items:flex-end}.meter .bars i{display:block;width:4px;border-radius:2px;background:var(--border-strong);transform-origin:bottom;animation:bar-rise .55s var(--ease) backwards}.meter .bars i:nth-child(1){height:7px;animation-delay:.02s}.meter .bars i:nth-child(2){height:10px;animation-delay:.07s}.meter .bars i:nth-child(3){height:13px;animation-delay:.12s}.meter .bars i:nth-child(4){height:16px;animation-delay:.17s}.meter .bars i:nth-child(5){height:19px;animation-delay:.22s}.meter .bars i.on{background:currentColor}.meter.good{color:var(--good)}.meter.ok{color:var(--accent)}.meter.warn{color:var(--warn)}.meter .label{font-size:13px;font-weight:650;color:currentColor}.meter .detail{font-size:13px;color:var(--muted);font-weight:450}@keyframes bar-rise{0%{transform:scaleY(.15);opacity:0}}.move{display:inline-flex;align-items:center;gap:5px;font-size:13px;font-weight:600}.move.later{color:var(--bad)}.move.earlier{color:var(--good)}.move.none{color:var(--muted);font-weight:500}.move svg{width:13px;height:13px}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}table{width:100%;border-collapse:collapse;font-size:14.5px}th,td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--border);vertical-align:top}tbody tr:last-child td{border-bottom:none}tbody tr{transition:background .2s var(--ease-soft)}tbody tr:hover{background:var(--surface-2)}th{color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.05em;background:var(--surface-2);position:sticky;top:0}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}.empty{border:1px dashed var(--border-strong);border-radius:var(--r-lg);padding:48px 28px;text-align:center;color:var(--muted);background:var(--surface)}.banner{display:flex;gap:12px;align-items:flex-start;border-radius:var(--r-md);padding:14px 18px;margin:0 0 24px;font-size:14.5px;border:1px solid var(--border);background:var(--surface);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);animation:slide-down .5s var(--ease) backwards}.banner.warn{background:var(--warn-wash);border-color:color-mix(in srgb,var(--warn) 40%,transparent)}.banner.halt{background:var(--bad-wash);border-color:color-mix(in srgb,var(--bad) 40%,transparent)}.banner.info{background:var(--accent-wash);border-color:color-mix(in srgb,var(--accent) 35%,transparent)}.banner.good{background:var(--good-wash);border-color:color-mix(in srgb,var(--good) 35%,transparent)}@keyframes slide-down{0%{opacity:0;transform:translateY(-8px)}}.banner.notice{margin-top:22px;align-items:center}.banner.notice .banner-text{flex:1}.banner.notice .dismiss{flex:0 0 auto;width:26px;height:26px;border-radius:50%;border:0;background:none;color:inherit;opacity:.55;font-size:19px;line-height:1;cursor:pointer;transition:opacity .2s,background .2s}.banner.notice .dismiss:hover{opacity:1;background:var(--surface-3)}.toast{position:fixed;left:50%;bottom:26px;z-index:90;transform:translate(-50%,20px);max-width:min(460px,calc(100vw - 32px));padding:12px 18px;border-radius:999px;border:1px solid var(--border);background:var(--surface-solid);box-shadow:var(--shadow-lg);color:var(--text);font-size:14px;text-align:center;opacity:0;pointer-events:none;transition:opacity .3s var(--ease),transform .4s var(--ease)}.toast.show{opacity:1;transform:translate(-50%)}blockquote.quote{margin:10px 0 0;padding:10px 14px;border-left:2px solid var(--accent);border-radius:0 var(--r-sm) var(--r-sm) 0;background:var(--surface-2);color:var(--text-soft);font-size:14px;line-height:1.55}details.nerdy{margin-top:18px;border-top:1px solid var(--border);padding-top:12px}details.nerdy>summary{cursor:pointer;font-size:13.5px;color:var(--muted);font-weight:550;list-style:none;display:inline-flex;align-items:center;gap:7px;padding:4px 0;transition:color .2s}details.nerdy>summary::-webkit-details-marker{display:none}details.nerdy>summary:hover{color:var(--text)}details.nerdy>summary:before{content:"";width:6px;height:6px;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:rotate(-45deg);transition:transform .3s var(--ease)}details.nerdy[open]>summary:before{transform:rotate(45deg)}details.nerdy>.body{animation:fade-up .4s var(--ease);padding-top:8px}@keyframes fade-up{0%{opacity:0;transform:translateY(6px)}}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.field>label{font-size:14px;font-weight:600}.field .hint{font-size:13px;color:var(--muted);line-height:1.5;margin:0}input[type=text],input[type=email],input[type=password],input[type=search],input[type=number],input[type=url],input[type=datetime-local],select,textarea{width:100%;padding:11px 14px;border-radius:var(--r-sm);border:1px solid var(--border-strong);background:var(--surface-solid);color:var(--text);font:inherit;font-size:15px;transition:border-color .25s var(--ease-soft),box-shadow .25s var(--ease-soft)}textarea{resize:vertical;min-height:92px;line-height:1.55}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-wash)}input[aria-invalid=true]{border-color:var(--bad)}input:disabled,select:disabled,textarea:disabled{opacity:.55;cursor:not-allowed}.switch{display:flex;align-items:flex-start;gap:11px;padding:11px 13px;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--surface-2);cursor:pointer;transition:border-color .2s,background .2s}.switch:hover{border-color:var(--border-strong)}.switch input{width:18px;height:18px;margin:2px 0 0;accent-color:var(--accent);flex:0 0 auto}.switch .text{display:flex;flex-direction:column;gap:2px}.switch .text strong{font-size:14.5px;font-weight:600}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:11px 20px;border-radius:999px;border:1px solid transparent;background:var(--accent);color:var(--accent-ink);font:inherit;font-size:15px;font-weight:640;cursor:pointer;transition:transform .25s var(--ease),box-shadow .3s var(--ease),background .25s,opacity .2s;box-shadow:0 6px 18px -8px var(--glow)}.btn:hover{transform:translateY(-1px);box-shadow:0 10px 26px -10px var(--glow);text-decoration:none}.btn:active{transform:translateY(0)}.btn[disabled],.btn[aria-busy=true]{opacity:.6;pointer-events:none}.btn.ghost{background:var(--surface-2);color:var(--text);border-color:var(--border);box-shadow:none}.btn.ghost:hover{background:var(--surface-3);box-shadow:none}.btn.danger{background:var(--bad);color:#fff;box-shadow:none}.btn.small{padding:7px 14px;font-size:13.5px}.btn-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.msg{margin:12px 0 0;padding:11px 14px;border-radius:var(--r-sm);font-size:14px;line-height:1.5;animation:fade-up .3s var(--ease)}.msg.error{background:var(--bad-wash);color:var(--bad)}.msg.ok{background:var(--good-wash);color:var(--good)}.msg[hidden]{display:none!important}.card-list{display:grid;gap:14px}.skeleton{border-radius:var(--r-md);background:linear-gradient(90deg,var(--surface-2) 25%,var(--surface-3) 37%,var(--surface-2) 63%);background-size:400% 100%;animation:shimmer 1.4s linear infinite;height:76px}@keyframes shimmer{0%{background-position:100% 0}to{background-position:0 0}}html.anim .reveal{opacity:0;transform:translateY(18px);transition:opacity .6s var(--ease),transform .7s var(--ease);transition-delay:calc(var(--i, 0) * 55ms)}html.anim .reveal.shown{opacity:1;transform:none}footer.site{margin-top:72px;border-top:1px solid var(--border);background:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--bg-deep) 70%,transparent));padding:34px 0 56px;color:var(--muted);font-size:14px}footer.site .cols{display:flex;gap:28px;flex-wrap:wrap;justify-content:space-between}footer.site p{margin:0 0 8px;max-width:60ch}footer.site .stats{display:flex;gap:18px;flex-wrap:wrap;font-size:13px}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.reveal{opacity:1;transform:none}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}::view-transition-old(root){animation:vt-out .22s var(--ease-soft) both}::view-transition-new(root){animation:vt-in .34s var(--ease) both}@keyframes vt-out{to{opacity:0;transform:translateY(-6px)}}@keyframes vt-in{0%{opacity:0;transform:translateY(10px)}}.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}
