:root{font-family:system-ui,-apple-system,Segoe UI,sans-serif;color:#1f2937;background:#f8fafc;font-size:15px}body{margin:0}*{box-sizing:border-box}.banner-test{background:#b45309;color:#fff;padding:8px 16px;font-weight:700;text-align:center}.topbar{display:flex;align-items:center;gap:16px;padding:10px 16px;background:#fff;border-bottom:1px solid #e5e7eb;flex-wrap:wrap}.topbar nav{display:flex;gap:4px}.topbar nav a{padding:6px 10px;border-radius:6px;color:#374151;text-decoration:none}.topbar nav a.active{background:#e0e7ff;color:#1e3a8a;font-weight:600}.spacer{flex:1}.page{max-width:1100px;margin:0 auto;padding:16px}.page.narrow{max-width:420px}h1{font-size:1.4rem;margin:8px 0 16px}h2{font-size:1.1rem;margin:24px 0 8px}.muted{color:#6b7280;font-size:.9em}table{border-collapse:collapse;width:100%;background:#fff}th,td{border-bottom:1px solid #e5e7eb;padding:6px 8px;text-align:left;vertical-align:top}th{background:#f1f5f9;font-weight:600;font-size:.9em}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}input,select,textarea,button{font:inherit;padding:6px 8px;border:1px solid #cbd5e1;border-radius:6px;background:#fff}input:disabled,select:disabled,textarea:disabled{background:#f1f5f9;color:#475569}button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:#1d4ed8;color:#fff;border-color:#1d4ed8}button.danger{background:#b91c1c;color:#fff;border-color:#b91c1c}button.small{padding:2px 8px;font-size:.85em}.field{display:flex;flex-direction:column;gap:3px;margin-bottom:8px}.field>span{font-size:.85em;color:#475569}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:0 16px}.grid .wide{grid-column:1 / -1}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0}.row.end{justify-content:flex-end}.stack{display:flex;flex-direction:column}.error{background:#fee2e2;border:1px solid #fca5a5;color:#7f1d1d;padding:8px 12px;border-radius:6px;margin:8px 0;white-space:pre-wrap}.info{background:#e0f2fe;border:1px solid #7dd3fc;color:#0c4a6e;padding:8px 12px;border-radius:6px;margin:8px 0}.warn{background:#fef3c7;border:1px solid #fcd34d;color:#78350f;padding:8px 12px;border-radius:6px;margin:8px 0}.badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:.8em;background:#e5e7eb}.badge.test{background:#fde68a;color:#78350f}.badge.draft{background:#e0e7ff;color:#1e3a8a}.badge.issued{background:#dcfce7;color:#14532d}.badge.overdue{background:#fee2e2;color:#7f1d1d}.badge.paid{background:#dcfce7;color:#14532d}.preview{background:#fff;border:1px dashed #94a3b8;border-radius:6px;padding:8px 12px;margin:12px 0;max-width:460px}.preview table{background:transparent}.preview td,.preview th{border:none;padding:2px 4px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;align-items:center;justify-content:center;z-index:10}.dialog{background:#fff;border-radius:8px;padding:16px 20px;width:min(520px,94vw);outline:none}.lines input{width:100%}.lines td{padding:4px}pre.legend{white-space:pre-wrap;background:#fff;border:1px solid #e5e7eb;padding:8px;border-radius:6px}.badge.partial{background:#fef3c7;color:#78350f}.badge.open{background:#e0e7ff;color:#1e3a8a}.badge.cancelled{background:#e5e7eb;color:#374151;margin-left:6px}tr.sumrow td{font-weight:600;background:#f1f5f9}.filters{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:8px 12px;margin:8px 0}.filters label{display:flex;flex-direction:column;gap:3px;font-size:.85em;color:#475569}th button.sort{background:transparent;border:none;padding:0;font-weight:600;cursor:pointer}
