:root{--bg: #f7f8fb;--surface: #ffffff;--surface-2: #f8fafc;--surface-3: #f1f4f9;--text: #0b1424;--text-2: #2c3a52;--text-3: #5b6b85;--text-4: #8b97ad;--text-inverse: #ffffff;--border: #e6eaf2;--border-strong: #d2d9e5;--border-focus: #3b6cf2;--brand: #3b6cf2;--brand-600: #2f5ad8;--brand-50: #ecf1ff;--brand-100: #d6e2ff;--brand-200: #aec3ff;--success: #16a567;--success-50: #e7f7ee;--success-100: #c7ecd6;--warning: #d18403;--warning-50: #fdf3df;--warning-100: #f9e2b2;--danger: #d83a3a;--danger-50: #fdecec;--danger-100: #f9d2d2;--info: #1f8fcd;--info-50: #e6f3fb;--info-100: #c8e3f4;--purple: #7c5cf0;--purple-50: #efeaff;--teal: #0fb6a3;--teal-50: #e0f7f4;--neutral-50: #f1f4f9;--neutral-100: #e3e8ef;--shadow-sm: 0 1px 2px rgba(15, 23, 41, .04);--shadow: 0 1px 3px rgba(15, 23, 41, .06), 0 1px 2px rgba(15, 23, 41, .04);--shadow-md: 0 4px 14px rgba(15, 23, 41, .06), 0 2px 4px rgba(15, 23, 41, .04);--shadow-lg: 0 12px 28px rgba(15, 23, 41, .08), 0 4px 10px rgba(15, 23, 41, .04);--radius-sm: 6px;--radius: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-pill: 999px;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--fs-xs: 11px;--fs-sm: 12px;--fs-base: 14px;--fs-md: 15px;--fs-lg: 18px;--fs-xl: 22px;--fs-2xl: 28px;--fs-3xl: 36px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 32px;--space-8: 40px;--space-9: 56px}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-base);font-weight:400;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv11" 1,"ss01" 1}a{color:var(--brand);text-decoration:none}a:hover{color:var(--brand-600);text-decoration:underline;text-underline-offset:2px}button{font:inherit;color:inherit;cursor:pointer}::selection{background:var(--brand-100);color:var(--text)}h1,h2,h3,h4{margin:0;color:var(--text);font-weight:700;letter-spacing:-.018em}h1{font-size:var(--fs-3xl);line-height:1.15}h2{font-size:var(--fs-xl);line-height:1.25}h3{font-size:var(--fs-md);line-height:1.35;font-weight:600}h4{font-size:var(--fs-base);line-height:1.4;font-weight:600}p{margin:0}.muted{color:var(--text-3)}.dim{color:var(--text-2)}.subtle{color:var(--text-4)}.mono{font-family:var(--font-mono);font-size:12px}.tnum{font-variant-numeric:tabular-nums}.uppercase{text-transform:uppercase;letter-spacing:.06em}.label-xs{font-size:var(--fs-xs);font-weight:500;color:var(--text-3);text-transform:uppercase;letter-spacing:.08em}.row{display:flex;gap:var(--space-3);align-items:center}.col{display:flex;flex-direction:column}.between{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3)}input,select,textarea{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:9px 14px;font-family:inherit;font-size:var(--fs-sm);transition:border-color .15s,box-shadow .15s;width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--border-focus);box-shadow:0 0 0 3px #3b6cf226}input::placeholder{color:var(--text-4)}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%235b6b85' stroke-width='2'><polyline points='6 9 12 15 18 9'/></svg>");background-repeat:no-repeat;background-position:right 10px center;padding-right:32px}.field-search{position:relative}.field-search>svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--text-4);pointer-events:none}.field-search>input{padding-left:40px;height:40px;border-radius:var(--radius-pill);background:var(--surface)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:36px;padding:0 16px;border-radius:var(--radius);font-size:var(--fs-sm);font-weight:500;border:1px solid transparent;background:transparent;transition:all .12s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--brand);color:var(--text-inverse);border-color:var(--brand);box-shadow:0 1px 2px #3b6cf240}.btn-primary:hover:not(:disabled){background:var(--brand-600);border-color:var(--brand-600)}.btn-secondary{background:var(--surface);color:var(--text-2);border-color:var(--border);box-shadow:var(--shadow-sm)}.btn-secondary:hover:not(:disabled){background:var(--surface-3);color:var(--text)}.btn-ghost{color:var(--text-2)}.btn-ghost:hover:not(:disabled){background:var(--surface-3);color:var(--text)}.btn-icon{width:36px;height:36px;padding:0;border-radius:var(--radius);color:var(--text-3)}.btn-icon:hover:not(:disabled){background:var(--surface-3);color:var(--text)}.btn-icon-square{width:32px;height:32px;padding:0;border-radius:var(--radius-sm);color:var(--brand);background:var(--brand-50)}.btn-icon-square:hover{background:var(--brand-100)}.btn-icon-square.solid{background:var(--brand);color:#fff}.btn-icon-square.solid:hover{background:var(--brand-600)}.segmented{display:inline-flex;background:var(--surface-3);padding:4px;border-radius:var(--radius-pill);gap:2px}.segmented button{height:32px;padding:0 16px;border-radius:var(--radius-pill);background:transparent;border:none;font-size:var(--fs-sm);font-weight:500;color:var(--text-3);transition:all .15s}.segmented button:hover{color:var(--text)}.segmented button.active{background:var(--brand);color:#fff;box-shadow:0 1px 2px #3b6cf240}.badge{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 12px;border-radius:var(--radius-pill);font-size:var(--fs-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;border:1px solid transparent;font-variant-numeric:tabular-nums}.badge .dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}.badge-success,.badge-completed,.badge-migrated,.badge-active{background:var(--success-50);color:var(--success)}.badge-warning,.badge-partial,.badge-skipped{background:var(--warning-50);color:var(--warning)}.badge-danger,.badge-failed,.badge-blocked{background:var(--danger-50);color:var(--danger)}.badge-info,.badge-running,.badge-in_progress{background:var(--info-50);color:var(--info)}.badge-info .dot,.badge-running .dot,.badge-in_progress .dot{animation:pulse 1.6s infinite ease-in-out}.badge-neutral,.badge-pending,.badge-default{background:var(--neutral-50);color:var(--text-2)}.badge-brand{background:var(--brand-50);color:var(--brand)}.badge-purple{background:var(--purple-50);color:var(--purple)}.badge-teal{background:var(--teal-50);color:var(--teal)}.badge.lg{height:30px;padding:0 14px;font-size:var(--fs-sm)}.badge.no-dot .dot{display:none}@keyframes pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.2)}}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-sm)}table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}thead{background:var(--surface);border-bottom:1px solid var(--border)}th{text-align:left;font-weight:600;font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.08em;color:var(--text-4);padding:10px 20px;white-space:nowrap}td{padding:10px 20px;border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:var(--surface-2)}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:hover{color:var(--text-2)}th .sort-arrow{display:inline-block;margin-left:4px;opacity:.5}th.sorted .sort-arrow{opacity:1;color:var(--brand)}.cell-mono{font-family:var(--font-mono);font-size:12px}.cell-num{font-variant-numeric:tabular-nums;text-align:right;font-weight:500}.cell-strong{font-weight:600;color:var(--text)}.cell-link{color:var(--brand);font-weight:500}.cell-link:hover{text-decoration:underline;text-underline-offset:2px}.cell-icon{width:36px;height:36px;border-radius:var(--radius);display:grid;place-items:center;flex-shrink:0;color:#fff}.cell-icon svg{width:18px;height:18px}.cell-icon.brand{background:linear-gradient(135deg,#5b8bff,#2f5ad8)}.cell-icon.success{background:linear-gradient(135deg,#34c98a,#0e8b59)}.cell-icon.warning{background:linear-gradient(135deg,#f0b65f,#c47a04)}.cell-icon.danger{background:linear-gradient(135deg,#ef6e6e,#c12d2d)}.cell-icon.info{background:linear-gradient(135deg,#4cb1e6,#1a74a6)}.cell-icon.purple{background:linear-gradient(135deg,#9d83fa,#6342ce)}.cell-icon.teal{background:linear-gradient(135deg,#46c8b8,#0a9586)}.cell-with-icon .name{font-weight:600;color:var(--text)}.cell-with-icon .sub{font-size:var(--fs-xs);color:var(--text-3)}.trend{display:inline-flex;align-items:center;gap:3px;font-weight:600;font-size:var(--fs-sm);font-variant-numeric:tabular-nums}.trend.up{color:var(--success)}.trend.down{color:var(--danger)}.trend.flat{color:var(--text-3)}.trend svg{width:14px;height:14px}.loader{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:56px 24px;color:var(--text-3);font-size:var(--fs-sm)}.loader.inline{padding:32px 24px}.spinner{width:28px;height:28px;border-radius:50%;border:2.5px solid var(--surface-3);border-top-color:var(--brand);animation:spin .7s linear infinite}.spinner.sm{width:16px;height:16px;border-width:2px}@keyframes spin{to{transform:rotate(360deg)}}.recharts-surface{overflow:visible}.recharts-cartesian-axis-tick-value{font-family:var(--font-sans);font-size:11px;fill:var(--text-3)}.recharts-legend-item-text{font-size:12px!important;color:var(--text-2)!important}.recharts-tooltip-wrapper{outline:none!important}hr{border:none;border-top:1px solid var(--border);margin:var(--space-5) 0}code{font-family:var(--font-mono);font-size:12px;background:var(--surface-3);padding:1px 6px;border-radius:3px;color:var(--text)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:10px;border:2px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:var(--text-4)}.shell{display:grid;grid-template-columns:72px 1fr;min-height:100vh;background:var(--bg)}.workspace{display:flex;flex-direction:column;min-width:0;min-height:100vh}.sidebar{background:var(--surface);border-right:1px solid var(--border);position:sticky;top:0;height:100vh;display:flex;flex-direction:column;align-items:center;padding:16px 0;z-index:20}.sidebar .brand-mark{width:44px;height:44px;border-radius:var(--radius-md);background:linear-gradient(135deg,#5b8bff,#2f5ad8);display:grid;place-items:center;color:#fff;flex-shrink:0;margin-bottom:28px;box-shadow:0 4px 14px #3b6cf240}.sidebar .brand-mark svg{width:22px;height:22px}.nav{display:flex;flex-direction:column;gap:8px;align-items:center;width:100%;flex:1}.nav a{width:44px;height:44px;border-radius:var(--radius);display:grid;place-items:center;color:var(--text-3);transition:all .15s;position:relative}.nav a svg{width:20px;height:20px}.nav a:hover{color:var(--text);background:var(--surface-3);text-decoration:none}.nav a.active{color:var(--brand);background:var(--brand-50)}.nav a:after{content:attr(data-label);position:absolute;left:calc(100% + 12px);top:50%;transform:translateY(-50%);background:var(--text);color:#fff;font-size:var(--fs-xs);font-weight:500;padding:6px 10px;border-radius:var(--radius-sm);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:1000;box-shadow:var(--shadow-md)}.nav a:hover:after{opacity:1}.sidebar-footer{display:flex;flex-direction:column;gap:8px;align-items:center}.sidebar-footer button{width:44px;height:44px;border-radius:var(--radius);border:1px solid var(--border);background:var(--surface);color:var(--text-3);display:grid;place-items:center}.sidebar-footer button:hover{color:var(--text);background:var(--surface-3)}.sidebar-footer button svg{width:18px;height:18px}.topbar{background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 32px;gap:24px;height:72px;position:sticky;top:0;z-index:10;flex-shrink:0}.topbar .page-title{flex:1;display:flex;flex-direction:column;gap:2px}.topbar .page-title h1{font-size:var(--fs-2xl);font-weight:700;letter-spacing:-.02em;color:var(--text)}.topbar .page-title .crumbs{font-size:var(--fs-xs);color:var(--text-3);display:flex;align-items:center;gap:6px}.topbar .page-title .crumbs a{color:var(--text-3);font-weight:500}.topbar .page-title .crumbs a:hover{color:var(--brand)}.topbar .page-title .crumbs svg{width:12px;height:12px;color:var(--text-4)}.topbar .topbar-actions{display:flex;align-items:center;gap:12px}.topbar .topbar-actions .label{font-size:var(--fs-sm);color:var(--text-3);font-weight:500}.refresh-status{display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--text-3);font-weight:500}.refresh-status .pulse{width:8px;height:8px;border-radius:50%;background:var(--success);box-shadow:0 0 #16a56766;animation:live-pulse 2s infinite}@keyframes live-pulse{0%{box-shadow:0 0 #16a56766}70%{box-shadow:0 0 0 6px #16a56700}to{box-shadow:0 0 #16a56700}}.main{padding:28px 32px 56px;width:100%;flex:1;min-width:0}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:24px}.kpi{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:22px;display:flex;flex-direction:column;gap:12px;box-shadow:var(--shadow-sm);overflow:hidden;transition:transform .15s,box-shadow .15s}.kpi:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.kpi:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent-from, var(--brand)) 0%,var(--accent-to, var(--brand-200)) 100%)}.kpi.tone-success{--accent-from: var(--success);--accent-to: #5fd4a1}.kpi.tone-warning{--accent-from: var(--warning);--accent-to: #efbf69}.kpi.tone-danger{--accent-from: var(--danger);--accent-to: #f48b8b}.kpi.tone-info{--accent-from: var(--info);--accent-to: #6dc5e8}.kpi.tone-purple{--accent-from: var(--purple);--accent-to: #b4a3f7}.kpi .kpi-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}.kpi .kpi-label{font-size:var(--fs-sm);font-weight:500;color:var(--text-3)}.kpi .kpi-icon{width:40px;height:40px;border-radius:var(--radius);display:grid;place-items:center;flex-shrink:0}.kpi .kpi-icon svg{width:18px;height:18px}.kpi .kpi-icon.brand{background:var(--brand-50);color:var(--brand)}.kpi .kpi-icon.success{background:var(--success-50);color:var(--success)}.kpi .kpi-icon.warning{background:var(--warning-50);color:var(--warning)}.kpi .kpi-icon.danger{background:var(--danger-50);color:var(--danger)}.kpi .kpi-icon.info{background:var(--info-50);color:var(--info)}.kpi .kpi-icon.purple{background:var(--purple-50);color:var(--purple)}.kpi .kpi-value{font-size:var(--fs-3xl);font-weight:700;color:var(--text);line-height:1.05;letter-spacing:-.025em;font-variant-numeric:tabular-nums}.kpi .kpi-value small{font-size:var(--fs-md);font-weight:600;color:var(--text-3);margin-left:4px}.kpi .kpi-foot{display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--text-3)}.kpi .delta{display:inline-flex;align-items:center;gap:2px;font-weight:600;font-variant-numeric:tabular-nums}.kpi .delta.up{color:var(--success)}.kpi .delta.down{color:var(--danger)}.kpi .delta.flat{color:var(--text-3)}.kpi .delta svg{width:12px;height:12px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.card-header{padding:20px 24px 12px;display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}.card-header h3{font-size:var(--fs-md);font-weight:600}.card-header .subtitle{font-size:var(--fs-xs);color:var(--text-3);margin-top:2px}.card-body{padding:8px 24px 24px}.card-body.tight{padding:0}.progress{width:100%;height:8px;background:var(--surface-3);border-radius:999px;overflow:hidden}.progress>.fill{height:100%;background:var(--brand);border-radius:999px;transition:width .6s cubic-bezier(.2,.7,.2,1)}.progress.success>.fill{background:var(--success)}.progress.multi{display:flex;height:8px}.progress.multi>.seg{height:100%;transition:width .6s ease}.progress.multi>.seg:first-child{border-radius:999px 0 0 999px}.progress.multi>.seg:last-child{border-radius:0 999px 999px 0}.progress.multi>.seg.success{background:var(--success)}.progress.multi>.seg.warning{background:var(--warning)}.progress.multi>.seg.info{background:var(--info)}.progress.multi>.seg.danger{background:var(--danger)}.progress.multi>.seg.neutral{background:var(--neutral-100)}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:24px}.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;margin-bottom:24px}.grid-23{display:grid;grid-template-columns:2fr 1fr;gap:20px;margin-bottom:24px}.grid-32{display:grid;grid-template-columns:1fr 2fr;gap:20px;margin-bottom:24px}@media (max-width: 1280px){.kpi-grid{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:1fr 1fr}}@media (max-width: 980px){.shell{grid-template-columns:60px 1fr}.grid-2,.grid-3,.grid-23,.grid-32{grid-template-columns:1fr}.kpi-grid{grid-template-columns:1fr 1fr}.main{padding:20px}.topbar{padding:0 20px}.topbar .page-title h1{font-size:var(--fs-xl)}}.cell-with-icon{display:flex;align-items:center;gap:12px}.filters-row{display:flex;gap:12px;align-items:center;margin-bottom:20px;flex-wrap:wrap}.filters-row .field-search{flex:1;min-width:280px}.filters-row select{width:auto;min-width:160px;height:40px;border-radius:var(--radius)}.kv{display:grid;grid-template-columns:220px 1fr}.kv>dt{padding:14px 0;font-size:var(--fs-sm);color:var(--text-3);border-bottom:1px solid var(--border);font-weight:500}.kv>dd{margin:0;padding:14px 0;font-size:var(--fs-sm);color:var(--text);border-bottom:1px solid var(--border);word-break:break-word;font-weight:500}.kv>dt:last-of-type,.kv>dd:last-of-type{border-bottom:none}.empty{text-align:center;padding:56px 24px;color:var(--text-3)}.empty svg{width:36px;height:36px;margin-bottom:14px;color:var(--text-4)}.empty h4{color:var(--text);margin-bottom:4px}.empty p{font-size:var(--fs-sm)}.toolbar{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:var(--surface-2);border-top:1px solid var(--border);font-size:var(--fs-sm);color:var(--text-3)}.toolbar .pager{display:flex;gap:8px}.page-footer{margin-top:var(--space-9);padding-top:var(--space-5);border-top:1px solid var(--border);font-size:var(--fs-xs);color:var(--text-4);display:flex;justify-content:space-between;gap:var(--space-3)}.activity{display:flex;flex-direction:column}.activity-item{display:grid;grid-template-columns:32px 1fr auto;gap:14px;padding:14px 24px;border-bottom:1px solid var(--border);align-items:start}.activity-item:last-child{border-bottom:none}.activity-item .icon{width:32px;height:32px;border-radius:var(--radius);display:grid;place-items:center;flex-shrink:0}.activity-item .icon svg{width:16px;height:16px}.activity-item .icon.success{background:var(--success-50);color:var(--success)}.activity-item .icon.warning{background:var(--warning-50);color:var(--warning)}.activity-item .icon.danger{background:var(--danger-50);color:var(--danger)}.activity-item .icon.info{background:var(--info-50);color:var(--info)}.activity-item .body{min-width:0}.activity-item .body .title{font-size:var(--fs-sm);color:var(--text);font-weight:500}.activity-item .body .meta{font-size:var(--fs-xs);color:var(--text-3);margin-top:2px}.activity-item .timestamp{font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap;padding-top:4px}tbody tr.row-open td{background:var(--surface-2)}tbody tr.row-open td:first-child{color:var(--brand)!important}tbody tr.row-detail td{border-bottom:1px solid var(--border)}tbody tr.row-detail .checkpoint-list{background:transparent}.checkpoint-list{display:flex;flex-direction:column;gap:0}.checkpoint-row{display:grid;grid-template-columns:28px 240px 1fr 110px;gap:16px;padding:16px 24px;border-bottom:1px solid var(--border);align-items:center}.checkpoint-row:last-child{border-bottom:none}.checkpoint-row .step-marker{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;border:2px solid var(--border-strong);background:var(--surface)}.checkpoint-row .step-marker svg{width:14px;height:14px}.checkpoint-row.success .step-marker{background:var(--success);border-color:var(--success);color:#fff}.checkpoint-row.failed .step-marker{background:var(--danger);border-color:var(--danger);color:#fff}.checkpoint-row.skipped .step-marker{background:var(--surface);border-color:var(--text-4);color:var(--text-4)}.checkpoint-row.pending .step-marker{background:var(--surface);border-color:var(--border-strong);color:var(--text-4)}.checkpoint-row .step-label{font-weight:600;font-size:var(--fs-sm);color:var(--text)}.checkpoint-row .step-detail{font-size:var(--fs-xs);color:var(--text-3)}.checkpoint-row .step-detail.error{color:var(--danger)}.checkpoint-row .step-duration{text-align:right;font-size:var(--fs-sm);font-variant-numeric:tabular-nums;color:var(--text-2);font-weight:600}.action-bar{position:fixed;left:50%;transform:translate(-50%);bottom:24px;z-index:50;display:flex;align-items:center;gap:16px;padding:10px 14px 10px 20px;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-pill);box-shadow:0 12px 32px #0f172a2e;font-size:var(--fs-sm);animation:action-bar-in .16s cubic-bezier(.2,.7,.2,1)}@keyframes action-bar-in{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}.action-bar-info{display:flex;align-items:center;gap:12px;color:var(--text-2)}.action-bar-info strong{color:var(--text);font-weight:600}.btn.btn-sm{height:28px;padding:0 10px;font-size:var(--fs-xs)}tbody tr.row-selected td{background:var(--brand-50)}tbody tr.row-selected td:first-child{box-shadow:inset 2px 0 0 var(--brand)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:100;display:grid;place-items:center;padding:24px;animation:modal-fade .14s ease-out}.modal{width:min(560px,100%);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:0 24px 64px #0f172a47;display:flex;flex-direction:column;max-height:calc(100vh - 48px);overflow:hidden;animation:modal-pop .16s cubic-bezier(.2,.7,.2,1)}@keyframes modal-fade{0%{opacity:0}to{opacity:1}}@keyframes modal-pop{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 20px 12px 24px;border-bottom:1px solid var(--border)}.modal-header h3{font-size:var(--fs-lg);font-weight:600;color:var(--text)}.modal-header .subtitle{font-size:var(--fs-sm);color:var(--text-3);margin-top:2px}.modal-body{padding:20px 24px 8px;overflow-y:auto;display:flex;flex-direction:column;gap:18px}.modal-section{display:flex;flex-direction:column}.modal-section .label-xs{font-size:var(--fs-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3)}.modal-section input[type=password],.modal-section input[type=text]{height:40px;padding:0 12px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);color:var(--text);font-size:var(--fs-sm);outline:none;transition:border-color .12s,box-shadow .12s}.modal-section input[type=password]:focus,.modal-section input[type=text]:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-50)}.modal-section .subtle{font-size:var(--fs-xs);color:var(--text-3)}.stage-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;font-size:var(--fs-sm);color:var(--text-2)}.stage-list li{display:flex;gap:10px;padding:10px 12px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm)}.stage-list li>span{font-weight:700;color:var(--brand);font-variant-numeric:tabular-nums}.chip-row{display:flex;flex-wrap:wrap;gap:6px;max-height:132px;overflow-y:auto}.chip{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:var(--radius-pill);background:var(--brand-50);color:var(--brand);font-size:var(--fs-xs);font-weight:500;border:1px solid var(--brand-100, var(--brand-50))}.chip.mono{font-family:var(--mono, ui-monospace, SFMono-Regular, Menlo, monospace)}.chip.muted{background:var(--surface-3);color:var(--text-3);border-color:var(--border)}.modal-error{background:var(--danger-50);color:var(--danger);border:1px solid var(--danger);border-radius:var(--radius-sm);padding:10px 12px;font-size:var(--fs-sm)}.modal-footer{display:flex;justify-content:flex-end;gap:10px;padding:14px 20px;border-top:1px solid var(--border);background:var(--surface-2)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:20px}.tabs button{background:none;border:none;padding:12px 16px;font-size:var(--fs-sm);font-weight:500;color:var(--text-3);border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .12s}.tabs button:hover{color:var(--text)}.tabs button.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}.chart-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.chart-card-header{padding:16px 20px 8px;display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}.chart-card-header h3{font-size:var(--fs-md)}.chart-card-header .subtitle{font-size:var(--fs-xs);color:var(--text-3);margin-top:2px}.chart-card-header .legend-inline{display:flex;gap:12px;font-size:var(--fs-xs);color:var(--text-3)}.chart-card-header .legend-inline .swatch{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:middle}.chart-card-body{padding:8px 20px 20px}.chart-tooltip{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:10px 12px;font-size:var(--fs-xs);min-width:160px}.chart-tooltip .label{font-size:var(--fs-xs);color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px}.chart-tooltip .item{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:var(--fs-sm);padding:2px 0}.chart-tooltip .item .name{color:var(--text-2);display:flex;align-items:center;gap:6px}.chart-tooltip .item .name .swatch{width:8px;height:8px;border-radius:2px}.chart-tooltip .item .value{font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}.donut-center{text-anchor:middle;fill:var(--text)}.donut-center.value{font-size:24px;font-weight:600}.donut-center.sub{font-size:11px;fill:var(--text-3);text-transform:uppercase;letter-spacing:.06em}
