:root{--canvas:#f2f4f7;--surface:#ffffff;--surface-sunken:#f7f8fa;--border:#dde3ea;--divider:#edf0f4;--border-strong:#d0d5dd;--border-muted:#98a2b3;--track:#e4e7ec;--text:#101828;--text-secondary:#4a5565;--text-muted:#667085;--text-body:#344054;--nav:#0b1b2b;--nav-surface:#12263a;--nav-border:#23394f;--nav-text:#e4ecf5;--nav-text-muted:#8fa6be;--nav-text-dim:#b9cce2;--nav-chip:#1b3550;--nav-chip-text:#c9d8ea;--nav-avatar:#2b4a6b;--nav-sep:#4a6076;--brand:#2f6bea;--primary:#2453c7;--primary-hover:#1c43a6;--primary-soft:#e8eefb;--primary-soft-text:#1c3f99;--success:#0e7c66;--success-text:#0a5c4c;--success-soft:#dff3ec;--warning:#b45309;--warning-text:#7a3a06;--warning-soft:#fcefd9;--danger:#8a1c12;--danger-soft:#fbe4e1;--neutral-soft:#f2f4f7;--r-sm:6px;--r-md:8px;--r-lg:10px;--r-xl:12px;--r-pill:99px;--font-sans:"Be Vietnam Pro","Segoe UI",system-ui,-apple-system,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;--h-sm:30px;--h-md:36px;--h-lg:40px;--h-xl:44px;--sidebar-w:232px}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--canvas);color:var(--text);font-family:var(--font-sans);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--primary);text-decoration:none}a:hover{color:var(--primary-hover)}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:inherit}figure,h1,h2,h3,h4,ol,p,ul{margin:0;padding:0}ol,ul{list-style:none}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.mono{font-family:var(--font-mono)}.topbar{flex-wrap:wrap;gap:10px 16px;padding:10px 20px;background:var(--nav);color:var(--nav-text)}.topbar,.topbar-brand{display:flex;align-items:center}.topbar-brand{gap:10px;color:#fff}.topbar-logo{width:30px;height:30px;border-radius:var(--r-md);background:var(--brand);display:grid;place-items:center;flex:0 0 auto}.topbar-title{font-size:16px;font-weight:700;color:#fff;white-space:nowrap}.topbar-pill{min-height:var(--h-md);display:inline-flex;align-items:center;gap:6px;padding:0 10px;border-radius:var(--r-md);border:1px solid var(--nav-border);background:var(--nav-surface);color:var(--nav-text);font-size:13px}.topbar-pill:hover{filter:brightness(1.15)}.topbar-sep{color:var(--nav-sep)}.topbar-search{flex:1 1 240px;max-width:520px;display:flex;align-items:center;gap:8px;min-height:var(--h-md);padding:0 12px;border-radius:var(--r-md);background:var(--nav-surface);border:1px solid var(--nav-border);color:var(--nav-text-muted);position:relative}.topbar-search input{flex:1 1;min-width:0;border:none;background:transparent;color:var(--nav-text);font-size:13px;outline:none}.topbar-search input::placeholder{color:var(--nav-text-muted)}.topbar-right{display:flex;align-items:center;gap:10px;margin-left:auto}.lang-toggle{display:flex;padding:2px;border-radius:var(--r-md);background:var(--nav-surface);border:1px solid var(--nav-border);font-size:12px}.lang-toggle button{min-height:var(--h-sm);padding:0 9px;border-radius:var(--r-sm);border:none;background:transparent;color:var(--nav-text-dim);font-size:12px}.lang-toggle button[aria-pressed=true]{background:var(--brand);color:#fff}.role-chip{font-size:12px;padding:5px 10px;border-radius:var(--r-pill);background:var(--nav-chip);color:var(--nav-chip-text);white-space:nowrap}.avatar{width:32px;height:32px;border-radius:50%;background:var(--nav-avatar);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:600;flex:0 0 auto;border:none}.menu-toggle{display:none;min-height:var(--h-md);align-items:center;gap:6px;padding:0 10px;border-radius:var(--r-md);border:1px solid var(--nav-border);background:var(--nav-surface);color:var(--nav-text);font-size:13px}.shell{min-height:100vh;display:flex;flex-direction:column;background:var(--canvas)}.shell-body{flex:1 1;display:flex;align-items:stretch;min-height:0}.sidebar{flex:0 0 var(--sidebar-w);width:var(--sidebar-w);background:var(--surface);border-right:1px solid var(--border);padding:16px 12px;gap:16px}.nav-group,.sidebar{display:flex;flex-direction:column}.nav-group{gap:2px}.nav-group-label{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);padding:0 10px 4px}.nav-item{display:flex;align-items:center;gap:10px;padding:0 10px;min-height:var(--h-xl);border-radius:var(--r-md);color:var(--text-body);font-size:14px}.nav-item:hover{background:var(--canvas);color:var(--text-body)}.nav-item[aria-current=page]{background:var(--primary-soft);color:var(--primary-soft-text);font-weight:600}.nav-item svg{flex:0 0 auto}.nav-back{align-items:center;font-size:13px;padding:0 10px;min-height:var(--h-md)}.nav-back,.quota-box{display:flex;gap:8px;color:var(--text-secondary)}.quota-box{margin-top:auto;flex-direction:column;padding:12px 10px;border-radius:var(--r-lg);background:var(--surface-sunken);font-size:12px}.quota-row{display:flex;justify-content:space-between;gap:8px}.quota-row strong{font-weight:600;color:var(--text)}.bar{height:6px;background:var(--track);overflow:hidden}.bar,.bar>span{border-radius:var(--r-pill)}.bar>span{display:block;height:100%;background:var(--success)}.bar.warn>span{background:var(--warning)}.bar.danger>span{background:var(--danger)}.main{flex:1 1;min-width:0;padding:24px 32px 48px;display:flex;flex-direction:column;gap:20px}.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:16px}.page-head-text{display:flex;flex-direction:column;gap:6px;min-width:0}.breadcrumb{font-size:13px;color:var(--text-secondary)}.page-title{font-size:26px;font-weight:700;letter-spacing:-.01em;overflow-wrap:anywhere}.page-subtitle{font-size:14px;color:var(--text-secondary)}.page-actions{display:flex;flex-wrap:wrap;gap:8px}.btn{min-height:var(--h-lg);padding:0 14px;border-radius:var(--r-md);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);font-size:14px;display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap}.btn:hover:not(:disabled){filter:brightness(.97)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600;padding:0 16px}.btn-primary:hover:not(:disabled){background:var(--primary-hover);border-color:var(--primary-hover);filter:none}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff;font-weight:600}.btn-sm{min-height:var(--h-md);padding:0 11px;font-size:13px}.btn-ghost{border-color:transparent;background:transparent}.btn-ghost:hover:not(:disabled){background:var(--canvas)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);display:flex;flex-direction:column;min-width:0}.card-head,.card-pad{padding:16px 18px}.card-head{border-bottom:1px solid var(--divider);display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}.card-title{font-size:15px;font-weight:600}.card-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--divider)}.card-row:last-child{border-bottom:none}.grid-auto{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));grid-gap:14px;gap:14px}.grid-auto-sm{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr));grid-gap:12px;gap:12px}.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);padding:16px 18px;display:flex;flex-direction:column;gap:8px;min-width:0}.stat-label{font-size:12px;font-weight:600;color:var(--text-secondary);display:flex;align-items:center;gap:6px}.stat-value{font-size:22px;font-weight:700;letter-spacing:-.01em}.stat-value-sm{font-size:16px;font-weight:600}.stat-hint{font-size:13px;color:var(--text-secondary)}.two-col{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start}.col-main{flex:999 1 520px;min-width:0}.col-side{flex:1 1 340px;min-width:0}.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:3px 9px;border-radius:var(--r-sm);background:var(--neutral-soft);color:var(--text-body);white-space:nowrap}.chip-pill{border-radius:var(--r-pill)}.chip-info{background:var(--primary-soft);color:var(--primary-soft-text)}.chip-success{background:var(--success-soft);color:var(--success-text)}.chip-warning{background:var(--warning-soft);color:var(--warning-text)}.chip-danger{background:var(--danger-soft);color:var(--danger)}.dot{width:8px;height:8px;border-radius:50%;background:var(--success);flex:0 0 auto}.dot-live{animation:pulse 1.8s ease-in-out infinite}.dot-warning{background:var(--warning)}.dot-danger{background:var(--danger)}.dot-muted{background:var(--border-muted)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@media (prefers-reduced-motion:reduce){.dot-live{animation:none}}.filter-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.filter-chip{min-height:var(--h-md);padding:0 12px;border-radius:var(--r-pill);border:1px solid var(--border-strong);background:var(--surface);color:var(--text-body);font-size:13px;display:inline-flex;align-items:center;gap:6px}.filter-chip[aria-pressed=true]{background:var(--primary-soft);border-color:var(--primary);color:var(--primary-soft-text);font-weight:600}.filter-chip:disabled{opacity:.5;cursor:not-allowed}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;font-size:13px}table.data th{text-align:left;font-weight:500;color:var(--text-secondary);background:var(--surface-sunken);padding:10px 8px;white-space:nowrap}table.data td:first-child,table.data th:first-child{padding-left:18px}table.data td:last-child,table.data th:last-child{padding-right:18px}table.data td{padding:10px 8px;border-top:1px solid var(--divider);vertical-align:middle}table.data tbody tr.clickable:hover{background:var(--surface-sunken);cursor:pointer}.t-muted{color:var(--text-secondary)}.t-success{color:var(--success-text)}.t-warning{color:var(--warning-text)}.t-danger{color:var(--danger);font-weight:500}.t-right{text-align:right}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.label{font-size:13px;font-weight:600;color:var(--text-body)}.hint{color:var(--text-muted)}.error,.hint{font-size:12px}.error{color:var(--danger);font-weight:500}.input,.select,.textarea{min-height:var(--h-lg);padding:0 12px;border-radius:var(--r-md);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);font-size:14px;width:100%;outline:none}.input:focus,.select:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(36,83,199,.12)}.input[aria-invalid=true]{border-color:var(--danger)}.textarea{padding:10px 12px;min-height:84px;resize:vertical;line-height:1.55}.input:disabled,.select:disabled{background:var(--surface-sunken);color:var(--text-muted);cursor:not-allowed}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));grid-gap:14px;gap:14px}.check{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:var(--text-body);cursor:pointer}.check input{margin-top:3px;width:16px;height:16px;accent-color:var(--primary);flex:0 0 auto}.check.disabled{opacity:.6;cursor:not-allowed}.radio-card{display:flex;gap:10px;padding:12px 14px;border:1px solid var(--border-strong);border-radius:var(--r-lg);background:var(--surface);cursor:pointer;align-items:flex-start}.radio-card[data-checked=true]{border-color:var(--primary);border-width:1.5px;background:var(--primary-soft)}.radio-card input{margin-top:3px;accent-color:var(--primary);flex:0 0 auto}.radio-card.disabled{opacity:.55;cursor:not-allowed}.radio-card-body{display:flex;flex-direction:column;gap:3px;min-width:0}.radio-card-title{font-size:14px;font-weight:600}.radio-card-hint{font-size:12px;color:var(--text-secondary)}.tabs{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--border)}.tab{min-height:var(--h-lg);padding:0 14px;background:transparent;color:var(--text-secondary);font-size:14px;border:none;border-bottom:2px solid transparent;margin-bottom:-1px}.tab[aria-selected=true]{color:var(--primary-soft-text);font-weight:600;border-bottom-color:var(--primary)}.tab:hover:not([aria-selected=true]){color:var(--text)}.steps{display:flex;flex-wrap:wrap;gap:8px}.step{flex:1 1 150px;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--border);color:var(--text);min-height:56px}.step[data-state=current]{background:var(--primary-soft);border:1.5px solid var(--primary)}.step-badge{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;flex:0 0 auto;font-size:12px;font-weight:600;background:var(--success);color:#fff}.step[data-state=current] .step-badge{background:var(--primary)}.step[data-state=todo] .step-badge{background:transparent;border:1.5px solid var(--border-muted);color:var(--text-secondary);font-weight:400}.step[data-state=error] .step-badge{background:var(--danger)}.step-text{display:flex;flex-direction:column;min-width:0}.step-kicker{font-size:11px;color:var(--text-muted)}.step[data-state=current] .step-kicker{color:var(--primary-soft-text)}.step-name{font-size:14px;font-weight:600}.lifecycle{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(110px,100%),1fr));grid-gap:8px;gap:8px}.lifecycle-cell{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);padding:10px 12px;display:flex;flex-direction:column;gap:2px}.lifecycle-cell[data-highlight=true]{border-color:var(--primary);border-width:1.5px;background:var(--primary-soft)}.lifecycle-count{font-size:20px;font-weight:700}.lifecycle-name{font-family:var(--font-mono)}.lifecycle-name,.note{font-size:12px;color:var(--text-secondary)}.note{padding:10px 12px;border-radius:var(--r-md)}.callout,.note{line-height:1.6;background:var(--surface-sunken)}.callout{display:flex;gap:10px;padding:12px 14px;border-radius:var(--r-lg);font-size:13px;border:1px solid var(--border);color:var(--text-body)}.callout-info{background:var(--primary-soft);border-color:#c7d7f7;color:var(--primary-soft-text)}.callout-warning{background:var(--warning-soft);border-color:#f0d9b0;color:var(--warning-text)}.callout-danger{background:var(--danger-soft);border-color:#f0c4bf;color:var(--danger)}.callout-success{background:var(--success-soft);border-color:#b8e0d4;color:var(--success-text)}.callout svg{flex:0 0 auto;margin-top:2px}.empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:48px 24px;text-align:center;color:var(--text-secondary)}.empty-title{font-size:15px;font-weight:600;color:var(--text)}.empty-hint{font-size:13px;max-width:420px}.skeleton{background:linear-gradient(90deg,var(--track) 25%,#eef1f5 37%,var(--track) 63%);background-size:400% 100%;animation:shimmer 1.3s ease-in-out infinite;border-radius:var(--r-sm);height:14px}@keyframes shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}@media (prefers-reduced-motion:reduce){.skeleton{animation:none}}.chart-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--text-secondary)}.chart-legend span{display:inline-flex;align-items:center;gap:6px}.chart-swatch{width:10px;height:10px;border-radius:3px;flex:0 0 auto}.hbar-row{display:grid;grid-template-columns:minmax(90px,160px) 1fr auto;grid-gap:10px;gap:10px;align-items:center;font-size:13px}.hbar{height:10px;background:var(--track);overflow:hidden}.hbar,.hbar>span{border-radius:var(--r-pill)}.hbar>span{display:block;height:100%;background:var(--primary)}.hbar.warn>span{background:var(--warning)}.hbar.danger>span{background:var(--danger)}.hbar.success>span{background:var(--success)}.confusion{display:grid;grid-template-columns:auto repeat(2,minmax(84px,1fr));grid-gap:6px;gap:6px;font-size:13px}.confusion-head{font-size:12px;color:var(--text-secondary);font-weight:600;display:grid;place-items:center;padding:6px;text-align:center}.confusion-cell{border-radius:var(--r-md);padding:12px 10px;display:flex;flex-direction:column;gap:2px;align-items:center;background:var(--surface-sunken);border:1px solid var(--border)}.confusion-cell strong{font-size:18px;font-weight:700}.confusion-cell small{font-size:11px;color:var(--text-secondary)}.confusion-cell[data-kind=tn],.confusion-cell[data-kind=tp]{background:var(--success-soft);border-color:#b8e0d4}.confusion-cell[data-kind=fn],.confusion-cell[data-kind=fp]{background:var(--danger-soft);border-color:#f0c4bf}.modal-backdrop{position:fixed;inset:0;background:rgba(16,24,40,.5);display:grid;place-items:center;padding:20px;z-index:100}.modal{background:var(--surface);border-radius:var(--r-xl);width:100%;max-width:560px;max-height:calc(100vh - 48px);display:flex;flex-direction:column;box-shadow:0 20px 48px rgba(16,24,40,.24)}.modal-lg{max-width:860px}.modal-head{padding:18px 20px;border-bottom:1px solid var(--divider);display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.modal-title{font-size:17px;font-weight:600}.modal-body{padding:18px 20px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.modal-foot{padding:14px 20px;border-top:1px solid var(--divider);display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.toast-stack{position:fixed;bottom:20px;right:20px;display:flex;flex-direction:column;gap:8px;z-index:200;max-width:calc(100vw - 40px)}.toast{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:var(--r-lg);background:var(--text);color:#fff;font-size:13px;box-shadow:0 8px 24px rgba(16,24,40,.2);max-width:420px}.toast-success{background:var(--success-text)}.toast-error{background:var(--danger)}@media (max-width:1023px){.menu-toggle{display:inline-flex}.sidebar{position:fixed;inset:0 auto 0 0;z-index:90;width:min(288px,86vw);flex-basis:auto;transform:translateX(-100%);transition:transform .2s ease;box-shadow:0 0 0 100vmax rgba(16,24,40,0);overflow-y:auto}.sidebar[data-open=true]{transform:translateX(0);box-shadow:0 0 0 100vmax rgba(16,24,40,.45)}.main{padding:20px 16px 40px}.topbar{padding:10px 16px}.page-title{font-size:22px}}@media (prefers-reduced-motion:reduce){.sidebar{transition:none}}@media (max-width:480px){.main{padding:16px 16px 32px;gap:16px}.card-head,.card-pad,.card-row{padding-left:14px;padding-right:14px}table.data td:first-child,table.data th:first-child{padding-left:14px}table.data td:last-child,table.data th:last-child{padding-right:14px}.topbar-search{order:10;flex-basis:100%;max-width:none}.page-title{font-size:20px}}