:root { --bg:#f4f6f8; --card:#fff; --text:#18212b; --muted:#667085; --line:#e4e7ec; --blue:#2563eb; --green:#067647; --yellow:#a15c00; --red:#b42318; --gray:#475467; }
* { box-sizing:border-box; }
body { margin:0; background:var(--bg); color:var(--text); font:14px/1.5 system-ui,-apple-system,"Segoe UI","Microsoft YaHei",sans-serif; }
a { color:var(--blue); text-decoration:none; }
header { background:#101828; color:#fff; position:sticky; top:0; z-index:5; }
.topbar { max-width:1440px; margin:auto; min-height:58px; display:flex; align-items:center; gap:20px; padding:8px 20px; }
.brand { font-size:18px; font-weight:700; color:#fff; white-space:nowrap; }
nav { display:flex; flex-wrap:wrap; gap:4px; flex:1; }
nav a { color:#d0d5dd; padding:7px 9px; border-radius:6px; }
nav a:hover { background:#344054; color:#fff; }
main { max-width:1440px; margin:0 auto; padding:24px 20px 50px; }
h1 { font-size:24px; margin:0 0 18px; } h2 { font-size:18px; margin:0 0 14px; }
.grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px; }
.card { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:18px; box-shadow:0 1px 2px #1018280d; }
.metric-label { color:var(--muted); font-size:13px; }.metric { font-size:28px; font-weight:750; margin-top:8px; }.submetric { color:var(--muted); margin-top:2px; }
.section { margin-top:18px; }.toolbar { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-bottom:12px; }
.btn { display:inline-flex; border:1px solid #d0d5dd; border-radius:7px; background:#fff; color:#344054; padding:8px 12px; cursor:pointer; font:inherit; }
.btn-primary { background:var(--blue); border-color:var(--blue); color:#fff; }.btn-danger { background:var(--red); color:#fff; }.btn-sm { padding:5px 9px; }
.btn-disabled{opacity:.55;cursor:not-allowed;pointer-events:none}
input,select,textarea { border:1px solid #d0d5dd; border-radius:7px; padding:8px 10px; font:inherit; background:#fff; }
table { width:100%; border-collapse:collapse; background:#fff; }.table-wrap { overflow:auto; border:1px solid var(--line); border-radius:9px; }
th,td { text-align:left; padding:10px 12px; border-bottom:1px solid var(--line); white-space:nowrap; } th { background:#f9fafb; color:#475467; font-weight:600; } tr:last-child td{border-bottom:0}
.status { display:inline-block; padding:3px 8px; border-radius:99px; font-size:12px; font-weight:650; }.status-matched{background:#dcfae6;color:var(--green)}
.status-waiting_receipt,.status-partial_receipt{background:#fef0c7;color:var(--yellow)}.status-sync_abnormal,.status-overdue_missing,.status-overdue_partial,.status-amount_mismatch,.status-critical{background:#fee4e2;color:var(--red)}
.status-manual_review,.status-info{background:#e0f2fe;color:#075985}.status-excluded{background:#eaecf0;color:var(--gray)}
.alert { border-radius:8px; padding:11px 14px; margin-bottom:14px; background:#eef4ff; color:#3538cd; }.alert-danger{background:#fee4e2;color:var(--red)}.alert-warning{background:#fef0c7;color:var(--yellow)}
.muted{color:var(--muted)}.danger{color:var(--red)}.good{color:var(--green)}.right{text-align:right}.stack{display:grid;gap:12px}.upload{border:2px dashed #98a2b3;padding:45px;text-align:center;border-radius:12px;background:#fff}
.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.page-heading h1{margin-bottom:4px}.page-heading p{margin:0}
.mapping-query-box{display:grid;gap:5px;min-width:460px;flex:1}.mapping-query-box textarea{width:100%;resize:vertical;line-height:1.45}.mapping-query-box .muted{font-size:13px}.mapping-query-summary{margin:2px 0 12px;padding:9px 12px;border-radius:7px;background:#f2f4f7;color:#475467}.mapping-query-issue{margin-bottom:10px}.pagination{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding-top:12px}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.mapping-name{max-width:340px;white-space:normal}.mapping-vehicle{max-width:300px;overflow:hidden;text-overflow:ellipsis}.section-sm{margin-top:12px}
.mapping-form{max-width:1050px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.form-grid label{display:grid;gap:6px;color:#475467;font-weight:600}.form-grid input,.form-grid select,.form-grid textarea{width:100%;color:var(--text);font-weight:400}.form-span{grid-column:1/-1}.readonly-meta{border-top:1px solid var(--line);padding-top:14px;margin-top:18px}.lookup-attempts{display:grid;gap:4px;margin-top:8px;font-size:14px}.preview-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.funds-heading{align-items:center}.funds-date{background:#eef4ff;color:#3538cd;border-radius:99px;padding:6px 11px;font-weight:650;white-space:nowrap}.funds-overview{padding:20px}.funds-overview-title,.funds-history-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.funds-overview-title h2,.funds-history-heading h2{margin-bottom:2px}.funds-overview-title p,.funds-history-heading p{margin:0}.funds-formula{display:grid;grid-template-columns:minmax(150px,1fr) 36px minmax(150px,1fr) 36px minmax(160px,1fr) 36px minmax(190px,1.15fr);align-items:stretch;gap:8px;margin-top:18px}.funds-step{border:1px solid var(--line);border-radius:10px;padding:15px;background:#f9fafb}.funds-step-payment{background:#ecfdf3;border-color:#abefc6}.funds-step-expense{background:#fff6ed;border-color:#fedf89}.funds-step-result{border-width:2px}.funds-step-result-debt{background:#fef3f2;border-color:#f97066;color:#912018}.funds-step-result-credit{background:#ecfdf3;border-color:#47cd89;color:#05603a}.funds-step-label{font-size:13px;font-weight:700;color:#475467}.funds-step-value{font-size:22px;font-weight:800;margin-top:7px;white-space:nowrap}.funds-step-help{font-size:12px;color:var(--muted);margin-top:3px}.funds-operator{display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:800;color:#667085}.funds-operator-add{color:var(--green)}.funds-operator-minus{color:#b54708}.funds-operator-equals{color:#344054}.funds-rule{margin-top:14px;padding:10px 12px;border-radius:8px;background:#eef4ff;color:#3538cd}.funds-status{display:inline-flex;align-items:center;border-radius:99px;padding:4px 9px;font-size:12px;font-weight:750;white-space:nowrap}.funds-status-debt{background:#fee4e2;color:var(--red)}.funds-status-credit{background:#dcfae6;color:var(--green)}.money-positive{color:var(--green)}.money-expense{color:#b54708}.money-negative{color:var(--red)}.funds-entry{display:grid;grid-template-columns:minmax(250px,.75fr) minmax(620px,2fr);align-items:end;gap:24px}.funds-entry h2{margin-bottom:3px}.funds-entry p{margin:0}.funds-entry-form{display:grid;grid-template-columns:170px minmax(170px,1fr) minmax(190px,1fr) auto;align-items:end;gap:10px}.funds-entry-form label{display:grid;gap:5px;color:#475467;font-size:12px;font-weight:650}.funds-entry-form input{width:100%;color:var(--text);font-size:14px;font-weight:400}.funds-entry-form .btn{height:39px;justify-content:center}.funds-history{padding:0;overflow:hidden}.funds-history-heading{padding:18px 18px 14px}.funds-history .table-wrap{border-width:1px 0 0;border-radius:0}.funds-table th,.funds-table td{padding:12px 14px}.funds-table tbody tr:nth-child(even){background:#fcfcfd}.funds-table .funds-latest-row{background:#eef4ff}.funds-ending{font-size:15px;font-weight:800}.funds-latest-tag{display:inline-block;margin-left:7px;padding:2px 6px;border-radius:99px;background:#d1e9ff;color:#175cd3;font-size:11px;font-weight:700}
.login { max-width:420px; margin:12vh auto; }.login input{width:100%}.login .btn{width:100%;justify-content:center}.progress{height:9px;background:#eaecf0;border-radius:9px;overflow:hidden}.progress span{display:block;height:100%;background:var(--green)}
.alert-success{background:#dcfae6;color:var(--green)}
.reconciliation-heading{align-items:center}.reconciliation-filter{display:grid;grid-template-columns:210px minmax(260px,1fr) auto minmax(300px,1.3fr);align-items:end;gap:12px;padding:16px;margin-bottom:16px}.reconciliation-filter label{display:grid;gap:5px;color:#475467;font-size:13px;font-weight:700}.reconciliation-filter select,.reconciliation-filter input{width:100%}.reconciliation-freshness{text-align:right;line-height:1.55}.reconciliation-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.metric-card{border-top:4px solid #84adff}.metric-carry{border-top-color:#fdb022;background:#fffcf5}.metric-received{border-top-color:#32d583}.metric-remaining{border-top-color:#f97066}.metric-review{border-top-color:#7f56d9}.reconciliation-card{padding:0;overflow:hidden}.reconciliation-tabs{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:16px}.reconciliation-tabs .muted{margin-left:auto}.reconciliation-table-wrap{border-width:1px 0 0;border-radius:0}.reconciliation-table th,.reconciliation-table td{padding:11px 12px}.reconciliation-row td{border-bottom:0}.row-carryover{background:#fffaeb}.row-risk{background:#fff6f5}.row-new{background:#f8faff}.row-completed{background:#f6fef9}.timeline-row td{padding:0 12px 10px}.timeline-row details{border-top:1px dashed #d0d5dd;padding:8px 0}.timeline-row summary{cursor:pointer;color:#175cd3;font-weight:650}.timeline-grid{display:grid;grid-template-columns:minmax(280px,.8fr) minmax(520px,1.6fr);gap:18px;padding:12px 0}.timeline-grid h3{margin:0 0 8px;font-size:14px}.timeline-event{display:grid;gap:4px;padding:9px 10px;margin-bottom:7px;border-radius:8px;border-left:4px solid #84adff;background:#f9fafb}.supplier-event{border-left-color:#84adff}.receipt-event{border-left-color:#32d583}.timeline-event>span{color:var(--muted)}.age-badge,.match-method{display:inline-flex;margin-top:3px;border-radius:99px;padding:2px 7px;background:#fef0c7;color:#b54708;font-size:11px;font-weight:750}.match-method{background:#eef4ff;color:#3538cd}.match-method.manual{background:#dcfae6;color:#067647}.allocation-inline-form{display:grid;grid-template-columns:160px 100px minmax(220px,1fr) auto;align-items:end;gap:8px;margin-top:7px;padding-top:7px;border-top:1px solid #eaecf0}.allocation-inline-form label{display:grid;gap:3px;font-size:11px;color:#667085}.allocation-inline-form input,.allocation-inline-form select{width:100%;padding:6px 8px;font-size:12px}.manual-rule{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px;padding:6px 8px;border-radius:6px;background:#ecfdf3;color:#067647;font-size:12px}.manual-rule form{display:inline}.link-button{border:0;background:transparent;color:#175cd3;text-decoration:underline;cursor:pointer;padding:0}.allocation-preview-code{font-size:18px;word-break:break-all}
.reconciliation-import-filter{grid-template-columns:minmax(420px,1.6fr) minmax(240px,1fr) auto minmax(310px,1fr)}.reconciliation-import-summary{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 16px;margin-bottom:12px}.reconciliation-import-summary .muted{margin-left:12px}.reconciliation-grid-simple{grid-template-columns:repeat(4,minmax(0,1fr))}.reconciliation-simple-table{min-width:1180px}.status-missing,.status-partial,.status-over_received{background:#fee4e2;color:var(--red)}.status-amount_mismatch{background:#fef0c7;color:var(--yellow)}.status-sync_abnormal{background:#fef0c7;color:var(--yellow)}.reconciliation-history-filter{grid-template-columns:210px minmax(300px,1fr) auto minmax(360px,1fr)}
.purchase-heading{align-items:center}.purchase-fixed-rules{display:flex;flex-wrap:wrap;gap:8px}.purchase-fixed-rules span{padding:6px 10px;border-radius:99px;background:#eef4ff;color:#3538cd}.purchase-drop-zone{display:grid;justify-items:center;gap:12px;cursor:pointer;transition:.18s border-color,.18s background}.purchase-drop-zone.dragging{border-color:var(--blue);background:#eef4ff}.purchase-drop-zone input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.purchase-drop-title{font-size:21px}.purchase-processing{display:flex;align-items:center;justify-content:center;gap:16px;min-height:150px}.purchase-processing[hidden]{display:none}.purchase-spinner{width:34px;height:34px;border:4px solid #d1e9ff;border-top-color:var(--blue);border-radius:50%;animation:purchase-spin 1s linear infinite}@keyframes purchase-spin{to{transform:rotate(360deg)}}.purchase-status{display:inline-flex;padding:3px 8px;border-radius:99px;font-size:12px;font-weight:750}.purchase-status-success{background:#dcfae6;color:var(--green)}.purchase-status-pending_confirmation{background:#dbeafe;color:#1d4ed8}.purchase-status-partial,.purchase-status-processing,.purchase-status-pending{background:#fef0c7;color:var(--yellow)}.purchase-status-failed,.purchase-status-validation_failed{background:#fee4e2;color:var(--red)}.purchase-metric{font-size:20px}.purchase-page-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px}.purchase-page-actions form{margin:0}.purchase-page-actions .btn-primary{font-weight:750;padding:10px 16px}.purchase-split-card{display:grid;align-content:center;gap:8px}.purchase-split-row{display:grid;grid-template-columns:minmax(45px,.65fr) 1fr 1.25fr;align-items:center;gap:8px}.purchase-split-row span{text-align:right;white-space:nowrap}.purchase-split-row+ .purchase-split-row{padding-top:8px;border-top:1px solid var(--line)}.purchase-order-card{padding:0;overflow:hidden}.purchase-order-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:18px}.purchase-order-heading h2{margin-bottom:2px}.purchase-order-summary{display:flex;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:12px;font-weight:650}.purchase-order-card>.alert{margin:0 18px 14px}.purchase-order-card>.table-wrap{border-width:1px 0 0;border-radius:0}
@media(max-width:1100px){.funds-formula{grid-template-columns:repeat(2,minmax(0,1fr))}.funds-operator{display:none}.funds-entry{grid-template-columns:1fr}.funds-entry-form{grid-template-columns:repeat(3,minmax(0,1fr)) auto}}
@media(max-width:1200px){.reconciliation-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.timeline-grid{grid-template-columns:1fr}.allocation-inline-form{grid-template-columns:1fr 1fr}.allocation-inline-form button{grid-column:1/-1}}
@media(max-width:900px){.grid{grid-template-columns:repeat(2,1fr)}.topbar{align-items:flex-start;flex-direction:column}.brand{margin-top:4px}main{padding:18px 12px}.page-heading{align-items:stretch;flex-direction:column}.mapping-query-box{min-width:100%;flex-basis:100%}.form-grid{grid-template-columns:1fr}.form-span{grid-column:auto}.funds-entry-form{grid-template-columns:1fr 1fr}.funds-entry-form .btn{grid-column:1/-1}.reconciliation-filter{grid-template-columns:1fr 1fr}.reconciliation-freshness{text-align:left}.reconciliation-table{min-width:1050px}}
@media(max-width:520px){.grid{grid-template-columns:1fr}.metric{font-size:23px}.upload{padding:28px 14px}.preview-grid{grid-template-columns:1fr 1fr}.funds-formula{grid-template-columns:1fr}.funds-entry-form{grid-template-columns:1fr}.funds-entry-form .btn{grid-column:auto}}
.unreceived-summary{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:14px;border-left:4px solid #f59e0b}.unreceived-summary>div{display:flex;align-items:center;gap:18px;flex-wrap:wrap}.unreceived-summary-active{background:#fff8e8;border-color:#dc2626}.unreceived-summary-active strong{color:#b91c1c}

.reconciliation-table th.recon-material-code,.reconciliation-table td.recon-material-code{white-space:nowrap;width:120px;min-width:120px;max-width:none;overflow:visible;text-overflow:clip;text-align:left}
.reconciliation-table th.recon-material-name,.reconciliation-table td.recon-material-name{white-space:normal;min-width:240px;max-width:440px;width:30%;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;text-align:left}

/* Compact material-column layout: fixed utility columns, flexible name. */
.reconciliation-table.recon-compact{table-layout:fixed!important;width:100%!important;min-width:1380px!important}
.reconciliation-table.recon-compact>thead>tr>th,.reconciliation-table.recon-compact>tbody>tr>td{box-sizing:border-box;padding:8px 10px!important;vertical-align:middle;line-height:20px;width:auto!important}
.reconciliation-table.recon-compact>thead>tr>th{white-space:nowrap}
.reconciliation-table.recon-compact td.recon-material-code,.reconciliation-table.recon-compact th.recon-material-code{min-width:0!important;max-width:none!important;white-space:nowrap!important}
.reconciliation-table.recon-compact td.recon-material-name,.reconciliation-table.recon-compact th.recon-material-name{min-width:0!important;max-width:none!important;width:auto!important;text-align:left;white-space:normal!important}
.recon-compact .recon-name-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;line-height:20px;max-height:40px}
.recon-compact .reconciliation-note{display:flex;align-items:center;gap:6px;flex-wrap:nowrap;min-width:0;margin:0}
.recon-compact .reconciliation-note textarea{box-sizing:border-box;flex:1 1 0;width:0!important;min-width:70px!important;height:32px;min-height:32px;padding:5px 7px;line-height:20px;resize:vertical}
.recon-compact .reconciliation-note textarea:focus{height:64px}
.recon-compact .reconciliation-note button{flex:0 0 auto;white-space:nowrap}
.reconciliation-table.recon-compact-unmatched{min-width:1220px!important}

.reconciliation-table.recon-compact>thead>tr>th:nth-child(10),.reconciliation-table.recon-compact>tbody>tr>td:nth-child(10){padding-left:6px!important;padding-right:6px!important;overflow-wrap:anywhere}
.recon-compact>tbody>tr>td:nth-child(10) .status{max-width:100%;box-sizing:border-box;white-space:normal;font-size:12px;line-height:16px;padding:2px 3px}

.recon-compact .note-review-line{display:flex;flex-direction:column;align-items:stretch;gap:3px;min-width:0}.recon-compact .note-review-line>.reconciliation-note{width:100%;min-width:0}.recon-compact .note-review-line .manual-review-actions{gap:3px;margin:0}.recon-compact .manual-review-actions .diff-unit{font-size:11px;line-height:14px}.recon-compact .receipt-toggle{display:block!important;padding:0!important;margin-top:2px}.recon-compact .note-save-status{white-space:normal}.recon-compact .reconciliation-note{flex-wrap:wrap}.recon-compact .note-save-status:not(:empty){flex-basis:100%}

/* Full-width reconciliation expansion panel. */
.reconciliation-table .recon-detail-row[hidden]{display:none!important}
.reconciliation-table.recon-compact>tbody>tr.recon-detail-row>td{padding:0 12px 12px!important;white-space:normal!important;background:#f8fafc!important;border-bottom:1px solid #dbe4ee}
.recon-detail-row>td>details{padding:0!important;margin:0!important;border:0!important;background:transparent!important;min-width:0}
.recon-detail-row>td>details>summary{display:none!important}
.recon-detail-panel{box-sizing:border-box;padding:14px 18px;background:#f8fafc;border:1px solid #dbe4ee;border-radius:8px;margin:0;white-space:normal;overflow-wrap:anywhere;text-align:left;color:#334155}
.recon-detail-heading{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-bottom:12px;line-height:20px}
.recon-detail-heading>strong{font-size:13px;color:#334155;flex-shrink:0}
.recon-detail-heading>span{font-size:12px;color:#64748b;min-width:0;white-space:normal}
.recon-detail-prices{display:grid;grid-template-columns:repeat(3,minmax(0,200px));gap:12px}
.recon-detail-prices>div{display:flex;flex-direction:column;gap:5px;border-left:2px solid #cbd5e1;padding-left:12px;min-width:0}
.recon-detail-prices span{font-size:12px;color:#64748b;line-height:18px}
.recon-detail-prices strong{font-size:15px;color:#1e293b;font-variant-numeric:tabular-nums;line-height:22px}
.recon-detail-empty{margin:12px 0 0;font-size:12px;line-height:18px;color:#64748b}
.recon-detail-row .lazy-receipt-body{margin-top:10px;white-space:normal;overflow-x:auto;max-width:100%}
.recon-detail-row .lazy-receipt-body table{table-layout:auto;min-width:0!important;width:100%;font-size:12px}
.recon-detail-row .lazy-receipt-body th,.recon-detail-row .lazy-receipt-body td{white-space:normal;overflow-wrap:anywhere}
.recon-compact>tbody>tr:has(.receipt-toggle[aria-expanded=true])>td{background:#f8fafc!important;border-bottom-color:transparent}
.recon-compact .receipt-toggle{border:0;background:transparent;color:#2563eb;cursor:pointer;font-size:12px;line-height:18px}
