html,body,#root{height:100%}body{margin:0}:root{--bg:#f6f7f9;--card:#fff;--ink:#1b2430;--head:var(--ink);--muted:#6b7684;--line:#e4e8ee;--brand:#2f6bff;--brand-dark:#2254d6;--accent:#e0a02a;--ok:#1a8f4c;--ok-bg:#e8f6ee;--warn:#9a6b00;--warn-bg:#fdf3dc;--err:#c23934;--err-bg:#fdeceb;--radius:12px;--font-body:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-head:var(--font-body)}[data-theme=rovia]{--bg:#fff;--card:#fff;--ink:#333;--head:#21578a;--muted:#6f7b7a;--line:#e2ebe9;--brand:#009691;--brand-dark:#00746f;--accent:#ff982e;--ok:#009691;--ok-bg:#e4f5f3;--warn:#9a5b00;--warn-bg:#fff2e2;--font-body:"Nunito Sans", -apple-system, BlinkMacSystemFont, sans-serif;--font-head:"Gantari", "Nunito Sans", sans-serif}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);border-top:6px solid #009691;margin:0;font-size:15px;line-height:1.5}.page{max-width:920px;margin:0 auto;padding:40px 24px 80px}.masthead h1{letter-spacing:-.02em;font-size:30px;font-family:var(--font-head);color:var(--head);margin:0 0 4px}[data-theme=rovia] .masthead h1{font-weight:900}.masthead p{color:var(--muted);margin:0 0 24px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:18px;padding:20px 22px;box-shadow:0 1px 2px #1018280a}.card h2{font-size:16px;font-family:var(--font-head);color:var(--head);align-items:center;gap:10px;margin:0 0 16px;display:flex}.step{background:var(--brand);color:#fff;border-radius:999px;place-items:center;width:24px;height:24px;font-size:13px;font-weight:700;display:inline-grid}.count{color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:999px;margin-left:auto;padding:2px 10px;font-size:13px;font-weight:600}.month{font:inherit;border:1px solid var(--line);background:#fff;border-radius:8px;padding:9px 12px}.hint{color:var(--muted);margin-left:12px;font-size:13px}.note{color:var(--muted);margin:14px 0 0;font-size:13px}.dropzone{border:2px dashed var(--line);text-align:center;cursor:pointer;background:#fcfcfd;border-radius:12px;padding:28px 20px;transition:border-color .15s,background .15s}.dropzone:hover{border-color:#c7d0dd}.dropzone.drag{border-color:var(--brand);background:#f0f5ff}.dz-icon{color:var(--brand);font-size:22px}.dz-main{margin-top:6px;font-weight:600}.dz-sub{color:var(--muted);margin-top:2px;font-size:13px}.dz-clear{font:inherit;border:1px solid var(--line);color:var(--muted);cursor:pointer;background:#fff;border-radius:7px;margin-top:12px;padding:5px 12px;font-size:13px}.dz-clear:hover{border-color:var(--err);color:var(--err)}.assign{flex-direction:column;gap:8px;margin-top:16px;display:flex}.assign-row{border:1px solid var(--line);background:#fff;border-radius:8px;align-items:center;gap:12px;padding:8px 12px;display:flex}.assign-row.filled{border-color:#cbe6d6}.assign-label{flex:0 0 290px;align-items:center;gap:8px;font-size:13.5px;font-weight:600;display:flex}.tick{color:var(--muted)}.assign-row.filled .tick{color:var(--ok)}.assign-select{font:inherit;border:1px solid var(--line);background:#fff;border-radius:7px;flex:1;min-width:0;padding:7px 10px;font-size:13px}@media (width<=620px){.assign-row{flex-direction:column;align-items:stretch;gap:6px}.assign-label{flex:none}}.size{color:var(--muted)}.actions{align-items:center;gap:12px;margin:4px 0 18px;display:flex}.btn{font:inherit;cursor:pointer;border:1px solid #0000;border-radius:9px;padding:11px 20px;font-weight:600;transition:background .15s,box-shadow .15s,opacity .15s}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--brand);color:#fff}.btn.primary:not(:disabled):hover{background:var(--brand-dark)}.btn.secondary{color:var(--ink);border-color:var(--line);background:#fff}.btn.secondary:not(:disabled):hover{border-color:#c7d0dd}.btn.download{margin-bottom:14px;text-decoration:none;display:inline-block}.banner{border-radius:9px;margin-bottom:16px;padding:12px 14px;font-size:14px}.banner a{color:inherit;font-weight:600}.banner.ok{background:var(--ok-bg);color:var(--ok)}.banner.warn{background:var(--warn-bg);color:var(--warn)}.banner.error{background:var(--err-bg);color:var(--err)}.job .status{text-transform:capitalize;border-radius:999px;align-items:center;gap:7px;margin-left:auto;padding:3px 11px;font-size:13px;font-weight:600;display:inline-flex}.status.running{color:var(--brand);background:#eef3ff}.status.done{background:var(--ok-bg);color:var(--ok)}.status.error{background:var(--err-bg);color:var(--err)}.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;width:12px;height:12px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.summary{margin-bottom:16px}.summary-head{align-items:baseline;gap:10px;margin:4px 0 14px;display:flex}.summary-head h3{letter-spacing:-.01em;font-size:16px;font-family:var(--font-head);color:var(--head);margin:0}.asof{color:var(--muted);font-size:13px}.kpis{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px;display:grid}.kpi{border:1px solid var(--line);background:#fff;border-radius:12px;padding:14px 16px;position:relative;overflow:hidden}.kpi:before{content:"";width:4px;position:absolute;top:0;bottom:0;left:0}.kpi.slate:before{background:#94a3b8}.kpi.amber:before{background:var(--accent)}.kpi.brand:before{background:var(--brand)}.kpi-label{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-size:12px;font-weight:600}.kpi-value{letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:26px;font-weight:750;font-family:var(--font-head);margin-top:6px}.kpi.primary{color:#fff;background:linear-gradient(135deg,#2f6bff,#2254d6);border-color:#0000;box-shadow:0 6px 18px #2f6bff47}.kpi.primary:before{display:none}.kpi.primary .kpi-label{color:#ffffffd1}.table-scroll{border:1px solid var(--line);border-radius:11px;overflow-x:auto}.sumtable{border-collapse:collapse;white-space:nowrap;width:100%;font-size:12.5px}.sumtable th,.sumtable td{text-align:right;border-bottom:1px solid #eef1f5;padding:8px 10px}.sumtable thead th{color:#465267;text-transform:uppercase;letter-spacing:.03em;z-index:2;background:#eef2f8;font-size:11.5px;font-weight:700;position:sticky;top:0}.sumtable .rowlabel{text-align:left;z-index:1;background:#fff;font-weight:600;line-height:1.25;position:sticky;left:0;box-shadow:1px 0 #eef1f5}.sumtable .rowlabel .rl{white-space:normal;width:440px;display:inline-block}.sumtable thead .rowlabel{z-index:3;background:#eef2f8}.sumtable .num{font-variant-numeric:tabular-nums;color:#2b3647}.sumtable .neg{color:var(--err)}.sumtable .gt{z-index:1;background:#eef3ff;font-weight:700;position:sticky;right:0;box-shadow:-6px 0 8px -6px #10182824,inset 1px 0 #d4e0ff}.sumtable thead .gt{color:var(--brand-dark);z-index:4;background:#e2ecff}.sumtable .r-hero td{border-top:2px solid var(--brand);border-bottom:2px solid var(--brand);background:#eaf1ff;font-size:13px;font-weight:750}.sumtable .r-hero .rowlabel{color:var(--brand-dark);background:#eaf1ff}.sumtable .r-hero .gt{background:#dbe8ff}.sumtable .r-total td{background:#f5f8fc;font-weight:700}.sumtable .r-total .rowlabel{background:#f5f8fc}.sumtable .r-sub td{font-weight:650}.sumtable .r-pct td{background:#fafbfd;font-weight:650}.sumtable .r-pct .num{color:#334}.sumtable .r-pct .rowlabel{color:var(--muted);background:#fafbfd;font-weight:600}.sumtable tbody tr:hover td,.sumtable tbody tr:hover .rowlabel{background:#f3f7ff}.sumtable tbody tr.r-hero:hover td,.sumtable tbody tr.r-hero:hover .rowlabel{background:#e1ebff}.admin .admin-head{cursor:pointer;-webkit-user-select:none;user-select:none;margin-bottom:0}.admin .chev{color:var(--muted);margin-left:auto;font-size:13px}.step.gear{background:#64748b}.maplist{flex-direction:column;gap:10px;margin-top:14px;display:flex}.maprow{border:1px solid var(--line);background:#fff;border-radius:9px;align-items:center;gap:14px;padding:12px 14px;display:flex}.map-info{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.map-label{flex-wrap:wrap;align-items:center;gap:8px;font-size:13.5px;font-weight:600;display:flex}.map-meta{color:var(--muted);font-size:12.5px}.map-msg{margin-top:2px;font-size:12.5px}.map-msg.ok{color:var(--ok)}.map-msg.err{color:var(--err)}.map-actions{flex:none;align-items:center;gap:8px;display:flex}.map-locked{color:var(--muted);font-size:12.5px}.pill{text-transform:uppercase;letter-spacing:.04em;color:var(--brand-dark);background:#eef3ff;border-radius:999px;padding:2px 8px;font-size:10.5px;font-weight:700}.pill.lock{color:var(--muted);background:#f1f3f6}.btn.tiny{border-radius:7px;padding:6px 13px;font-size:13px;text-decoration:none}.log{color:#d4dae6;white-space:pre-wrap;word-break:break-word;background:#0f1420;border-radius:9px;max-height:340px;margin:0;padding:14px 16px;font:12.5px/1.6 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}[data-theme=rovia] .btn{border-radius:999px}[data-theme=rovia] .btn.primary{background:var(--accent)}[data-theme=rovia] .btn.primary:not(:disabled):hover{background:#ef8a1c}[data-theme=rovia] .kpi-label{color:var(--brand)}[data-theme=rovia] .kpi-value{color:var(--accent)}[data-theme=rovia] .kpi.primary{background:linear-gradient(135deg,#009691,#00746f);box-shadow:0 6px 18px #0096914d}[data-theme=rovia] .kpi.primary .kpi-label,[data-theme=rovia] .kpi.primary .kpi-value{color:#fff}[data-theme=rovia] .card{border-color:#e7ece9;box-shadow:0 1px 3px #10182812}[data-theme=rovia] .status.running{color:var(--brand-dark);background:#eef1f4}[data-theme=rovia] .dropzone.drag,[data-theme=rovia] .filecard.drag{background:#eef6f4}[data-theme=rovia] .pill{color:var(--brand-dark);background:#eef1f4}[data-theme=rovia] .sumtable .gt{background:#f4f6f8;box-shadow:-6px 0 8px -6px #1018281a,inset 1px 0 #e3e8ee}[data-theme=rovia] .sumtable thead .gt{color:var(--head);background:#e9edf2}[data-theme=rovia] .sumtable .r-hero td{background:#eaf6f4}[data-theme=rovia] .sumtable .r-hero .rowlabel{color:var(--brand-dark);background:#eaf6f4}[data-theme=rovia] .sumtable .r-hero .gt{background:#ddeeeb}[data-theme=rovia] .sumtable tbody tr:hover td,[data-theme=rovia] .sumtable tbody tr:hover .rowlabel{background:#f5f7f8}[data-theme=rovia] .sumtable tbody tr.r-hero:hover td,[data-theme=rovia] .sumtable tbody tr.r-hero:hover .rowlabel{background:#e2f1ee}.masthead{position:relative}.themebar{border:1px solid var(--line);background:#fff;border-radius:999px;display:inline-flex;overflow:hidden}.themebar button{font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:none;padding:6px 15px;font-size:12.5px;font-weight:600}.themebar button.on{background:var(--brand);color:#fff}.topright{align-items:center;gap:10px;display:flex;position:absolute;top:0;right:0}.userchip{color:var(--ink);align-items:center;gap:6px;font-size:13px;font-weight:600;display:inline-flex}.rolebadge{text-transform:uppercase;letter-spacing:.04em;background:var(--brand);color:#fff;border-radius:999px;padding:2px 7px;font-size:10px;font-weight:700}.login-page{max-width:420px}.login-card{margin-top:60px}.login-card h1{font-size:26px;font-family:var(--font-head);color:var(--head);margin:0 0 2px}.field{flex-direction:column;gap:5px;margin:14px 0;display:flex}.field span{color:var(--muted);font-size:13px;font-weight:600}.field input{font:inherit;border:1px solid var(--line);background:#fff;border-radius:8px;padding:10px 12px}.field input:focus{outline:2px solid var(--brand);outline-offset:-1px}.login-card .btn{width:100%;margin-top:4px}.job{width:min(1440px,100vw - 32px);max-width:none;margin-left:50%;transform:translate(-50%)}@media (width<=960px){.job{width:auto;margin-left:0;transform:none}}
