:root {
  /* ===== 极小语义设计令牌（2026-07-20 收敛自 121 token） ===== */
  /* 品牌主色（teal） */
  --c-primary:#2563EB; --c-primary-soft:#DBEAFE; --c-primary-deep:#1E40AF; /* 语义状态色 */
  --c-success:#15803D; --c-success-soft:#E6F4EA; --c-warning:#D97706; --c-warning-soft:#FEF3C7; --c-danger:#DC2626; --c-danger-soft:#FBE7E7; --c-danger-deep:#7A1A1F; --c-info:#1D6FB8; --c-info-soft:#E6F1FB; --c-info-deep:#0B4F8A; --c-brown-deep:#5C3D00; /* 盈亏五档色（盈亏仓环形图 conic-gradient 用） */ --tier-profit:#15803D; --tier-even:#2563EB; --tier-loss:#D97706; --tier-warn:#DC2626; --tier-severe:#7A1A1F; /* 中性色（文字/边框/表面） */
  --c-ink:#0F172A; --c-body:#334155; --c-muted:#64748B; --c-line:#E2E8F0; --c-line-soft:#F1F5F9; --c-surface:#FFFFFF; --c-surface-2:#F8FAFC; --c-bg:#F4F6F9; --c-row-hover:#F8FAFC; /* 向后兼容别名（旧 JS 引用 --card / --gray-*） */ --card:var(--c-surface); --gray-50:#F8FAFC; --gray-150:#E2E8F0; --gray-400:#94A3B8; /* 工具类令牌 — 保留原名（字号阶梯/圆角/阴影/间距/动画/控件尺寸/页头） */
  --space-4:1rem; --font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; --radius-lg:.9rem; --radius-md:.65rem; --radius-sm:.4rem; --radius-xl:1.2rem; --ring:rgba(37,99,235,.18); --shadow-lg:0 14px 30px rgba(15,23,42,.10), 0 4px 12px rgba(15,23,42,.05); --shadow-md:0 6px 16px rgba(15,23,42,.08), 0 2px 6px rgba(15,23,42,.04); --shadow-sm:0 1px 3px rgba(15,23,42,.06), 0 1px 2px rgba(15,23,42,.04); --shadow-xl:0 24px 48px rgba(15,23,42,.12),0 8px 24px rgba(15,23,42,.08); --shadow-xs:0 1px 2px rgba(15,23,42,.05); --transition:all .22s cubic-bezier(.4,0,.2,1); --transition-bounce:all .28s cubic-bezier(.34,1.4,.64,1); --h-control:2.6rem; --h-control-sm:2.1rem; --control-py:.5rem; --control-px:1rem; --control-sm-py:.3rem; --control-sm-px:.7rem; --fs-xs:.72rem; --fs-sm:.8rem; --fs-base:.9rem; --fs-md:.95rem; --fs-lg:1.05rem; --fs-xl:1.25rem; --fs-2xl:1.6rem; --header-py:.6rem; --header-px:1rem; --fs-3xl:2.2rem; /* 大标题档（新增，覆盖 2.2rem 级标题，避免被压扁） */;
}

body, .keyboard-btn, .admin-tabs .nav-item, .admin-page-header h4, .admin-page-header p, .search-hero p, .cockpit-risk { margin:0  }
body, .navbar>.container-fluid, .keyboard-btn, .admin-card-header.p-0 { padding:0  }
h3, h5, h6, .btn, .card-header, .progress-bar, .form-label, .modal-title, .stat-title, .stat-sub-label, .toolbar .btn, #caseTable thead th, #caseTable .combined-cell .main-value, .double-cell .cell-top, .combined-cell .main-value, .keyboard-btn, #candidateList thead th, #candidateList .combined-cell .main-value, .candidate-card .main-value, .param-group .pg-label, .form-label-xs, .admin-tabs .nav-link.active, .admin-card-header, .admin-action-card .action-title, .admin-table th, .mode-tab, .dip-result-table th, .dip-result-table .type-badge, .tree-node .node-code, .path-breadcrumb .crumb.current, .detail-panel .detail-label, .admin-nav-item.active, #catalogTable tbody td:nth-child(5), #catalogTable tbody td:nth-child(6), #catalogTable tbody td:nth-child(7), .cockpit-kpi .ck-value, .cockpit-panel-head .ch, .cockpit-table thead th, .cockpit-name, .cockpit-risk .rr-name, .cockpit-pl { font-weight:600  }
h5, .navbar-brand, .toast-notification .toast-icon, .admin-action-card .action-icon { font-size:var(--fs-xl)  }
a, .btn, .page-link, .navbar-brand, .nav-link, .admin-nav-item { text-decoration:none  }
a:hover, code, .page-link, .dip-result-table .score-cell, .tree-node .node-code, .path-breadcrumb .crumb.current, .detail-panel .detail-value.score, .stat-tile .stat-tile-num, .admin-action-card .action-icon { color:var(--c-primary)  }
code, .mode-tab:hover, .tree-node:hover, .admin-action-card .action-icon, .cockpit-tag.mix { background:var(--c-primary-soft)  }
button, .btn, .btn-close, .navbar-toggler, .stat-card, .stat-subcard, .keyboard-btn, .candidate-row, .toast-notification .toast-close, .admin-tabs .nav-link, .admin-nav-item, .admin-action-card, .mode-tab, .tree-node, .quick-tag, .cockpit-select { cursor:pointer  }
.container, .container-fluid, .row>*, .col-12, .table, .form-control, .form-select, .input-group, .modal, .modal-content, .stat-subgrid, .toolbar .row, .param-group .pg-input input, .admin-table, .dip-result-table, .admin-form-row .form-control-sm, .cockpit-table, .cockpit-bar .col { width:100%  }
.row, .card, .progress, .progress-bar, .pagination, .navbar, .navbar>.container-fluid, .navbar-brand, .navbar-nav, .input-group, .modal-content, .modal-header, .modal-footer, .stat-card, .stat-split-left, .stat-split-right, .stat-subcard, .toolbar, .search-section, .search-row, .admin-toolbar, .admin-toolbar-meta, .toast-container, .toast-notification, .action-btns, .param-group .pg-row, .save-bar, .nav-tabs, .admin-layout, .admin-sidebar, .admin-sidebar-brand, .admin-nav-item, .admin-sidebar-footer, .admin-card-header, .admin-login-page, .admin-loading, #caseTable .action-btns, .search-box-wrap, .mode-tabs, .tree-node, .path-breadcrumb, .detail-panel .detail-row, .quick-tags, .stats-mini-row, .stat-tile, .admin-form-row, .admin-form-field, .admin-form-action, .cockpit-header, .cockpit-filter, .cockpit-panel-head, .cockpit-tools, .cockpit-side, .cockpit-bars, .cockpit-bar, .cockpit-risk li { display:flex  }
.row, .btn-group, .navbar, .modal-footer, .toolbar, .admin-toolbar, .admin-toolbar-meta, .nav-tabs, .path-breadcrumb, .quick-tags, .stats-mini-row, .admin-form-row, .cockpit-header { flex-wrap:wrap  }
.row>*, .stat-split-left, .search-section, .search-row .btn, .toast-notification .toast-icon, .param-group .pg-label, .param-group .pg-unit, .admin-sidebar, .admin-nav-item .nav-icon, .tree-node .toggle-icon { flex-shrink:0  }
.col-6, .col-12, .admin-form-field-sm, .admin-form-action { flex:0 0 auto  }
.fw-bold, .stat-amt, #caseTable thead th, #caseTable .combined-cell .main-value { font-weight:700!important  }
.text-white, .navbar-brand, .nav-link:hover, .nav-link.active { color:var(--c-surface)!important  }
.text-primary, .text-success, .text-danger, .text-warning, .stat-title, .toolbar .btn { font-weight:600!important  }
.table, .admin-table, .dip-result-table, .cockpit-table { border-collapse:collapse  }
.table th, .table td, #caseTable tbody td, .param-group .pg-row, .admin-table td, .dip-result-table td, .detail-panel .detail-row { border-bottom:1px solid var(--c-line-soft)  }
.btn, .btn-group, .brand-icon, .keyboard-btn, .admin-nav-item .nav-icon, .admin-action-card .action-icon, .empty-state .empty-icon { display:inline-flex  }
.btn, .navbar, .navbar>.container-fluid, .navbar-brand, .brand-icon, .navbar-collapse, .modal-header, .modal-footer, .stat-split-right, .stat-subcard, .toolbar, .toolbar .row, .search-section, .search-row, .admin-toolbar, .admin-toolbar-meta, .keyboard-btn, .toast-notification, .action-btns, .param-group .pg-row, .save-bar, .admin-sidebar-brand, .admin-nav-item, .admin-card-header, .admin-login-page, .admin-loading, #caseTable .action-btns, .search-box-wrap, .tree-node, .path-breadcrumb, .stat-tile, .case-th-grid, .admin-progress-overlay, .admin-nav-item .nav-icon, .admin-action-card .action-icon, .empty-state .empty-icon, .cockpit-filter, .cockpit-panel-head, .cockpit-bar, .cockpit-risk li { align-items:center  }
.btn, .progress-bar, .brand-icon, .stat-subcard, .keyboard-btn, .action-btns, .admin-login-page, .admin-loading, .admin-progress-overlay, .admin-nav-item .nav-icon, .admin-action-card .action-icon, .empty-state .empty-icon { justify-content:center  }
.btn, .search-section, .search-row, .admin-stat-row, .stats-mini-row { gap:.35rem  }
.btn, .badge, .progress-bar, .stat-subcard, #caseTable thead th, #caseTable tbody td, .col-seq, .col-act, .col-rate, .empty-state, .param-group .pg-hd, .admin-nav-item .nav-icon, .admin-login-box, .admin-login-box h4, .dip-result-table .score-cell, .tree-node .toggle-icon, #catalogTable thead th.col-score, #catalogTable thead th.col-rate, #catalogTable tbody td:nth-child(5), #catalogTable tbody td:nth-child(6), #catalogTable tbody td:nth-child(7), .cockpit-loading { text-align:center  }
.btn, .navbar-toggler-icon, #caseTable thead th, #caseTable tbody td, #candidateList th, #candidateList td, .admin-table td, .dip-result-table td, .admin-table-compact td { vertical-align:middle  }
.btn, .card-header, .form-control, .form-select, #caseTable .combined-cell .main-value, .keyboard-btn, .toast-notification { font-size:var(--fs-md)  }
.btn, .progress, .brand-icon, .nav-link, .navbar-toggler, .form-control, .form-select, .candidate-card, .param-group, .admin-login-box .brand-icon, .admin-action-card, .search-box-wrap, .detail-panel, .cockpit-kpi, .cockpit-panel { border-radius:var(--radius-md)  }
.btn, .card, .page-link, .nav-link, .navbar-toggler, .form-control, .form-select, .candidate-card, .admin-tabs .nav-link, .admin-nav-item, .admin-action-card, .mode-tab, .quick-tag, .admin-nav-item .nav-icon, .admin-action-card .action-icon, .cockpit-select, .cockpit-kpi { transition:var(--transition)  }
.btn, .form-control, .form-select, #caseTable .combined-cell .main-value, .double-cell .cell-top, .combined-cell .main-value, #candidateList .combined-cell .main-value, .candidate-card .main-value, .param-group .pg-input input, .admin-action-card .action-title, .detail-panel .detail-value, #catalogTable tbody td:nth-child(5), #catalogTable tbody td:nth-child(6), #catalogTable tbody td:nth-child(7) { color:var(--c-ink)  }
.btn, .card, .stat-card, .toolbar, .keyboard-btn, #candidateList, .admin-card, .mode-tab.active { box-shadow:var(--shadow-sm)  }
.btn, .alert, .page-link, .brand-icon, .modal-dialog, .modal-content, .stat-card, .keyboard-container, .admin-sidebar-brand, .admin-page-header { position:relative  }
.btn, .progress, .progress-bar, .modal-content, .stat-card, .keyboard-container, .param-group, .admin-card, .cockpit-panel { overflow:hidden  }
.btn:hover, .card:hover, .navbar, .admin-action-card:hover, .search-hero { box-shadow:var(--shadow-md)  }
.btn:disabled, .page-item.disabled .page-link, .modal-dialog, .stat-card::after, .toast-container { pointer-events:none  }
.btn-sm, .progress, .progress-bar, .form-text, .input-group-sm .form-control, .input-group-sm .btn, #candidateList table, #candidateList .combined-cell .main-value, .candidate-card .main-value, .cockpit-filter, .cockpit-select { font-size:var(--fs-sm)  }
.btn-sm, .badge, .page-link, .form-control-sm, .form-select-sm, .toolbar .btn, #caseTable .badge, .admin-sidebar-brand .brand-icon, .admin-nav-item, .mode-tab, .dip-result-table .type-badge, .tree-node, .path-breadcrumb .crumb, .quick-tag, .stat-tile, .cockpit-select { border-radius:var(--radius-sm)  }
.btn-primary, .btn-outline-primary:hover, .btn-outline-secondary:hover, .btn-outline-danger:hover, .btn-outline-warning:hover, .badge, .progress-bar, .page-item.active .page-link, .modal-header.bg-primary, .modal-header.bg-info, .modal-header.bg-success, .stat-card, .param-group .pg-hd, .admin-sidebar-brand, .admin-nav-item:hover, .admin-nav-item.active, .search-hero, .search-hero h3, .mode-tab.active { color:var(--c-surface)  }
.btn-primary:hover, .btn-outline-primary:hover, .page-item.active .page-link, .cockpit-select:focus { border-color:var(--c-primary-deep)  }
.btn-outline-primary, .keyboard-btn:hover, .candidate-card:hover, .admin-action-card:hover, .mode-tab:hover { border-color:var(--c-primary-soft)  }
.btn-outline-primary:hover, .page-item.active .page-link, .nav-link.active::after, .param-group .pg-hd { background:var(--c-primary)  }
.btn-outline-secondary, #caseTable thead th, .double-cell .cell-sub, .match-log-detail, #candidateList thead th, .param-group .pg-label, .form-label-xs, .admin-table th, .mode-tab, .dip-result-table th { color:var(--c-body)  }
.btn-outline-danger, .admin-action-card.danger .action-title, .admin-action-card.danger .action-icon, .stat-tile.danger .stat-tile-num, .cockpit-chip.over { color:var(--c-danger)  }
.btn-close, .modal-backdrop.show, .stat-amt-placeholder, .toast-notification .toast-close, .empty-state .empty-icon { opacity:.5  }
.btn-close:hover, .form-control::placeholder, .toast-notification .toast-close:hover, .admin-nav-item.active .nav-icon, .empty-state .empty-icon { opacity:1  }
.card, .progress-bar, .navbar-nav, .modal-content, .stat-card, .stat-split-left, .stat-subcard, .toast-container, .admin-sidebar, .admin-sidebar-footer, #caseTable .action-btns, .admin-form-field, .cockpit-side, .cockpit-bar { flex-direction:column  }
.card, .progress, .page-link, .toolbar, .keyboard-btn, #candidateList, .candidate-card, .param-group, .param-group .pg-input input, .admin-card, .admin-action-card, .mode-tab, .detail-panel, .stat-tile { border:1px solid var(--c-line)  }
.card, .modal-content, .toolbar, .keyboard-container, .admin-login-box, .search-hero { border-radius:var(--radius-xl)  }
.card, .page-link, .form-control, .form-select, .form-control:focus, .form-select:focus, .modal-content, .toolbar, #caseTable, #candidateList, .candidate-card, .param-group, .param-group .pg-input input:focus, .admin-tabs .nav-link.active, .admin-card, .admin-login-box, .admin-action-card, .mode-tab, .stat-tile, .admin-progress-box, .cockpit-kpi, .cockpit-panel { background:var(--c-surface)  }
.card-body, .stat-split-right, .param-group .pg-input, .admin-nav, .admin-content, .tree-node .node-name, .ig-w320, .cockpit-bar { flex:1  }
.card-body, .modal-header, .modal-footer, .admin-sidebar-brand { padding:1rem 1.25rem  }
.card-header, .modal-header, .nav-tabs, .admin-card-header.p-0 .admin-tabs, .admin-page-header, .admin-card-header { border-bottom:1px solid var(--c-line)  }
.badge, .navbar-brand, .stat-amt, .keyboard-btn.dot-lg, .param-group .pg-hd, .admin-sidebar-brand, .admin-nav-section-title, .admin-page-header h4, .admin-login-box h4, .page-header h5, .dip-result-table .score-cell, .case-th-grid .th-label { font-weight:700  }
.badge, .toolbar .btn, #caseTable thead th, .admin-tabs .nav-link, .admin-table th, #caseTable .action-btns .btn, .search-box-wrap .btn, .dip-result-table th, .cockpit-chip, .cockpit-table thead th { white-space:nowrap  }
.badge:empty, .collapse:not(.show), .tab-pane:not(.show), .admin-module, .modal, .tree-children, .admin-progress-overlay { display:none  }
.alert, .modal-content, .toast-notification .toast-close, .search-box-wrap .form-control, .search-box-wrap .form-select { border:none  }
.alert, .stat-card, #caseTable, #candidateList, .toast-notification, .admin-card { border-radius:var(--radius-lg)  }
.alert, .nav-link, .empty-state .empty-text, .admin-nav-item .nav-icon { font-size:var(--fs-md)  }
.alert-dismissible .btn-close, .nav-link.active::after, .stat-card::after, .keyboard-container::before, .admin-sidebar-brand::after, .admin-page-header::after { position:absolute  }
.alert-dismissible .btn-close, .navbar, .modal, .modal-backdrop, #caseTable thead th, .keyboard-container::before, .admin-sidebar, .admin-progress-overlay, .cockpit-table thead th { top:0  }
.alert-dismissible .btn-close, .stat-card::after, .keyboard-container::before, .admin-progress-overlay { right:0  }
.progress, #candidateList thead th, .admin-tabs .nav-link:hover, .admin-table th, .path-breadcrumb .crumb, .empty-state .empty-icon, .cockpit-table thead th { background:var(--c-line-soft)  }
.pagination, .navbar-nav, .nav-tabs, .cockpit-risk { list-style:none  }
.page-link, .nav-link, .form-control, .form-select, #caseTable thead th .sub-header, #caseTable .combined-cell .main-value, #caseTable .combined-cell .sub-value, .combined-cell .main-value, .combined-cell .sub-value, .admin-module.active, .admin-table th small, .tree-children.show { display:block  }
.page-link:hover, .candidate-card:hover, .path-breadcrumb .crumb.current, .admin-action-card:hover .action-icon { background:var(--c-primary-soft)  }
.page-item.disabled .page-link, .form-text, #caseTable thead th .sub-header, #caseTable .combined-cell .sub-value, .combined-cell .sub-value, #candidateList .combined-cell .sub-value, .case-th-grid .th-sub, .empty-state, .param-group .pg-unit, .admin-page-header p, .admin-card-header .card-badge, .admin-action-card .action-desc, .admin-table th small, .admin-loading, .tree-node .toggle-icon, .tree-node .node-meta, .tree-loading, .path-breadcrumb, .detail-panel .detail-label, .stat-tile .stat-tile-label { color:var(--c-muted)  }
.page-item.disabled .page-link, .keyboard-btn:disabled, .param-group .pg-input input, .admin-layout, .detail-panel { background:var(--c-surface-2)  }
.pagination-sm .page-link, .admin-card-header, .admin-action-card .action-title, .search-box-wrap .form-select, .mode-tab, .dip-result-table, .tree-node .node-code, .case-th-grid, .admin-table-compact { font-size:var(--fs-sm)  }
.navbar, .navbar>.container-fluid, .modal-header, .stat-card, .stat-split-left, .toolbar, .toolbar .row, .admin-toolbar, .admin-card-header, .cockpit-header, .cockpit-panel-head, .cockpit-risk li { justify-content:space-between  }
.navbar, #caseTable thead th, .admin-sidebar, .cockpit-table thead th { position:sticky  }
.navbar-brand, .modal-footer, .toast-container, .save-bar, .admin-sidebar-brand, .admin-nav-item, .admin-action-grid, .toolbar, .admin-form-row, .cockpit-filter { gap:.5rem  }
.navbar-brand, .modal-title, .stat-title, .stat-sub-label, .keyboard-btn, .admin-sidebar-brand, .admin-table-compact th { letter-spacing:.02em  }
.brand-icon::after, .nav-link.active::after, .stat-card::after, .keyboard-container::before, .admin-sidebar-brand::after, .admin-page-header::after { content:''  }
.navbar-nav, #caseTable, #candidateList table, .nav-tabs, .admin-card-header.p-0 .admin-tabs { margin-bottom:0  }

/* 顶部导航：<ul class="navbar-nav"> 在导航栏内保持横排（覆盖全局 column / width:100% 默认，修复 P0 结构） */
.navbar .navbar-nav { flex-direction:row; align-items:center; gap:.25rem; padding-left:0; margin:0; width:auto; flex:0 0 auto }
.nav-link, #caseTable thead th .sub-header, #caseTable .wrap-cell .main-value, .toast-notification, .admin-tabs .nav-link, .admin-nav-item, .admin-card-header .card-badge, .detail-panel .detail-value, .quick-tag, .stat-tile .stat-tile-label { font-weight:500  }
.form-label, .stat-amt, #caseTable .wrap-cell .main-value, .double-cell .cell-top, .param-group .pg-input input, .admin-tabs .nav-link, .admin-nav-item, .admin-table, .search-box-wrap .btn, .dip-result-table .score-cell { font-size:var(--fs-base)  }
.form-label, .keyboard-btn, .admin-card-header, .tree-node .node-name { color:var(--c-body)  }
.form-control:focus, .form-select:focus, .keyboard-btn.dot-lg, .param-group .pg-input input:focus, .cockpit-select:hover { border-color:var(--c-primary)  }
.form-control-sm, .form-select-sm, .toolbar .btn, #caseTable, .combined-cell .main-value, #candidateList { font-size:var(--fs-base)  }
.form-control-sm, .form-select-sm, .input-group-sm .form-control, .input-group-sm .btn, .admin-card-header, .cockpit-select { padding:.4rem .6rem  }
.input-group .form-control, .stat-split-left, .stat-split-right, .search-row .form-control, .cockpit-bar { min-width:0  }
.modal, .modal-backdrop, .toast-container, .admin-progress-overlay { position:fixed  }
.modal, .modal-backdrop, .stat-card::after, .keyboard-container::before, .admin-progress-overlay, .admin-page-header::after { left:0  }
.stat-grid, .stat-subgrid, .params-table, .admin-stat-row, .admin-action-grid, .case-th-grid, .cockpit-kpis, .cockpit-grid2 { display:grid  }
.stat-title, .double-cell .cell-sub, .combined-cell .sub-value, #candidateList thead th, .param-group .pg-label, .search-hero p, .path-breadcrumb { font-size:var(--fs-sm)  }
.stat-num, .stat-sub-num, .detail-panel .detail-value.score, .stat-tile .stat-tile-num { font-weight:800  }
#caseTable thead th, .param-group .pg-hd, .form-label-xs, .admin-page-header p, .admin-table code, .tree-node, .tree-loading { font-size:var(--fs-sm)  }
#caseTable thead th, #candidateList thead th, .admin-nav-section-title, .admin-table th, .dip-result-table th, .detail-panel .detail-label { text-transform:uppercase  }
#caseTable thead th, #candidateList thead th, .admin-table th, .dip-result-table th { border-bottom:2px solid var(--c-line)  }
#caseTable thead th .sub-header, #caseTable .wrap-cell .sub-value, .admin-nav-section-title, .dip-result-table .type-badge { font-size:var(--fs-xs)  }
#caseTable tbody tr:last-child td, .param-group .pg-row:last-child, .admin-table tbody tr:last-child td, .cockpit-risk li:last-child, .admin-tabs, .admin-tabs .nav-link, .admin-card-header.p-0, .detail-panel .detail-row:last-child { border-bottom:none  }
#caseTable .combined-cell .sub-value, #caseTable .action-btns .btn, #caseTable .badge, .candidate-card .sub-value, .tree-node .toggle-icon, .quick-tag { font-size:var(--fs-xs)  }
#candidateList .combined-cell .sub-value, .case-th-grid .th-sub, .param-group .pg-unit, .admin-card-header .card-badge, .admin-action-card .action-desc, .admin-table th small, .dip-result-table th, .tree-node .node-meta, .detail-panel .detail-label, .stat-tile .stat-tile-label, .admin-table-compact th { font-size:var(--fs-xs)  }
.action-btns, .admin-tabs, .admin-sidebar-footer, .mode-tabs, .path-breadcrumb, .quick-tags { gap:.25rem  }
.admin-page-header, .admin-stat-row, .card.shadow-sm, .path-breadcrumb, .admin-form-row { margin-bottom:.5rem  }
.admin-form-row, .admin-form-action, .cockpit-header, .cockpit-bars { align-items:flex-end  }
.cockpit-filter, .cockpit-kpi .ck-label, .cockpit-table thead th, .cockpit-code, .cockpit-bar .v, .cockpit-loading { color:var(--c-muted)  }
.cockpit-kpi .ck-label, .cockpit-kpi .ck-delta, .cockpit-table thead th, .cockpit-code { font-size:var(--fs-xs)  }
.cockpit-kpi .ck-value, .cockpit-kpi .ck-delta, .cockpit-chip, .cockpit-num, .cockpit-code, .cockpit-pl, .cockpit-bar .v, .cockpit-risk .rr-meta { font-family:var(--font-mono,ui-monospace,monospace)  }
.cockpit-panel-head, .cockpit-table thead th, .cockpit-table tbody td, .cockpit-risk li { border-bottom:1px solid var(--c-line)  }
.cockpit-chip, .cockpit-tag, .cockpit-risk .rr-meta, .cockpit-foot { font-size:var(--fs-xs)  }
*, *::before, *::after { box-sizing:border-box  }
html { font-size:17px; scroll-behavior:smooth  }
body { -moz-osx-font-smoothing:grayscale; -webkit-font-smoothing:antialiased; background:var(--c-bg); color:var(--c-ink); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif; font-size:17px; line-height:1.6; min-height:100vh  }
h3, h5, h6 { line-height:1.25; margin:0 0 .5rem  }
h3 { font-size:var(--fs-2xl)  }
h6 { font-size:var(--fs-lg)  }
p { margin:0 0 1rem  }
a { color:var(--c-primary-soft)  }
small, .small { font-size:.875em  }
code { border-radius:4px; font-size:.92em; padding:.05em .3em  }
table { border-collapse:separate; border-spacing:0; caption-side:bottom  }
th { text-align:inherit  }
[hidden], .d-none { display:none!important  }
hr { border:0; border-top:1px solid var(--c-line); margin:1.25rem 0  }
.container, .container-fluid { margin:0 auto; padding:0 1rem  }
.container { max-width:none  }
.col { flex:1 0 0%  }
.row, .row.g-3 { margin:0 -.5rem  }
.row>* { max-width:100%; padding:0 .5rem  }
.col-6 { width:50%  }
.row.g-2 { margin:0 -.25rem  }
.row.g-2>* { padding:0 .25rem  }
.row.g-3>* { margin-top:.5rem; padding:0 .5rem  }
.d-block { display:block!important  }
.d-flex { display:flex!important  }
.flex-wrap { flex-wrap:wrap!important  }
.flex-fill { flex:1 1 auto!important  }
.flex-shrink-0 { flex-shrink:0!important  }
.flex-nowrap { flex-wrap:nowrap!important  }
.justify-content-center, .stat-card:not(.stat-card-split) { justify-content:center!important  }
.justify-content-between { justify-content:space-between!important  }
.justify-content-md-end { justify-content:flex-end!important  }
.align-items-center { align-items:center!important  }
.gap-1, .stat-subgrid { gap:.25rem!important  }
.gap-2 { gap:.5rem!important  }
.mt-1 { margin-top:.25rem!important  }
.mt-2 { margin-top:.5rem!important  }
.mt-3 { margin-top:1rem!important  }
.mt-4 { margin-top:1.5rem!important  }
.mb-0 { margin-bottom:0!important  }
.mb-1 { margin-bottom:.25rem!important  }
.mb-2 { margin-bottom:.5rem!important  }
.mb-3 { margin-bottom:1rem!important  }
.mb-4 { margin-bottom:1.5rem!important  }
.ms-1 { margin-left:.25rem!important  }
.ms-auto { margin-left:auto!important  }
.p-2 { padding:.5rem!important  }
.py-1 { padding:.25rem 0!important  }
.py-2 { padding:.5rem 0!important  }
.w-100 { width:100%!important  }
.text-center { text-align:center!important  }
.text-muted, .text-secondary { color:var(--c-muted)!important  }
.text-primary, .admin-tabs .nav-link:hover { color:var(--c-primary)!important  }
.text-success { color:var(--c-success)!important  }
.text-danger { color:var(--c-danger)!important  }
.text-warning { color:var(--c-warning)!important  }
.text-dark { color:var(--c-ink)!important  }
.bg-primary { background:var(--c-primary-soft)!important  }
.bg-secondary { background:var(--c-muted)!important  }
.bg-success { background:var(--c-success)!important  }
.bg-info { background:var(--c-info)!important  }
.bg-warning { background:var(--c-warning)!important  }
.bg-dark { background:var(--c-ink)!important  }
.bg-danger { background:var(--c-danger)!important  }
.shadow-sm { box-shadow:var(--shadow-sm)!important  }
.px-2{padding-left:.5rem!important;padding-right:.5rem!important}
.px-3{padding-left:1rem!important;padding-right:1rem!important}
.py-0{padding-top:0!important;padding-bottom:0!important}
.py-3{padding-top:1rem!important;padding-bottom:1rem!important}
.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}
.me-3{margin-right:1rem!important}
.ms-2{margin-left:.5rem!important}
.no-spinner::-webkit-outer-spin-button,.no-spinner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.no-spinner{-moz-appearance:textfield}
.table { margin-bottom:1rem  }
.table-hover tbody tr:hover, .admin-table tbody tr:hover, .cockpit-table tbody tr:hover, .dip-result-table tbody tr:hover { background:var(--c-row-hover)  }
.table-sm th, .table-sm td { padding:.25rem  }
.table-primary, .candidate-row.table-primary { background:var(--c-primary-soft)!important  }
.table-danger { background:var(--c-danger-soft)!important  }
.table-responsive { overflow-x:auto  }
.btn { background:transparent; border:1px solid transparent; line-height:1.45; padding:.55rem 1.15rem  }
.btn:hover { transform:translateY(-2px)  }
.btn:active { box-shadow:var(--shadow-xs); transform:translateY(0)  }
.btn:disabled { box-shadow:none; opacity:.55; transform:none  }
.btn-sm { padding:.4rem .75rem  }
.btn-sm:hover, .candidate-card:hover { transform:translateY(-1px)  }
.btn-primary { background:linear-gradient(135deg,var(--c-primary),var(--c-primary)); border-color:var(--c-primary)  }
.btn-primary:hover { background:linear-gradient(135deg,var(--c-primary-deep),var(--c-primary-deep))  }
.btn-warning { background:linear-gradient(135deg,var(--c-warning),var(--c-warning)); border-color:var(--c-warning); color:var(--c-surface)  }
.btn-outline-primary { background:var(--c-primary-soft); color:var(--c-primary)  }
.btn-outline-secondary { background:rgba(107,114,128,.04); border-color:var(--c-line)  }
.btn-outline-secondary:hover { background:var(--c-body); border-color:var(--c-body)  }
.btn-outline-danger { background:rgba(220,38,38,.05); border-color:var(--c-danger-soft)  }
.btn-outline-danger:hover { background:var(--c-danger); border-color:var(--c-danger)  }
.btn-outline-warning { background:var(--c-warning-soft); border-color:var(--c-warning-soft); color:var(--c-warning)  }
.btn-outline-warning:hover { background:var(--c-warning); border-color:var(--c-warning)  }
.btn-close { background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; border:0; border-radius:.375rem; box-sizing:content-box; height:1em; padding:.25em; transition:opacity .2s,transform .15s; width:1em  }
.btn-close:hover, .tree-node.expanded .toggle-icon { transform:rotate(90deg)  }
.btn-close-white { filter:brightness(0) invert(1)  }
.card-header { background:var(--c-surface); border-radius:var(--radius-xl) var(--radius-xl) 0 0; padding:.75rem 1.25rem  }
.badge { display:inline-block; font-size:.75em; line-height:1; padding:.35em .65em; vertical-align:baseline  }
.alert { margin-bottom:1rem; padding:.8rem 1.1rem  }
.alert-info, .toast-info { background:var(--c-info-soft); border-left:4px solid var(--c-info); color:var(--c-info-deep)  }
.alert-success, .toast-success { background:var(--c-success-soft); border-left:4px solid var(--c-success); color:var(--c-success)  }
.alert-warning, .toast-warning { background:var(--c-warning-soft); border-left:4px solid var(--c-warning); color:var(--c-warning)  }
.alert-danger, .toast-error { background:var(--c-danger-soft); border-left:4px solid var(--c-danger); color:var(--c-danger-deep)  }
.alert-dismissible { padding-right:3rem  }
.alert-dismissible .btn-close { padding:1rem  }
.progress { height:26px  }
.progress-bar { background:linear-gradient(90deg,var(--c-primary),var(--c-primary)); transition:width .3s ease  }
.progress-bar-animated { animation:progress-bar-stripes 1s linear infinite; background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); background-size:24px 24px  }
.pagination, .navbar-nav, .nav-tabs { padding-left:0  }
.page-link {font-size:var(--fs-sm);padding:.38rem .6rem; }
.page-link:hover { color:var(--c-primary-deep)  }
.page-item.active .page-link { z-index:3  }
.pagination-sm .page-link { padding:.35rem .65rem  }
.navbar { background:linear-gradient(135deg,var(--c-primary-deep),var(--c-primary-deep) 60%,var(--c-primary)); min-height:62px; padding:0 1.25rem; z-index:1040  }
.navbar-brand { padding:.4rem 0  }
.brand-icon { background:linear-gradient(135deg,var(--c-primary),var(--c-primary)); box-shadow:0 2px 8px rgba(37,99,235,.35); height:34px; width:34px  }
.brand-icon::after { border:3px solid var(--c-surface); border-radius:50%; border-right-color:transparent; box-sizing:border-box; height:14px; transform:rotate(-45deg); width:14px  }
.navbar-collapse { flex-basis:100%; flex-grow:1  }
.nav-link { color:rgba(255,255,255,.78)!important; padding:.55rem 1rem  }
.nav-link:hover { background:rgba(255,255,255,.10)  }
.nav-link.active, .navbar-toggler:hover { background:rgba(255,255,255,.15)  }
.nav-link.active::after { border-radius:1px; bottom:2px; height:2px; left:1rem; right:1rem  }
.navbar-toggler { background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.15); font-size:var(--fs-xl); padding:.45rem .6rem  }
.navbar-toggler-icon { background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); background-position:center; background-repeat:no-repeat; background-size:100%; display:inline-block; height:1.5em; width:1.5em  }
.form-label { margin-bottom:.3rem  }
.form-text { margin-top:.3rem  }
.form-control, .form-select { border:1px solid var(--c-line); line-height:1.5; padding:.6rem .85rem  }
.form-control::placeholder { color:var(--c-muted)  }
.form-control:focus, .form-select:focus { box-shadow:0 0 0 4px var(--ring); outline:0  }
.form-select-sm { background-position:right .6rem center; background-size:14px 10px; padding-right:1.6rem  }
.form-select { -webkit-appearance:none; appearance:none; background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%234b5563' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); background-position:right .75rem center; background-repeat:no-repeat; background-size:16px 12px; padding-right:2.25rem  }
.input-group .form-control { flex:1 1 auto; width:1%  }
.fade { transition:opacity .2s linear  }
.fade:not(.show) { opacity:0  }
.modal { backdrop-filter:blur(4px); background:rgba(15,23,42,.45); height:100%; outline:0; overflow-x:hidden; overflow-y:auto; z-index:1055  }
.modal-dialog { margin:.5rem; width:auto  }
.modal.fade .modal-dialog { transform:translate(0,-40px) scale(.98); transition:var(--transition-bounce)  }
.modal.show .modal-dialog { transform:none  }
.modal-content { box-shadow:0 32px 64px rgba(15,23,42,.25); pointer-events:auto  }
.modal-backdrop { background:var(--c-ink); height:100vh; opacity:0; width:100vw; z-index:1050  }
.modal-body { padding:1.25rem  }
.modal-footer { border-top:1px solid var(--c-line); justify-content:flex-end  }
.modal-header.bg-primary { background:linear-gradient(135deg,var(--c-primary-deep),var(--c-primary-soft))!important  }
.modal-header.bg-info { background:linear-gradient(135deg,var(--c-info),var(--c-info))!important  }
.modal-header.bg-success { background:linear-gradient(135deg,var(--c-primary),var(--c-success))!important  }
.stat-grid {gap:.5rem;grid-template-columns:repeat(4,1fr);margin-bottom:.75rem; }
.stat-card {isolation:isolate;min-height:88px;padding:.65rem .85rem .7rem;transition:var(--transition-bounce);align-items:center;border-radius:var(--radius-md);text-align:center; }
.stat-card::after { background:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.10)); bottom:0; height:48%; z-index:-1  }
.stat-card:hover { box-shadow:var(--shadow-lg); transform:translateY(-3px)  }
.stat-card:focus-visible { outline:3px solid rgba(255,255,255,.6); outline-offset:2px  }
.stat-card.active { outline:3px solid var(--c-primary); outline-offset:2px; box-shadow:var(--shadow-lg); transform:translateY(-3px)  }
.stat-title {line-height:1.2;opacity:.92;font-size:var(--fs-sm); }
.stat-num {font-size:var(--fs-3xl);letter-spacing:-.03em;line-height:1.1;font-weight:900; }
.stat-amt {letter-spacing:.01em;margin-top:.1rem;opacity:.96;font-size:var(--fs-base); }
.stat-amt-green { color:var(--c-surface)!important; text-shadow:0 1px 3px rgba(0,0,0,.12)  }
.stat-amt-red { color:var(--c-surface)!important; text-shadow:0 1px 3px rgba(0,0,0,.18)  }
.stat-amt-placeholder { font-weight:400  }
.stat-card.bg-primary { background:linear-gradient(135deg,var(--c-primary),var(--c-primary))!important  }
.stat-card.bg-success { background:linear-gradient(135deg,var(--c-success),var(--c-success))!important  }
.stat-card.bg-secondary { background:linear-gradient(135deg,var(--c-muted),var(--c-body))!important  }
.stat-card.bg-danger { background:linear-gradient(135deg,var(--c-danger),var(--c-danger))!important  }
.stat-card.bg-warning { background:linear-gradient(135deg,var(--c-warning),var(--c-warning))!important  }
.stat-card.bg-info { background:linear-gradient(135deg,var(--c-info),var(--c-info))!important  }
.stat-card.bg-dark { background:linear-gradient(135deg,var(--c-body),var(--c-ink))!important  }
.stat-card-split { align-items:stretch; flex-direction:row!important; gap:.55rem  }
.stat-split-left {padding-right:.35rem;align-items:center;text-align:center; }
.stat-subgrid { gap:.32rem; grid-template-columns:1fr 1fr  }
.stat-subcard {-webkit-user-select:none;border-radius:7px;line-height:1.2;padding:.22rem .18rem;transition:transform .16s ease,box-shadow .16s ease,filter .16s ease;user-select:none; }
.stat-subcard:hover { box-shadow:0 2px 8px rgba(0,0,0,.18); filter:brightness(1.12); transform:scale(1.06)  }
.stat-subcard:active { transform:scale(.97)  }
.stat-subcard:focus-visible { outline:2px solid var(--c-surface); outline-offset:1px  }
.stat-subcard.active { box-shadow:0 0 0 3px rgba(255,255,255,.25); outline:2px solid var(--c-surface); outline-offset:1px  }
.stat-sub-label {font-size:var(--fs-xs);opacity:.9; }
.stat-sub-num {font-size:var(--fs-lg);line-height:1.2;font-weight:900; }
.stat-sub-warn { background:linear-gradient(135deg,var(--c-warning),var(--c-warning)); color:var(--c-brown-deep)  }
.stat-sub-loss { background:linear-gradient(135deg,var(--c-body),var(--c-ink)); color:var(--c-line)  }
.stat-sub-gray { background:linear-gradient(135deg,var(--c-line),var(--c-muted)); color:var(--c-ink)  }
.stat-sub-info { background:linear-gradient(135deg,var(--c-info),var(--c-info)); color:var(--c-primary-deep)  }
.toolbar {gap:.75rem;margin-bottom:.7rem;padding:.5rem .9rem;border-radius:var(--radius-lg); }
.toolbar .btn { /* 继承 .btn 统一尺寸 */ }
.search-section { margin-left:auto  }
.search-row { flex-wrap:nowrap  }
.search-row .form-control {width:150px; }
.admin-toolbar { gap:.75rem; margin-bottom:.7rem; padding:.5rem .9rem; border-radius:var(--radius-lg); background:var(--c-surface); border:1px solid var(--c-line); box-shadow:var(--shadow-sm)  }
.admin-toolbar-meta { gap:.6rem  }
#caseTable thead th {background:var(--c-surface-2);letter-spacing:.03em;padding:.55rem .45rem;z-index:2;font-size:var(--fs-sm); }
#caseTable thead th .sub-header { margin-top:1px; text-transform:none  }
#caseTable tbody tr { transition:background .15s  }
#caseTable tbody td {padding:.48rem .4rem;font-size:var(--fs-base);vertical-align:middle; }
#caseTable tbody tr:hover { background:var(--c-row-hover)!important  }
/* 待补病案首页（无权威主诊断）：行高亮 + 左侧红条，便于去对应补全 */
#caseTable tbody tr.case-incomplete { background:#fff5f5 !important; box-shadow: inset 3px 0 0 #dc3545; }
#caseTable tbody tr.case-incomplete:hover { background:#ffe9e9 !important; }
#caseTable .combined-cell {padding:.35rem .3rem; }
#caseTable .combined-cell .sub-value {margin-top:1px;font-size:var(--fs-sm); }
#caseTable .wrap-cell { white-space:normal!important; word-break:break-word  }
#caseTable .wrap-cell .main-value {line-height:1.4;white-space:normal;word-break:break-word;font-size:var(--fs-base);font-weight:500; }
#caseTable .wrap-cell .sub-value {word-break:break-all;font-size:var(--fs-xs); }
#caseTable .action-btns .btn {min-height:0;padding:.28rem .55rem;font-size:var(--fs-xs);min-width:44px; }
#caseTable .badge {padding:.32em .52em;border-radius:6px;font-size:var(--fs-xs); }
.double-cell { line-height:1.45  }
.double-cell .cell-sub code, .admin-table-compact code { font-size:var(--fs-xs)  }
.combined-cell .sub-value { margin-top:2px  }
.match-log-detail { line-height:1.45; max-width:320px; white-space:normal; word-break:break-word  }
.col-seq { width:3.5em  }
.col-act { width:60px  }
.col-score { width:7.5em  }
.col-rate { width:8em  }
.col-name { width:auto  }
.keyboard-container { background:linear-gradient(145deg,var(--c-surface-2),var(--c-primary-soft)); border:1px solid var(--c-primary-soft); box-shadow:inset 0 1px 0 rgba(255,255,255,.8),0 4px 16px rgba(37,99,235,.10); padding:.85rem 1rem  }
.keyboard-container::before { background:linear-gradient(90deg,var(--c-primary),var(--c-primary)); height:3px; opacity:.8  }
.keyboard-btn { background:linear-gradient(180deg,var(--c-surface),var(--c-surface-2)); border-radius:10px; height:40px; min-width:40px; transition:all .15s ease; width:40px  }
.keyboard-btn:hover { background:linear-gradient(180deg,var(--c-primary-soft),var(--c-primary-soft)); box-shadow:0 4px 12px rgba(37,99,235,.18); color:var(--c-primary-deep); transform:translateY(-2px)  }
.keyboard-btn:active { background:linear-gradient(180deg,var(--c-primary-soft),var(--c-primary-soft)); box-shadow:0 1px 2px rgba(37,99,235,.2); transform:scale(.92) translateY(0)  }
.keyboard-btn:disabled { border-color:var(--c-line); box-shadow:none; color:var(--c-muted); cursor:not-allowed; opacity:.3; transform:none  }
.keyboard-btn.dot-lg { background:linear-gradient(180deg,var(--c-primary-soft),var(--c-primary-soft)); box-shadow:0 0 0 3px rgba(37,99,235,.15),0 4px 12px rgba(37,99,235,.2); color:var(--c-primary-deep); font-size:var(--fs-2xl)!important  }
.keyboard-container .d-none.d-md-flex, .keyboard-container .d-flex.d-md-none, .keyboard-container .keyboard-digits { gap:6px  }

/* ===== 病例录入模态框紧凑化（#caseModal） ===== */
#caseModal .modal-dialog { max-width:min(1240px,96vw); }
#caseModal .modal-body { padding:.85rem .95rem; }
#caseModal .form-label { font-size:var(--fs-sm); }
#caseModal .row.g-2 { --bs-gutter-y:.35rem; }
#caseModal .dx-hint { font-size:var(--fs-sm); margin-bottom:.35rem!important; }
/* 虚拟键盘紧凑 */
#caseModal .keyboard-container { padding:.5rem .6rem; }
#caseModal .keyboard-btn { width:36px; height:36px; min-width:36px; border-radius:8px; font-size:var(--fs-sm); }
#caseModal .keyboard-btn.dot-lg { font-size:var(--fs-xl)!important; }
#caseModal .keyboard-container .d-none.d-md-flex,
#caseModal .keyboard-container .d-flex.d-md-none,
#caseModal .keyboard-container .keyboard-digits { gap:4px; }
#caseModal #candidateList { max-height:200px; font-size:var(--fs-sm); }
/* 录入字段：按内容定宽，短字段不拉伸、长字段整行 */
#caseModal .form-row-compact { display:flex; flex-wrap:wrap; align-items:center; gap:.45rem .55rem; }
#caseModal .field { display:flex; align-items:center; gap:.35rem; flex:0 0 auto; min-width:0; }
#caseModal .field > label { margin:0; flex-shrink:0; white-space:nowrap; }
#caseModal .field > .form-control,
#caseModal .field > .form-select { flex:0 0 auto; width:auto; }
#caseModal .field-grow { flex:1 1 160px; min-width:0; }
#caseModal .field-grow > .form-control,
#caseModal .field-grow > .form-select { flex:1 1 auto; width:100%; min-width:0; }
#caseModal .form-row-actions { display:flex; justify-content:flex-end; gap:.5rem; flex-wrap:wrap; }
/* 参考费用面板：分值 / 点值 / 1.0 / 1.1 */
#caseModal .ref-fee-panel { display:flex; flex-wrap:wrap; gap:.5rem; align-items:stretch; background:var(--c-surface-2); border:0.5px solid var(--c-line); border-radius:8px; padding:.55rem .65rem; margin-bottom:.6rem; }
#caseModal .ref-fee-panel .ref-item { display:flex; flex-direction:column; justify-content:center; min-width:0; flex:1 1 90px; }
#caseModal .ref-fee-panel .ref-item:not(:last-child) { padding-right:.5rem; border-right:0.5px solid var(--c-line); }
#caseModal .ref-fee-panel .ref-label { font-size:var(--fs-xs); color:var(--c-muted); line-height:1.2; }
#caseModal .ref-fee-panel .ref-value { font-size:var(--fs-sm); font-weight:700; color:var(--c-primary-deep); line-height:1.3; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#caseModal .ref-fee-panel .ref-item.empty .ref-label { color:var(--c-primary-deep); }
#caseModal .ref-fee-panel .ref-item.empty .ref-value { font-weight:400; color:var(--c-muted); }
#caseModal .ref-fee-panel .ref-value .ref-sub { font-size:var(--fs-xs); color:var(--c-muted); font-weight:400; margin-left:.2rem; }
#caseModal .ref-fee-panel .ref-diff { display:block; font-size:var(--fs-xs); font-weight:600; line-height:1.3; margin-top:.15rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#caseModal .ref-fee-panel .ref-diff.diff-profit { color:var(--c-success); }
#caseModal .ref-fee-panel .ref-diff.diff-loss { color:var(--c-danger); }
#caseModal .ref-fee-panel .ref-diff.diff-even { color:var(--c-muted); }
/* 弹窗内部单栏堆叠：录入表单整宽在上，实时匹配列表整宽在下 */
#caseModal .modal-2col { display:grid; grid-template-columns:minmax(0,1fr) 500px; gap:1rem; align-items:start; }
#caseModal .modal-col-op { min-width:0; }
#caseModal .modal-col-info { min-width:0; margin-top:0; }
@media(max-width:1180px){ #caseModal .modal-2col { grid-template-columns:1fr; } #caseModal .modal-col-info { margin-top:.5rem; } }
#caseModal .modal-col-info .dx-hint { flex-shrink:0; }
#caseModal #candidateList { max-height:400px; width:100%; overflow-y:auto; border:0.5px solid var(--c-line); border-radius:8px; padding:.4rem .5rem; }
#caseModal #candidateList .table-responsive { overflow-x:auto; }
#caseModal #candidateList table { min-width:480px; margin-bottom:0; }
#caseModal #candidateList th, #caseModal #candidateList td { padding:.35rem .4rem; white-space:nowrap; vertical-align:middle; word-break:keep-all; }
#caseModal #candidateList thead th { font-size:var(--fs-xs); letter-spacing:.02em; font-weight:600; color:var(--c-body); background:var(--c-line-soft); }
#caseModal #candidateList .main-value { font-size:var(--fs-sm); font-weight:600; }
#caseModal #candidateList .sub-value { font-size:var(--fs-xs); color:var(--c-muted); }
#caseModal #candidateList .combined-cell .main-value { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; display:block; max-width:100%; }
#caseModal #candidateList .combined-cell .sub-value code { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; display:block; max-width:100%; }
#caseModal .modal-col-op .keyboard-container .d-none.d-md-flex,
#caseModal .modal-col-op .keyboard-container .keyboard-digits { gap:3px; }
#caseModal .modal-col-op .keyboard-btn { width:34px; height:34px; min-width:34px; font-size:var(--fs-sm); }
#candidateList { max-height:300px; overflow-y:auto; padding:.5rem  }
#candidateList th, #candidateList td { padding:.4rem .45rem  }
#candidateList thead th { letter-spacing:.03em  }
.candidate-row { transition:background .12s  }
.candidate-row:hover { background:var(--c-primary-soft)!important  }
.candidate-card { margin-bottom:.35rem; padding:.5rem .6rem  }
.toast-container { right:20px; top:20px; z-index:9999  }
.toast-notification { animation:toastIn .3s ease-out; backdrop-filter:blur(8px); box-shadow:var(--shadow-lg); gap:.6rem; max-width:420px; min-width:300px; padding:.9rem 1.1rem; pointer-events:auto  }
.toast-notification.toast-leave { opacity:0; transform:translateX(100%)  }
.toast-notification .toast-close { background:none; font-size:var(--fs-lg); margin-left:auto; padding:0 .25rem; transition:opacity .15s  }
.empty-state {padding:1.5rem 1rem; }
.empty-state .empty-icon {font-size:var(--fs-3xl);margin-bottom:.75rem; }
.params-table { gap:1rem; grid-template-columns:repeat(2,1fr)  }
.param-group .pg-hd { padding:.5rem .75rem; font-size:var(--fs-sm)  }
.param-group .pg-row { padding:.6rem .75rem; flex-direction:column; align-items:stretch; gap:.35rem  }
.param-group .pg-row-top { display:flex; align-items:center; gap:.5rem  }
.param-group .pg-label { width:7.5em; font-weight:600; color:var(--c-body); font-size:var(--fs-sm)  }
.param-group .pg-input { display:flex; align-items:center; gap:.35rem; flex:1  }
.param-group .pg-input input { border-radius:var(--radius-sm); height:34px; padding:.4rem .5rem; border:1px solid var(--c-line); flex:1; background:var(--c-surface)  }
.param-group .pg-input input:focus { box-shadow:0 0 0 3px var(--ring); outline:none; border-color:var(--c-primary)  }
.param-group .pg-unit { text-align:right; color:var(--c-muted); font-size:var(--fs-sm); min-width:2.5em; flex-shrink:0  }
.param-group .pg-desc { font-size:var(--fs-xs); color:var(--c-muted); line-height:1.45  }
.save-bar { justify-content:flex-end; margin-top:.85rem  }
.admin-tabs .nav-link { background:transparent; border:1px solid transparent; border-radius:var(--radius-sm) var(--radius-sm) 0 0; color:var(--c-body)!important; padding:.5rem .9rem  }
.admin-tabs .nav-link.active { border-bottom-color:var(--c-surface); border-color:var(--c-line); box-shadow:0 -2px 0 var(--c-primary-soft); color:var(--c-primary)!important  }
.admin-card-header.p-0 .admin-tabs { padding:.3rem .4rem 0  }
.admin-card-header.p-0 .admin-tabs .nav-link { margin-bottom:-1px  }
.admin-layout { min-height:100vh  }
.admin-sidebar { background:linear-gradient(180deg,var(--c-primary-deep),var(--c-primary-deep))  }
.admin-sidebar-brand { border-bottom:1px solid rgba(255,255,255,.08); font-size:var(--fs-lg)  }
.admin-sidebar-brand .brand-icon { height:30px; width:30px  }
.admin-sidebar-brand .brand-icon::after { height:12px; width:12px  }
.admin-nav { overflow-y:auto; padding:.5rem .5rem  }
.admin-nav-section { margin-bottom:.35rem  }
.admin-nav-section-title { color:rgba(255,255,255,.35); letter-spacing:.08em; padding:.35rem .75rem .2rem  }
.admin-nav-item { color:rgba(255,255,255,.72); margin-bottom:1px; padding:.45rem .75rem  }
.admin-nav-item:hover { background:rgba(255,255,255,.08)  }
.admin-nav-item.active { background:rgba(255,255,255,.14); box-shadow:inset 3px 0 0 var(--c-primary-soft)  }
.admin-nav-item .nav-icon { background:rgba(255,255,255,.06); border-radius:8px; height:26px; width:26px  }
.admin-sidebar-footer { border-top:1px solid rgba(255,255,255,.08); padding:.75rem .5rem  }
.admin-content { max-width:calc(100vw - 222px); overflow-x:hidden; padding:.75rem  }
.admin-page-header { padding-bottom:.4rem  }
.admin-page-header h4 { color:var(--c-ink); font-size:var(--fs-lg)  }
.admin-card { margin-bottom:.4rem  }
.admin-card-header { background:linear-gradient(180deg,var(--c-surface),var(--c-surface-2)); font-size:var(--fs-sm); padding:.55rem .9rem  }
.admin-card-body, .tree-loading { padding:.5rem  }
.admin-login-page { background:linear-gradient(135deg,var(--c-primary-deep),var(--c-primary-deep)); min-height:100vh  }
.admin-login-box { box-shadow:var(--shadow-xl); max-width:90vw; padding:2rem; width:360px  }
.admin-login-box h4 { color:var(--c-ink); font-size:var(--fs-xl); margin-bottom:1.5rem  }
.admin-login-box .brand-icon { height:48px; margin:0 auto 1rem; width:48px  }
.admin-login-box .brand-icon::after { height:16px; width:16px  }
.admin-stat-row { grid-template-columns:repeat(auto-fit,minmax(100px,1fr))  }
.admin-action-grid { grid-template-columns:repeat(auto-fill,minmax(200px,1fr))  }
.admin-action-card { border-left:4px solid var(--c-primary); padding:.6rem .75rem  }
.admin-action-card:hover { border-left-color:var(--c-primary-soft); transform:translateY(-2px)  }
.admin-action-card .action-icon { border-radius:10px; height:34px; width:34px  }
.admin-action-card .action-desc { line-height:1.3; margin-top:.15rem  }
.admin-action-card.danger { border-left-color:var(--c-danger)  }
.admin-action-card.danger:hover { border-color:var(--c-danger); border-left-color:var(--c-danger); box-shadow:0 4px 12px rgba(220,38,38,.1)  }
.admin-table th { font-size:var(--fs-xs); letter-spacing:.03em; padding:.4rem .5rem; text-align:left  }
.admin-table td, .dip-result-table td { padding:.35rem .5rem  }
.admin-table th small { font-weight:400; letter-spacing:0; margin-top:1px; text-transform:none  }
.admin-loading { padding:3rem  }
.admin-loading .spinner { animation:spin .6s linear infinite; border:3px solid var(--c-line); border-radius:50%; border-top-color:var(--c-primary-soft); height:28px; width:28px  }
.page-header h5 { color:var(--c-ink); font-size:var(--fs-xl)  }
body:not(.admin-page) > .container.mt-4 { margin-top:.85rem!important  }
.toolbar .row { gap:.35rem!important  }
.card.shadow-sm { border-radius:var(--radius-lg)!important  }
.card-body { padding:.6rem .75rem!important  }
#caseTable { font-size:var(--fs-md)!important  }
#caseTable .combined-cell .main-value { font-size:var(--fs-md)!important  }
#caseTable .action-btns { gap:3px  }
#paginationContainer { padding:.4rem .5rem!important  }
#calcProgress { margin-bottom:.55rem!important  }
#calcProgress .progress { height:22px!important  }
.empty-state .empty-text { font-size:var(--fs-base)!important  }
.search-hero { background:linear-gradient(135deg, var(--c-primary-deep), var(--c-primary-soft)); margin-bottom:.75rem; padding:.85rem 1.15rem  }
.search-hero h3 { font-size:var(--fs-lg); margin-bottom:.15rem  }
.search-hero p { color:rgba(255,255,255,.7)  }
.search-box-wrap { -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px); background:rgba(255,255,255,.12); gap:.4rem; margin-top:.6rem; padding:.35rem  }
.search-box-wrap .form-control { background:rgba(255,255,255,.95); }
.search-box-wrap .btn { font-size:var(--fs-md); }
.search-box-wrap .form-select { background:rgba(255,255,255,.95); min-width:110px; width:auto  }
.mode-tabs, .stats-mini-row { margin-bottom:.6rem  }
.mode-tab { padding:.35rem .9rem  }
.mode-tab.active { background:linear-gradient(135deg, var(--c-primary-soft), var(--c-primary)); border-color:var(--c-primary)  }
.dip-result-table th { background:linear-gradient(180deg, var(--c-line-soft), var(--c-line)); letter-spacing:.04em; padding:.4rem .5rem; text-align:left  }
.dip-result-table .type-badge { display:inline-block; padding:.15em .5em  }
.type-badge.core { background:var(--c-info-soft); color:var(--c-info-deep)  }
.type-badge.comprehensive { background:var(--c-warning-soft); color:var(--c-warning)  }
.tree-node { gap:.3rem; padding:.2rem .4rem; transition:background .12s  }
.tree-node .toggle-icon { transition:transform .2s; width:18px  }
.tree-node .node-code { min-width:70px  }
.tree-node.dip-entry { background:var(--c-success-soft); border-left:3px solid var(--c-success); margin-left:.5rem  }
.tree-node.dip-entry:hover { background:var(--c-success-soft)  }
.tree-children { border-left:1px dashed var(--c-line); margin-left:.6rem; padding-left:1.5rem  }
.path-breadcrumb .crumb { padding:.15rem .5rem  }
.path-breadcrumb .sep { color:var(--c-line)  }
.detail-panel { padding:.65rem .9rem  }
.detail-panel .detail-row { align-items:baseline; gap:.4rem; padding:.2rem 0  }
.detail-panel .detail-label { letter-spacing:.03em; min-width:75px  }
.detail-panel .detail-value { font-size:var(--fs-sm)  }
.detail-panel .detail-value.score { font-size:var(--fs-lg)  }
.detail-expand-row > td { background:var(--c-surface-2); padding:.6rem .9rem  }
.detail-expand-row .detail-panel { background:var(--c-surface)  }

/* 病例审计面板：复核状态 + 变更记录 */
.case-audit-panel { border-top:1px dashed var(--c-line); margin-top:.75rem; padding-top:.6rem }
.audit-block { margin-bottom:.5rem }
.audit-block-hd { font-weight:600; font-size:var(--fs-sm); color:var(--c-body); margin-bottom:.25rem }
.audit-block[open] .audit-block-hd { margin-bottom:.4rem }
.audit-reviewed { font-size:var(--fs-sm); font-weight:600; color:var(--c-danger) }
.audit-note { font-size:var(--fs-sm); color:var(--c-body); margin-top:.15rem; white-space:pre-wrap }
.audit-log-item { border-bottom:1px solid var(--c-line-soft); padding:.3rem 0; font-size:var(--fs-sm) }
.audit-log-item:last-child { border-bottom:none }
.ali-hd { display:flex; align-items:center; gap:.4rem; margin-bottom:.15rem; flex-wrap:wrap }
.ali-action { font-weight:700; padding:.05rem .4rem; border-radius:3px; font-size:var(--fs-xs) }
.ali-新增 { background:var(--c-info-soft); color:var(--c-info) }
.ali-编辑 { background:var(--c-line-soft); color:var(--c-body) }
.ali-删除 { background:var(--c-danger-soft); color:var(--c-danger) }
.ali-复核 { background:var(--c-danger-soft); color:var(--c-danger) }
.ali-time { color:var(--c-muted); font-size:var(--fs-xs) }
.ali-op { color:var(--c-body); font-size:var(--fs-xs) }
.ali-changes { padding-left:.6rem; border-left:2px solid var(--c-line); margin-top:.15rem }
.ali-change { font-size:var(--fs-xs); color:var(--c-body) }
.ali-field { font-weight:600 }
.ali-old { color:var(--c-danger); text-decoration:line-through }
.ali-new { color:var(--c-success) }
.quick-tag { background:rgba(255,255,255,.15); border:1px solid rgba(255,255,255,.2); color:rgba(255,255,255,.9); padding:.2rem .55rem  }
.quick-tag:hover { background:rgba(255,255,255,.25); transform:translateY(-1px)  }
.stat-tile { box-shadow:var(--shadow-xs); gap:.4rem; padding:.3rem .65rem  }
.stat-tile .stat-tile-num { font-size:var(--fs-lg)  }
.stat-tile.success { border-left:3px solid var(--c-success)  }
.stat-tile.success .stat-tile-num { color:var(--c-success)  }
.stat-tile.danger { border-left:3px solid var(--c-danger)  }
.stat-tile.warning { border-left:3px solid var(--c-warning)  }
.stat-tile.warning .stat-tile-num { color:var(--c-warning)  }
.stat-tile.info { border-left:3px solid var(--c-info)  }
.stat-tile.info .stat-tile-num { color:var(--c-info)  }
.case-th-grid { gap:3px 8px; grid-template-columns:1fr 1fr  }
.admin-table-compact th { padding:.28rem .45rem  }
.admin-table-compact td { padding:.22rem .45rem  }
.admin-form-field { flex:1 1 200px; min-width:160px  }
.admin-form-field-sm { max-width:200px; min-width:130px  }
.admin-scroll { max-height:360px; overflow:auto  }
.form-control.search-w200 { width:200px  }
.ig-w320 { max-width:320px  }
.ig-w360 { max-width:360px  }
.admin-progress-overlay { background:rgba(0,0,0,.45); bottom:0; z-index:9999  }
.admin-progress-box { animation:progressPop .25s ease-out  }
.admin-progress-box h5 { margin:0 0 4px  }
.admin-progress-close { margin-top:12px  }
.admin-sidebar-brand::after { background:linear-gradient(90deg,transparent,rgba(255,255,255,.18),transparent); bottom:0; height:1px; left:1.25rem; right:1.25rem  }
.admin-nav-item:hover .nav-icon { background:rgba(255,255,255,.14)  }
.admin-nav-item.active .nav-icon { background:rgba(255,255,255,.22)  }
.admin-page-header::after { background:linear-gradient(90deg,var(--c-primary),var(--c-primary)); border-radius:2px; bottom:-1px; height:2px; width:56px  }
.admin-table tbody tr { transition:background .15s, box-shadow .15s  }
.admin-table tbody tr:hover { background:var(--c-row-hover); box-shadow:inset 3px 0 0 var(--c-primary-soft)  }
#catalogTable tbody td:nth-child(5), #catalogTable tbody td:nth-child(6), #catalogTable tbody td:nth-child(7) { font-variant-numeric:tabular-nums  }
.admin-action-card:hover .action-icon { transform:scale(1.05)  }
.admin-action-card.danger .action-icon, .cockpit-chip.over { background:var(--c-danger-soft)  }
.cockpit-header { gap:var(--space-4)  }
.cockpit-header > div:first-child p { margin:.15rem 0 0  }
.cockpit-select { background:var(--c-surface); border:1px solid var(--c-line); color:var(--c-ink)  }
.cockpit-select:focus { box-shadow:0 0 0 3px var(--ring); outline:none  }
.cockpit-wrap { padding:.235rem .118rem  }
.cockpit-kpis { gap:.82rem; grid-template-columns:repeat(4,1fr); margin-bottom:1.18rem  }
.cockpit-kpi { border:1px solid var(--c-line); border-top:3px solid var(--c-primary); padding:.88rem 1.06rem  }
.cockpit-kpi.green { border-top-color:var(--c-success)  }
.cockpit-kpi.red { border-top-color:var(--c-danger)  }
.cockpit-kpi .ck-value { font-size:var(--fs-2xl); letter-spacing:-.5px; margin-top:.35rem  }
.cockpit-kpi .ck-delta { margin-top:.235rem  }
.cockpit-kpi .ck-delta.up, .cockpit-pl.pos { color:var(--c-success)  }
.cockpit-kpi .ck-delta.down, .cockpit-pl.neg { color:var(--c-danger)  }
.cockpit-grid2 { align-items:start; gap:1.18rem; grid-template-columns:1fr; }
.cockpit-panel { border:1px solid var(--c-line)  }
.cockpit-panel-head { padding:.76rem 1.06rem; display:flex; align-items:center; justify-content:space-between; gap:.5rem  }
.cockpit-panel-head .ch { font-size:var(--fs-sm)  }
.cockpit-tools { gap:.47rem  }
.cockpit-side { gap:1.18rem  }
.cockpit-chip { border-radius:20px; padding:.176rem .53rem  }
.cockpit-chip.ok { background:var(--c-success-soft); color:var(--c-success)  }
.cockpit-chip.warn { background:var(--c-warning-soft); color:var(--c-warning)  }
.cockpit-table { font-size:var(--fs-xs)  }
.cockpit-table thead th { padding:.65rem .82rem; text-align:left; z-index:1  }
.cockpit-table tbody td { padding:.71rem .82rem  }
.cockpit-num, .cockpit-pl { font-variant-numeric:tabular-nums; text-align:right  }
/* 表头数值列与表体同向右对齐（覆盖上面 thead th 的左对齐，修复表头/表体对不齐） */
.cockpit-table thead th.cockpit-num { text-align:right  }
.cockpit-tag { border-radius:5px; padding:.118rem .47rem  }
.cockpit-tag.core { background:var(--c-info-soft); color:var(--c-info)  }
.cockpit-tag.mix { color:var(--c-primary)  }
.cockpit-bars { gap:.59rem; height:180px; padding:1.06rem  }
.cockpit-bar { gap:.25rem; height:100%; justify-content:flex-end  }
.cockpit-bar .chart-area { flex:1; min-height:0; display:flex; align-items:flex-end }
.cockpit-bar .col { border-radius:4px 4px 0 0; min-height:4px; transition:height .4s ease  }
.cockpit-bar .col.pos { background:var(--c-success)  }
.cockpit-bar .col.neg { background:var(--c-danger)  }
.cockpit-bar .m { color:var(--c-muted); font-size:var(--fs-xs)  }
.cockpit-bar .v { font-size:var(--fs-xs)  }
.cockpit-risk { padding:.35rem 0  }
.cockpit-risk li { font-size:var(--fs-xs); gap:.59rem; padding:.65rem 1.06rem  }
.cockpit-risk .rr-meta { color:var(--c-muted)  }
.cockpit-foot { border-top:1px solid var(--c-line); color:var(--c-muted); padding:.76rem 1.06rem  }
.cockpit-loading { padding:2.35rem  }
.cockpit-scroll { max-height:540px; overflow:auto  }

/* ============================================================
   可视化增强组件（2026-07-13 · 全部走令牌，集中可调）
   ============================================================ */

/* —— 匹配状态徽标：精确 / 降级 / 失败（文字+图标，绝不仅靠颜色） —— */
.match-badge { display:inline-flex; align-items:center; gap:.25rem; font-size:var(--fs-xs); font-weight:700; line-height:1; padding:.22em .55em; border-radius:20px; border:1px solid transparent; white-space:nowrap; }
.match-badge .mb-ico { font-size:var(--fs-xs); line-height:1; font-style:normal; }
.match-badge.success { color:var(--c-success); background:var(--c-success-soft); border-color:color-mix(in srgb,var(--c-success) 28%,transparent); }
.match-badge.mismatch { color:var(--c-warning); background:var(--c-warning-soft); border-color:color-mix(in srgb,var(--c-warning) 30%,transparent); }
.match-badge.failed { color:var(--c-danger); background:var(--c-danger-soft); border-color:color-mix(in srgb,var(--c-danger) 30%,transparent); }

/* —— 五档盈亏徽标：图标+文字，满足 WCAG 1.4.1（信息不只用颜色传递） —— */
.tier-badge { display:inline-flex; align-items:center; gap:.28rem; font-size:var(--fs-base); font-weight:800; line-height:1.1; }
.tier-badge .tb-ico { font-size:.85em; line-height:1; font-style:normal; }
.tier-badge.tier-profit { color:var(--c-success); }
.tier-badge.tier-even { color:var(--c-info); }
.tier-badge.tier-loss { color:var(--c-danger); }
.tier-badge.tier-warn { color:var(--c-warning); }
.tier-badge.tier-severe { color:var(--c-danger-deep); }
/* 盈亏金额符号色也走令牌 */
.tier-amt.profit { color:var(--c-success); }
.tier-amt.loss { color:var(--c-danger); }

/* —— 降级原因一行说明 —— */
.match-reason { display:flex; align-items:center; gap:.3rem; margin-top:.3rem; font-size:var(--fs-xs); color:var(--c-muted); line-height:1.35; }
.match-reason .mr-ico { color:var(--c-warning); font-style:normal; }
.match-reason code { background:var(--c-line-soft); border-radius:3px; padding:0 .25em; font-size:.92em; color:var(--c-body); }
.match-reason.failed { color:var(--c-danger); }

/* —— 通用状态点（cockpit / 列表复用） —— */
.c-ok { color:var(--c-success)!important }
.c-bad { color:var(--c-danger)!important }
.c-warn { color:var(--c-warning)!important }
.c-info { color:var(--c-info)!important }

/* —— 手术操作类型标签（手术/治疗/检查/介入/保守/中医） —— */
.op-tag{display:inline-block;padding:0 .42em;font-size:.7em;line-height:1.7;border-radius:3px;font-weight:600;vertical-align:middle;margin-left:.25em;white-space:nowrap}
.op-tag.op-s{background:var(--c-danger);color:#fff}
.op-tag.op-t{background:var(--c-info);color:#fff}
.op-tag.op-d{background:#16a085;color:#fff}
.op-tag.op-i{background:#8e44ad;color:#fff}
.op-tag.op-c{background:#94a3b8;color:#fff}
.op-tag.op-x{background:var(--c-warning);color:#fff}

/* ============================================================
   驾驶舱（cockpit）可视化增强
   ============================================================ */
.cockpit-kpi { position:relative; display:flex; flex-direction:column; gap:.2rem; }
.cockpit-kpi .ck-icon { position:absolute; top:.7rem; right:.8rem; font-size:var(--fs-lg); opacity:.5; }
.cockpit-kpi .ck-value { font-variant-numeric:tabular-nums; }
.cockpit-kpi .ck-unit { font-size:var(--fs-xs); color:var(--c-muted); margin-left:.15rem; }
.cockpit-kpi .ck-delta { font-weight:700; }

/* 五档分布环形图 */
.cockpit-donut-wrap { display:flex; align-items:center; justify-content:center; gap:1.5rem; padding:.6rem .2rem; flex-wrap:wrap; }
.cockpit-donut { --size:160px; width:var(--size); height:var(--size); border-radius:50%; flex-shrink:0; position:relative; }
.cockpit-donut::after { content:''; position:absolute; inset:26%; border-radius:50%; background:var(--c-surface); box-shadow:inset 0 1px 3px rgba(15,23,42,.08); }
.cockpit-donut .donut-center { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; z-index:1; }
.cockpit-donut .donut-center .dc-num { font-size:var(--fs-2xl); font-weight:900; line-height:1; color:var(--c-ink); }
.cockpit-donut .donut-center .dc-label { font-size:var(--fs-xs); color:var(--c-muted); margin-top:.15rem; }
.cockpit-legend { display:flex; flex-direction:column; gap:.35rem; font-size:var(--fs-xs); }
.cockpit-legend .lg-item { display:flex; align-items:center; gap:.45rem; }
.cockpit-legend .lg-dot { width:10px; height:10px; border-radius:3px; flex-shrink:0; }
.cockpit-legend .lg-name { color:var(--c-body); }
.cockpit-legend .lg-val { margin-left:auto; font-weight:700; font-variant-numeric:tabular-nums; color:var(--c-ink); }

/* 风险榜增强 */
.cockpit-risk .rr-loss-amt { color:var(--c-danger); font-weight:700; font-variant-numeric:tabular-nums; }
.cockpit-chip.over { color:var(--c-danger)!important; }
.cockpit-chip.warn { color:var(--c-warning)!important; }
.cockpit-chip.ok { color:var(--c-success)!important; }

/* ============================================================
   深色主题令牌槽（预留可调位 · 切换 data-theme="dark" 即生效）
   ============================================================ */
[data-theme="dark"] {
  --app-bg:var(--c-ink); --card:var(--c-ink); --surface:var(--c-ink); --surface-2:var(--c-body);
  --text:var(--c-line); --text-dim:var(--c-muted); --text-faint:var(--c-muted);
  --border:var(--c-body); --gray-50:var(--c-ink); --gray-100:var(--c-body); --gray-150:var(--c-body);
  --gray-200:var(--c-body); --gray-300:var(--c-body); --row-hover:rgba(226,232,240,.06);
  --ring:rgba(45,212,191,.28); --shadow-sm:0 1px 3px rgba(0,0,0,.4); --shadow-md:0 6px 16px rgba(0,0,0,.45);
  --shadow-lg:0 14px 30px rgba(0,0,0,.5); --shadow-xl:0 24px 48px rgba(0,0,0,.55);
  /* 保持语义色在深色下可读（微调亮度） */
  --primary-wash:rgba(45,212,191,.12); --info-bg:rgba(29,111,184,.18); --success-bg:rgba(21,128,61,.18);
  --warning-bg:rgba(217,119,6,.18); --danger-bg:rgba(220,38,38,.18);
}

/* ============================================================
   无障碍：尊重「减少动态」偏好（前庭功能障碍友好）
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration:.001ms!important; animation-iteration-count:1!important; transition-duration:.001ms!important; scroll-behavior:auto!important; }
  .progress-bar-animated { animation:none!important; }
}

/* ============================================================
   五档盈亏常驻图例（病例列表页 · 新人释义）
   ============================================================ */
.tier-strip { display:flex; flex-wrap:wrap; gap:.4rem .9rem; font-size:var(--fs-xs); color:var(--c-body); background:var(--c-surface-2); border:1px solid var(--c-line); border-radius:var(--radius-md); padding:.5rem .75rem; }
.ts-item { display:inline-flex; align-items:center; gap:.35rem; }
.ts-dot { width:9px; height:9px; border-radius:50%; flex-shrink:0; }
.ts-profit { background:var(--c-success); }
.ts-even   { background:var(--c-info); }
.ts-loss   { background:var(--c-danger); }
.ts-warn   { background:var(--c-warning); }
.ts-severe { background:var(--c-danger-deep); }

/* 倍率维度选项卡（监管角标，与盈亏正交，可叠加筛选） */
.ratio-bar { display:flex; flex-wrap:wrap; gap:.4rem; align-items:center; }
.ratio-tab { display:inline-flex; align-items:center; gap:.35rem; font-size:var(--fs-sm); font-weight:600; padding:.3rem .7rem; border-radius:999px; border:1px solid var(--c-line); background:var(--c-surface); color:var(--c-body); cursor:pointer; transition:var(--transition); }
.ratio-tab b { font-weight:700; font-variant-numeric:tabular-nums; background:rgba(15,23,42,.08); border-radius:999px; padding:0 .4rem; min-width:1.4rem; text-align:center; }
.ratio-tab:hover { border-color:var(--c-primary); }
.ratio-tab.active { color:var(--c-surface); }
.ratio-tab.active b { background:rgba(255,255,255,.25); }
.ratio-tab.ratio-all.active { background:var(--c-primary); border-color:var(--c-primary); }
.ratio-tab.ratio-low.active { background:#f59e0b; border-color:#f59e0b; }
.ratio-tab.ratio-normal.active { background:var(--c-info); border-color:var(--c-info); }
.ratio-tab.ratio-high.active { background:#dc3545; border-color:#dc3545; }

/* 待复核筛选药丸 */
.review-pill { display:inline-flex; align-items:center; gap:.35rem; font-size:var(--fs-sm); font-weight:600; padding:.3rem .7rem; border-radius:999px; border:1px solid var(--c-line); background:var(--c-surface); color:var(--c-body); cursor:pointer; transition:var(--transition); }
.review-pill:hover { border-color:var(--c-primary); color:var(--c-primary-deep); }
.review-pill.active { background:var(--c-primary-soft); border-color:var(--c-primary); color:var(--c-surface); }
.review-pill .rp-num { font-variant-numeric:tabular-nums; background:rgba(15,23,42,.08); border-radius:999px; padding:0 .4rem; min-width:1.4rem; text-align:center; }
.review-pill.active .rp-num { background:rgba(255,255,255,.25); }
/* 待补病案首页筛选胶囊（his/yb 只读通道用，便于去对应补全） */
.incomplete-pill { display:inline-flex; align-items:center; gap:.35rem; font-size:var(--fs-sm); font-weight:600; padding:.3rem .7rem; border-radius:999px; border:1px solid #f1aeb5; background:#fff5f5; color:#b02a37; cursor:pointer; transition:var(--transition); }
.incomplete-pill:hover { border-color:#dc3545; color:#a52834; }
.incomplete-pill.active { background:#dc3545; border-color:#dc3545; color:#fff; }
.incomplete-pill .ip-num { font-variant-numeric:tabular-nums; background:rgba(176,42,55,.1); border-radius:999px; padding:0 .4rem; min-width:1.4rem; text-align:center; }
.incomplete-pill.active .ip-num { background:rgba(255,255,255,.25); }
.recheck-pill { display:inline-flex; align-items:center; gap:.35rem; font-size:var(--fs-sm); font-weight:600; padding:.3rem .7rem; border-radius:999px; border:1px solid #f0b4b4; background:#fff5f5; color:#c0392b; cursor:pointer; transition:var(--transition); }
.recheck-pill:hover { border-color:#e74c3c; color:#a93226; }
.recheck-pill.active { background:#e74c3c; border-color:#e74c3c; color:#fff; }
.recheck-pill .rp-num { font-variant-numeric:tabular-nums; background:rgba(192,57,43,.1); border-radius:999px; padding:0 .4rem; min-width:1.4rem; text-align:center; }
.recheck-pill.active .rp-num { background:rgba(255,255,255,.25); }
.appeal-pill { display:inline-flex; align-items:center; gap:.35rem; font-size:var(--fs-sm); font-weight:600; padding:.3rem .7rem; border-radius:999px; border:1px solid #d9b8f0; background:#faf3fd; color:#8e44ad; cursor:pointer; transition:var(--transition); }
.appeal-pill:hover { border-color:#9b59b6; color:#713688; }
.appeal-pill.active { background:#9b59b6; border-color:#9b59b6; color:#fff; }
.appeal-pill .rp-num { font-variant-numeric:tabular-nums; background:rgba(142,68,173,.1); border-radius:999px; padding:0 .4rem; min-width:1.4rem; text-align:center; }
.appeal-pill.active .rp-num { background:rgba(255,255,255,.25); }
.tier-pill { display:inline-flex; align-items:center; gap:.35rem; font-size:var(--fs-sm); font-weight:600; padding:.3rem .7rem; border-radius:999px; cursor:pointer; transition:var(--transition); }
.tier-pill-comp { border:1px solid #b6e0c3; background:#f1faf4; color:#1e8e4e; }
.tier-pill-comp:hover { border-color:#27ae60; color:#146c38; }
.tier-pill-comp.active { background:#27ae60; border-color:#27ae60; color:#fff; }
.tier-pill-fall { border:1px solid #d6d9de; background:#f5f6f8; color:#5a6472; }
.tier-pill-fall:hover { border-color:#9aa1ad; color:#3c4350; }
.tier-pill-fall.active { background:#6b7480; border-color:#6b7480; color:#fff; }
.tier-pill-pend { border:1px solid #f5d99b; background:#fef9ef; color:#b8860b; }
.tier-pill-pend:hover { border-color:#e0a800; color:#92670a; }
.tier-pill-pend.active { background:#e0a800; border-color:#e0a800; color:#fff; }
.tier-pill-his { border:1px solid #a9d4e6; background:#eef7fb; color:#1b7fa3; }
.tier-pill-his:hover { border-color:#0e6f92; color:#0e5d7a; }
.tier-pill-his.active { background:#17a2b8; border-color:#17a2b8; color:#fff; }
.tier-pill-even { border:1px solid #cfd8e3; background:#f4f7fa; color:#46637e; }
.tier-pill-even:hover { border-color:#6c8aa6; color:#33485e; }
.tier-pill-even.active { background:#6c8aa6; border-color:#6c8aa6; color:#fff; }
.tier-pill-unk { border:1px solid #e0c3c3; background:#fbf4f4; color:#a34949; }
.tier-pill-unk:hover { border-color:#a34949; color:#823333; }
.tier-pill-unk.active { background:#a34949; border-color:#a34949; color:#fff; }
.tier-pill .rp-num { font-variant-numeric:tabular-nums; background:rgba(0,0,0,.06); border-radius:999px; padding:0 .4rem; min-width:1.4rem; text-align:center; }
.tier-pill.active .rp-num { background:rgba(255,255,255,.25); }

/* 复核病例 · 单独计算 DIP 面板 */
.recheck-block { border-left:3px solid #e74c3c; }
.recheck-body { padding:.25rem 0; }
.rc-row { display:flex; gap:.5rem; padding:.15rem 0; border-bottom:1px dashed var(--c-line); }
.rc-row:last-child { border-bottom:none; }
.rc-k { flex:0 0 7.5rem; color:var(--c-muted); }
.rc-v { flex:1 1 auto; font-weight:600; }
.rc-hi { color:#c0392b; }
.rc-tag { display:inline-block; font-size:.62rem; background:#e74c3c; color:#fff; border-radius:3px; padding:0 .3rem; margin-left:.3rem; font-weight:700; }

/* 降级原因行：默认单行收起，点击展开（降密度） */
.match-reason .mr-text { display:-webkit-box; -webkit-line-clamp:1; -webkit-box-orient:vertical; overflow:hidden; }
.match-reason.open .mr-text { display:inline; -webkit-line-clamp:unset; }

/* ============================================================
   视觉与操作统一化（2026-07-13）
   目标：消除按钮/输入框/搜索框三套高度、散落魔法字号、
         四种页头内边距差异；并补键盘焦点环与触控目标。
   全部走令牌，改 :root 即可整体调。
   ============================================================ */



/* 控件尺寸统一：按钮 / 输入框 / 下拉 现在共享同一高度与内边距 */
.btn, .form-control, .form-select {
  min-height:var(--h-control);
  padding:var(--control-py) var(--control-px);
  font-size:var(--fs-md);
}
.btn-sm, .form-control-sm, .form-select-sm {
  min-height:var(--h-control-sm);
  padding:var(--control-sm-py) var(--control-sm-px);
  font-size:var(--fs-sm);
}

/* 字号阶梯映射：统一排版节奏（仅映射高可见层，微观 caption 保留） */
#caseTable thead th { font-size:var(--fs-sm); }
#caseTable tbody td { font-size:var(--fs-base); }
#candidateList thead th { font-size:var(--fs-sm); }
.admin-page-header h4, .page-header h5 { font-size:var(--fs-xl); }
.stat-title { font-size:var(--fs-sm); }
.stat-amt { font-size:var(--fs-lg); }
.cockpit-kpi .ck-label { font-size:var(--fs-sm); }
.cockpit-kpi .ck-value { font-size:var(--fs-lg); }
.cockpit-panel-head .ch { font-size:var(--fs-sm); }

/* 页头统一：保留各自装饰背景，统一内边距与字号 */
.card-header, .cockpit-panel-head, .admin-card-header {
  padding:var(--header-py) var(--header-px);
}
.card-header { font-size:var(--fs-base); }
.admin-card-header { font-size:var(--fs-sm); }

/* 操作反馈与可达性：键盘焦点环 + 触控目标 */
.form-control:focus, .form-select:focus { box-shadow:var(--c-primary); outline:0; }
:focus-visible { outline:2px solid var(--c-primary-soft); outline-offset:2px; }
.stat-card:focus-visible, .admin-nav-item:focus-visible,
.tree-node:focus-visible, .quick-tag:focus-visible, .mode-tab:focus-visible {
  outline:2px solid var(--c-primary-soft); outline-offset:2px;
}

/* ============================================================
   病例列表「易用 / 直观」重构（2026-07-13）
   - 诊断单元格：单状态点 + 两行层级，去除满屏红绿噪点
   - 工具栏：主操作 / 搜索 / 次要操作 三段分离
   - 操作列加宽，按钮更好点
   ============================================================ */

/* 诊断单元格：层级化、单信号 */
.dx-cell { display:flex; flex-direction:column; gap:3px; line-height:1.35; }
.dx-row { display:grid; grid-template-columns:1fr auto; align-items:baseline; gap:.5rem; }
.dx-row-raw { border-top:1px dashed var(--c-line); padding-top:3px; }
.dx-tag { font-size:var(--fs-xs); font-weight:700; letter-spacing:.02em; color:var(--c-muted); display:flex; align-items:center; gap:.25rem; white-space:nowrap; }
.dx-tag-match { color:var(--c-primary); }
.dx-tag-raw { color:var(--c-muted); }
.dx-dot { width:8px; height:8px; border-radius:50%; flex-shrink:0; box-shadow:0 0 0 3px rgba(0,0,0,.04); }
.dx-dot.dx-ok { background:var(--c-success); }
.dx-dot.dx-warn { background:var(--c-warning); }
.dx-dot.dx-bad { background:var(--c-danger); }
.dx-name { font-size:var(--fs-base); font-weight:600; color:var(--c-ink); min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dx-op { font-weight:500; color:var(--c-body); }
.dx-code { font-size:var(--fs-base); color:#8a94a6; background:var(--c-surface-2); border:1px solid var(--c-line); padding:.05rem .35rem; border-radius:4px; font-family:var(--font-mono,ui-monospace,monospace); justify-self:end; white-space:nowrap; }

/* 工具栏三段式 */
.toolbar-row { display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; }
.toolbar-search { display:flex; align-items:center; gap:.4rem; flex:1; min-width:260px; }
.toolbar-search .form-control { flex:1; min-width:0; }
.toolbar-secondary { display:flex; align-items:center; gap:.4rem; flex-wrap:wrap; }
.toolbar .btn-primary { font-weight:600; }

/* 操作列加宽，按钮更好点 */
.col-act { width:92px!important; }
#caseTable .action-btns .btn { min-width:42px; font-size:var(--fs-sm); }

/* 统一 Bootstrap -sm 控件尺寸，消除模态框/工具栏与主界面的大小差 */
.form-control-sm, .form-select-sm { min-height:var(--h-control); font-size:var(--fs-sm); padding:.34rem .7rem; }
.btn-sm { min-height:var(--h-control); padding:.34rem .9rem; font-size:var(--fs-sm); }
.input-group-sm > .form-control, .input-group-sm > .btn, .input-group-sm > .input-group-text { min-height:var(--h-control); }

/* ===== 工具类（消除内联 style） ===== */
.d-none { display:none }
.w-px40 { width:40px }
.w-px50 { width:50px }
.w-px70 { width:70px }
.w-pct15 { width:15% }
.w-min200 { min-width:200px }
.h-min300 { min-height:300px }

/* ===== 打印按钮 ===== */
.btn-print {
  display:inline-flex; align-items:center; gap:.32rem;
  background:var(--c-primary); color:var(--c-surface);
  border:1px solid var(--c-primary); font-weight:600;
  padding:.42rem .9rem; cursor:pointer; white-space:nowrap;
}
.btn-print:hover { background:var(--c-primary-deep); border-color:var(--c-primary-deep); }

/* 区块级「单独打印」按钮（面板标题栏右侧） */
.btn-print-block {
  display:inline-flex; align-items:center; gap:.25rem;
  font-size:var(--fs-xs); line-height:1; white-space:nowrap;
  background:var(--c-surface); color:var(--c-primary);
  border:1px solid var(--c-line); border-radius:var(--radius-sm);
  padding:.28rem .6rem; cursor:pointer;
}
.btn-print-block:hover { background:var(--c-primary-soft); border-color:var(--c-primary); }

/* 单区块打印时的标题（仅打印可见） */
.print-block-title { display:none; }

/* 隔离打印根：屏幕态不显示，避免克隆体闪现 */
#__printRoot { display:none; }

/* ===== A4 打印 ===== */
@page { size:A4; margin:12mm; }
@media print {
  html, body { background:#fff; color:#000; }
  body { -webkit-print-color-adjust:exact; print-color-adjust:exact; }
  /* 隐藏非数据区域：侧边栏 / 顶部 / 筛选控件 / 打印按钮 / 打印说明 */
  .admin-sidebar, .admin-topbar, .no-print, .cockpit-filter .seg,
  .cockpit-filter label, .cockpit-filter .cockpit-select, .btn-print { display:none !important; }
  .admin-content { max-width:none; width:100%; padding:0; overflow:visible; }
  .admin-module { display:block !important; }
  /* 单列铺满，避免横向溢出 */
  .cockpit-grid2 { grid-template-columns:1fr; gap:.8rem; }
  /* 取消滚动裁剪，全部内容打印 */
  .cockpit-scroll { max-height:none; overflow:visible; }
  .cockpit-panel { break-inside:avoid; border:1px solid #999; }
  .cockpit-table thead { display:table-header-group; }
  .cockpit-table tr { break-inside:avoid; }
  .cockpit-kpi { border:1px solid #ccc; }
  .cockpit-header { border-bottom:2px solid var(--c-primary); padding-bottom:.4rem; margin-bottom:.6rem; }
  /* 单区块打印：标题仅在打印时显示 */
  .print-block-title { display:block; font-size:16px; font-weight:700; margin:0 0 .5rem; padding-bottom:.3rem; border-bottom:2px solid var(--c-primary); color:#000; }
  /* 单区块打印：仅显示 #__printRoot，隐藏页面其余一切（侧边栏/顶栏/其它模块/筛选控件/核心指标） */
  html.printing-block body > *:not(#__printRoot) { display:none !important; }
  html.printing-block #__printRoot { display:block !important; }
}

/* T6 入组分层面板 */
.profit-tbl{width:100%;border-collapse:collapse;font-size:.82rem}
.profit-tbl th,.profit-tbl td{padding:.5rem .6rem;border-bottom:1px solid var(--c-line-soft);text-align:left;white-space:nowrap}
.profit-tbl th{font-size:.72rem;color:var(--c-muted);font-weight:600;background:#fafbfc}
.profit-tbl td.r,.profit-tbl th.r{text-align:right;font-variant-numeric:tabular-nums}
.profit-tbl tbody tr:hover{background:#f6f8fa}
.profit-tbl .tier-total td{font-weight:700;background:#f3f4f6;border-top:2px solid var(--c-line)}
.empty-hint{color:var(--c-muted);font-size:.8rem;padding:1rem;text-align:center}

/* ===== 以下内容由 ui_extra.css 合并而来（2026-08-14 权威源唯一化：骨架屏/吸顶表头/首列冻结/排序指示/筛选chip/来源标签/待复核高亮/风控声明/成本口径状态条） ===== */

:root { --sk: #e9edf2; --sk2: #f3f6fa; }

/* ---- 骨架屏 ---- */
.sk-row .sk-bar { height: 14px; border-radius: 6px; margin: 8px 4px;
  background: linear-gradient(90deg, var(--sk) 25%, var(--sk2) 37%, var(--sk) 63%);
  background-size: 400% 100%; animation: sk-shimmer 1.2s ease-in-out infinite; }
@keyframes sk-shimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }

/* ---- 吸顶表头 + 首列冻结 ---- */
#caseTable thead th { position: sticky; top: 0; z-index: 3; background: var(--card, #fff); }
#caseTable thead th[data-sort] { cursor: pointer; user-select: none; }
#caseTable thead th[data-sort]:hover { background: rgba(0,123,255,.08); }
.sort-ind { font-size: .72em; color: var(--muted, #888); margin-left: 2px; }
#caseTable td.col-seq, #caseTable td.col-freeze { position: sticky; left: 0; z-index: 1;
  background: var(--card, #fff); box-shadow: 1px 0 0 rgba(0,0,0,.04); }
#caseTable td.col-seq { left: 0; }
#caseTable td.col-freeze { left: 35px; } /* 紧邻序号列 */

/* ---- 筛选状态 chip ---- */
#filterChips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.filter-chip { display: inline-flex; align-items: center; gap: 4px; font-size: .78rem;
  padding: 2px 8px; border-radius: 999px; background: rgba(0,123,255,.1); color: #1769c0;
  border: 1px solid rgba(0,123,255,.25); }
.filter-chip b { font-weight: 600; }
.filter-chip .x { cursor: pointer; opacity: .7; font-weight: 700; }
.filter-chip .x:hover { opacity: 1; }
.filter-chip.clear { background: rgba(0,0,0,.05); color: #666; border-color: rgba(0,0,0,.12); }

/* ---- 统计卡来源语境标签 ---- */
.source-tag { font-size: .68rem; font-weight: 600; padding: 1px 6px; border-radius: 6px; margin-left: 6px;
  vertical-align: middle; }
.source-tag.sim { background: rgba(40,167,69,.14); color: #1f7a3a; }
.source-tag.his { background: rgba(220,53,69,.14); color: #b02a37; }
.source-tag.yb { background: rgba(23,113,190,.14); color: #175f9c; }
.source-tag.all { background: rgba(108,117,125,.16); color: #495057; }

/* ---- 待复核 pill 激活态 ---- */
.review-pill.active { background: #ffc107; color: #212529; border-color: #ffc107; }

/* ---- 工具栏次要操作分组（危险操作区隔） ---- */
.toolbar-danger { display: flex; align-items: center; gap: 8px; padding-top: 8px; margin-top: 8px;
  border-top: 1px dashed rgba(0,0,0,.1); }
.toolbar-danger .label { font-size: .76rem; color: var(--danger, #dc3545); font-weight: 600; }

/* ---- 驾驶舱：病组下钻表行可点 ---- */
.dip-drill-row { cursor: pointer; }
.dip-drill-row:hover { background: rgba(0,123,255,.06); }
.cmp-table th, .cmp-table td { font-size: .82rem; }
.kpi-sub { font-size: .72rem; color: var(--muted, #888); }
.badge-rate { font-variant-numeric: tabular-nums; }

/* ---- P1 风控命名纠偏：声明条 + 风控标签 ---- */
.disclaimer-bar { margin: 14px 0 6px; padding: 10px 14px; background: #fff7ed;
  border: 1px solid #fed7aa; border-left: 4px solid #f59e0b; border-radius: 8px;
  color: #9a3412; font-size: 13px; line-height: 1.6; }
.disclaimer-bar b { color: #7c2d12; }
.risk-tag { font-size: 11px; font-weight: 600; color: #fff; background: #dc2626;
  padding: 2px 8px; border-radius: 10px; vertical-align: middle; margin-left: 6px; }

/* ---- P4 成本口径状态条：让"超支按什么口径算"始终可见 ---- */
.caliber-bar { margin: 6px 0 10px; padding: 9px 14px; border-radius: 8px; font-size: 12.5px;
  line-height: 1.6; display: flex; align-items: center; flex-wrap: wrap; gap: 10px;
  border: 1px solid transparent; }
.caliber-bar .cal-chip { font-size: 11px; font-weight: 700; color: #fff; padding: 2px 9px;
  border-radius: 10px; white-space: nowrap; }
.caliber-bar .cal-text { flex: 1 1 320px; }
.caliber-bar .cal-meta { font-size: 11.5px; opacity: .85; white-space: nowrap;
  font-variant-numeric: tabular-nums; }
/* 默认总费用口径：中性灰蓝，不喧宾夺主 */
.caliber-bar.cal-off { background: #f1f5f9; border-color: #cbd5e1; color: #334155; }
.caliber-bar.cal-off .cal-chip { background: #64748b; }
/* 已启用可报口径：绿色，表示更精确的口径已生效 */
.caliber-bar.cal-on { background: #f0fdf4; border-color: #bbf7d0; color: #166534; }
.caliber-bar.cal-on .cal-chip { background: #16a34a; }
/* 已降级：红色警示，说明配置与实际生效不一致，必须让人看见 */
.caliber-bar.cal-degraded { background: #fef2f2; border-color: #fecaca; color: #991b1b; }
.caliber-bar.cal-degraded .cal-chip { background: #dc2626; }

/* ---- P2：风控声明 + 成本口径 合并为单条，减少首屏挤压 ---- */
.disclaimer-bar.combined { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
.disclaimer-bar.combined .caliber-inline { display: inline-flex; align-items: center; flex-wrap: wrap; gap: 8px;
  padding: 4px 10px; border-radius: 8px; border: 1px solid transparent; font-size: 12px; line-height: 1.4; }
.disclaimer-bar.combined .caliber-inline .cal-chip { font-size: 11px; font-weight: 700; color: #fff;
  padding: 2px 9px; border-radius: 10px; white-space: nowrap; }
.disclaimer-bar.combined .caliber-inline .cal-text { flex: 1 1 240px; }
.disclaimer-bar.combined .caliber-inline .cal-meta { font-size: 11.5px; opacity: .85; white-space: nowrap;
  font-variant-numeric: tabular-nums; }
.disclaimer-bar.combined .caliber-inline.cal-off { background: #f1f5f9; border-color: #cbd5e1; color: #334155; }
.disclaimer-bar.combined .caliber-inline.cal-off .cal-chip { background: #64748b; }
.disclaimer-bar.combined .caliber-inline.cal-on { background: #f0fdf4; border-color: #bbf7d0; color: #166534; }
.disclaimer-bar.combined .caliber-inline.cal-on .cal-chip { background: #16a34a; }
.disclaimer-bar.combined .caliber-inline.cal-degraded { background: #fef2f2; border-color: #fecaca; color: #991b1b; }
.disclaimer-bar.combined .caliber-inline.cal-degraded .cal-chip { background: #dc2626; }

/* ---- HIS 实测页：官方 DIP 同步状态（透明化合规路线新鲜度） ---- */
.official-dip-sync { padding: 4px 10px; border-radius: 6px; background: #f8fafc; border: 1px solid #e2e8f0;
  color: #475569; font-variant-numeric: tabular-nums; }

/* ---- 最新 HIS 抽取横幅（病案管理页一键抽取后展示） ---- */
.his-extract-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  margin: 8px 0 10px; padding: 9px 14px; border-radius: 8px;
  background: #eef6ff; border: 1px solid #b6d8ff; color: #0b4a8f; font-size: 13px; }
.his-extract-bar .heb-icon { font-size: 15px; }
.his-extract-bar .heb-text { flex: 1 1 auto; }
.his-extract-bar .heb-text b { color: #0a3d75; }
.his-extract-bar .btn { font-size: 12px; }

/* ============================================================
   角色门户 / DIP专员工作台（2026-08-14 · 纯前端角色分区）
   仅在 style.css 内新增类；不新建 CSS 文件、不写 inline style
   ============================================================ */

/* 角色门户卡片语义色变体：左色条 + 图标底色（复用 admin-action-card） */
.admin-action-card.info { border-left-color: var(--c-info); }
.admin-action-card.info .action-icon { background: var(--c-info-soft); color: var(--c-info); }
.admin-action-card.info:hover { border-left-color: var(--c-info); }
.admin-action-card.success { border-left-color: var(--c-success); }
.admin-action-card.success .action-icon { background: var(--c-success-soft); color: var(--c-success); }
.admin-action-card.success:hover { border-left-color: var(--c-success); }
.admin-action-card.gray { border-left-color: var(--c-ink); }
.admin-action-card.gray .action-icon { background: var(--c-line-soft); color: var(--c-body); }
.admin-action-card.gray:hover { border-left-color: var(--c-ink); }

/* 门户/工作台卡片键盘可达焦点环（Tab + Enter，无障碍） */
.admin-action-card:focus-visible { outline: 2px solid var(--c-primary-soft); outline-offset: 2px; }

/* 表头网格宽度收敛为 class（消除 index.php/his.php 内联 min-width） */
.th-w-35 { min-width: 35px; }
.th-w-85 { min-width: 85px; }
.th-w-80 { min-width: 80px; }
.th-w-70 { min-width: 70px; }
.th-w-60 { min-width: 60px; }
.th-dx  { min-width: 500px; max-width: 600px; }
/* 日期/分值列：不换行，保证「2026-08-27」「638.05」单行显示 */
#caseTable td.col-date, #caseTable td.col-num { white-space: nowrap; }

/* ===== his/yb 10 列上下排列（列内上下两行） ===== */
/* 单元格：上下两行堆叠（上=主信息，下=副信息） */
.stack-cell { display:flex; flex-direction:column; gap:2px; line-height:1.35; }
.stack-cell .st-top { font-weight:600; color:var(--c-ink); white-space:nowrap; font-size:var(--fs-base); }
.stack-cell .st-sub { font-size:var(--fs-base); color:var(--c-muted); }
/* 表头上下排列：th-stack 内的 case-th-grid 由双列改单列，标签堆叠 */
.th-stack { min-width:110px; }
.th-stack .case-th-grid { grid-template-columns:1fr; }
.th-stack .th-label { display:block; }
.th-stack .th-sub { display:block; font-weight:400; }
/* 第10列 科室/责任医师：默认隐藏，管理员登录后可见（#caseTable.admin-on） */
#caseTable .th-admin, #caseTable .col-admin { display:none; }
#caseTable.admin-on .th-admin, #caseTable.admin-on .col-admin { display:table-cell; }
/* 管理员专属筛选条：默认隐藏，登录态由 main.js 切 style.display 显隐 */
.admin-filter-bar { display:none; align-items:center; flex-wrap:wrap; gap:.5rem; margin:.5rem 0; padding:.5rem .75rem; background:#f5f7fa; border:1px solid #e3e8ef; border-radius:.5rem; }
.admin-filter-bar label { display:inline-flex; align-items:center; gap:.25rem; font-size:.85rem; color:#475569; margin:0; white-space:nowrap; }
.admin-filter-bar input { width:auto; }
/* 宽表（his/yb）无「#」序号列，冻结列直接贴左；sim 仍留 35px 给序号列 */
#caseTable td.col-freeze:first-child { left: 0; }

/* ===== 业务链语义色与步骤条（2026-08-14 追加，复用令牌） ===== */
.business-chain { display:flex; flex-wrap:wrap; gap:.4rem; padding:.6rem 1.25rem;
  background:var(--c-surface-2); border-bottom:1px solid var(--c-line); align-items:center; }
.bc-step { border:1px solid var(--c-line); background:var(--c-surface); color:var(--c-body);
  padding:.3rem .75rem; border-radius:999px; font-size:var(--fs-sm); font-weight:600;
  transition:var(--transition); }
.bc-step:hover { border-color:currentColor; }
.bc-step-a { color:var(--c-primary); }   .bc-step-a.active { background:var(--c-primary);   color:#fff; border-color:var(--c-primary); }
.bc-step-b { color:var(--c-info); }      .bc-step-b.active { background:var(--c-info);      color:#fff; border-color:var(--c-info); }
.bc-step-c { color:var(--c-warning); }   .bc-step-c.active { background:var(--c-warning);   color:#fff; border-color:var(--c-warning); }
.bc-step-d { color:var(--c-success); }   .bc-step-d.active { background:var(--c-success);   color:#fff; border-color:var(--c-success); }
/* 导航高亮语义色（覆盖 .nav-link.active::after 默认 primary 下划线） */
.nav-link.stage-a.active::after { background:var(--c-primary); }
.nav-link.stage-b.active::after { background:var(--c-info); }
.nav-link.stage-c.active::after { background:var(--c-warning); }
.nav-link.stage-d.active::after { background:var(--c-success); }
/* portal 链卡左边条语义色 */
.admin-action-card.chain-a { border-left-color:var(--c-primary); }
.admin-action-card.chain-b { border-left-color:var(--c-info); }
.admin-action-card.chain-c { border-left-color:var(--c-warning); }
.admin-action-card.chain-d { border-left-color:var(--c-success); }
.admin-action-card.chain-a:hover { border-left-color:var(--c-primary); }
.admin-action-card.chain-b:hover { border-left-color:var(--c-info); }
.admin-action-card.chain-c:hover { border-left-color:var(--c-warning); }
.admin-action-card.chain-d:hover { border-left-color:var(--c-success); }
/* KPI 数值 tabular-nums（补强 index/his 统计卡） */
.stat-num, .stat-sub-num { font-variant-numeric:tabular-nums; }
/* 主视角标签 */
.stage-tag { font-size:11px; font-weight:600; padding:1px 7px; border-radius:999px;
  background:var(--c-surface-2); color:var(--c-muted); border:1px solid var(--c-line); }

/* 缺口占位卡（后端冻结中，不写死推导数字） */
.gap-card { border:1px dashed var(--c-line); border-radius:var(--radius-lg); padding:14px 16px; margin-top:18px; background:var(--c-surface-2); }
.gap-card .gap-hd { font-weight:600; font-size:var(--fs-md); color:var(--c-body); display:flex; align-items:center; gap:8px; margin-bottom:8px; }
.gap-hd::before { content:''; display:inline-block; width:8px; height:8px; border-radius:50%; background:var(--c-muted); flex-shrink:0; }
.gap-grid { display:flex; flex-wrap:wrap; gap:12px; }
.gap-item { flex:1 1 220px; background:var(--c-surface); border:1px solid var(--c-line-soft); border-radius:var(--radius-md); padding:10px 12px; }
.gap-item b { display:block; font-size:var(--fs-sm); color:var(--c-ink); margin-bottom:2px; }
.gap-item span { font-size:var(--fs-xs); color:var(--c-muted); line-height:1.5; }

/* 复核/申诉功能已下线：隐藏沙盘表格操作列中由冻结 main.js 渲染的「复核」按钮（main.js 为红线，改由 CSS 隐藏其触发入口） */
#caseTable button[data-review-cid] { display: none !important; }

/* ============ 病案详情嵌入（his 实测 / 导入数据 查看弹窗）============ */
/* 复用「病例提取」详情的紧凑排版，作用域限定 .extract-detail-embed，避免污染全局表格样式 */
.extract-detail-embed { font-size: .78rem; line-height: 1.45; border-top: 1px dashed var(--c-line-soft, #dee2e6); margin-top: .6rem; padding-top: .4rem; }
.extract-detail-embed .detail-sec { font-weight: 600; font-size: .8rem; margin: .5rem 0 .15rem; padding-bottom: .1rem; border-bottom: 1px solid var(--c-line-soft, #dee2e6); color: var(--c-primary, #0d6efd); }
.extract-detail-embed .table-compact { margin-bottom: .25rem; table-layout: fixed; width: 100%; }
.extract-detail-embed .table-compact td,
.extract-detail-embed .table-compact th { padding: .15rem .3rem; vertical-align: middle; line-height: 1.2; font-size: .78rem; }
.extract-detail-embed .table-compact .label { color: var(--c-muted, #6c757d); white-space: nowrap; width: 1%; background: var(--c-surface, #f8f9fa); }
.extract-detail-embed .table-compact .val { word-break: break-all; }
.extract-detail-embed .table-compact .val-empty { color: var(--c-muted-2, #adb5bd); }
.extract-detail-embed .badge-empty { font-size: .7rem; color: var(--c-muted, #6c757d); background: var(--c-surface-2, #f1f3f5); padding: .05rem .35rem; border-radius: .2rem; }
.extract-detail-embed .empty-inline { display: inline-block; margin-right: 1rem; }
.extract-detail-embed .kv3 { width: 100%; table-layout: fixed; }
.extract-detail-embed .kv3 td { padding: .15rem .25rem; }
.extract-detail-embed .kv3 .label { width: 5.5em; color: var(--c-muted, #6c757d); background: var(--c-surface, #f8f9fa); white-space: nowrap; }
.extract-detail-embed .kv3 .val { width: auto; word-break: break-all; }
/* 4 列紧凑 kv（基础信息 17 字段用，减少行数） */
.extract-detail-embed .kv4 { width: 100%; table-layout: fixed; }
.extract-detail-embed .kv4 td { padding: .1rem .25rem; line-height: 1.35; }
.extract-detail-embed .kv4 .label { width: 5em; color: var(--c-muted, #6c757d); background: var(--c-surface, #f8f9fa); white-space: nowrap; }
.extract-detail-embed .kv4 .val { width: auto; word-break: break-all; }
/* 诊断（左）+ 手术/检查/麻醉/ICU（右）左右并排，压缩纵向空间 */
.cv-two-col { display: flex; gap: .6rem; align-items: flex-start; }
.cv-two-col .cv-col { flex: 1 1 0; min-width: 0; }
.cv-two-col .cv-col .table-compact { margin-bottom: .15rem; }

/* ============ 只读详情弹窗（his.php / yb.php 查看：#caseViewModal）============ */
#caseViewModal .modal-dialog { max-width: min(1240px, 96vw); }
#caseViewModal .modal-body { padding: .55rem .8rem; }
#caseViewBody { font-size: .8rem; line-height: 1.4; }
/* 覆盖全局 .row>* { width:100% }，恢复 Bootstrap col-md-* 百分比宽度，使两栏并排 */
#caseViewBody .row > .col-md-7 { width: 58.333333%; }
#caseViewBody .row > .col-md-5 { width: 41.666667%; }
#caseViewBody .row > [class*="col-"] { flex-shrink: 0; }
#caseViewBody .detail-sec { font-weight: 600; font-size: .78rem; margin: .35rem 0 .12rem; padding-bottom: .08rem; border-bottom: 1px solid var(--c-line-soft, #dee2e6); color: var(--c-primary, #0d6efd); }
#caseViewBody .table-compact { margin-bottom: .15rem; table-layout: fixed; width: 100%; }
#caseViewBody .table-compact td,
#caseViewBody .table-compact th { padding: .12rem .3rem; vertical-align: middle; line-height: 1.25; font-size: .78rem; }
#caseViewBody .table-compact .label { color: var(--c-muted, #6c757d); white-space: nowrap; width: 8em; background: var(--c-surface-2, #f8fafc); }
#caseViewBody .table-compact .val { word-break: break-all; }
/* 顶部患者信息条（住院号唯一一处） */
.cv-head { display: flex; flex-wrap: wrap; gap: .4rem 1rem; align-items: center; padding: .3rem .5rem; border-bottom: 1px solid var(--c-line, #e2e8f0); background: var(--c-surface-2, #f8fafc); border-radius: 6px; margin-bottom: .3rem; }
.cv-head .cv-head-item { font-size: .8rem; white-space: nowrap; }
.cv-head .cv-head-item b { color: var(--c-muted, #64748b); font-weight: 600; margin-right: .2rem; }
/* 盈亏标签（五档，与列表 tier-badge 语义对齐；名称随后台配置） */
.cv-tag { display: inline-block; font-size: .72rem; font-weight: 700; line-height: 1; padding: .24rem .55rem; border-radius: 10px; color: #fff; white-space: nowrap; }
.cv-tag-profit { background: var(--c-success, #15803d); }
.cv-tag-even { background: var(--c-info, #1d6fb8); }
.cv-tag-loss { background: var(--c-warning, #d97706); }
.cv-tag-warn { background: var(--c-danger, #dc2626); }
.cv-tag-severe { background: var(--c-danger-deep, #7a1a1f); }
.cv-tag-plain { background: var(--c-muted, #64748b); }
/* 匹配状态徽标 */
.cv-ms { display: inline-block; font-size: .72rem; font-weight: 600; line-height: 1; padding: .2rem .5rem; border-radius: 8px; white-space: nowrap; }
.cv-ms-ok { color: var(--c-success, #15803d); background: var(--c-success-soft, #e6f4ea); }
.cv-ms-bad { color: var(--c-danger, #dc2626); background: var(--c-danger-soft, #fbe7e7); }
.cv-ms-mid { color: var(--c-warning, #d97706); background: var(--c-warning-soft, #fef3c7); }
/* 匹配错误警示条 */
.cv-alert { margin: .4rem 0; padding: .4rem .6rem; font-size: .78rem; color: var(--c-danger, #dc2626); background: var(--c-danger-soft, #fbe7e7); border-left: 3px solid var(--c-danger, #dc2626); border-radius: 4px; }
/* 盈亏金额颜色 / 支付金额强调 / 病种名 */
.cv-profit { color: var(--c-success, #15803d); }
.cv-loss { color: var(--c-danger, #dc2626); }
.cv-even { color: var(--c-info, #1d6fb8); }
.cv-pay { color: var(--c-primary-deep, #1e40af); }
.cv-name { font-weight: 600; }
