:root{--blue:#2563eb;--bg:#f4f6fb;--line:#e5e7eb;--txt:#1f2937;--muted:#6b7280}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,-apple-system,"Hiragino Kaku Gothic ProN",Meiryo,sans-serif;color:var(--txt);background:var(--bg);font-size:15px}
a{color:var(--blue);text-decoration:none}
.topbar{display:flex;align-items:center;gap:16px;background:#111827;color:#fff;padding:10px 16px;flex-wrap:wrap;position:sticky;top:0;z-index:10}
.topbar .brand{color:#fff;font-weight:700}
.topbar nav{display:flex;gap:14px;flex-wrap:wrap}
.topbar nav a{color:#d1d5db;font-size:14px}
.topbar nav a:hover{color:#fff}
.wrap{max-width:1200px;margin:0 auto;padding:18px 16px}
h1{font-size:20px;margin:6px 0 16px}
h2{font-size:16px;margin:20px 0 10px}
.card{background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px;margin-bottom:16px}
.grid{display:grid;gap:12px}
.grid.cols{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.stat{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px;text-align:center;cursor:pointer;display:block}
.stat .n{font-size:26px;font-weight:700}
.stat .l{font-size:12px;color:var(--muted)}
.badge{display:inline-block;padding:3px 10px;border-radius:999px;color:#fff;font-size:12px;font-weight:700}
table{width:100%;border-collapse:collapse;background:#fff}
th,td{border-bottom:1px solid var(--line);padding:9px 10px;text-align:left;font-size:14px;vertical-align:middle}
th{background:#f9fafb;position:sticky;top:44px}
tr:hover td{background:#fafbff}
.table-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
input,select,textarea,button{font-size:15px;font-family:inherit}
input[type=text],input[type=search],input[type=date],input[type=password],input[type=email],select,textarea{
  padding:9px 10px;border:1px solid #cbd5e1;border-radius:7px;width:100%}
.btn{display:inline-block;padding:9px 16px;background:var(--blue);color:#fff;border:0;border-radius:7px;cursor:pointer}
.btn.sec{background:#e5e7eb;color:#111}
.btn.danger{background:#dc2626}.btn.ok{background:#16a34a}
.btn.sm{padding:6px 10px;font-size:13px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:end;margin-bottom:12px}
.filters .f{display:flex;flex-direction:column;gap:3px}.filters label{font-size:12px;color:var(--muted)}
.err{color:#dc2626}.ok{color:#16a34a}.muted{color:var(--muted)}.warn-row td{background:#fff7ed!important}
.timeline{list-style:none;padding:0;margin:0}
.timeline li{border-left:3px solid var(--line);padding:8px 0 8px 14px;margin-left:6px}
.timeline .meta{font-size:13px;color:var(--muted)}
.pill{display:inline-block;padding:2px 8px;background:#eef2ff;border-radius:6px;font-size:12px;margin:2px}
.login-body{display:flex;min-height:100vh;align-items:center;justify-content:center;background:#111827}
.login-card{background:#fff;padding:28px;border-radius:12px;width:320px}
.login-card h1{text-align:center}
.login-card input{margin:4px 0 12px}
.pager a{display:inline-block;padding:6px 10px;border:1px solid var(--line);border-radius:6px;margin:2px}
.pager .cur{background:var(--blue);color:#fff}
.heatmap td{text-align:center;font-size:12px}
@media(max-width:640px){.topbar nav{font-size:13px;gap:10px}th{position:static}}
