:root{--text:#475569;--text-h:#0f172a;--bg:#f1f5f9;--border:#e2e8f0;--card-bg:#fff;--accent:#2563eb;--accent-soft:#eff6ff;--negative:#b91c1c;--shadow:0 1px 2px #0f172a0a, 0 1px 8px #0f172a0a;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:16px/145% var(--sans);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}body{margin:0}#root{max-width:1240px;margin:0 auto;padding:32px 24px 48px}h1,h2,h3{color:var(--text-h);letter-spacing:-.01em;font-weight:600}.app-header{margin-bottom:28px}.app-header h1{margin:0 0 12px;font-size:32px}.app-header p{color:var(--text);margin:0;font-size:15px;line-height:1.7}.toolbar{background:var(--card-bg);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:24px;padding:14px 18px;display:flex}.upload-portfolio{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.upload-portfolio select{border:1px solid var(--border);background:var(--card-bg);color:var(--text-h);border-radius:6px;padding:8px 10px;font-size:14px}.upload-button,.link-button{border:1px solid var(--border);background:var(--card-bg);color:var(--text-h);cursor:pointer;border-radius:6px;align-items:center;padding:8px 14px;font-size:14px;font-weight:500;text-decoration:none;transition:border-color .15s,color .15s;display:inline-flex}.upload-button:hover,.link-button:hover{border-color:var(--accent);color:var(--accent)}.link-button:disabled{opacity:.6;cursor:default}.upload-button:has(input:disabled){opacity:.6;cursor:default}.upload-error{color:var(--negative);width:100%;font-size:14px}.staging-controls{flex-wrap:wrap;align-items:flex-end;gap:16px;display:flex}.staging-field{letter-spacing:.03em;text-transform:uppercase;color:var(--text);flex-direction:column;gap:6px;font-size:12px;font-weight:600;display:flex}.staging-field input{border:1px solid var(--border);background:var(--card-bg);text-transform:none;color:var(--text-h);border-radius:6px;width:100px;padding:6px 10px;font-size:13px;font-weight:400}.staging-error{color:var(--negative);width:100%;font-size:13px}.summary-cards{grid-template-columns:repeat(auto-fit,minmax(215px,1fr));align-items:stretch;gap:16px;margin-bottom:24px;display:grid}.summary-card{background:var(--card-bg);border:1px solid var(--border);box-shadow:var(--shadow);border-top:3px solid var(--accent);border-radius:10px;flex-direction:column;padding:16px 18px;display:flex}.summary-card-label{letter-spacing:.04em;text-transform:uppercase;color:var(--text);white-space:nowrap;margin-bottom:10px;font-size:12px;font-weight:600}.summary-card-value{color:var(--text-h);font-size:26px;font-weight:700;line-height:1.2}.summary-card-note{color:var(--text);min-height:36px;margin-top:6px;font-size:12px;line-height:1.5}.summary-card-breakdown{border-top:1px solid var(--border);flex-direction:column;gap:6px;margin:12px 0 0;padding-top:10px;display:flex}.summary-card-breakdown-row{justify-content:space-between;gap:12px;font-size:13px;display:flex}.summary-card-breakdown-row dt{color:var(--text)}.summary-card-breakdown-row dd{color:var(--text-h);text-align:right;margin:0;font-weight:600}.charts-row{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;margin-bottom:24px;display:grid}.chart-card{background:var(--card-bg);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px;padding:18px}.chart-card h3{margin:0 0 12px;font-size:15px;font-weight:600}.chart-note{color:var(--text);margin:-8px 0 12px;font-size:12px}.chart-axis-note{color:var(--text);margin:-8px 0 12px;font-size:11px;font-style:italic}.rating-scale{background:var(--card-bg);border:1px solid var(--border);border-radius:6px;width:100%;padding:8px 14px}.rating-scale summary{cursor:pointer;color:var(--text-h);padding:4px 0;font-size:14px;font-weight:500}.rating-scale-body{margin-top:12px}.rating-scale-toggle{color:var(--text);cursor:pointer;align-items:center;gap:8px;margin-bottom:12px;font-size:13px;display:flex}.rating-scale-actions{align-items:center;gap:12px;margin-top:12px;display:flex}.rating-scale-table{border-collapse:collapse;width:100%;font-size:13.5px}.rating-scale-table th,.rating-scale-table td{text-align:left;border-bottom:1px solid var(--border);padding:6px 10px}.rating-scale-table th{color:var(--text-h);font-weight:600}.rating-scale-table input[type=text]{width:70px}.rating-scale-table input[type=number]{width:90px}.rating-scale-table input{border:1px solid var(--border);background:var(--card-bg);color:var(--text-h);border-radius:4px;padding:4px 6px;font-size:13px}.loan-table-card{background:var(--card-bg);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:10px;padding:18px}.loan-table-card h3{margin:0 0 12px;font-size:15px;font-weight:600}.loan-table-controls{flex-wrap:wrap;align-items:center;gap:20px;margin-bottom:14px;display:flex}.loan-table-controls label{letter-spacing:.03em;text-transform:uppercase;color:var(--text);flex-direction:column;gap:6px;font-size:12px;font-weight:600;display:flex}.loan-table-controls select{border:1px solid var(--border);background:var(--card-bg);text-transform:none;color:var(--text-h);border-radius:6px;padding:6px 10px;font-size:13px;font-weight:400}.loan-table-count{color:var(--text);margin-left:auto;font-size:13px}.loan-table-scroll{border:1px solid var(--border);border-radius:8px;max-height:480px;overflow:auto}.loan-table{border-collapse:collapse;width:100%;font-size:13.5px}.loan-table th{text-align:right;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;color:var(--text-h);border-bottom:1px solid var(--border);background:#f8fafc;padding:10px 14px;font-weight:600;position:sticky;top:0}.loan-table th:first-child,.loan-table th:nth-child(2){text-align:left}.loan-table th.not-sortable{cursor:default}.loan-table th:hover:not(.not-sortable){color:var(--accent)}.loan-table td{border-top:1px solid var(--border);white-space:nowrap;text-align:right;padding:8px 14px}.loan-table td:first-child,.loan-table td:nth-child(2){text-align:left}.loan-table tbody tr:nth-child(2n){background:#f8fafc}.loan-table tbody tr:hover{background:var(--accent-soft)}.status-message{text-align:center;color:var(--text);padding:40px 16px}.status-message.error{color:var(--negative)}
