:root{--bg: #f7f8fa;--surface: #ffffff;--border: #e4e6ea;--border-strong: #cfd3d9;--ink: #0f172a;--ink-soft: #475569;--ink-mute: #94a3b8;--accent: #2563eb;--accent-soft: #eff6ff;--accent-dark: #1d4ed8;--good: #059669;--good-soft: #ecfdf5;--bad: #dc2626;--bad-soft: #fef2f2;--warn: #d97706;--warn-soft: #fffbeb;--yellow-edit: #FFF7CC;--yellow-edit-border: #eab308;--row-alt: #fafbfc;--shadow-sm: 0 1px 2px rgba(15,23,42,.04);--shadow: 0 2px 8px rgba(15,23,42,.06);--shadow-lg: 0 10px 30px rgba(15,23,42,.12)}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Inter,system-ui,sans-serif;font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:inherit}table{border-collapse:collapse;width:100%}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.app-shell{display:flex;min-height:100vh}.main{flex:1;min-width:0;display:flex;flex-direction:column}.content{padding:20px 24px 60px;flex:1}.btn{display:inline-flex;align-items:center;gap:6px;background:var(--surface);border:1px solid var(--border-strong);color:var(--ink);padding:6px 12px;border-radius:5px;font-size:12px;font-weight:500;transition:all .15s}.btn:hover:not(:disabled){background:#f8fafc;border-color:#94a3b8}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn.primary:hover:not(:disabled){background:var(--accent-dark);border-color:var(--accent-dark)}.btn.danger{background:#fff;color:var(--bad);border-color:#fca5a5}.btn.danger:hover:not(:disabled){background:var(--bad-soft)}.btn.success{background:var(--good);color:#fff;border-color:var(--good)}.btn.sm{padding:4px 8px;font-size:11px}.btn.ghost{background:transparent;border-color:transparent}.btn.ghost:hover:not(:disabled){background:#f1f5f9;border-color:var(--border)}.btn svg{width:12px;height:12px}.card{background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-sm);margin-bottom:12px}.card .header{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:12px}.card .header h3{margin:0;font-size:13px;font-weight:600}.card .header .sub{color:var(--ink-soft);font-size:11px;margin-top:2px}.card .body{padding:16px 18px}.card .body.p0{padding:0}.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px 16px;box-shadow:var(--shadow-sm)}.kpi .label{font-size:11px;color:var(--ink-soft);text-transform:uppercase;letter-spacing:.04em;font-weight:600}.kpi .value{font-size:22px;font-weight:600;margin-top:6px}.kpi .delta{font-size:11px;margin-top:4px;color:var(--ink-soft)}.kpi .delta.pos{color:var(--good)}.kpi .delta.neg{color:var(--bad)}.tbl{font-size:12px}.tbl th{background:#f8fafc;font-weight:600;text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);color:var(--ink-soft);font-size:11px;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.tbl td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:middle}.tbl tbody tr:hover{background:#fafbfc}.tbl tbody tr.highlight{background:var(--warn-soft)}.tbl tbody tr.selected{background:var(--accent-soft)}.tbl .num{text-align:right;font-variant-numeric:tabular-nums}.scroll-x{overflow-x:auto}.chip{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.chip.neutral{background:#f1f5f9;color:var(--ink-soft)}.chip.good{background:var(--good-soft);color:var(--good)}.chip.bad{background:var(--bad-soft);color:var(--bad)}.chip.warn{background:var(--warn-soft);color:var(--warn)}.chip.info{background:var(--accent-soft);color:var(--accent)}.delta-pos{color:var(--good);font-weight:600}.delta-neg{color:var(--bad);font-weight:600}.delta-zero{color:var(--ink-mute)}.form-row{display:flex;gap:12px;margin-bottom:10px;align-items:center}.form-row label{font-size:11px;color:var(--ink-soft);font-weight:600;text-transform:uppercase;letter-spacing:.03em;min-width:140px}.form-row input[type=text],.form-row input[type=number],.form-row input[type=date],.form-row select,.form-row textarea{flex:1;padding:6px 10px;border:1px solid var(--border-strong);border-radius:5px;font-size:12px}.form-row input:focus,.form-row select:focus,.form-row textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #2563eb1a}textarea{resize:vertical;font-family:inherit}.edit-cell{background:var(--yellow-edit);border:1px solid var(--yellow-edit-border);border-radius:3px;padding:3px 6px;font-size:12px;width:80px;text-align:right;font-variant-numeric:tabular-nums}.edit-cell:focus{outline:2px solid var(--accent);outline-offset:-1px}.edit-cell.wide{width:auto;text-align:left}.modal-back{position:fixed;inset:0;background:#0f172a80;display:flex;align-items:center;justify-content:center;z-index:50}.modal{background:var(--surface);border-radius:8px;max-width:720px;width:90%;max-height:90vh;overflow:auto;box-shadow:var(--shadow-lg);display:flex;flex-direction:column}.modal .hd{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.modal .hd h3{margin:0;font-size:16px;font-weight:600}.modal .bd{padding:20px;flex:1;overflow-y:auto}.modal .ft{padding:14px 20px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}.filter-bar{display:flex;gap:8px;align-items:center;padding:10px 14px;background:#f8fafc;border-bottom:1px solid var(--border);flex-wrap:wrap}.filter-bar input,.filter-bar select{padding:5px 10px;border:1px solid var(--border-strong);border-radius:5px;font-size:12px;background:#fff}.tabs{display:flex;border-bottom:1px solid var(--border);margin-bottom:16px;gap:2px}.tab{padding:8px 14px;font-size:12px;font-weight:500;color:var(--ink-soft);cursor:pointer;border-bottom:2px solid transparent}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tab:hover:not(.active){color:var(--ink)}.toasts{position:fixed;top:20px;right:20px;z-index:100;display:flex;flex-direction:column;gap:8px}.toast{background:var(--ink);color:#fff;padding:10px 16px;border-radius:6px;font-size:12px;box-shadow:var(--shadow-lg);animation:slideIn .2s;max-width:360px}.toast.success{background:var(--good)}.toast.error{background:var(--bad)}@keyframes slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.muted{color:var(--ink-soft)}.tiny{font-size:11px}.bold{font-weight:600}.mono{font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Consolas,monospace}.flex{display:flex}.grow{flex:1}.gap-2{gap:8px}.gap-3{gap:12px}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.center{text-align:center}.hidden{display:none}hr{border:none;border-top:1px solid var(--border);margin:12px 0}.week-grid{overflow-x:auto;border:1px solid var(--border);border-radius:6px;background:#fff}.week-grid table{font-size:11px}.week-grid th{padding:6px 8px;white-space:nowrap;text-align:right;background:#f8fafc;border-bottom:1px solid var(--border)}.week-grid th.left{text-align:left;background:#f1f5f9;position:sticky;left:0;z-index:2}.week-grid td{padding:5px 8px;text-align:right;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums;white-space:nowrap}.week-grid td.left{text-align:left;background:#fafbfc;position:sticky;left:0;border-right:1px solid var(--border);font-weight:500;z-index:1;min-width:220px}.week-grid tr.input-row td{background:#fffdf0}.week-grid tr.input-row td.left{background:#fff9db}.week-grid tr.effective-row td{background:#f0f9ff;font-weight:600}.week-grid tr.effective-row td.left{background:#dbeafe}.week-grid .invoice-factor{color:var(--warn);font-weight:600;font-size:9px}.week-grid .overridden{color:var(--accent)}.confirm-box{background:#fff;padding:20px 24px;border-radius:8px;max-width:420px}.confirm-box h4{margin:0 0 8px;font-size:14px}.confirm-box p{margin:0 0 16px;color:var(--ink-soft);font-size:13px}.empty{padding:40px;text-align:center;color:var(--ink-mute)}.info-tip{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:#dbeafe;color:var(--accent);font-size:9px;font-weight:700;cursor:help;-webkit-user-select:none;user-select:none}.info-tip:hover{background:var(--accent);color:#fff}.contract-tabs{display:flex;gap:4px;padding:4px 6px;background:#fff;border:1px solid var(--border);border-radius:8px;overflow-x:auto;margin-bottom:14px;position:sticky;top:0;z-index:10}.contract-tabs .ctab{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border:none;background:transparent;cursor:pointer;border-radius:6px;font-size:12px;color:var(--ink-soft);white-space:nowrap;transition:all .12s}.contract-tabs .ctab:hover{background:#f1f5f9;color:var(--ink)}.contract-tabs .ctab.active{background:var(--accent);color:#fff;font-weight:600}.contract-tabs .ctab.active .ctab-count,.contract-tabs .ctab.active .ctab-model{background:#ffffff40;color:#fff}.contract-tabs .ctab-label{font-weight:500}.contract-tabs .ctab-count{background:#e4e6ea;color:var(--ink-soft);padding:1px 7px;border-radius:10px;font-size:10px;font-weight:600}.contract-tabs .ctab-model{padding:1px 6px;border-radius:3px;font-size:9px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.contract-tabs .ctab-model.driver{background:#dbeafe;color:#1e40af}.contract-tabs .ctab-model.direct{background:#fef3c7;color:#854d0e}.contract-tabs .ctab-model.job{background:#dcfce7;color:#14532d}.export-group{display:inline-flex;gap:0;border:1px solid var(--border-strong);border-radius:5px;overflow:hidden}.export-group .btn{border:none;border-radius:0;padding:5px 10px;font-size:12px}.export-group .btn:first-child{border-right:1px solid var(--border)}.pagination-bar{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;border-top:1px solid var(--border);background:#fafbfc;flex-wrap:wrap;gap:10px}.pagination-bar .btn.sm{min-width:28px;padding:3px 8px;font-size:11px}.tbl.sortable th.sort-th{cursor:pointer;-webkit-user-select:none;user-select:none;position:relative}.tbl.sortable th.sort-th:hover{background:#f1f5f9;color:var(--accent)}.tbl.sortable th.sort-th .sort-ind{display:inline-block;margin-left:4px;font-size:9px;color:var(--accent);min-width:8px}
