:root{--bg:#0a0c14;--bg-band:#0d1019;--surface:#10131f;--surface-2:#151a2a;--line:#242b3e;--line-soft:#a0afd72e;--grid:#2f384f;--row-alt:#a0afd70a;--row-hover:#b4512a29;--ink:#e9ecf3;--mute:#959db0;--faint:#808a9e;--paper:#101421c7;--paper-solid:#0f1320;--paper-line:#262e44;--ink-body:#c9cfdc;--leading:1.75;--accent:#b4512a;--accent-hover:#a84b27;--accent-ink:#fff;--c1:#b9603b;--c2:#8da2c0;--c3:#66739a;--redis:#5f6b8a;--ok:#6fae8a;--bad:#d4604a;--code-bg:#080a12;--code-ink:#dfe4ee;--code-dim:#dce4f0a3;--sky-0:#0a0c14;--sky-1:#11162e;--sky-2:#20152a;--sky-3:#35160f;--dusk:176, 76, 36;--ground-glow-a:#8da2c017;--ground-glow-b:rgba(var(--dusk), .09);--ground-dot:#a0afd713;--ground:radial-gradient(70vw 60vh at 8% -8%, var(--ground-glow-a), transparent 70%), radial-gradient(60vw 55vh at 100% 105%, var(--ground-glow-b), transparent 70%), radial-gradient(circle, var(--ground-dot) 1px, transparent 1.4px) 0 0 / 24px 24px, var(--bg);--f-sans:"IBM Plex Sans", "Segoe UI", system-ui, sans-serif;--f-mono:"IBM Plex Mono", ui-monospace, "SFMono-Regular", monospace;--radius:8px;--radius-s:6px;--max:1160px;--gutter:max(16px, env(safe-area-inset-left,0px));--section-y:clamp(56px, 8vw, 96px);color-scheme:dark}:root[data-theme=light]{--bg:#eef0f3;--bg-band:#e8eaee;--surface:#f8f8f7;--surface-2:#e8eaee;--line:#d5d8de;--line-soft:#281e1826;--grid:#bfc5cf;--row-alt:#2832460b;--row-hover:#a4441e1f;--ink:#1d1b1f;--mute:#55504b;--faint:#615b55;--paper:#f9f9f8eb;--paper-solid:#f9f9f8;--paper-line:#d8dbe1;--ink-body:#2b2723;--accent:#a4441e;--accent-hover:#913b19;--accent-ink:#fff;--c1:#a4501f;--c2:#3b5780;--c3:#56648a;--redis:#5a6684;--ok:#2f7a55;--bad:#b8402b;--code-bg:#1b1e2e;--code-ink:#e3e7f0;--code-dim:#dce4f0ad;--sky-0:#eef0f4;--sky-1:#ebeef2;--sky-2:#f0ebe7;--sky-3:#f2e3d8;--dusk:200, 100, 50;--ground-glow-a:#3b578017;--ground-glow-b:rgba(var(--dusk), .07);--ground-dot:#28324624;--ground:radial-gradient(70vw 60vh at 8% -8%, var(--ground-glow-a), transparent 70%), radial-gradient(60vw 55vh at 100% 105%, var(--ground-glow-b), transparent 70%), radial-gradient(circle, var(--ground-dot) 1px, transparent 1.4px) 0 0 / 24px 24px, var(--bg);color-scheme:light}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{background:var(--ground);color:var(--ink);font-family:var(--f-sans);background-attachment:fixed;margin:0;font-size:17px;line-height:1.6}img,svg{max-width:100%}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--c2);outline-offset:2px}code,kbd,pre{font-family:var(--f-mono)}:not(pre)>code{font-size:.9em}h1,h2,h3,h4{text-wrap:balance;letter-spacing:-.02em;font-weight:600}p{text-wrap:pretty}[hidden]{display:none!important}.wrap{max-width:var(--max);padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));margin:0 auto}.section{padding-block:var(--section-y)}.section+.section{border-top:1px solid var(--line)}.band{background:color-mix(in srgb, var(--bg-band) 72%, transparent);border-block:1px solid var(--line)}.band+.section,.section+.band{border-top:0}.kicker{color:var(--mute);margin:0 0 12px;font-size:15px;font-weight:600}.title{max-width:22ch;margin:0 0 12px;font-size:clamp(28px,3.6vw,42px);line-height:1.1}.lede{color:var(--mute);max-width:60ch;margin:0;font-size:18px}.head-row{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:16px 32px;margin-bottom:32px;display:flex}.head-row>*{min-width:0}.source{font-family:var(--f-mono);color:var(--faint);overflow-wrap:anywhere;margin:20px 0 0;font-size:13px}.source a{text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:3px}.source a:hover{color:var(--mute)}.btn{border-radius:var(--radius-s);background:var(--accent);color:var(--accent-ink);cursor:pointer;border:0;align-items:center;gap:8px;padding:11px 20px;font-size:16px;font-weight:600;line-height:1.3;transition:background-color .15s;display:inline-flex}.btn:hover{background:var(--accent-hover)}.btn.ghost{color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-soft);background:0 0}.btn.ghost:hover{background:color-mix(in srgb, var(--ink) 6%, transparent)}.btn.small{padding:8px 14px;font-size:15px}.grid{gap:18px;display:grid}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:12px;min-width:0;padding:26px;transition:border-color .15s;display:flex}a.card:hover{border-color:color-mix(in srgb, var(--ink) 30%, var(--line))}.card h3{margin:0;font-size:21px}.card p{color:var(--mute);margin:0;font-size:16px}.card .more{color:var(--ink);margin-top:auto;padding-top:4px;font-size:15px;font-weight:600}.card .more:after{content:" →";color:var(--mute)}.chips{flex-wrap:wrap;gap:6px;display:flex}.chips span,.chip{font-family:var(--f-mono);border:1px solid var(--line);color:var(--ink);border-radius:4px;padding:4px 9px;font-size:13px}.chips span.on{background:var(--ink);border-color:var(--ink);color:var(--bg)}.seg{border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--line);gap:2px;padding:3px;display:inline-flex}.seg button{font:inherit;color:var(--mute);border-radius:var(--radius-s);cursor:pointer;background:0 0;border:0;padding:6px 14px;font-size:14.5px}.seg button[aria-pressed=true]{background:var(--ink);color:var(--bg);font-weight:600}.legend{color:var(--mute);flex-wrap:wrap;gap:6px 18px;font-size:14px;display:flex}.legend i{vertical-align:-1px;border-radius:2px;width:10px;height:10px;margin-right:7px;display:inline-block}.term{background:var(--code-bg);color:var(--code-ink);border:1px solid var(--line-soft);border-radius:var(--radius);min-width:0;font-size:14.5px;line-height:1.75;overflow:hidden}.term-bar{color:var(--code-dim);border-bottom:1px solid #ffffff12;justify-content:space-between;padding:11px 16px;font-size:13px;display:flex}.term pre{font:inherit;font-family:var(--f-mono);margin:0;padding:18px 20px 22px;overflow-x:auto}.table-wrap{border:1px solid var(--grid);border-radius:var(--radius);background:var(--surface);overflow-x:auto}.table-wrap table{border-collapse:collapse;width:100%;font-size:16px}.table-wrap th{text-align:left;color:var(--ink);background:var(--surface-2);white-space:nowrap;border-bottom:1px solid var(--grid);padding:10px 14px;font-size:14.5px;font-weight:600}.table-wrap td{border-top:1px solid var(--grid);vertical-align:top;padding:10px 14px}.table-wrap :is(th,td)+:is(th,td){border-left:1px solid var(--line)}.table-wrap tbody tr:nth-child(2n){background:var(--row-alt)}.table-wrap tbody tr:hover{background:var(--row-hover)}.num{font-family:var(--f-mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.page-intro{isolation:isolate;border-bottom:1px solid var(--line);padding-block:clamp(48px,7vw,88px) clamp(40px,6vw,72px);position:relative;overflow:hidden}.page-intro:before{content:"";z-index:-1;background:radial-gradient(60% 70% at 30% 130%, rgba(var(--dusk), .3), rgba(var(--dusk), 0) 70%), linear-gradient(180deg, var(--sky-0) 0%, var(--sky-1) 60%, var(--sky-2) 100%);position:absolute;inset:0}.page-intro:after{content:"";background:linear-gradient(90deg, transparent, rgba(var(--dusk), .6), transparent);height:1px;position:absolute;inset:auto 0 0}.page-intro h1{max-width:22ch;margin:0 0 16px;font-size:clamp(32px,4.4vw,52px);line-height:1.08}.page-intro .lede{color:color-mix(in srgb, var(--ink-body) 85%, var(--mute));font-size:19px}.page-intro .lede code{color:var(--ink)}.reading{padding-block:clamp(32px, 5vw, 56px) var(--section-y);background:linear-gradient(180deg, color-mix(in srgb, var(--sky-1) 45%, transparent) 0, transparent 360px)}.panel{background:var(--paper);border:1px solid var(--paper-line);border-radius:var(--radius);min-width:0;padding:clamp(20px,3vw,34px)}.prose{color:var(--ink-body);font-size:17.5px;line-height:var(--leading)}.prose>*{margin:0}.prose>*+*{margin-top:14px}.prose p,.prose li{max-width:68ch}.prose strong,.prose b{color:var(--ink);font-weight:600}.prose a:not(.btn,.card){color:var(--ink);text-underline-offset:3px;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--accent) 70%, transparent)}.prose a:not(.btn,.card):hover{text-decoration-color:var(--ink)}.prose :not(pre)>code{color:var(--ink);background:var(--surface-2);border-radius:4px;padding:.1em .35em;font-size:.88em}.callout{border-radius:var(--radius-s);background:color-mix(in srgb, var(--c2) 7%, var(--paper));border:1px solid color-mix(in srgb, var(--c2) 22%, var(--paper-line));border-left:3px solid var(--c2);padding:12px 16px;font-size:16.5px}.callout b:first-child{margin-right:6px}.chart-tip{z-index:5;pointer-events:none;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-s);max-width:260px;padding:9px 12px;font-size:14px;line-height:1.45;position:absolute;box-shadow:0 12px 30px -10px #00000080}.chart-tip b{font-size:14.5px;display:block}.chart-tip span{font-family:var(--f-mono);color:var(--mute);font-size:13px}@media (width<=900px){.grid-3,.grid-2{grid-template-columns:minmax(0,1fr)}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.kpis{background:var(--line);border:1px solid var(--line);border-radius:var(--radius);grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.kpis>div{background:var(--surface);align-content:start;gap:6px;padding:22px;display:grid}.kpis b{letter-spacing:-.03em;font-size:clamp(30px,3.4vw,42px);font-weight:600;line-height:1}.kpis em{color:var(--mute);font-style:normal}.kpis span{color:var(--mute);font-size:15px;line-height:1.4}@media (width<=900px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}:root[data-theme=light] .card{border-top:2px solid color-mix(in srgb, var(--accent) 45%, var(--line))}:root[data-theme=light] a.card:hover{border-color:color-mix(in srgb, var(--accent) 55%, var(--line))}.theme:where(.astro-nen7h5rs){border-radius:var(--radius-s);border:1px solid var(--line);width:36px;height:36px;color:var(--mute);cursor:pointer;background:0 0;place-items:center;padding:0;display:grid}.theme:where(.astro-nen7h5rs):hover{color:var(--ink);background:var(--surface-2)}.theme:where(.astro-nen7h5rs) svg:where(.astro-nen7h5rs){fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px;display:none}.theme:where(.astro-nen7h5rs)[data-mode=light] .i-light:where(.astro-nen7h5rs),.theme:where(.astro-nen7h5rs)[data-mode=dark] .i-dark:where(.astro-nen7h5rs),.theme:where(.astro-nen7h5rs):not([data-mode=light]):not([data-mode=dark]) .i-auto:where(.astro-nen7h5rs){display:block}.site-header:where(.astro-nen7h5rs){z-index:50;background:color-mix(in srgb, var(--bg) 84%, transparent);backdrop-filter:saturate(140%)blur(10px);border-bottom:1px solid var(--line);position:sticky;top:0}.bar:where(.astro-nen7h5rs){align-items:center;gap:28px;height:64px;display:flex}.nav:where(.astro-nen7h5rs){gap:4px;margin-right:auto;font-size:16px;display:flex}.nav:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs){border-radius:var(--radius-s);color:var(--mute);padding:8px 12px;font-weight:500;transition:background-color .15s,color .15s;position:relative}.nav:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs):hover{color:var(--ink);background:color-mix(in srgb, var(--ink) 7%, transparent)}.nav:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs)[aria-current=page]{color:var(--ink);background:color-mix(in srgb, var(--accent) 12%, transparent);font-weight:600}.nav:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs)[aria-current=page]:after{content:"";background:var(--accent);border-radius:2px;height:2px;position:absolute;bottom:-13px;left:12px;right:12px}.actions:where(.astro-nen7h5rs){align-items:center;gap:14px;display:flex}.gh:where(.astro-nen7h5rs){color:var(--mute);align-items:center;gap:7px;font-size:15px;display:inline-flex}.gh:where(.astro-nen7h5rs):hover{color:var(--ink)}.gh:where(.astro-nen7h5rs) svg:where(.astro-nen7h5rs){fill:currentColor;width:17px;height:17px}.menu:where(.astro-nen7h5rs){display:none;position:relative}.menu:where(.astro-nen7h5rs) summary:where(.astro-nen7h5rs){cursor:pointer;border-radius:var(--radius-s);border:1px solid var(--line);place-content:center;gap:4px;width:40px;height:40px;list-style:none;display:grid}.menu:where(.astro-nen7h5rs) summary:where(.astro-nen7h5rs)::-webkit-details-marker{display:none}.menu:where(.astro-nen7h5rs) summary:where(.astro-nen7h5rs) span:where(.astro-nen7h5rs){background:var(--ink);width:16px;height:1.5px;display:block}.menu-panel:where(.astro-nen7h5rs){background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);min-width:210px;padding:8px;display:grid;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 20px 40px -20px #0009}.menu-panel:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs){border-radius:var(--radius-s);color:var(--ink);padding:9px 12px}.menu-panel:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs):hover{background:var(--surface-2)}.nav:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs),.actions:where(.astro-nen7h5rs) .btn:where(.astro-nen7h5rs){white-space:nowrap}@media (width<=1180px){.bar:where(.astro-nen7h5rs){gap:16px}.nav:where(.astro-nen7h5rs){gap:0;font-size:15px}.nav:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs){padding:8px 9px}.nav:where(.astro-nen7h5rs) a:where(.astro-nen7h5rs)[aria-current=page]:after{left:9px;right:9px}.gh:where(.astro-nen7h5rs) span:where(.astro-nen7h5rs){display:none}}@media (width<=900px){.nav:where(.astro-nen7h5rs),.gh:where(.astro-nen7h5rs){display:none}.bar:where(.astro-nen7h5rs){justify-content:space-between}.menu:where(.astro-nen7h5rs){display:block}}.site-footer:where(.astro-jo6i4kqk){border-top:1px solid var(--line);background:var(--bg);padding-block:56px 28px}.cols:where(.astro-jo6i4kqk){grid-template-columns:minmax(0,1.6fr) repeat(3,minmax(0,1fr));gap:32px;display:grid}.about:where(.astro-jo6i4kqk) p:where(.astro-jo6i4kqk){color:var(--mute);max-width:38ch;margin:14px 0 0;font-size:15.5px}h2:where(.astro-jo6i4kqk){color:var(--mute);letter-spacing:0;margin:6px 0 14px;font-size:14px;font-weight:600}ul:where(.astro-jo6i4kqk){gap:9px;margin:0;padding:0;font-size:15.5px;list-style:none;display:grid}ul:where(.astro-jo6i4kqk) a:where(.astro-jo6i4kqk):hover{color:var(--c2)}.legal:where(.astro-jo6i4kqk){border-top:1px solid var(--line);color:var(--faint);flex-wrap:wrap;justify-content:space-between;gap:8px 20px;margin-top:44px;padding-top:20px;font-size:14px;display:flex}.cookie-settings:where(.astro-jo6i4kqk){font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;margin-left:12px;padding:0;text-decoration:underline}@media (width<=900px){.cols:where(.astro-jo6i4kqk){grid-template-columns:repeat(2,minmax(0,1fr))}.about:where(.astro-jo6i4kqk){grid-column:1/-1}}
