:root{color:#1f2937;background:#f6f8fb;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}body{margin:0}button{border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#1f2937;cursor:pointer;font-size:14px;min-height:36px;padding:0 14px}button:disabled{cursor:not-allowed;opacity:.6}button.primary{background:#166534;border-color:#166534;color:#fff}button.execute{background:#9f1239;border-color:#9f1239;color:#fff}input,select{border:1px solid #cbd5e1;border-radius:6px;box-sizing:border-box;color:#1f2937;font-size:14px;min-height:36px;padding:0 10px}.app-shell{margin:0 auto;max-width:1180px;padding:32px 20px}.toolbar{align-items:center;display:flex;justify-content:space-between;gap:16px;margin-bottom:20px}.toolbar h1{font-size:28px;margin:0 0 6px}.toolbar p{color:#64748b;margin:0}.toolbar-actions{align-items:center;display:flex;gap:10px}.toolbar-actions span{color:#475569;font-size:14px;font-weight:600}.actions{display:flex;gap:10px}.notice{background:#ecfdf5;border:1px solid #bbf7d0;border-radius:6px;margin-bottom:16px;padding:12px 14px;overflow-wrap:anywhere}.login-shell{align-items:center;display:flex;justify-content:center;min-height:100vh;padding:24px;box-sizing:border-box}.login-panel{background:#fff;border:1px solid #dbe2ea;border-radius:8px;box-shadow:0 16px 40px #0f172a14;box-sizing:border-box;display:grid;gap:18px;max-width:400px;padding:28px;width:100%}.login-panel header{border-bottom:1px solid #e2e8f0;padding-bottom:16px}.login-panel h1{font-size:24px;margin:0 0 6px}.login-panel p{color:#64748b;margin:0}.login-panel label{display:grid;gap:7px}.login-panel label span{color:#334155;font-size:14px;font-weight:600}.login-panel input,.login-panel button{min-height:42px;width:100%}.login-error{background:#fef2f2;border:1px solid #fecaca;border-radius:6px;color:#991b1b;font-size:14px;padding:10px 12px}.login-status{color:#475569;font-size:14px}.config-status{border:1px solid #e2e8f0;border-radius:8px;margin-bottom:16px;padding:12px 14px}.config-grid{align-items:center;display:grid;gap:10px 16px;grid-template-columns:repeat(2,minmax(0,1fr))}.config-grid div{align-items:center;display:flex;gap:10px;min-width:0}.config-status strong{font-size:15px;white-space:nowrap}.config-status span{border-radius:999px;font-size:12px;font-weight:700;padding:4px 8px;white-space:nowrap}.config-status code{background:#ffffffa6;border:1px solid rgba(148,163,184,.35);border-radius:6px;color:#334155;font-size:12px;overflow:hidden;padding:4px 8px;text-overflow:ellipsis;white-space:nowrap}.config-status p{color:#475569;margin:8px 0 0;overflow-wrap:anywhere}.config-status p.invalid-config{color:#b91c1c}.config-status.ready{background:#f0fdf4;border-color:#bbf7d0}.config-status.ready span{background:#dcfce7;color:#166534}.config-status.warning{background:#fffbeb;border-color:#fde68a}.config-status.warning span{background:#fef3c7;color:#92400e}.runtime-status{background:#fff;border:1px solid #e2e8f0;border-radius:8px;display:grid;gap:12px;grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:16px;padding:12px 14px}.platforms{display:grid;gap:10px;grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:16px}.platforms div{align-items:center;background:#fff;border:1px solid #e2e8f0;border-radius:8px;display:flex;justify-content:space-between;gap:8px;min-width:0;padding:10px 12px}.platforms strong{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.platforms span{border-radius:999px;flex:0 0 auto;font-size:12px;font-weight:700;padding:4px 8px}.platforms .active{border-color:#bbf7d0}.platforms .active span{background:#dcfce7;color:#166534}.platforms .planned span{background:#f1f5f9;color:#475569}.runtime-status.running{border-color:#93c5fd}.runtime-status div{display:grid;gap:6px;min-width:0}.runtime-status span{color:#64748b;font-size:13px;font-weight:600}.runtime-status strong{color:#1f2937;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sync-window,.filters{align-items:end;background:#fff;border:1px solid #e2e8f0;border-radius:8px;display:grid;gap:12px;grid-template-columns:180px 180px minmax(220px,1fr) auto;margin-bottom:16px;padding:14px}.sync-window{grid-template-columns:minmax(220px,1fr) minmax(220px,1fr) minmax(240px,auto)}.sync-actions{display:flex;gap:8px}.standalone-readback{background:#fff;border:1px solid #e2e8f0;border-radius:8px;margin-bottom:16px}.standalone-readback-heading{align-items:center;border-bottom:1px solid #e2e8f0;display:flex;gap:16px;justify-content:space-between;padding:12px 14px}.standalone-readback-heading h2{font-size:18px;margin:0 0 4px}.standalone-readback-heading p{color:#64748b;font-size:13px;margin:0}.standalone-readback-heading>span{border-radius:999px;flex:0 0 auto;font-size:12px;font-weight:700;padding:4px 8px}.standalone-readback-heading>span.matched{background:#dcfce7;color:#166534}.standalone-readback-heading>span.review{background:#fef3c7;color:#92400e}.standalone-readback-form{align-items:end;display:grid;gap:10px;grid-template-columns:minmax(240px,1fr) auto;padding:14px}.standalone-readback-form label{display:grid;gap:5px}.standalone-readback-form label span{color:#475569;font-size:12px;font-weight:600}.standalone-readback-result{border-top:1px solid #e2e8f0}.standalone-readback-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}.standalone-readback-summary div{border-bottom:1px solid #e2e8f0;border-right:1px solid #e2e8f0;display:grid;gap:4px;min-width:0;padding:10px 14px}.standalone-readback-summary div:last-child{border-right:0}.standalone-readback-summary span{color:#64748b;font-size:12px}.standalone-readback-summary strong{font-size:14px;overflow-wrap:anywhere}.standalone-action-table{min-width:820px}.standalone-readback-issues{border-top:1px solid #e2e8f0;display:flex;flex-wrap:wrap;gap:6px;padding:10px 14px}.standalone-readback-issues code{border-radius:4px;font-size:11px;padding:4px 6px}.standalone-readback-issues code.blocker{background:#fee2e2;color:#991b1b}.standalone-readback-issues code.warning{background:#fef3c7;color:#92400e}.standalone-readback-result>.field-reconciliation{padding:12px 14px 14px}.preview-panel{background:#fff;border:1px solid #e2e8f0;border-radius:8px;margin-bottom:16px}.preview-panel.ready{border-color:#86efac}.preview-panel.blocked{border-color:#fca5a5}.preview-heading{align-items:center;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;gap:16px;padding:12px 14px}.preview-heading h2{font-size:18px;margin:0 0 4px}.preview-heading p{color:#64748b;font-size:12px;margin:0}.preview-heading>strong{flex:0 0 auto;font-size:14px;white-space:nowrap}.preview-panel.ready .preview-heading>strong{color:#166534}.preview-panel.blocked .preview-heading>strong{color:#b91c1c}.preview-summary{border-bottom:1px solid #e2e8f0;display:grid;grid-template-columns:repeat(6,minmax(0,1fr))}.preview-summary div{border-right:1px solid #e2e8f0;display:grid;gap:4px;padding:10px 14px}.preview-summary div:last-child{border-right:0}.preview-summary span{color:#64748b;font-size:12px}.preview-summary strong{font-size:18px}.preview-table-wrap{overflow:auto}.preview-table{min-width:1040px}.preview-table th{white-space:nowrap}.preview-table td:first-child{min-width:130px}.preview-table td:nth-child(2),.preview-table td:nth-child(3),.preview-table td:nth-child(5),.preview-table td:nth-child(6){min-width:86px;white-space:nowrap}.preview-table td:nth-child(4){min-width:180px}.preview-table td:nth-child(7){min-width:280px}.preview-table td>strong,.preview-table td>small{display:block}.preview-table td>small{color:#64748b;margin-top:4px}.line-plan{display:grid;gap:2px;margin-bottom:8px}.line-plan:last-child{margin-bottom:0}.line-plan span{color:#64748b;font-size:12px;white-space:nowrap}.plan-issue{font-size:12px;line-height:1.45;margin-bottom:6px}.plan-issue:last-child{margin-bottom:0}.plan-issue.blocker{color:#b91c1c}.plan-issue.warning{color:#92400e}.notification-panel,.job-panel{background:#fff;border:1px solid #e2e8f0;border-radius:8px;margin-bottom:16px}.notification-heading,.job-heading{align-items:end;border-bottom:1px solid #e2e8f0;display:flex;gap:16px;justify-content:space-between;padding:12px 14px}.notification-heading h2,.job-heading h2{font-size:18px;margin:0 0 4px}.notification-heading p,.job-heading p{color:#64748b;font-size:13px;margin:0}.notification-heading label,.job-heading label{display:grid;gap:4px;min-width:130px}.notification-heading label span,.job-heading label span{color:#64748b;font-size:12px;font-weight:600}.notification-table-wrap,.job-table-wrap,.job-step-table-wrap{overflow:auto}.job-table{min-width:1180px}.job-table td:nth-child(7){max-width:300px}.job-state{border-radius:999px;display:inline-flex;font-size:12px;font-weight:700;padding:4px 8px;white-space:nowrap}.job-state.succeeded,.job-state.verified{background:#dcfce7;color:#166534}.job-state.planned,.job-state.received,.job-state.snapshotted,.job-state.validated,.job-state.writing{background:#dbeafe;color:#1d4ed8}.job-state.partial,.job-state.needs_review{background:#fef3c7;color:#92400e}.job-state.failed,.job-state.blocked{background:#fee2e2;color:#991b1b}.job-state.skipped{background:#f1f5f9;color:#475569}.job-detail{border-top:1px solid #e2e8f0;display:grid;gap:12px;padding:14px}.job-detail h3{font-size:17px;margin:0 0 4px}.job-step-table{min-width:920px}.recovery-plan{border-top:1px solid #e2e8f0;display:grid;gap:10px;padding-top:14px}.recovery-plan-heading{align-items:center;display:flex;gap:12px;justify-content:space-between}.recovery-plan-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.recovery-plan-heading p{color:#64748b;font-size:13px;margin:0}.recovery-plan-status,.recovery-plan-blockers span{border-radius:999px;display:inline-flex;font-size:12px;font-weight:700;padding:4px 8px;white-space:nowrap}.recovery-plan-status.ready{background:#dcfce7;color:#166534}.recovery-plan-status.blocked,.recovery-plan-blockers span{background:#fee2e2;color:#991b1b}.recovery-plan-blockers{display:flex;flex-wrap:wrap;gap:6px}.recovery-plan-table{min-width:760px}.recovery-readback{border-top:1px solid #e2e8f0;display:grid;gap:10px;padding-top:12px}.recovery-readback-heading{align-items:end;display:flex;gap:12px;justify-content:space-between}.recovery-readback-heading p,.recovery-readback-heading time{color:#64748b;font-size:12px;margin:0}.recovery-readback-table{min-width:1040px}.field-reconciliation{border-top:1px solid #e2e8f0;display:grid;gap:10px;padding-top:12px}.field-reconciliation-heading{align-items:end;display:flex;gap:12px;justify-content:space-between}.field-reconciliation-heading p,.field-reconciliation-heading>span{color:#64748b;font-size:12px;margin:0}.field-reconciliation-table{min-width:1080px}.field-reconciliation-status{border-radius:999px;display:inline-flex;font-size:12px;font-weight:700;padding:4px 8px;white-space:nowrap}.field-reconciliation-status.matched{background:#dcfce7;color:#166534}.field-reconciliation-status.mismatch,.field-reconciliation-status.missing_record{background:#fee2e2;color:#991b1b}.field-reconciliation-status.unverifiable{background:#fef3c7;color:#92400e}.field-reconciliation-status.not_applicable{background:#e2e8f0;color:#475569}.readback-verdict{border-radius:999px;display:inline-flex;font-size:12px;font-weight:700;padding:4px 8px;white-space:nowrap}.readback-verdict.identity_confirmed,.readback-verdict.confirmed_skip,.readback-verdict.historical_only{background:#dcfce7;color:#166534}.readback-verdict.present,.readback-verdict.absent,.readback-verdict.currently_skipped{background:#fef3c7;color:#92400e}.readback-verdict.blocked,.readback-verdict.conflict,.readback-verdict.state_changed,.readback-verdict.source_changed,.readback-verdict.unverifiable{background:#fee2e2;color:#991b1b}.recovery-form{align-items:end;border-top:1px solid #e2e8f0;display:grid;gap:12px;grid-template-columns:minmax(360px,1fr) auto;padding-top:14px}.recovery-form>div:first-child{grid-column:1 / -1}.recovery-form h3,.recovery-history h3{font-size:16px;margin:0}.recovery-form label{display:grid;gap:6px}.recovery-form label span{color:#475569;font-size:13px;font-weight:600}.recovery-form textarea{border:1px solid #cbd5e1;border-radius:6px;box-sizing:border-box;color:#1f2937;font:inherit;min-height:72px;padding:8px 10px;resize:vertical;width:100%}.recovery-history{border-top:1px solid #e2e8f0;display:grid;gap:10px;padding-top:14px}.recovery-table{min-width:880px}.recovery-table th:nth-child(-n+3),.recovery-table td:nth-child(-n+3){white-space:nowrap}.notification-table{min-width:980px}.notification-table td:first-child strong,.notification-table td:first-child small{display:block}.notification-table td:first-child small{color:#64748b;margin-top:4px}.notification-table td:nth-child(6){max-width:280px}.notification-state{border-radius:999px;display:inline-flex;font-size:12px;font-weight:700;padding:4px 8px;white-space:nowrap}.notification-state.sent{background:#dcfce7;color:#166534}.notification-state.pending,.notification-state.sending{background:#dbeafe;color:#1d4ed8}.notification-state.failed{background:#fef3c7;color:#92400e}.notification-state.dead-letter{background:#fee2e2;color:#991b1b}.notification-panel a{align-items:center;color:#1d4ed8;display:inline-flex;font-size:13px;min-height:36px;text-decoration:none}.sync-window label,.filters label{display:grid;gap:6px}.sync-window label span,.filters label span{color:#475569;font-size:13px;font-weight:600}.summary-grid{display:grid;gap:12px;grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:16px}.summary-grid div{background:#fff;border:1px solid #e2e8f0;border-radius:8px;display:grid;gap:6px;min-height:72px;padding:12px 14px}.summary-grid span{color:#64748b;font-size:13px;font-weight:600}.summary-grid strong{color:#1f2937;font-size:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filter-actions{display:flex;gap:8px}.row-actions{display:flex;flex-wrap:wrap;gap:8px}.table-wrap{background:#fff;border:1px solid #e2e8f0;border-radius:8px;margin-bottom:16px;overflow:auto}table{border-collapse:collapse;min-width:980px;width:100%}th,td{border-bottom:1px solid #e2e8f0;font-size:14px;padding:12px 14px;text-align:left;vertical-align:top}th{background:#f8fafc;color:#475569;font-weight:600}.empty{color:#64748b;text-align:center}.status{border-radius:999px;display:inline-flex;font-size:12px;font-weight:700;padding:4px 8px}.status.success{background:#dcfce7;color:#166534}.status.failed{background:#fee2e2;color:#991b1b}.status.skipped{background:#fef3c7;color:#92400e}.log-detail{background:#fff;border:1px solid #e2e8f0;border-radius:8px;display:grid;gap:14px;padding:14px}.detail-heading{align-items:start;display:flex;gap:16px;justify-content:space-between}.detail-heading h2{font-size:18px;margin:0 0 4px}.detail-heading p{color:#64748b;margin:0}.detail-grid{display:grid;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}.detail-grid div,.detail-block{border:1px solid #e2e8f0;border-radius:8px;display:grid;gap:8px;padding:10px 12px}.detail-grid span,.detail-block span{color:#64748b;font-size:13px;font-weight:600}.detail-grid strong{color:#1f2937;font-size:15px}.detail-block pre{background:#f8fafc;border-radius:6px;color:#334155;font-size:12px;line-height:1.5;margin:0;max-height:220px;overflow:auto;padding:10px;white-space:pre-wrap;word-break:break-word}@media(max-width:720px){.toolbar{align-items:stretch;flex-direction:column}.actions{flex-wrap:wrap}.sync-window,.filters{grid-template-columns:1fr}.sync-actions{flex-wrap:wrap}.standalone-readback-heading{align-items:start;flex-direction:column;gap:8px}.standalone-readback-form{align-items:stretch;grid-template-columns:1fr}.standalone-readback-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.standalone-readback-summary div:nth-child(2n){border-right:0}.preview-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.preview-summary div:nth-child(2n){border-right:0}.toolbar-actions{flex-wrap:wrap}.config-grid{grid-template-columns:1fr}.summary-grid,.runtime-status,.platforms{grid-template-columns:repeat(2,minmax(0,1fr))}.filter-actions{flex-wrap:wrap}.detail-heading{flex-direction:column}.notification-heading,.job-heading{align-items:stretch;flex-direction:column}.detail-grid{grid-template-columns:1fr}.recovery-form{align-items:stretch;grid-template-columns:1fr}.recovery-readback-heading,.field-reconciliation-heading{align-items:start;flex-direction:column;gap:4px}}
