:root{
  --bg:#f6f8fc;
  --card:#ffffff;
  --text:#0f172a;
  --muted:#64748b;
  --border:#e2e8f0;
  --primary:#2870ed;
  --primary-hover:#1f5ed0;
  --shadow:0 10px 30px rgba(15,23,42,.08);
  --radius:16px;
  --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

*{box-sizing:border-box}
body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial;background:var(--bg);color:var(--text)}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:1100px;margin:0 auto;padding:18px}
.header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px}
.logo{width:36px;height:36px;border-radius:12px;background:linear-gradient(135deg,var(--primary),#64a3ff)}
h1{font-size:18px;margin:0}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width: 980px){.grid{grid-template-columns:1fr}}
.muted{color:var(--muted);font-size:12px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
input,select{background:#fff;border:1px solid var(--border);color:var(--text);border-radius:12px;padding:10px 12px}
input{min-width:260px}
button{background:var(--primary);color:#fff;border:0;border-radius:12px;padding:10px 14px;cursor:pointer}
button:hover{background:var(--primary-hover)}
button.secondary{background:#fff;color:var(--text);border:1px solid var(--border)}
button.secondary:hover{background:#f1f5f9}
pre,code{font-family:var(--mono)}
.pre{background:#f8fafc;border:1px solid var(--border);border-radius:12px;padding:10px;overflow:auto}
.bad{color:#b91c1c}
.ok{color:#15803d}
.hr{height:1px;background:var(--border);margin:12px 0}
.tag{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:999px;padding:6px 10px;font-size:12px;background:#fff}
.kbd{font-family:var(--mono);font-size:12px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:3px 6px;color:var(--muted)}
.table{width:100%;border-collapse:collapse}
.table th,.table td{padding:8px;border-bottom:1px solid var(--border);text-align:left;font-size:13px}
.table th{color:var(--muted);font-weight:600;background:#fbfdff}
.chartgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:10px}
@media (max-width: 980px){.chartgrid{grid-template-columns:1fr}}
.subcard{background:#fff;border:1px solid var(--border);border-radius:16px;padding:12px}
.subcard h3{margin:0 0 8px 0;font-size:13px;color:var(--text)}
canvas{max-width:100%}

.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
@media(max-width:900px){.grid2{grid-template-columns:1fr}}
.kv{display:grid;gap:10px;margin-top:8px}
.kv > div{padding:8px 10px;border:1px solid var(--border);border-radius:12px;background:#fff}
.kv .muted{display:block;font-size:12px;margin-bottom:4px}
