:root{--bg: #f5f6f8;--panel: #ffffff;--panel-2: #fafbfc;--border: #e4e6eb;--border-strong: #cdd1d7;--text: #1a1d22;--text-muted: #5a6270;--text-faint: #8a93a0;--accent: #1e6cd5;--accent-soft: #e6efff;--danger: #c0392b;--danger-soft: #fdecea;--warn: #b7791f;--warn-soft: #fff4d6;--ok: #1f8a4c;--ok-soft: #e3f5ea;--shadow: 0 1px 2px rgba(20,25,35,.06), 0 4px 12px rgba(20,25,35,.05);--shadow-lg: 0 8px 32px rgba(20,25,35,.18);--radius: 8px;--radius-sm: 5px}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.45;-webkit-font-smoothing:antialiased}button{font-family:inherit;font-size:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.auth-splash{display:flex;align-items:center;justify-content:center;height:100vh;color:var(--text-muted);font-size:16px}.auth-splash.error{color:var(--danger)}.app{display:grid;grid-template-rows:auto 1fr;height:100vh}.topbar{display:flex;align-items:center;gap:16px;padding:10px 20px;background:var(--panel);border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:12px;font-weight:700;font-size:15px}.brand-logo{height:32px;width:auto;display:block;border-radius:4px}.brand-app{font-size:13px;font-weight:600;color:var(--text-muted);padding-left:12px;border-left:1px solid var(--border)}.search{flex:1;max-width:480px;position:relative}.search input{width:100%;padding:8px 12px 8px 34px;border:1px solid var(--border);border-radius:6px;background:var(--panel-2)}.search:before{content:"⌕";position:absolute;left:10px;top:6px;color:var(--text-faint);font-size:16px}.topbar-actions{display:flex;gap:8px;align-items:center}.btn{padding:7px 12px;border:1px solid var(--border-strong);background:var(--panel);border-radius:6px;color:var(--text);display:inline-flex;align-items:center;gap:6px;font-weight:500}.btn:hover{background:var(--panel-2)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:#1859b5}.btn.danger{color:var(--danger);border-color:var(--danger);background:transparent}.btn.ghost{background:transparent;border-color:transparent}.btn.ghost:hover{background:var(--panel-2)}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--border);border-bottom:1px solid var(--border)}.stat{background:var(--panel);padding:10px 16px}.stat .label{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:600}.stat .value{font-size:22px;font-weight:700;margin-top:2px}.stat .sub{font-size:12px;color:var(--text-faint)}.stat.danger .value{color:var(--danger)}.stat.warn .value{color:var(--warn)}.stat.ok .value{color:var(--ok)}.body{display:grid;grid-template-columns:220px 1fr;min-height:0;flex:1}@media (max-width: 900px){.body{grid-template-columns:1fr}aside.filters{display:none}.stats{grid-template-columns:repeat(2,1fr)}}aside.filters{background:var(--panel);border-right:1px solid var(--border);padding:14px 14px 24px;overflow:auto}.filter-group{margin-bottom:18px}.filter-group h4{margin:0 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:700}.filter-group label{display:flex;align-items:center;gap:6px;padding:3px 0;font-size:13px;cursor:pointer}.filter-group input[type=checkbox]{accent-color:var(--accent)}.filter-count{margin-left:auto;color:var(--text-faint);font-size:11px;font-variant-numeric:tabular-nums}.filter-group .clear-all{font-size:11px;color:var(--accent);cursor:pointer;float:right}.filter-date{margin-left:6px;padding:3px 6px;border:1px solid var(--border-strong);border-radius:4px;background:var(--panel-2)}main.content{display:flex;flex-direction:column;min-width:0}.view-tabs{display:flex;gap:0;padding:0 16px;background:var(--panel);border-bottom:1px solid var(--border)}.view-tab{padding:10px 14px;border:none;background:none;border-bottom:2px solid transparent;color:var(--text-muted);font-weight:600;font-size:13px}.view-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.view-tab:hover:not(.active){color:var(--text)}.view-pane{flex:1;overflow:auto;padding:16px}table.grid{width:100%;border-collapse:separate;border-spacing:0;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}table.grid th{background:var(--panel-2);padding:9px 10px;text-align:left;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:1;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}table.grid th:hover{background:#eef0f4}table.grid th .sort{display:inline-block;margin-left:4px;font-size:10px;color:var(--text-faint)}table.grid th.active .sort{color:var(--accent)}table.grid td{padding:9px 10px;border-bottom:1px solid var(--border);vertical-align:top;font-size:13px}table.grid tr:last-child td{border-bottom:none}table.grid tr.row-clickable:hover{background:#f9fbff;cursor:pointer}table.grid tr.row-clickable.selected{background:var(--accent-soft)}td.client{font-weight:600;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis}td.project{max-width:260px}td.location{color:var(--text-muted);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.comments-cell{color:var(--text-muted);max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}tr.row-completed{background:#f4fbf6}tr.row-completed:hover{background:#e8f6ec!important}tr.row-completed td.client{color:#166534;text-decoration:line-through;text-decoration-color:#a3d9b6;text-decoration-thickness:1px}tr.row-stale{color:#8a93a0}tr.row-stale td.client{color:#5a6270}.pill{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid transparent;white-space:nowrap}.pill.status-tender{background:#e6efff;color:#1e4fa8;border-color:#cadcff}.pill.status-otp{background:#e3f5ea;color:#177c3e;border-color:#bee5cd}.pill.status-eoi{background:#f1e7fa;color:#6029a5;border-color:#d9c4f0}.pill.status-reprice{background:#fff1e0;color:#a50;border-color:#f3d4a8}.pill.status-costplan{background:#e0f4fb;color:#0d6e8c;border-color:#b8e2ee}.pill.status-pcsa{background:#fde4f5;color:#a4197a;border-color:#f5c4e3}.pill.status-budget{background:#f3f4f6;color:#374151;border-color:#dfe1e6}.pill.status-won{background:#dcfce7;color:#166534;border-color:#bbf7d0}.pill.status-lost{background:#fdecea;color:#a91b06;border-color:#f5c2bb}.pill.status-unset{background:#f3f4f6;color:#6b7280;border-color:#e0e2e6}.pill.status-other{background:#f3f4f6;color:#4b5563;border-color:#e0e2e6;font-style:italic}.pill.type-metalwork{background:#fff8e1;color:#7a5b00;border-color:#ffeaa5}.pill.type-steelwork{background:#eaeefe;color:#1e2d8a;border-color:#c8d3f7}.pill.type-mixed{background:#f1edff;color:#4321a0;border-color:#d8cdf6}.pill.type-other{background:#f3f4f6;color:#4b5563;border-color:#e0e2e6}.pill.estimator{background:var(--accent-soft);color:var(--accent);border-color:#cadcff;font-variant-numeric:tabular-nums}.pill.due-soon{background:var(--warn-soft);color:var(--warn);border-color:#f3d486}.pill.due-overdue{background:var(--danger-soft);color:var(--danger);border-color:#f5c2bb}.pill.due-ok{background:var(--panel-2);color:var(--text-muted);border-color:var(--border)}.pill.due-text{background:var(--panel-2);color:var(--text-muted);border-color:var(--border);font-style:italic}.pill.due-stale{background:#f3f4f6;color:#8a93a0;border-color:#e0e2e6}.pill.done{background:#dcfce7;color:#166534;border-color:#bbf7d0;font-weight:700}.pill.quote-status-out{background:#e6efff;color:#1e4fa8;border-color:#cadcff}.pill.quote-status-chasing{background:#fff1e0;color:#a50;border-color:#f3d4a8}.pill.quote-status-awaiting-feedback{background:#f1e7fa;color:#6029a5;border-color:#d9c4f0}.pill.quote-status-on-hold{background:#f3f4f6;color:#4b5563;border-color:#e0e2e6}.pill.quote-status-won{background:#dcfce7;color:#166534;border-color:#bbf7d0;font-weight:700}.pill.quote-status-lost{background:#fdecea;color:#a91b06;border-color:#f5c2bb}.pill.quote-status-unset,.pill.quote-size-small{background:#f3f4f6;color:#6b7280;border-color:#e0e2e6}.pill.quote-size-medium{background:#fff8e1;color:#7a5b00;border-color:#ffeaa5}.pill.quote-size-large{background:#e0f4fb;color:#0d6e8c;border-color:#b8e2ee}.quotes-view{display:flex;flex-direction:column;min-height:0}tr.row-review{background:#fffbe6}tr.row-review:hover{background:#fff5cc!important}.stats-view{display:flex;flex-direction:column;gap:16px;min-height:0}.stats-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:16px}@media (max-width: 1100px){.stats-grid{grid-template-columns:1fr}}.stats-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}.stats-card h3{margin:0 0 2px;font-size:14px;font-weight:700}.stats-card-sub{margin:0 0 12px;font-size:12px;color:var(--text-muted)}.stats-table{width:100%;border-collapse:separate;border-spacing:0}.stats-table th{text-align:left;padding:8px;font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--border)}.stats-table td{padding:8px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle}.stats-table tr:last-child td{border-bottom:none}.stats-bar{height:4px;background:var(--panel-2);border-radius:2px;margin-top:4px;overflow:hidden}.stats-bar-fill{height:100%;background:var(--accent);border-radius:2px;transition:width .2s ease}.stats-bar-fill-loss{background:var(--danger)}.stats-bars{display:flex;flex-direction:column;gap:8px}.stats-bar-row{display:flex;align-items:center;gap:10px;font-size:13px}.stats-bar-row .stats-bar{flex:1;height:8px}.review-view{display:flex;flex-direction:column;gap:12px;min-height:0}.review-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;display:flex;flex-direction:column;gap:10px}.review-quote{padding-bottom:8px;border-bottom:1px dashed var(--border)}.review-candidates{display:flex;flex-direction:column;gap:8px}.review-candidate{display:flex;align-items:center;gap:12px;padding:8px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:5px}.review-score{background:var(--accent-soft);color:var(--accent);padding:1px 8px;border-radius:999px;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}.review-actions{display:flex;gap:8px}.kanban{display:flex;gap:14px;align-items:flex-start;padding-bottom:12px}.kanban-col{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);min-width:280px;width:280px;max-height:calc(100vh - 220px);display:flex;flex-direction:column}.kanban-col-head{padding:10px 12px;border-bottom:1px solid var(--border);font-weight:700;font-size:13px;display:flex;align-items:center;gap:8px}.kanban-col-count{margin-left:auto;color:var(--text-faint);font-weight:500;font-size:12px}.kanban-col-body{overflow:auto;padding:8px;display:flex;flex-direction:column;gap:6px}.kanban-card{background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:10px;cursor:pointer;transition:transform .08s ease,box-shadow .08s ease}.kanban-card:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.kanban-card .client{font-weight:600;font-size:13px}.kanban-card .project{color:var(--text-muted);font-size:12px;margin-top:2px;line-height:1.35}.kanban-card .meta{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap}.kanban-card.completed{background:#f0faf3;border-left:3px solid #1f8a4c}.kanban-card.completed .client{color:#166534}.kanban-card.stale{opacity:.65}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f141e66;opacity:0;pointer-events:none;transition:opacity .15s ease;z-index:10}.drawer-backdrop.open{opacity:1;pointer-events:auto}.drawer{position:fixed;right:0;top:0;bottom:0;width:min(640px,100vw);background:var(--panel);border-left:1px solid var(--border);transform:translate(100%);transition:transform .18s ease;z-index:11;display:flex;flex-direction:column;box-shadow:var(--shadow-lg)}.drawer.open{transform:translate(0)}.drawer-head{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}.drawer-head .title{font-weight:700;font-size:16px;flex:1}.drawer-body{flex:1;overflow:auto;padding:18px}.drawer-foot{padding:12px 18px;border-top:1px solid var(--border);display:flex;gap:8px;align-items:center}.field{margin-bottom:14px}.field label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:600;margin-bottom:4px}.field input,.field select,.field textarea{width:100%;padding:7px 10px;border:1px solid var(--border-strong);border-radius:5px;background:var(--panel-2)}.field textarea{min-height:120px;resize:vertical;line-height:1.5}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.extracted{background:var(--panel-2);border:1px solid var(--border);border-radius:6px;padding:10px 12px;margin-bottom:14px}.extracted h5{margin:0 0 6px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:700}.extracted ul{margin:0;padding:0;list-style:none}.extracted li{padding:3px 0;font-size:13px;word-break:break-all}.extracted li .tag{display:inline-block;min-width:60px;color:var(--text-faint);font-size:11px}.attachments-list{display:flex;flex-direction:column;gap:4px}.attachment{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--panel-2);border:1px solid var(--border);border-radius:5px;font-size:13px}.attachment .name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment .size{color:var(--text-faint);font-size:11px;font-variant-numeric:tabular-nums}.attachment-drop{border:2px dashed var(--border-strong);border-radius:6px;padding:14px;text-align:center;color:var(--text-muted);cursor:pointer;transition:background .1s,border-color .1s}.attachment-drop:hover,.attachment-drop.dragover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.empty{text-align:center;padding:60px 20px;color:var(--text-faint)}.empty h3{color:var(--text-muted);margin-bottom:6px}.import-banner{background:linear-gradient(90deg,#fff4d6,#fffdf2);border-bottom:1px solid #f3d486;color:#5a3d00;padding:12px 20px;display:flex;align-items:center;gap:16px;font-size:13px}.import-banner>div:first-child{flex:1}
