:root{--bg:#0a0c0f;--surface:#12151a;--surface-2:#171b21;--surface-3:#1d222a;--line:#262c35;--line-soft:#1e232b;--line-strong:#333b47;--text:#dde3ec;--muted:#8e9aab;--faint:#5f6b7a;--accent:#ffa62b;--accent-dim:#4a3310;--cyan:#4bc4e6;--good:#26d07c;--warn:#ffc14d;--bad:#ff4d55;--good-soft:#26d07c1a;--warn-soft:#ffc14d1a;--bad-soft:#ff4d551a;--shadow:0 10px 26px #0000005c;--radius:8px;--sans:Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:14px;line-height:1.45}button,input,textarea,select{font:inherit;color:inherit}h1,h2,h3,p{margin:0}h1{letter-spacing:.02em;font-size:16px;font-weight:650}h2{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:13px;font-weight:650}.num,td,.stat__value{font-variant-numeric:tabular-nums}.tkr{font-family:var(--mono);letter-spacing:.02em;color:var(--cyan);font-weight:700}.app{flex-direction:column;gap:18px;max-width:1280px;margin:0 auto;padding:20px 20px 64px;display:flex}.masthead{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;padding-bottom:14px;display:flex}.masthead__title{font-family:var(--mono);letter-spacing:.09em;text-transform:uppercase;font-size:15px;font-weight:700}.masthead__meta{color:var(--faint);font-size:12px;font-family:var(--mono)}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.card__head{border-bottom:1px solid var(--line-soft);background:var(--surface-2);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.card__body{flex-direction:column;gap:14px;padding:16px;display:flex}.split{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:18px;display:grid}@media (width<=900px){.split{grid-template-columns:minmax(0,1fr)}}.controls{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.field{flex-direction:column;gap:5px;min-width:0;display:flex}.field__label{letter-spacing:.07em;text-transform:uppercase;color:var(--faint);font-size:11px;font-weight:600}.input,.textarea{border:1px solid var(--line);background:var(--surface-3);width:100%;min-width:0;color:var(--text);border-radius:6px;outline:none;min-height:34px;padding:7px 10px}.input:focus,.textarea:focus{border-color:var(--line-strong)}.input--date{font-family:var(--mono);font-size:13px}.input--ticker{font-family:var(--mono);text-transform:uppercase;width:130px}.textarea{font-family:var(--mono);resize:vertical;white-space:pre;overflow-wrap:normal;min-height:190px;font-size:12.5px;line-height:1.6;overflow-x:auto}.btn{border:1px solid var(--line-strong);background:var(--surface-3);color:var(--text);cursor:pointer;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;border-radius:6px;min-height:34px;padding:0 16px;font-size:12px;font-weight:650}.btn:hover:not(:disabled){background:var(--line)}.btn:disabled{opacity:.42;cursor:not-allowed}.btn--primary{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.btn--primary:hover:not(:disabled){background:#5c3f14}.btn--quiet{border-color:var(--line);color:var(--muted);background:0 0}.btn--danger{color:var(--faint);background:0 0;border:none;min-height:0;padding:2px 6px;font-size:14px;line-height:1}.btn--danger:hover:not(:disabled){color:var(--bad);background:var(--bad-soft)}.table-wrap{max-height:560px;overflow:auto}table{border-collapse:collapse;width:100%;font-size:13px}th{border-bottom:1px solid var(--line-soft);text-align:right;white-space:nowrap;color:var(--muted);background:var(--surface-2);letter-spacing:.06em;text-transform:uppercase;z-index:2;padding:9px 12px;font-size:11px;font-weight:650;position:sticky;top:0}td{border-bottom:1px solid var(--line-soft);text-align:right;white-space:nowrap;padding:8px 12px}th:first-child,td:first-child{text-align:left}tbody tr:hover>td{background:var(--surface-2)}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:hover{color:var(--text)}th.sorted{color:var(--accent)}.sort-caret{opacity:.85;margin-left:5px;font-size:9px}tfoot td{background:var(--surface-2);border-top:1px solid var(--line);color:var(--text);border-bottom:none;font-weight:650;position:sticky;bottom:0}.tfoot-label{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:11px}.stat-row{flex-wrap:wrap;gap:22px;display:flex}.stat__label{letter-spacing:.07em;text-transform:uppercase;color:var(--faint);font-size:10px;font-weight:600}.stat__value{font-family:var(--mono);font-size:17px;font-weight:700}.banner{border:1px solid var(--line);border-radius:6px;flex-wrap:wrap;align-items:baseline;gap:8px;padding:9px 12px;font-size:12.5px;display:flex}.banner--good{background:var(--good-soft);border-color:#26d07c66}.banner--warn{background:var(--warn-soft);border-color:#ffc14d66}.banner--bad{background:var(--bad-soft);border-color:#ff4d5566}.tag{font-family:var(--mono);letter-spacing:.05em;text-transform:uppercase;border:1px solid var(--line);color:var(--faint);border-radius:4px;padding:2px 6px;font-size:10px;font-weight:700}.tag--print{color:var(--cyan);border-color:#4bc4e659}.tag--batch{color:var(--muted)}.skipped{max-height:190px;font-family:var(--mono);flex-direction:column;gap:4px;font-size:12px;display:flex;overflow-y:auto}.skipped__row{background:var(--surface-2);border-radius:4px;grid-template-columns:44px minmax(0,1fr) auto;align-items:baseline;gap:10px;padding:4px 8px;display:grid}.skipped__line{color:var(--faint);text-align:right}.skipped__text{text-overflow:ellipsis;white-space:nowrap;color:var(--muted);overflow:hidden}.skipped__reason{letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;font-size:10px}.reason--duplicate{color:var(--warn)}.reason--unreadable{color:var(--bad)}.rollup{max-height:560px;overflow-y:auto}.empty{text-align:center;color:var(--faint);padding:34px 16px;font-size:13px}.muted{color:var(--muted)}.faint{color:var(--faint)}.mono{font-family:var(--mono)}.good{color:var(--good)}.warn{color:var(--warn)}.bad{color:var(--bad)}
