/* IP-Check additions on top of shell.css; existing tokens only, so the tested contrast pairs still hold. */
.status.unk{background:var(--ast-bg-3);color:var(--ast-text)}
.field .btn-g{margin-left:auto}
.field .val{flex:1 1 13ch}
.kv+.hint{margin-top:16px}
.api pre.code{white-space:pre-wrap;word-break:break-all}
.stack{display:grid;gap:24px}
.stack>*{min-width:0}
.updated{display:flex;align-items:center;gap:6px}
.updated svg{width:15px;height:15px;flex:none}
.stats+.updated{margin-top:16px}
.wait{max-width:560px;margin:0 auto;text-align:center}
.wait>svg{width:48px;height:48px;color:var(--ast-link)}
.wait h1{font-size:24px;margin:12px 0}
.panel .countdown{font-size:48px;font-weight:700;line-height:1.2;color:var(--ast-link);margin:8px 0 14px}
@media (max-width:760px){.kv{grid-template-columns:1fr}.kv dd{margin:0 0 6px}}
.api .btn-g{margin-top:16px}
/* Static error pages (errors/): hero, next-step cards. Hero is always dark, so its text stays white in both themes. */
.err-hero .wrap{display:flex;flex-direction:column;align-items:flex-start}
.err-icon{width:44px;height:44px;color:#fff;margin-bottom:8px}
.err-code{font-size:clamp(56px,12vw,88px);font-weight:700;line-height:1;margin:0 0 8px;color:#fff}
.err-hero .claim{margin-bottom:24px}
.err-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin:24px 0 0;padding:0;list-style:none}
.err-cards>li{min-width:0}
.err-card{display:flex;flex-direction:column;gap:10px;height:100%;padding:20px;border:1px solid var(--ast-line);border-radius:var(--r);background:var(--ast-surface);box-shadow:var(--ast-shadow);color:var(--ast-text);text-decoration:none}
.err-card:hover{border-color:var(--ast-link);box-shadow:var(--ast-shadow-hi)}
.err-card svg{width:24px;height:24px;color:var(--ast-link)}
.err-card strong{font-size:16px;line-height:24px}
.err-card span{font-size:14px;line-height:22px;color:var(--ast-text-2)}
.err-card:focus-visible{outline:3px solid var(--ast-link);outline-offset:2px}
.err-tool h2{font-size:20px;line-height:28px;margin:0}
/* Disabled buttons: muted fill and label, no opacity fade, same rules as the cve design. */
.btn:disabled,.btn-g:disabled{cursor:not-allowed;transform:none;box-shadow:none;background:var(--ast-bg-3);border-color:var(--ast-line);color:var(--ast-text-2)}
@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--ast-link:#ff5a6e;--ast-text:#e7e8ec;--ast-text-2:#b4b7bf;--ast-muted:#8d95a2;--ast-bg:#141317;--ast-bg-alt:#1c1b21;--ast-bg-3:#24232a;--ast-surface:#1c1b21;--ast-line:#34323b;--ast-shadow:0 6px 18px rgba(0,0,0,.35);--ast-shadow-hi:0 14px 32px rgba(0,0,0,.5);--ok-bg:#12301f;--ok-fg:#86e0aa;--bad-bg:#3a1219;--bad-fg:#ff9aa8;--code-bg:#0e0d11;color-scheme:dark}}
/* No stored choice: the OS scheme decides, and the toggle icon follows it. */
@media (prefers-color-scheme:dark){:root:not([data-theme=light]) #tt .lucide-moon{display:none}:root:not([data-theme=light]) #tt .lucide-sun{display:inline}}
/* API docs: the table scrolls on narrow screens instead of widening the page */
.api-docs h1{display:flex;align-items:center;gap:10px;font-size:24px;line-height:1.25;margin:0 0 12px}
.api-docs h2{font-size:16px;margin:24px 0 8px}
.api-table{overflow-x:auto;margin:8px 0 16px}
.api-table table{width:100%;border-collapse:collapse;font-size:14px}
.api-table th,.api-table td{text-align:left;vertical-align:top;padding:8px 10px;border-bottom:1px solid var(--ast-line)}
