:root{--surface-1:#fcfcfb;--surface:#f4f4f1;--page:#f9f9f7;--text-primary:#0b0b0b;--text-secondary:#52514e;--text-muted:#898781;--gridline:#e1e0d9;--baseline:#c3c2b7;--border:#0b0b0b1a;--series-income:#16a34a;--series-income-wash:#16a34a1f;--series-expense:#dc2626;--series-expense-wash:#dc26261f;--series-scenario:#b45309;--status-good:#16a34a;--status-warning:#f59e0b;--status-critical:#dc2626;--kpi-neutral-bg:#8987811f;--kpi-income-bg:#16a34a1a;--kpi-expense-bg:#dc26261a;--kpi-critical-bg:#dc26261a;--alert-critical-bg:#dc26260f;--alert-warning-bg:#f59e0b14;--alert-info-bg:#16a34a0f;--alert-ok-bg:#16a34a14}@media (prefers-color-scheme:dark){:root{--surface-1:#1a1a19;--surface:#222220;--page:#0d0d0d;--text-primary:#fff;--text-secondary:#c3c2b7;--text-muted:#898781;--gridline:#2c2c2a;--baseline:#383835;--border:#ffffff1a;--series-income:#22c55e;--series-income-wash:#22c55e24;--series-expense:#ef4444;--series-expense-wash:#ef444424;--series-scenario:#e8a33d;--status-good:#22c55e;--status-warning:#fbbf24;--status-critical:#ef4444;--kpi-neutral-bg:#c3c2b71f;--kpi-income-bg:#22c55e1f;--kpi-expense-bg:#ef44441f;--kpi-critical-bg:#ef44441f;--alert-critical-bg:#ef444414;--alert-warning-bg:#fbbf2414;--alert-info-bg:#22c55e14;--alert-ok-bg:#22c55e1a}}*{box-sizing:border-box}body{background:var(--page);color:var(--text-primary);margin:0;font-family:system-ui,-apple-system,Segoe UI,sans-serif}#root{min-height:100vh}a{color:inherit}.app-shell{min-height:100vh;display:flex}.sidebar{background:var(--surface-1);border-right:1px solid var(--border);flex-shrink:0;width:220px;padding:24px 16px}.sidebar h1{color:var(--text-primary);margin:0 0 24px 4px;font-size:15px;font-weight:700}.sync-status{border:1px solid var(--border);background:var(--surface);border-radius:8px;margin:-12px 4px 20px;padding:8px 10px}.sync-status-row{align-items:center;gap:6px;display:flex}.sync-status-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px}.sync-status-dot.live{background:var(--status-good);box-shadow:0 0 0 2px color-mix(in srgb, var(--status-good) 25%, transparent)}.sync-status-dot.sample{background:var(--status-warning);box-shadow:0 0 0 2px color-mix(in srgb, var(--status-warning) 25%, transparent)}.sync-status-label{color:var(--text-secondary);flex:1;font-size:11.5px;font-weight:600}.sync-status-refresh{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:2px;display:flex}.sync-status-refresh:hover:not(:disabled){color:var(--text-primary);background:var(--surface-1)}.sync-status-refresh:disabled{cursor:default;opacity:.6}.sync-status-refresh .spinning{animation:.9s linear infinite sync-spin}@keyframes sync-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sync-status-time{color:var(--text-muted);margin-top:3px;font-size:11px}.sync-status-time.stale{color:var(--status-critical);font-weight:600}.sync-status-auto{color:var(--text-muted);margin-top:2px;font-size:10.5px}.sync-status-auto-error{color:var(--status-warning)}.sidebar nav{flex-direction:column;gap:18px;display:flex;overflow-y:auto}.nav-group-title{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);padding:0 12px 4px;font-size:10.5px;font-weight:700}.sidebar nav a{color:var(--text-secondary);border-radius:8px;align-items:center;gap:10px;padding:8px 12px;font-size:13.5px;font-weight:500;text-decoration:none;transition:background .12s,color .12s;display:flex}.sidebar nav a svg{opacity:.85;flex-shrink:0}.sidebar nav a:hover{background:var(--page);color:var(--text-primary)}.sidebar nav a.active{background:var(--series-income-wash);color:var(--series-income);font-weight:600}.sidebar nav a.active svg{opacity:1}.sidebar-footer{border-top:1px solid var(--border);padding-top:12px;font-size:12.5px}.sidebar-user{color:var(--text-secondary);margin-bottom:8px;padding:0 12px;font-weight:500}.btn-logout{border:1px solid var(--baseline);width:100%;color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:6px;padding:7px 12px;font-size:13px;font-weight:500}.btn-logout:hover{background:var(--page);color:var(--text-primary)}.main-content{flex:1;max-width:1200px;padding:32px 40px}.page-header{margin-bottom:24px}h1.page-title{color:var(--text-primary);letter-spacing:-.01em;margin:0 0 6px;font-size:24px;font-weight:700}.page-subtitle{color:var(--text-secondary);margin:0;font-size:14px}h2.section-title{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.02em;margin:32px 0 12px;font-size:14px;font-weight:600}.kpi-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;display:grid}.kpi-card{background:var(--surface-1);border:1px solid var(--border);border-radius:12px;padding:18px 20px;transition:box-shadow .15s,transform .1s}.kpi-card:hover{box-shadow:0 4px 14px #0000000d}.kpi-card-header{align-items:center;gap:10px;margin-bottom:12px;display:flex}.kpi-card-icon{border-radius:8px;justify-content:center;align-items:center;width:34px;height:34px;display:flex}.kpi-card .label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;font-size:12.5px;font-weight:600}.kpi-card .value{color:var(--text-primary);font-variant-numeric:proportional-nums;letter-spacing:-.02em;font-size:28px;font-weight:700}.kpi-card .value.income{color:var(--series-income)}.kpi-card .value.expense{color:var(--series-expense)}.kpi-card .value.critical{color:var(--status-critical)}.panel{background:var(--surface-1);border:1px solid var(--border);border-radius:12px;margin-bottom:16px;padding:20px}.manual-price-badge{background:var(--status-warning);color:#1a1a19;vertical-align:middle;border-radius:4px;margin-left:4px;padding:2px 4px;font-size:10px;font-weight:700;line-height:1;display:inline-block}.modal-overlay{z-index:1000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-panel{background:var(--surface-1);border:1px solid var(--border);border-radius:12px;width:440px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:24px;overflow-y:auto;box-shadow:0 12px 40px #00000059}.panel-section-title{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;margin-bottom:12px;font-size:12px;font-weight:700}.dashboard-alerts{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;margin-bottom:24px;display:grid}.alert-panel{border:1px solid var(--border);border-left-width:4px;border-radius:12px;padding:16px 18px}.alert-panel-header{color:var(--text-primary);text-transform:uppercase;letter-spacing:.03em;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;font-weight:700;display:flex}.alert-panel-empty{color:var(--text-secondary);padding:6px 0;font-size:13.5px}.alert-panel-list{flex-direction:column;gap:2px;display:flex}.alert-panel-item{border-bottom:1px solid var(--border);color:inherit;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 0;text-decoration:none;transition:background .1s;display:flex}.alert-panel-item:last-child{border-bottom:none;padding-bottom:0}.alert-panel-item:hover{opacity:.85}.alert-panel-item-title{color:var(--text-primary);font-size:13.5px;font-weight:600}.alert-panel-item-subtitle{color:var(--text-muted);margin-top:2px;font-size:12px}.alert-panel-item-amount{color:var(--text-primary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:13.5px;font-weight:700}.chart-tooltip{background:var(--surface-1);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:13px;box-shadow:0 4px 14px #00000014}.chart-tooltip-title{color:var(--text-secondary);margin-bottom:6px;font-weight:700}.chart-tooltip-row{color:var(--text-primary);align-items:center;gap:8px;margin-bottom:3px;display:flex}.chart-tooltip-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.chart-tooltip-label{color:var(--text-secondary);flex:1}.chart-tooltip-value{font-variant-numeric:tabular-nums;font-weight:600}.two-col{grid-template-columns:1fr 1fr;gap:16px;display:grid}@media (width<=900px){.two-col{grid-template-columns:1fr}}table.data-table{border-collapse:collapse;width:100%;font-size:13.5px}table.data-table th{text-align:left;text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted);border-bottom:1px solid var(--gridline);padding:0 10px 10px;font-size:11px;font-weight:600}table.data-table td{border-bottom:1px solid var(--gridline);color:var(--text-primary);padding:10px}table.data-table tbody tr:hover td{background:var(--page)}table.data-table tbody tr.clickable{cursor:pointer}.datatable-wrapper{overflow-x:auto}table.datatable{min-width:100%}table.datatable th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}table.datatable th.sortable:hover{color:var(--text-primary)}.datatable-th-content{align-items:center;gap:6px;display:inline-flex}.datatable-sort-icon{color:var(--text-muted);opacity:.6}.datatable-sort-icon.active{color:var(--text-primary);opacity:1}.datatable-sort-placeholder{width:14px}.datatable-empty{text-align:center;color:var(--text-muted);padding:32px 10px}.datatable-expansion-row{background:var(--surface)}.datatable-expansion-row>td{border-bottom:1px solid var(--gridline)}.datatable-pagination{border-top:1px solid var(--gridline);justify-content:space-between;align-items:center;margin-top:16px;padding-top:12px;display:flex}.datatable-info{color:var(--text-secondary);font-size:12.5px}.datatable-page-buttons{gap:6px;display:flex}.datatable-page-buttons button{background:var(--page);color:var(--text-secondary);border:1px solid var(--baseline);padding:5px 10px;font-size:12.5px;font-weight:600}.datatable-page-buttons button.active{background:var(--series-income);color:#fff;border-color:var(--series-income)}.datatable-page-buttons button:disabled{opacity:.45}.filterbar{background:var(--surface-1);border:1px solid var(--border);border-radius:12px;margin-bottom:16px;padding:16px 18px}.filterbar-fields{flex-wrap:wrap;align-items:end;gap:12px;display:flex}.filterbar-field{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;flex-direction:column;flex:160px;gap:5px;min-width:140px;font-size:11px;font-weight:700;display:flex}.filterbar-field input,.filterbar-field select{border:1px solid var(--baseline);background:var(--page);color:var(--text-primary);text-transform:none;letter-spacing:normal;border-radius:8px;padding:8px 10px;font-family:inherit;font-size:13px;font-weight:400}.filterbar-chips{border-top:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:8px;margin-top:14px;padding-top:14px;display:flex}.filterbar-chip{background:var(--page);border:1px solid var(--baseline);color:var(--text-secondary);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:5px 10px;font-size:12px;font-weight:500;display:inline-flex}.filterbar-chip:hover{border-color:var(--status-critical);color:var(--status-critical)}.filterbar-reset{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:5px 10px;font-size:12px;font-weight:600;text-decoration:underline}.filterbar-reset:hover{color:var(--text-primary)}.form-field{flex-direction:column;gap:6px;display:flex}.form-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;font-size:11px;font-weight:700}.form-required{color:var(--status-critical);margin-left:3px}.form-field input,.form-field select,.form-field textarea{border:1px solid var(--baseline);background:var(--page);color:var(--text-primary);border-radius:8px;padding:9px 11px;font-family:inherit;font-size:14px;transition:border-color .12s,box-shadow .12s}.form-field input:focus,.form-field select:focus,.form-field textarea:focus{border-color:var(--series-income);box-shadow:0 0 0 3px var(--series-income-wash);outline:none}.form-field input[aria-invalid=true],.form-field select[aria-invalid=true],.form-field textarea[aria-invalid=true]{border-color:var(--status-critical)}.form-field input[aria-invalid=true]:focus,.form-field select[aria-invalid=true]:focus,.form-field textarea[aria-invalid=true]:focus{box-shadow:0 0 0 3px #dc26261f}.form-hint{color:var(--text-muted);font-size:12px}.form-hint.error{color:var(--status-critical);font-weight:500}.form-actions{align-items:center;gap:10px;margin-top:4px;display:flex}.toast-container{z-index:1000;flex-direction:column;gap:10px;max-width:360px;display:flex;position:fixed;top:20px;right:20px}.toast{color:#fff;border-radius:10px;align-items:center;gap:10px;padding:12px 14px;font-size:13.5px;font-weight:500;animation:.2s ease-out toast-in;display:flex;box-shadow:0 6px 20px #00000026}@keyframes toast-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.toast-message{flex:1;line-height:1.35}.toast-close{color:#fff;cursor:pointer;opacity:.8;background:0 0;border:none;padding:2px}.toast-close:hover{opacity:1}.amount-cell{font-variant-numeric:tabular-nums;text-align:right}.status-badge{border-radius:999px;align-items:center;gap:5px;padding:3px 9px;font-size:12.5px;font-weight:600;display:inline-flex}.status-badge:before{content:"";border-radius:50%;width:6px;height:6px}.status-badge.paid{color:var(--status-good);background:color-mix(in srgb, var(--status-good) 12%, transparent)}.status-badge.paid:before{background:var(--status-good)}.status-badge.unpaid{color:#97650a;background:color-mix(in srgb, var(--status-warning) 18%, transparent)}.status-badge.unpaid:before{background:var(--status-warning)}.status-badge.overdue{color:var(--status-critical);background:color-mix(in srgb, var(--status-critical) 12%, transparent)}.status-badge.overdue:before{background:var(--status-critical)}.filters-bar{flex-wrap:wrap;align-items:end;gap:10px;margin-bottom:16px;display:flex}.filters-bar label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.02em;flex-direction:column;gap:4px;font-size:11px;font-weight:600;display:flex}.filters-bar input,.filters-bar select{border:1px solid var(--baseline);background:var(--surface-1);color:var(--text-primary);border-radius:6px;padding:7px 9px;font-family:inherit;font-size:13px}button{background:var(--series-income);color:#fff;cursor:pointer;border:none;border-radius:8px;justify-content:center;align-items:center;gap:6px;font-family:inherit;font-size:13px;font-weight:600;transition:background .12s,opacity .12s,transform 50ms;display:inline-flex}button:active:not(:disabled){transform:translateY(1px)}button.btn-primary{background:var(--series-income)}button.btn-primary:hover:not(:disabled){background:#15803d}button.btn-secondary{background:var(--page);color:var(--text-primary);border:1px solid var(--baseline)}button.btn-secondary:hover:not(:disabled){background:var(--surface)}button.btn-danger{background:var(--status-critical)}button.btn-danger:hover:not(:disabled){background:#b91c1c}button.btn-ghost{color:var(--text-secondary);background:0 0}button.btn-ghost:hover:not(:disabled){background:var(--page);color:var(--text-primary)}button.btn-sm{padding:5px 10px;font-size:12px}button.btn-md{padding:8px 16px;font-size:13px}button.btn-spinner{animation:.8s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}button:disabled{opacity:.6;cursor:default}.total-line{text-align:right;color:var(--text-secondary);margin-top:10px;font-size:13.5px;font-weight:600}.back-link{color:var(--text-secondary);margin-bottom:16px;font-size:13.5px;text-decoration:none;display:inline-block}.back-link:hover{color:var(--text-primary)}.field-row{border-bottom:1px solid var(--gridline);padding:9px 0;font-size:14px;display:flex}.field-row .field-label{width:160px;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.02em;flex-shrink:0;padding-top:2px;font-size:12px}.field-row .field-value{color:var(--text-primary)}.meta-form{gap:8px;margin-top:12px;display:flex}.meta-row{align-items:center;gap:10px;padding:6px 0;font-size:13.5px;display:flex}.meta-row .key{color:var(--text-secondary);min-width:140px;font-weight:600}.meta-row button{color:var(--status-critical);cursor:pointer;background:0 0;border:none;padding:2px 6px;font-size:12px}pre.raw-json{background:var(--page);border:1px solid var(--border);color:var(--text-secondary);border-radius:8px;padding:12px;font-size:12px;overflow-x:auto}.empty-state,.loading-state,.error-state{text-align:center;color:var(--text-muted);padding:40px 0;font-size:14px}.error-state{color:var(--status-critical)}.attention-list{flex-direction:column;gap:2px;display:flex}.attention-row{border-bottom:1px solid var(--gridline);justify-content:space-between;align-items:center;padding:10px 0;font-size:13.5px;display:flex}.attention-row:last-child{border-bottom:none}.attention-row .name{font-weight:600}.attention-row .sub{color:var(--text-muted);font-size:12px}.attention-row .amount{color:var(--status-critical);font-variant-numeric:tabular-nums;font-weight:600}
