:root {
    --bg: #0e1116;
    --surface: #151a21;
    --surface-2: #1c232c;
    --border: #2a333f;
    --text: #e6edf3;
    --muted: #8b98a5;
    --primary: #2f81f7;
    --primary-h: #4596ff;
    --good: #3fb950;
    --bad: #f85149;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; background: var(--bg); color: var(--text); font: 14px/1.5 -apple-system, Segoe UI, Roboto, sans-serif; }
a { color: var(--primary); text-decoration: none; }
a:hover { color: var(--primary-h); text-decoration: underline; }

header { background: var(--surface); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 10; }
.nav { max-width: 1400px; margin: 0 auto; padding: 12px 24px; display: flex; align-items: center; gap: 12px; }
.brand { font-weight: 700; color: var(--text); font-size: 16px; }
.spacer { flex: 1; }
.user { color: var(--muted); }

main { max-width: 1400px; margin: 0 auto; padding: 24px; }
h1 { margin: 0 0 16px; font-size: 24px; }
h2 { margin: 32px 0 12px; font-size: 18px; border-bottom: 1px solid var(--border); padding-bottom: 6px; }
h3 { margin: 20px 0 10px; font-size: 14px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.5px; }

.muted { color: var(--muted); }
.small { font-size: 12px; }
.good { color: var(--good); }
.bad { color: var(--bad); }
.back { color: var(--muted); font-size: 13px; }
.big { font-size: 26px; font-weight: 700; }
.n { text-align: right; font-variant-numeric: tabular-nums; }

button, .button {
    background: var(--surface-2); color: var(--text); border: 1px solid var(--border);
    padding: 7px 14px; border-radius: 6px; cursor: pointer; font: inherit;
    display: inline-block;
}
button:hover, .button:hover { background: #262f3a; text-decoration: none; }
button.primary, .button.primary { background: var(--primary); border-color: var(--primary); color: #fff; }
button.primary:hover { background: var(--primary-h); border-color: var(--primary-h); }
button.ghost { background: transparent; }

.flash {
    max-width: 1400px; margin: 12px auto 0; padding: 10px 16px;
    background: #193456; border: 1px solid #2f6db5; border-radius: 6px; color: #cfe4ff;
}

.error { color: var(--bad); margin: 6px 0; }

.login { max-width: 360px; margin: 80px auto; background: var(--surface); padding: 32px; border-radius: 10px; border: 1px solid var(--border); }
.login h1 { text-align: center; margin-bottom: 24px; }
.login form { display: flex; flex-direction: column; gap: 12px; }
.login label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--muted); }
.login input {
    background: var(--bg); border: 1px solid var(--border); color: var(--text);
    padding: 8px 10px; border-radius: 6px; font: inherit;
}
.login input:focus { outline: none; border-color: var(--primary); }
.login button { margin-top: 8px; }

table.grid { width: 100%; border-collapse: collapse; margin-top: 8px; }
table.grid th, table.grid td { padding: 8px 12px; border-bottom: 1px solid var(--border); text-align: left; vertical-align: top; }
table.grid th { font-weight: 600; color: var(--muted); background: var(--surface); font-size: 12px; text-transform: uppercase; letter-spacing: 0.4px; }
table.grid tr:hover td { background: var(--surface); }
table.compact th, table.compact td { padding: 6px 10px; font-size: 13px; }
.url-table td:first-child { max-width: 600px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin: 16px 0 24px; }
.card { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
.card.good { border-color: #1f6028; }
.card.bad { border-color: #6b2a2a; }
.lbl { color: var(--muted); font-size: 12px; margin-top: 4px; }

.actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0 16px; }
.actions form { margin: 0; }

.badge { padding: 2px 8px; border-radius: 10px; font-size: 11px; text-transform: uppercase; letter-spacing: 0.4px; background: var(--surface-2); border: 1px solid var(--border); }
.badge.good { background: #0f3d1a; border-color: #1f6028; color: #7de895; }
.badge.bad { background: #3d0f0f; border-color: #6b2a2a; color: #ff9d9d; }
.badge-pending { background: #3d2f0f; border-color: #6b5a2a; color: #ffd27a; }
.badge-processing { background: #0f2a3d; border-color: #2a5a6b; color: #7ad1ff; }
.badge-done { background: #0f3d1a; border-color: #1f6028; color: #7de895; }
.badge-error { background: #3d0f0f; border-color: #6b2a2a; color: #ff9d9d; }

.batch-bar {
    display: flex; align-items: center; gap: 8px;
    background: var(--surface); border: 1px solid var(--border);
    padding: 10px 14px; border-radius: 8px; margin: 16px 0;
    position: sticky; top: 56px; z-index: 5;
}
.batch-count { color: var(--muted); font-size: 13px; }
.batch-count #count { color: var(--text); font-weight: 600; }

#filter {
    background: var(--bg); border: 1px solid var(--border); color: var(--text);
    padding: 6px 10px; border-radius: 6px; width: 280px; font: inherit; margin-bottom: 8px;
}
