/* 全局后台主题：沿用参考系统的浅蓝头部、白色内容区与清晰边界。 */
:root {
  color-scheme: light;
  --admin-accent: #176cf3;
  --admin-accent-strong: #0d5cda;
  --admin-accent-soft: #eaf3ff;
  --admin-ink: #30465b;
  --admin-muted: #718395;
  --admin-line: #dce5ee;
  --admin-paper: #f4f7fa;
  --admin-surface: #fff;
  --admin-header: linear-gradient(105deg, #eff8ff 0%, #d9efff 48%, #a9d7f8 100%);
  --ink: var(--admin-ink);
  --muted: var(--admin-muted);
  --green: var(--admin-accent);
  --dark: #173c61;
  --line: var(--admin-line);
  --paper: var(--admin-paper);
}

:root[data-accent="pink"] {
  --admin-accent: #d93f88;
  --admin-accent-strong: #bd2d72;
  --admin-accent-soft: #fff0f7;
  --admin-header: linear-gradient(108deg, #fff8fc 0%, #fceaf4 52%, #f5cce1 100%);
}

:root[data-accent="violet"] {
  --admin-accent: #8054d6;
  --admin-accent-strong: #6940bd;
  --admin-accent-soft: #f2edff;
  --admin-header: linear-gradient(108deg, #faf8ff 0%, #eee8ff 52%, #d4c8f7 100%);
}

/* 深色模式沿用当前主题强调色，仅改变界面底色与文字对比度。 */
:root[data-mode="dark"] {
  color-scheme: dark;
  --admin-ink: #e3ebf4;
  --admin-muted: #a5b3c2;
  --admin-line: #3a4a5b;
  --admin-paper: #172331;
  --admin-surface: #202e3d;
  --admin-accent-soft: #263b50;
  --admin-header: linear-gradient(108deg, #202e3d 0%, #243748 56%, #2c4357 100%);
  --paper: var(--admin-paper);
  --line: var(--admin-line);
}

:root[data-mode="dark"] body,
:root[data-mode="dark"] .main-shell,
:root[data-mode="dark"] .content { background: var(--admin-paper); color: var(--admin-ink); }
:root[data-mode="dark"] .sidebar,
:root[data-mode="dark"] .panel,
:root[data-mode="dark"] .org-tree-panel,
:root[data-mode="dark"] .department-info-card,
:root[data-mode="dark"] .department-positions-section,
:root[data-mode="dark"] .workflow-card,
:root[data-mode="dark"] .workflow-create-panel,
:root[data-mode="dark"] .calendar-panel,
:root[data-mode="dark"] .master-modal,
:root[data-mode="dark"] .login-card { background-color: var(--admin-surface); color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .sidebar { background: linear-gradient(180deg, #223242 0%, #202e3d 36%, #202e3d 100%); }
:root[data-mode="dark"] .brand { background: linear-gradient(112deg, #25394a 0%, #223242 70%, #202e3d 100%); border-color: var(--admin-line); }
:root[data-mode="dark"] :is(.topbar, .master-modal-head, .calendar-panel-head, .org-panel-heading, .org-detail-heading, .department-positions-heading) { background: #243344; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] :is(input, select, textarea, .theme-menu, .board-switch a, .period-switch, .range-label) { background-color: #1a2836; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .sidebar nav .nav-submenu a { color: #d3dfeb; }
:root[data-mode="dark"] .sidebar nav .nav-submenu a:hover,
:root[data-mode="dark"] .sidebar nav .nav-submenu a.active { background: #29415a; color: #a9ccff; }
:root[data-mode="dark"] .header-logout { background: #202e3d; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .workflow-detail-modal { background: var(--admin-surface); color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .space-floor-sidebar,
:root[data-mode="dark"] .space-floor-group,
:root[data-mode="dark"] .space-floor-trigger,
:root[data-mode="dark"] .space-room-link,
:root[data-mode="dark"] .room-schedule-dialog { background: var(--admin-surface); color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .space-floor-trigger.active,
:root[data-mode="dark"] .space-floor-trigger[aria-expanded="true"] { background: #263d52; color: #bbd8fa; }
:root[data-mode="dark"] .space-floor-trigger strong { background: #2b4054; color: var(--admin-ink); }
:root[data-mode="dark"] .floor-map-root > .floor-map-heading h3 { color: var(--admin-ink); }
:root[data-mode="dark"] .floor-map-root > .floor-map-heading :is(.floor-kicker, .map-north) { color: var(--admin-muted); }
:root[data-mode="dark"] .floor-overview-legend { border-color: #dce6e9; color: #647d89; }
:root[data-mode="dark"] .space-room-link:hover { background: #293e52; }
:root[data-mode="dark"] .room-schedule-head,
:root[data-mode="dark"] .room-schedule-filters { background: #243344; border-color: var(--admin-line); }
:root[data-mode="dark"] .room-schedule-head h2,
:root[data-mode="dark"] .room-timeline-heading { color: var(--admin-ink); }
:root[data-mode="dark"] .room-schedule-head small,
:root[data-mode="dark"] .room-timeline-group,
:root[data-mode="dark"] .room-timeline-group dt,
:root[data-mode="dark"] .room-range-label,
:root[data-mode="dark"] .room-schedule-empty { color: var(--admin-muted); }
:root[data-mode="dark"] .room-schedule-head>button,
:root[data-mode="dark"] .room-period-tabs button { background: #202e3d; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .room-period-tabs button.active { background: #315f75; }
:root[data-mode="dark"] .room-record-status { background: #29475a; color: #d7e6ef; }
:root[data-mode="dark"] .room-record-kind { border-color: var(--admin-line); color: var(--admin-muted); }
:root[data-mode="dark"] .room-date-range input { background: #202e3d; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .room-timeline-item { border-color: var(--admin-line); }
:root[data-mode="dark"] :is(th, .resource-head, .resource-cell, .lab-group-band, .board-table tbody tr:nth-child(even) .board-cell, .calendar-day, .org-tree-department, .org-position-card, .position-assign-list label, .position-current-list, .org-roster-summary, .role-description-grid>div) { background-color: #253545; color: var(--admin-ink); }
:root[data-mode="dark"] .board-table .resource-cell strong,
:root[data-mode="dark"] .lab-group-toggle { color: var(--admin-ink); }
:root[data-mode="dark"] :is(td, .board-cell, .calendar-day, .department-info-table td, .department-info-table th) { color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] :is(p, small, .muted, .hint, .org-tree-person, .org-position-card-head small, .org-position-people>a, .position-assign-list small) { color: var(--admin-muted); }
:root[data-mode="dark"] .slot { background: #263d4e; color: #e0edf5; border-color: #49687c; }
:root[data-mode="dark"] .slot :is(strong, span, small) { color: #d7e6ef; }
:root[data-mode="dark"] dialog::backdrop { background: #07111dcc; }

/* 深色主题下统一覆盖业务页面中仍使用浅色底的卡片、表格和控件。 */
:root[data-mode="dark"] :is(.board-heading h1, .board-period strong, .calendar-panel-head h2, .calendar-day strong) { color: var(--admin-ink); }
:root[data-mode="dark"] :is(.board-heading p, .board-period, .eyebrow, .calendar-panel-head p) { color: var(--admin-muted); }
:root[data-mode="dark"] .stat-card {
  border-color: var(--admin-line);
  background: linear-gradient(135deg, #202e3d 0%, #243748 100%);
  box-shadow: 0 5px 16px #0003;
}
:root[data-mode="dark"] .stat-card :is(span, small) { color: var(--admin-muted); }
:root[data-mode="dark"] .stat-card strong { color: var(--admin-ink); }
:root[data-mode="dark"] .stat-card strong em { color: var(--admin-muted); }
:root[data-mode="dark"] .calendar-panel .board-wrap { background: #1a2836; }
:root[data-mode="dark"] .board-table :is(th, td, .resource-head, .resource-cell, .board-cell) { border-color: var(--admin-line); }
:root[data-mode="dark"] .board-table .resource-cell,
:root[data-mode="dark"] .board-table .date-head,
:root[data-mode="dark"] .board-table .resource-head { background: #243344; color: var(--admin-ink); }
:root[data-mode="dark"] .board-table .board-cell,
:root[data-mode="dark"] .board-table tbody tr:nth-child(even) .board-cell { background: #1b2937; }
:root[data-mode="dark"] .board-table tbody tr:nth-child(odd) .board-cell { background: #1e2c3a; }
:root[data-mode="dark"] .board-table .date-head :is(strong, span) { color: var(--admin-ink); }
:root[data-mode="dark"] .board-table .date-head span { color: var(--admin-muted); }
:root[data-mode="dark"] .board-table .empty,
:root[data-mode="dark"] .calendar-day.muted-day,
:root[data-mode="dark"] .calendar-day:nth-child(7n+1) { background: #202e3d; color: var(--admin-muted); }
:root[data-mode="dark"] .calendar-grid,
:root[data-mode="dark"] .calendar-day { border-color: var(--admin-line); }
:root[data-mode="dark"] .calendar-day strong small { color: var(--admin-muted); }
:root[data-mode="dark"] .calendar-panel-head .board-switch a.active { background: #244c61; color: #fff; border-color: #244c61; }
:root[data-mode="dark"] .board-date-range,
:root[data-mode="dark"] .range-label { background: #1a2836; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .status-note { background: #302e25; color: #d7cba7; border-color: #514a35; }

:root[data-mode="dark"] :is(.button, .secondary, .danger, .plain-button, .logout, .header-tool, .header-logout, .sidebar-toggle) {
  background: #243344;
  color: var(--admin-ink);
  border-color: var(--admin-line);
}
:root[data-mode="dark"] :is(.button, .secondary, .plain-button, .logout, .header-tool, .header-logout, .sidebar-toggle):hover { background: #2b4054; }
:root[data-mode="dark"] .danger { color: #f0a6a6; border-color: #714a50; }
:root[data-mode="dark"] .danger:hover,
:root[data-mode="dark"] .header-logout:hover { background: #422d35; color: #ffc1c1; }
:root[data-mode="dark"] :is(.theme-swatch, .sidebar-toggle) { box-shadow: 0 0 0 2px #243344, 0 0 0 3px var(--admin-line); }
:root[data-mode="dark"] .flash { background: #20392f; color: #c8ead7; }
:root[data-mode="dark"] .flash.error { background: #3b2b31; color: #f2c5c5; }
:root[data-mode="dark"] .badge { background: #294638; color: #c8ead7; }
:root[data-mode="dark"] .badge.pending { background: #263d52; color: #c5ddf8; }
:root[data-mode="dark"] .badge.returned { background: #493b25; color: #f1d49a; }
:root[data-mode="dark"] .badge.rejected { background: #482e33; color: #f2c0c0; }

:root[data-mode="dark"] :is(.attachment-box, .equipment-form-section, .lab-profile-section, .lab-location-picker, .lab-hotspot-editor, .lab-rooms-sidebar, .lab-room-map-panel, .lab-floor-group, .lab-stat-cards article, .lab-overview-details>section, .photo-gallery-item, .photo-gallery .photo-preview, .person-board-layout, .person-board-sidebar, .person-application-card, .org-filter-bar, .org-roster-summary, .role-description-grid>div, .position-current-list, .position-assign-note, .position-holder-mode) {
  background: #202e3d;
  color: var(--admin-ink);
  border-color: var(--admin-line);
}
:root[data-mode="dark"] :is(.lab-floor-trigger, .lab-room-option, .lab-hotspot-heading-actions>span, .lab-room-map-heading h3 span, .lab-floor-trigger .lab-floor-view, .equipment-photo-heading>span, .person-avatar) {
  background: #243748;
  color: #d3e1ee;
  border-color: var(--admin-line);
}
:root[data-mode="dark"] :is(.lab-floor-trigger:hover, .lab-room-option:hover, .photo-add-tile:hover, .person-list-item:hover) { background: #2b4054; }
:root[data-mode="dark"] .photo-add-tile { background: #1b2937; color: #b8ccdd; border-color: #526a80; }
:root[data-mode="dark"] .photo-gallery-item img,
:root[data-mode="dark"] .photo-preview img { background: #182532; }
:root[data-mode="dark"] .lab-stat-cards article { background: linear-gradient(145deg, #202e3d, #243748); }
:root[data-mode="dark"] .lab-list-filter { background: var(--admin-panel); border-color: var(--admin-line); }
:root[data-mode="dark"] .stats-lab-picker { color: var(--admin-muted); }
:root[data-mode="dark"] .lab-list-filter label { color: var(--admin-muted); }
:root[data-mode="dark"] .lab-list-filter a { border-color: var(--admin-line); color: var(--admin-ink); }
:root[data-mode="dark"] .lab-device-pie { background: conic-gradient(#35485a 0% 100%); box-shadow: inset 0 0 0 1px #ffffff12; }
:root[data-mode="dark"] .lab-device-pie-center { background: #202e3d; }
:root[data-mode="dark"] .lab-ranking-tabs button { color: var(--admin-muted); }
:root[data-mode="dark"] .lab-ranking-tabs button.active { background: #2b4054; color: #c5ddf8; }
:root[data-mode="dark"] .lab-status-option span { background: #243344; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .lab-status-option:last-child:has(input:checked) span { background: #422d35; color: #ffc1c1; border-color: #714a50; }

:root[data-mode="dark"] :is(.workflow-step-card, .workflow-inline-card, .workflow-approval-record, .workflow-detail-modal, .room-schedule-dialog, .system-message-dialog, dialog:not(.system-message-dialog)) {
  background: var(--admin-surface);
  color: var(--admin-ink);
  border-color: var(--admin-line);
}
:root[data-mode="dark"] .application-workflow-step.approved .workflow-step-card { background: #20382f; border-color: #3b6754; }
:root[data-mode="dark"] .application-workflow-step.rejected .workflow-step-card { background: #3b2b31; border-color: #714a50; }
:root[data-mode="dark"] .workflow-inline-track > li.workflow-final-step .workflow-inline-marker { background: #433a2b; color: #e7ce96; border-color: #78633a; }
/* 深色模式下覆盖浅色主题中的固定文字色，确保审批节点与流程摘要仍清晰可读。 */
:root[data-mode="dark"] .workflow-summary-copy h2,
:root[data-mode="dark"] .workflow-inline-track .workflow-step-card h3,
:root[data-mode="dark"] .application-workflow .workflow-step-card h3,
:root[data-mode="dark"] .workflow-approver strong,
:root[data-mode="dark"] .workflow-live-assignee,
:root[data-mode="dark"] .workflow-approval-record strong { color: var(--admin-ink); }
:root[data-mode="dark"] .workflow-card-eyebrow,
:root[data-mode="dark"] .workflow-step-label,
:root[data-mode="dark"] .workflow-inline-track .workflow-person-meta span,
:root[data-mode="dark"] .application-workflow .workflow-person-meta span,
:root[data-mode="dark"] .workflow-approver small,
:root[data-mode="dark"] .workflow-live-time,
:root[data-mode="dark"] .workflow-approval-record span,
:root[data-mode="dark"] .workflow-approval-record p { color: var(--admin-muted); }
:root[data-mode="dark"] .workflow-final-step .workflow-step-label { color: #e7ce96; }
:root[data-mode="dark"] .workflow-live-status { color: #acd0ff; }
:root[data-mode="dark"] .application-workflow-step.approved .workflow-live-status { color: #80d8a9; }
:root[data-mode="dark"] .application-workflow-step.rejected .workflow-live-status { color: #ff9b9b; }
:root[data-mode="dark"] .workflow-person-meta { border-color: var(--admin-line); }
:root[data-mode="dark"] .system-message-icon { background: #423925; color: #f0ce83; border-color: #695831; }
:root[data-mode="dark"] .room-schedule-empty { background: #1b2937; }
:root[data-mode="dark"] :is(.lab-picker-pane, .equipment-selection-pane) { background: #202e3d; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] :is(.lab-picker-pane h4, .equipment-column-heading h4) { color: var(--admin-ink); }
:root[data-mode="dark"] :is(.lab-picker label, .equipment-empty, .equipment-selection-pane .equipment-group) { background: #243748; color: var(--admin-ink); border-color: var(--admin-line); }
:root[data-mode="dark"] .lab-picker label:has(input:checked) { background: #2b4054; border-color: #527991; }
:root[data-mode="dark"] :is(.person-application-card::before, .progress-list li:before) { background: #425567; }
.login-form input:-webkit-autofill,
.login-form input:-webkit-autofill:hover,
.login-form input:-webkit-autofill:focus {
  -webkit-text-fill-color: #f3f8fb;
  caret-color: #f3f8fb;
  box-shadow: 0 0 0 1000px #0b1a2a inset;
  transition: background-color 9999s ease-out;
}
:root[data-mode="dark"] .progress-list li { border-color: #425567; }

* { box-sizing: border-box; }
html { min-height: 100%; background: var(--admin-paper); color: var(--admin-ink); }
body { min-height: 100vh; background: var(--admin-paper); color: var(--admin-ink); font-size: 14px; }
a { color: var(--admin-accent); }
button, input, select, textarea { font-family: inherit; }
button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--admin-accent) 28%, transparent);
  outline-offset: 2px;
}

.app-shell { grid-template-columns: 248px minmax(0, 1fr); min-height: 100vh; background: var(--admin-paper); }
.sidebar {
  position: sticky; top: 8px; height: calc(100vh - 16px); min-height: 520px;
  margin: 8px 0 8px 8px; padding: 0 10px 10px; overflow-x: hidden; overflow-y: auto;
  border: 1px solid #d9e8f4; border-radius: 15px; background: linear-gradient(180deg, #f4faff 0%, #fff 34%, #fff 100%);
  color: var(--admin-ink); box-shadow: 0 10px 32px #244c681a;
}
.brand { display: flex; align-items: center; gap: 12px; min-height: 104px; margin: 0 -10px 13px; padding: 22px 18px; border-bottom: 1px solid #dceaf5; background: linear-gradient(112deg, #e7f4ff 0%, #f4faff 70%, #fff 100%); color: var(--admin-ink); text-decoration: none; font-size: 16px; line-height: 1.35; }
.brand:hover { text-decoration: none; }
.brand-mark { display: block; width: 50px; height: 50px; flex: none; border-radius: 14px; object-fit: contain; filter: drop-shadow(0 3px 7px #1255a526); }
.brand-copy { display: block; min-width: 0; }
.brand-copy strong { display: block; color: var(--admin-ink); font-size: 15px; font-weight: 700; letter-spacing: .015em; line-height: 1.45; white-space: nowrap; }
.brand small { display: block; margin-top: 5px; color: var(--admin-muted); font-size: 11px; font-weight: 400; letter-spacing: .035em; }
.sidebar nav { display: grid; gap: 8px; padding: 9px 0; }
.sidebar nav > a, .sidebar nav > .nav-group > summary {
  display: flex; align-items: center; gap: 11px; min-height: 42px; padding: 8px 12px;
  border: 1px solid transparent; border-radius: 8px; color: #4b6074; font-size: 13px; font-weight: 500; text-decoration: none;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
.sidebar nav > a:hover, .sidebar nav > .nav-group > summary:hover { background: #f2f7fc; color: var(--admin-accent); text-decoration: none; }
.sidebar nav > a.active, .sidebar nav > .nav-group > summary.active {
  border-color: #d4e6fc; background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-weight: 650;
  box-shadow: 0 4px 12px #214e7417;
}
.nav-symbol { display: inline-grid; place-items: center; width: 21px; height: 21px; flex: none; border-radius: 6px; color: #7790a7; font-size: 16px; }
.sidebar nav a.active .nav-symbol, .sidebar summary.active .nav-symbol { color: var(--admin-accent); }
.sidebar .nav-group { display: grid; gap: 2px; }
.sidebar .nav-group summary { cursor: pointer; list-style: none; }
.sidebar .nav-group summary::-webkit-details-marker { display: none; }
.sidebar .nav-group summary::after { content: ""; width: 7px; height: 7px; margin: 0 3px 3px auto; border-right: 1.5px solid #8b9bad; border-bottom: 1.5px solid #8b9bad; transform: rotate(45deg); }
.sidebar .nav-group[open] summary::after { margin-bottom: -3px; transform: rotate(225deg); }
.nav-submenu { display: grid; gap: 3px; margin: 0 0 4px 32px; padding: 2px 0 2px 10px; border-left: 1px solid #dfe8ef; }
.sidebar nav .nav-submenu a { display: flex; align-items: center; gap: 7px; min-height: 36px; padding: 6px 9px; border-radius: 6px; color: #42576b; font-size: 13px; font-weight: 500; text-decoration: none; }
.sidebar nav .nav-submenu a:hover, .sidebar nav .nav-submenu a.active { background: #eaf3ff; color: #0d5cda; text-decoration: none; }
.nav-sub-icon.ui-icon { width: 17px; height: 17px; color: #8296a8; }
.nav-submenu a:hover .nav-sub-icon, .nav-submenu a.active .nav-sub-icon { color: var(--admin-accent); }
.sidebar-footer { display: flex; align-items: center; gap: 9px; margin: auto -1px 0; padding: 12px 3px 4px; border-top: 1px solid #e9eff4; color: var(--admin-ink); }
.sidebar-avatar, .header-avatar { display: grid; place-items: center; width: 34px; height: 34px; flex: none; border-radius: 50%; background: var(--admin-accent); color: white; font-size: 14px; font-weight: 650; }
.sidebar-account { min-width: 0; flex: 1; }
.sidebar-account strong, .sidebar-account small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sidebar-account strong { font-size: 12px; }
.sidebar-account small { margin-top: 2px; color: var(--admin-muted); font-size: 10px; }
.sidebar-footer form { margin: 0; }
.logout { display: grid; place-items: center; width: 32px; height: 32px; border: 1px solid #e3ebf1; border-radius: 7px; background: white; color: #6f8294; font-size: 17px; text-decoration: none; }
.logout:hover { border-color: #f0cccc; background: #fff5f5; color: #bc4545; }

.main-shell { min-width: 0; padding: 8px; }
.topbar { position: relative; z-index: 5; display: block; height: auto; min-height: 126px; padding: 0 28px; border: 1px solid #d5e6f3; border-radius: 13px; background: var(--admin-header); box-shadow: 0 9px 26px #244c6818; }
.topbar-main-row { display: flex; align-items: center; justify-content: space-between; min-height: 62px; gap: 20px; border-bottom: 1px solid #5797cf38; }
.topbar-navigation { display: flex; align-items: center; gap: 12px; min-width: 0; }
.breadcrumb { display: flex; align-items: center; gap: 10px; color: #71869a; font-size: 12px; }
.breadcrumb strong { color: #35536c; font-weight: 600; }
.breadcrumb-separator { color: #9db0c0; }
.topbar-tools { position: relative; display: flex; align-items: center; gap: 8px; }
.header-tool { display: inline-flex; align-items: center; justify-content: center; gap: 7px; min-height: 34px; padding: 6px 11px; border: 1px solid #9bc5ef; border-radius: 8px; background: #ffffffb8; color: #1764cf; font-size: 12px; font-weight: 600; }
.header-tool:hover { background: white; border-color: var(--admin-accent); }
.header-divider { width: 1px; height: 25px; margin: 0 4px; background: #76a2c633; }
.header-user { display: flex; align-items: center; gap: 9px; min-width: 120px; }
.header-avatar { width: 32px; height: 32px; }
.header-user strong, .header-user small { display: block; white-space: nowrap; }
.header-user strong { color: #334c62; font-size: 12px; }
.header-user small { margin-top: 1px; color: #71869a; font-size: 10px; }
.header-logout-form { margin: 0; }
.header-logout { display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 6px 10px; border: 1px solid #b8cde0; border-radius: 8px; background: #ffffffb8; color: #405a70; font-size: 11px; font-weight: 600; white-space: nowrap; }
.header-logout:hover { border-color: #db9a9a; background: #fff5f5; color: #ad3535; }
.topbar-title-row { display: flex; align-items: center; justify-content: space-between; min-height: 63px; gap: 16px; }
.page-heading-copy { display: flex; align-items: baseline; gap: 13px; min-width: 0; }
.page-heading-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex: none; }
.page-heading-actions .primary { white-space: nowrap; }
.topbar-title-row strong { color: #205a9a; font-size: 17px; letter-spacing: .01em; }
.page-heading-copy span { color: #64829d; font-size: 11px; }
.topbar-status { display: inline-flex; align-items: center; gap: 7px; color: #597690; font-size: 11px; }
.topbar-status i { width: 7px; height: 7px; border-radius: 50%; background: #35ae7a; box-shadow: 0 0 0 3px #35ae7a20; }
.theme-menu { position: absolute; z-index: 10; top: 42px; right: 205px; display: grid; width: 156px; gap: 3px; padding: 9px; border: 1px solid var(--admin-line); border-radius: 9px; background: var(--admin-surface); box-shadow: 0 12px 30px #1e3e5a24; }
.database-mode-form { display: inline-flex; margin: 0; }
.database-mode-toggle { gap: 7px; }
.database-mode-dot { width: 8px; height: 8px; flex: 0 0 8px; border-radius: 50%; background: #8795a3; box-shadow: 0 0 0 3px #8795a31c; }
.database-mode-dot.is-live { background: #20a36b; box-shadow: 0 0 0 3px #20a36b24; }
.theme-menu[hidden] { display: none; }
.theme-menu-label { padding: 4px 7px; color: var(--admin-muted); font-size: 11px; }
.theme-menu button { display: flex; align-items: center; gap: 9px; min-height: 34px; padding: 5px 7px; border: 0; border-radius: 6px; background: transparent; color: var(--admin-ink); text-align: left; font-size: 12px; }
.theme-menu button:hover { background: var(--admin-accent-soft); }
.theme-swatch { width: 13px; height: 13px; border-radius: 50%; box-shadow: 0 0 0 2px white, 0 0 0 3px #d6e1e8; }
.swatch-blue { background: #176cf3; }.swatch-pink { background: #d93f88; }.swatch-violet { background: #8054d6; }

/* 内容区外沿与头部栏保持一致，页面卡片不再额外缩进。 */
.content { max-width: none; min-height: calc(100vh - 142px); padding: 27px 0 0; }
.panel { border-color: #dce5ee; border-radius: 10px; background: var(--admin-surface); box-shadow: 0 4px 16px #203f5910; }
.panel h2, .panel h3 { color: #304a61; }

/* 表单控件、按钮和表格保持一致的触感、边界与键盘焦点。 */
input, select, textarea { min-height: 38px; border-color: #ccd9e5; border-radius: 6px; background: var(--admin-surface); color: var(--admin-ink); font-size: 13px; }
textarea { min-height: 100px; }
input::placeholder, textarea::placeholder { color: #9aa9b7; }
input[type="checkbox"], input[type="radio"] { min-height: auto; accent-color: var(--admin-accent); }
input[type="file"] { min-height: 38px; padding: 6px; }
.primary, .button, .secondary, .danger, .plain-button { min-height: 36px; border-radius: 6px; font-size: 13px; transition: background-color .15s ease, border-color .15s ease, box-shadow .15s ease; }
.primary { border-color: var(--admin-accent); background: var(--admin-accent); color: #fff; box-shadow: 0 2px 5px color-mix(in srgb, var(--admin-accent) 20%, transparent); }
.primary:hover { border-color: var(--admin-accent-strong); background: var(--admin-accent-strong); color: #fff; }
.secondary { color: var(--admin-accent); }
.button:hover, .secondary:hover, .plain-button:hover { border-color: #b9d1e9; background: var(--admin-accent-soft); color: var(--admin-accent-strong); }
.danger { border-color: #eccaca; color: #b23f43; }
.danger:hover { background: #fff1f1; }
.table-scroll, .board-wrap, .position-assign-table-wrap { border-radius: 7px; }
table { color: #3c5267; font-size: 13px; }
th, td { padding: 11px 13px; border-color: #e3eaf0; }
th { background: #f3f7fb; color: #536b80; font-size: 12px; font-weight: 650; }
tbody tr:hover td { background: #f7faff; }
.flash { border-radius: 6px; background: #edf8f2; color: #286b4a; }
.flash.error { background: #fff1f1; color: #a33c3c; }
.badge { border-radius: 99px; font-size: 12px; }
dialog.master-modal { border: 1px solid #d5e1eb; border-radius: 12px; background: var(--admin-surface); color: var(--admin-ink); box-shadow: 0 24px 72px #152f4660; }
dialog.master-modal::backdrop { background: #152c42a6; backdrop-filter: blur(3px); }
.master-modal-head { background: var(--admin-surface); border-color: var(--admin-line); }
.master-modal-head h2 { color: var(--admin-ink); font-size: 19px; }
.master-modal-head p { color: var(--admin-muted); font-size: 13px; }

/* 将基础管理中刻意压小的辅助文字统一拉回易读字号。 */
.org-tree-person, .org-tree-row > a:first-child, .org-tree-count, .org-tree-edit,
.org-add-position, .org-tree-empty, .org-unassigned-title, .org-unassigned-title span,
.org-detail-kicker, .org-detail-heading p, .org-detail-actions .button,
.org-position-card h3, .org-position-card-head small, .org-position-card-head > a,
.org-position-people > a, .org-position-people small, .org-no-people,
.org-empty-state, .org-unassigned-list h3, .org-unassigned-list > a,
.org-roster-summary strong, .org-roster-summary small, .org-roster-scroll table,
.org-roster-scroll th, .role-pill, .role-description-grid strong, .role-description-grid span,
.position-holder-mode, .org-position-actions .button, .position-assign-note,
.position-assign-list label, .position-assign-list small, .org-role-separation {
  font-size: max(12px, 1em);
}
.org-person-dot { font-size: 11px; }

@media (max-width: 950px) {
  .app-shell { grid-template-columns: 210px minmax(0, 1fr); }
  .sidebar { padding-right: 8px; padding-left: 8px; }
  .topbar { padding-right: 20px; padding-left: 20px; }
  .content { padding: 22px 0 0; }
}
@media (max-width: 650px) {
  .app-shell { display: block; }
  .main-shell { padding: 8px 0 0; }
  .sidebar { position: static; width: auto; height: auto; min-height: 0; margin: 0; padding: 0 10px 8px; border-width: 0 0 1px; border-radius: 0; }
  .brand { min-height: 76px; margin-bottom: 2px; padding: 13px 8px; }
  .brand-mark { width: 42px; height: 42px; }
  .brand-copy strong { font-size: 14px; }
  .sidebar nav { display: flex; overflow-x: auto; padding: 5px 0; }
  .sidebar nav > a, .sidebar nav > .nav-group > summary { min-height: 38px; white-space: nowrap; }
  .sidebar nav > .nav-group { position: relative; flex: none; }
  .sidebar .nav-group[open] { flex-basis: 100%; }
  .nav-submenu { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-left: 6px; }
  .sidebar-footer { display: none; }
  .topbar { min-height: 0; padding: 0 14px; border-width: 0 0 1px; border-radius: 0; box-shadow: 0 3px 12px #345a7510; }
  .topbar-main-row { min-height: 51px; }
  .topbar-title-row { min-height: 52px; }
  .content { min-height: calc(100vh - 103px); }
  .topbar-title-row strong { font-size: 15px; }
  .topbar-status, .theme-mode-label, .header-user > span:last-child { display: none; }
  .header-tool { min-height: 31px; padding: 5px 8px; }
  .header-divider { display: none; }
  .header-logout { width: 32px; min-width: 32px; justify-content: center; padding: 5px; }
  .header-logout > span:last-child { display: none; }
  .theme-menu { right: 68px; top: 38px; }
  .header-user { min-width: 0; }
  .header-avatar { width: 30px; height: 30px; }
  .content { min-height: calc(100vh - 165px); padding: 18px 0 0; }
  .panel { padding: 16px; }
  th, td { padding: 9px 10px; }
}

/* 侧栏折叠后保留图标导航，释放正文宽度；窄屏仍使用原有横向导航布局。 */
.app-shell[data-sidebar-collapsed="true"] { grid-template-columns: 76px minmax(0, 1fr); }
.sidebar-brand-row { position: relative; }
.sidebar-toggle {
  display: grid; place-items: center; width: 36px; height: 36px; flex: none;
  border: 1px solid #ffffffc7; border-radius: 50%; background: #ffffffd9; color: #486b89;
  box-shadow: 0 2px 8px #244c6818; cursor: pointer;
}
.sidebar-toggle:hover { border-color: #a9c9e7; background: #fff; color: var(--admin-accent-strong); box-shadow: 0 3px 10px #244c6826; }
.sidebar-toggle .ui-action-icon { width: 17px; height: 17px; transition: transform 150ms ease-out; }
.app-shell[data-sidebar-collapsed="true"] .sidebar-toggle .ui-action-icon--sidebar-toggle { transform: rotate(180deg); }
.workflow-actions { align-items: center; }
.topbar-title-row { justify-content: space-between; }
.page-heading-copy { flex-wrap: wrap; row-gap: 4px; }
.page-heading-copy span { overflow: hidden; text-overflow: ellipsis; }

@media (min-width: 651px) {
  .app-shell[data-sidebar-collapsed="true"] .sidebar { padding-right: 7px; padding-left: 7px; overflow-x: hidden; }
  .app-shell[data-sidebar-collapsed="true"] .sidebar-brand-row .brand { justify-content: center; margin-right: -7px; margin-left: -7px; padding: 15px 4px; }
  .app-shell[data-sidebar-collapsed="true"] .brand-mark { width: 42px; height: 42px; }
  .app-shell[data-sidebar-collapsed="true"] .brand-copy,
  .app-shell[data-sidebar-collapsed="true"] .nav-label,
  .app-shell[data-sidebar-collapsed="true"] .nav-group summary::after,
  .app-shell[data-sidebar-collapsed="true"] .nav-submenu,
  .app-shell[data-sidebar-collapsed="true"] .sidebar-footer { display: none; }
  .app-shell[data-sidebar-collapsed="true"] .sidebar nav > a,
  .app-shell[data-sidebar-collapsed="true"] .sidebar nav > .nav-group > summary { justify-content: center; gap: 0; padding-right: 4px; padding-left: 4px; }
  .app-shell[data-sidebar-collapsed="true"] .nav-symbol { width: 28px; height: 28px; font-size: 18px; }
  .app-shell[data-sidebar-collapsed="true"] .sidebar-toggle { width: 36px; height: 36px; }
}

@media (max-width: 950px) and (min-width: 651px) {
  .app-shell[data-sidebar-collapsed="true"] { grid-template-columns: 76px minmax(0, 1fr); }
}

@media (max-width: 650px) {
  .sidebar-brand-row { display: flex; align-items: center; }
  .sidebar-brand-row .brand { flex: 1; margin-right: 0; }
  .sidebar-toggle { width: 32px; height: 32px; }
  .topbar-navigation { gap: 8px; }
  .app-shell[data-sidebar-collapsed="true"] .sidebar nav { display: none; }
  .app-shell[data-sidebar-collapsed="true"] .sidebar { padding-bottom: 0; }
  .topbar-title-row { flex-wrap: wrap; padding: 7px 0; }
  .page-heading-copy { flex: 1 1 auto; }
  .page-heading-actions { margin-left: auto; }
  .page-heading-actions .primary { min-height: 34px; padding: 6px 10px; font-size: 12px; }
}

/* 审批流程列表以摘要呈现，完整路线和编辑表单在查看对话框中打开。 */
.workflow-summary-card { display: flex; align-items: center; justify-content: space-between; gap: 18px; min-width: 0; padding: 18px 20px; border: 1px solid var(--admin-line); border-radius: 10px; background: var(--admin-surface); box-shadow: 0 5px 18px #203f5909; }
.workflow-summary-main, .workflow-summary-actions { display: flex; align-items: center; gap: 13px; min-width: 0; }
.workflow-summary-copy { min-width: 0; }
.workflow-summary-copy h2 { margin: 3px 0 2px; color: #29485c; font-size: 19px; }
.workflow-summary-copy p { margin: 0; color: var(--admin-muted); font-size: 14px; }
.workflow-summary-actions { justify-content: flex-end; flex-wrap: wrap; }
.workflow-summary-actions form { margin: 0; }
.workflow-detail-modal { width: min(1120px, calc(100vw - 32px)); max-width: none; max-height: min(90vh, 900px); overflow: auto; padding: 0; border: 1px solid #d5e1eb; border-radius: 13px; background: var(--admin-surface); color: var(--admin-ink); box-shadow: 0 24px 72px #152f4660; }
.workflow-detail-modal::backdrop { background: #152c42a6; backdrop-filter: blur(3px); }
.workflow-modal-head { position: sticky; top: 0; z-index: 4; display: flex; align-items: center; justify-content: space-between; gap: 15px; padding: 17px 22px; border-bottom: 1px solid var(--admin-line); background: var(--admin-surface); }
.workflow-modal-head h2 { margin: 3px 0 0; color: var(--admin-ink); font-size: 20px; }
.workflow-modal-close { display: grid; place-items: center; width: 34px; height: 34px; flex: none; border: 1px solid var(--admin-line); border-radius: 7px; background: var(--admin-surface); color: var(--admin-muted); font-size: 23px; cursor: pointer; }
.workflow-modal-close:hover { border-color: #e5bcbc; color: #b23f43; }
.workflow-modal-view { padding: 6px 18px 18px; }
.workflow-modal-view[hidden], .workflow-edit-form[hidden] { display: none !important; }
.workflow-serpentine, .application-workflow { display: grid; grid-template-columns: repeat(var(--workflow-columns, 4), minmax(0, 1fr)); grid-auto-rows: minmax(164px, auto); gap: 48px 28px; min-width: 0; margin: 0; padding: 16px 4px; list-style: none; }
.workflow-serpentine, .application-workflow { max-width: 100%; margin-inline: auto; }
.workflow-serpentine > li, .application-workflow-step { position: relative; min-width: 0; padding: 0; }
.workflow-serpentine .workflow-step-marker, .application-workflow-step .workflow-step-marker { position: absolute; top: -12px; left: 14px; margin: 0; }
.workflow-serpentine .workflow-step-card, .application-workflow-step .workflow-step-card { height: 100%; min-height: 164px; padding: 29px 13px 12px; }
.workflow-serpentine .workflow-connector, .application-workflow-step .workflow-connector { top: 50%; right: -28px; left: auto; width: 28px; height: 1px; }
.workflow-serpentine .workflow-connector-reverse, .application-workflow-step .workflow-connector-reverse { right: auto; left: -28px; transform: rotate(180deg); }
.workflow-serpentine .workflow-connector-turn, .application-workflow-step .workflow-connector-turn { top: auto; right: 50%; bottom: -48px; left: auto; width: 1px; height: 48px; }
.workflow-serpentine .workflow-connector-turn:after, .application-workflow-step .workflow-connector-turn:after { top: auto; right: -3px; bottom: 0; transform: rotate(135deg); }
.workflow-modal-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 4px 0; border-top: 1px solid var(--admin-line); }
.workflow-edit-form { padding: 22px; }
.workflow-edit-name { display: grid; gap: 7px; max-width: 520px; color: var(--admin-ink); font-weight: 600; }
.workflow-edit-section-head { display: flex; align-items: end; justify-content: space-between; gap: 12px; margin: 23px 0 10px; padding-bottom: 9px; border-bottom: 1px solid var(--admin-line); color: var(--admin-ink); }
.workflow-edit-section-head strong, .workflow-edit-section-head span { display: block; }
.workflow-edit-section-head div span, .workflow-edit-section-head > span { margin-top: 3px; color: var(--admin-muted); font-size: 12px; font-weight: 400; }
.workflow-edit-steps { display: grid; gap: 9px; margin: 0; padding: 0; list-style: none; }
.workflow-edit-step { display: grid; grid-template-columns: 34px minmax(160px, .9fr) minmax(220px, 1.2fr) auto; align-items: end; gap: 12px; padding: 12px; border: 1px solid var(--admin-line); border-radius: 8px; background: color-mix(in srgb, var(--admin-paper) 65%, var(--admin-surface)); }
.workflow-edit-step label { display: grid; gap: 5px; min-width: 0; color: var(--admin-muted); font-size: 12px; }
.workflow-edit-step input, .workflow-edit-step select { width: 100%; min-width: 0; }
.workflow-edit-number { display: grid; place-items: center; width: 30px; height: 30px; margin-bottom: 4px; border-radius: 50%; background: var(--admin-accent-soft); color: var(--admin-accent-strong); font-size: 12px; font-weight: 700; }
.workflow-edit-actions { display: flex; justify-content: flex-end; gap: 9px; margin-top: 18px; }
.application-workflow-panel { overflow: hidden; }
.application-workflow { grid-auto-rows: minmax(176px, auto); gap: 44px 28px; padding: 22px 2px 10px; }
.application-workflow-step .workflow-step-card { min-height: 176px; border-color: #dce7eb; }
.application-workflow-step.approved .workflow-step-card { border-color: #b9dfcf; background: linear-gradient(155deg, #fff, #f2faf6); }
.application-workflow-step.approved .workflow-step-marker { border-color: #3a9b73; background: #3a9b73; color: #fff; }
.application-workflow-step.rejected .workflow-step-card { border-color: #e8bcbc; background: #fff8f8; }
.application-workflow-step.rejected .workflow-step-marker { border-color: #c94b4b; background: #c94b4b; color: #fff; }
.application-workflow-step.is-current .workflow-step-card { border-color: var(--admin-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--admin-accent) 12%, transparent), 0 6px 16px #203f5910; }
.application-workflow-step.is-current .workflow-step-marker { border-color: var(--admin-accent); background: var(--admin-accent); color: white; }
.workflow-live-assignee { margin-top: 10px; color: #425c70; font-size: 12px; font-weight: 600; }
.workflow-live-status { margin-top: 9px; color: var(--admin-accent-strong); font-size: 12px; font-weight: 700; }
.workflow-live-time { display: block; margin-top: 4px; color: var(--admin-muted); font-size: 11px; line-height: 1.5; }
.application-workflow-step.approved .workflow-live-status { color: #27825e; }
.application-workflow-step.rejected .workflow-live-status { color: #b23f43; }
.application-workflow-step .workflow-connector-turn { bottom: -44px; height: 44px; }
.application-workflow-panel { overflow: visible; }
/* 申请详情中的审批步骤固定按左到右排列，窄屏时在流程区域内横向滚动。 */
.application-workflow--linear { display: flex; align-items: stretch; gap: 28px; overflow-x: auto; padding: 22px 4px 14px; }
.application-workflow--linear .application-workflow-step { flex: 0 0 clamp(220px, calc((100% - 84px) / 4), 280px); }
.application-workflow--linear .workflow-step-card { height: auto; min-height: 205px; }
.application-workflow--linear .workflow-connector { top: 50%; right: -28px; left: auto; width: 28px; height: 1px; }
.workflow-live-assignee, .workflow-live-status { font-size: 14px; }
.workflow-live-time { font-size: 12px; }
.workflow-approval-record { margin-top: 13px; padding-top: 10px; border-top: 1px solid var(--admin-line); color: var(--admin-ink); font-size: 14px; }
.workflow-approval-record strong { color: var(--admin-accent-strong); }
.workflow-approval-record span { display: block; margin-top: 3px; color: var(--admin-muted); font-size: 12px; }
.workflow-approval-record p { margin: 5px 0 0; color: var(--admin-muted); white-space: pre-wrap; overflow-wrap: anywhere; }
.workflow-one-column .workflow-connector { top: auto !important; right: 50% !important; bottom: -44px !important; left: auto !important; width: 1px !important; height: 44px !important; transform: none !important; }
.workflow-one-column .workflow-connector:after { top: auto !important; right: -3px !important; bottom: 0 !important; transform: rotate(135deg) !important; }

/* 流程节点统一放大文字并将连接箭头对准卡片中线，避免标签过小和连线偏上。 */
/* 流程列表在卡片标题下直接横向展开完整节点，新增与编辑统一使用模态表单。 */
.workflow-gallery { display: grid; gap: 14px; min-width: 0; }
.workflow-expanded-card { overflow: hidden; min-width: 0; border: 1px solid var(--admin-line); border-radius: 11px; background: var(--admin-surface); box-shadow: 0 6px 20px #203d5509; }
.workflow-expanded-card .workflow-summary-card { border: 0; border-radius: 0; border-bottom: 1px solid var(--admin-line); box-shadow: none; }
.workflow-expanded-card .workflow-summary-actions { flex-wrap: nowrap; }
.workflow-inline-viewport { overflow-x: auto; padding: 18px 20px 20px; scrollbar-color: #c3d1d8 transparent; scrollbar-width: thin; }
.workflow-inline-track { display: flex; align-items: stretch; gap: 27px; width: max-content; min-width: 100%; margin: 0; padding: 4px 2px; list-style: none; }
.workflow-inline-track > li { position: relative; flex: 0 0 230px; min-width: 0; padding-top: 18px; }
.workflow-inline-track > li:not(:last-child)::after { position: absolute; top: calc(50% + 9px); right: -20px; width: 14px; border-top: 1px solid #9eb2bd; content: ""; }
.workflow-inline-track > li:not(:last-child)::before { position: absolute; z-index: 1; top: calc(50% + 6px); right: -20px; width: 6px; height: 6px; border-top: 1px solid #809aa7; border-right: 1px solid #809aa7; content: ""; transform: rotate(45deg); }
.workflow-inline-marker { position: absolute; z-index: 3; top: 0; left: 13px; display: grid; place-items: center; width: 30px; height: 30px; border: 1px solid #cbdce3; border-radius: 50%; background: var(--admin-surface); color: #527587; font-size: 12px; font-weight: 700; box-shadow: 0 2px 5px #24475a10; }
.workflow-inline-track > li:first-child .workflow-inline-marker { border-color: #477d8b; background: #477d8b; color: #fff; }
.workflow-inline-track > li.workflow-final-step .workflow-inline-marker { border-color: #b09258; background: #fbf7ed; color: #8c6b2e; }
.workflow-inline-track .workflow-step-card { display: flex; height: 100%; min-height: 180px; flex-direction: column; padding: 18px 15px 14px; }
.workflow-inline-track .workflow-step-label, .application-workflow .workflow-step-label { font-size: 12px; }
.workflow-inline-track .workflow-step-card h3, .application-workflow .workflow-step-card h3 { margin: 5px 0 13px; font-size: 16px; }
.workflow-inline-track .workflow-avatar, .application-workflow .workflow-avatar { width: 36px; height: 36px; font-size: 14px; }
.workflow-inline-track .workflow-approver strong, .application-workflow .workflow-approver strong { font-size: 14px; }
.workflow-inline-track .workflow-approver small, .application-workflow .workflow-approver small { font-size: 12px; }
.workflow-inline-track .workflow-person-meta, .application-workflow .workflow-person-meta { gap: 6px; margin-top: 10px; margin-left: 44px; padding-top: 9px; }
.workflow-inline-track .workflow-person-meta span, .application-workflow .workflow-person-meta span { font-size: 12px; }
.workflow-card-eyebrow { font-size: 12px; letter-spacing: .08em; }
.workflow-step-marker { font-size: 12px; }
.workflow-expanded-card .workflow-person-meta { margin-top: 8px; }
.pricing-formula-hint { grid-column: 1 / -1; margin: 0; }
.equipment-category-actions { display: flex; align-items: center; gap: 12px; }
.equipment-category-actions form { margin: 0; }
.workflow-add-step { margin-top: 12px; }
.workflow-detail-modal .workflow-edit-form { display: block; }
.workflow-create-dialog { width: min(820px, calc(100vw - 32px)); }

@media (max-width: 650px) {
  .workflow-summary-card { align-items: flex-start; flex-direction: column; padding: 15px; }
  .workflow-expanded-card .workflow-summary-card { flex-direction: row; padding: 14px; }
  .workflow-expanded-card .workflow-summary-actions { width: auto; justify-content: flex-end; flex-wrap: wrap; gap: 6px; }
  .workflow-inline-viewport { padding: 15px 12px 16px; }
  .workflow-inline-track > li { flex-basis: 210px; }
  .workflow-detail-modal { width: calc(100vw - 18px); max-height: 94vh; }
  .workflow-modal-head { padding: 14px; }
  .workflow-modal-view, .workflow-edit-form { padding: 12px; }
  .workflow-serpentine, .application-workflow { grid-auto-rows: minmax(0, auto); row-gap: 44px; }
  .workflow-serpentine .workflow-step-card, .application-workflow-step .workflow-step-card { min-height: 0; }
  .workflow-edit-step { grid-template-columns: 30px minmax(0, 1fr); align-items: center; gap: 8px; }
  .workflow-edit-step label { grid-column: 2; }
  .workflow-edit-step .workflow-edit-number { grid-row: span 2; }
  .workflow-edit-step button { grid-column: 2; justify-self: start; }
  .application-workflow { padding: 16px 0 6px; }
  .application-workflow--linear { padding: 16px 2px 10px; }
  .application-workflow--linear .application-workflow-step { flex-basis: min(78vw, 280px); }
}

/* 登录页以实验室主视觉承载品牌氛围，表单仍保持清晰、高对比和易操作。 */
.login-page { position: relative; isolation: isolate; min-height: 100vh; overflow: hidden; background: #061321; color: #f2f7fb; }
.login-backdrop { position: absolute; z-index: -1; inset: 0; background-image: linear-gradient(90deg, #06132150 0%, #06132130 47%, #061321c9 100%), linear-gradient(0deg, #06132188 0%, transparent 38%, #06132124 100%), url('/static/images/login-lab-hero.png'); background-position: center; background-size: cover; }
.login-shell { display: flex; flex-direction: column; width: min(1520px, 100%); min-height: 100vh; margin: 0 auto; padding: 30px clamp(28px, 6vw, 92px) 22px; }
.login-brand { display: flex; align-items: center; gap: 12px; color: #f5f8fb; }
.login-brand-mark { display: block; width: 46px; height: 46px; flex: none; border-radius: 12px; object-fit: contain; filter: drop-shadow(0 3px 13px #20a9dc38); }
.login-brand strong, .login-brand small { display: block; }
.login-brand strong { font-size: 16px; letter-spacing: .04em; }
.login-brand small { margin-top: 3px; color: #c0d0dc; font-size: 11px; letter-spacing: .06em; }
.login-main { display: grid; flex: 1; grid-template-columns: minmax(0, 1fr) minmax(360px, 430px); align-items: center; gap: clamp(34px, 8vw, 120px); padding: 42px 0; }
.login-welcome { max-width: 650px; padding: 0 0 16px; }
.login-kicker { display: flex; align-items: center; gap: 10px; margin: 0 0 24px; color: #b8d7e8; font-size: 10px; font-weight: 700; letter-spacing: .2em; }
.login-kicker span { width: 25px; height: 1px; background: #57d6e9; box-shadow: 0 0 12px #57d6e9b0; }
.login-welcome h1 { margin: 0; color: #f6f9fc; font-size: clamp(40px, 5.2vw, 66px); font-weight: 650; letter-spacing: -.045em; line-height: 1.28; text-shadow: 0 3px 28px #00101f65; }
.login-welcome h1 span { color: #9edcf0; }
.login-welcome-copy { max-width: 490px; margin: 24px 0 0; color: #d3e0e9; font-size: 15px; line-height: 1.9; }
.login-capabilities { display: flex; flex-wrap: wrap; gap: 9px; margin-top: 32px; }
.login-capabilities span { display: inline-flex; align-items: center; gap: 9px; padding: 8px 12px; border: 1px solid #c4deed36; border-radius: 6px; background: #15304869; color: #e2edf4; font-size: 11px; backdrop-filter: blur(8px); }
.login-capabilities i { color: #75d6e6; font-size: 9px; font-style: normal; font-variant-numeric: tabular-nums; }
.login-card { width: 100%; padding: 34px; border: 1px solid #d5e7f33c; border-radius: 14px; background: linear-gradient(145deg, #102238e8, #091827ed); color: #edf5fa; box-shadow: 0 26px 80px #0007, inset 0 1px #ffffff12; backdrop-filter: blur(20px); }
.login-card-heading { display: flex; align-items: center; gap: 13px; }
.login-card-icon { display: grid; place-items: center; width: 42px; height: 42px; border: 1px solid #4bb7d94d; border-radius: 10px; background: #1a8eb426; color: #8ce0f2; font-size: 20px; }
.login-card-heading p { margin: 0 0 2px; color: #8fc9db; font-size: 10px; letter-spacing: .12em; }
.login-card h2 { margin: 0; color: #f3f8fb; font-size: 23px; font-weight: 650; }
.login-card-intro { margin: 16px 0 25px; color: #b9c9d5; font-size: 12px; }
.login-form { display: grid; gap: 18px; }
.login-form label { display: grid; gap: 8px; color: #d7e3eb; font-size: 12px; font-weight: 550; }
.login-form input { width: 100%; min-height: 46px; padding: 11px 13px; border: 1px solid #b7d3e22b; border-radius: 7px; background: #061321a8; color: #f3f8fb; font-size: 13px; }
.login-form input::placeholder { color: #718696; }
.login-form input:focus { border-color: #5ebbd5; outline: 3px solid #4fc6e326; }
.login-submit { display: flex; align-items: center; justify-content: center; gap: 12px; min-height: 46px; margin-top: 5px; border: 1px solid #38a8c8; border-radius: 7px; background: linear-gradient(105deg, #167eaa, #1b9cbd); color: white; font-size: 13px; font-weight: 650; box-shadow: 0 8px 22px #087a9c40; }
.login-submit:hover { border-color: #6bd9ec; background: linear-gradient(105deg, #168eb8, #20aecb); color: white; }
.login-submit span { font-size: 17px; transition: transform .16s ease; }
.login-submit:hover span { transform: translateX(4px); }
.login-card-foot { display: flex; align-items: center; gap: 8px; margin-top: 22px; padding-top: 15px; border-top: 1px solid #d6e9f11c; color: #91a8b8; font-size: 10px; }
.login-security-dot { width: 6px; height: 6px; border-radius: 50%; background: #55cda5; box-shadow: 0 0 0 3px #55cda51b; }
.login-card .flash { margin: 0 0 16px; border: 1px solid #60d4a74d; border-left: 3px solid #52c999; border-radius: 6px; background: #164a3a70; color: #d8f8eb; }
.login-card .flash.error { border-color: #ec85854a; border-left-color: #df7272; background: #512b347a; color: #ffe2e2; }
.login-footer { display: flex; justify-content: space-between; gap: 12px; padding-top: 14px; border-top: 1px solid #d2e2ed24; color: #9aafbd; font-size: 10px; letter-spacing: .04em; }

@media (max-width: 900px) {
  .login-shell { padding-right: 34px; padding-left: 34px; }
  .login-main { grid-template-columns: minmax(0, 1fr) minmax(330px, 390px); gap: 28px; }
  .login-card { padding: 28px; }
}
@media (max-width: 720px) {
  .login-backdrop { background-position: 38% center; background-image: linear-gradient(90deg, #061321a6, #061321b8), linear-gradient(0deg, #061321d9, #06132158), url('/static/images/login-lab-hero.png'); }
  .login-shell { min-height: 100vh; padding: 18px 20px 14px; }
  .login-brand-mark { width: 38px; height: 38px; border-radius: 10px; }
  .login-brand strong { font-size: 14px; }
  .login-main { grid-template-columns: minmax(0, 1fr); gap: 24px; padding: 38px 0 25px; }
  .login-welcome { padding: 0; }
  .login-kicker { margin-bottom: 14px; font-size: 9px; }
  .login-welcome h1 { font-size: clamp(32px, 9vw, 44px); }
  .login-welcome-copy { margin-top: 12px; font-size: 13px; line-height: 1.65; }
  .login-capabilities { gap: 7px; margin-top: 16px; }
  .login-capabilities span { padding: 6px 9px; font-size: 10px; }
  .login-card { max-width: 500px; justify-self: center; padding: 24px; }
  .login-footer { font-size: 9px; }
}
@media (max-width: 380px) {
  .login-shell { padding-right: 15px; padding-left: 15px; }
  .login-card { padding: 20px; }
  .login-welcome h1 { font-size: 31px; }
}

/* 全站统一使用 Lucide 的 24px 线性图标，并通过 currentColor 适配主题。 */
.ui-icon,
.ui-action-icon {
  display: inline-block;
  flex: none;
  vertical-align: middle;
  background-color: currentColor;
  background-image: none;
  -webkit-mask-image: var(--ui-icon-mask);
  mask-image: var(--ui-icon-mask);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-size: contain;
  mask-size: contain;
}
.ui-icon { --ui-icon-mask: none; width: 20px; height: 20px; }
.ui-action-icon { --ui-icon-mask: none; width: 18px; height: 18px; }
.nav-symbol.ui-icon { display: block; width: 23px; height: 23px; border-radius: 0; }
.workflow-template-icon.ui-icon { display: block; width: 36px; height: 36px; }
.workflow-create-icon.ui-action-icon { display: block; width: 29px; height: 29px; }
.workflow-empty > .ui-icon { width: 40px; height: 40px; }
.login-card-icon.ui-icon { display: block; width: 38px; height: 38px; }
.workflow-person-meta i.ui-icon { width: 15px; height: 15px; }
.workflow-avatar.ui-icon { display: block; width: 25px; height: 25px; }
.org-position-mark.ui-icon { display: block; width: 22px; height: 22px; }
.photo-add-tile .ui-action-icon { width: 30px; height: 30px; }
.map-north { display: inline-flex; align-items: center; gap: 3px; }
.map-north .ui-action-icon { width: 16px; height: 16px; transform: rotate(-90deg); }
.workflow-modal-close .ui-action-icon { width: 17px; height: 17px; }
.login-submit .ui-action-icon,
.workflow-create-submit .ui-action-icon { width: 19px; height: 19px; }
.header-tool .ui-icon { width: 19px; height: 19px; }
.header-logout .ui-icon { width: 18px; height: 18px; }

.ui-icon--dashboard { --ui-icon-mask: url('/static/icons/layout-dashboard.svg'); }
.ui-icon--application { --ui-icon-mask: url('/static/icons/clipboard-list.svg'); }
.ui-icon--approval { --ui-icon-mask: url('/static/icons/clipboard-check.svg'); }
.ui-icon--settings { --ui-icon-mask: url('/static/icons/settings.svg'); }
.ui-icon--organization { --ui-icon-mask: url('/static/icons/building.svg'); }
.ui-icon--submenu-users-round { --ui-icon-mask: url('/static/icons/users-round.svg'); }
.ui-icon--submenu-flask-conical { --ui-icon-mask: url('/static/icons/flask-conical.svg'); }
.ui-icon--submenu-package { --ui-icon-mask: url('/static/icons/package.svg'); }
.ui-icon--submenu-stats { --ui-icon-mask: url('/static/icons/clipboard-check.svg'); }
.ui-icon--submenu-calendar { --ui-icon-mask: url('/static/icons/layout-dashboard.svg'); }
.ui-icon--submenu-calendar-days { --ui-icon-mask: url('/static/icons/calendar-days.svg'); }
.ui-icon--submenu-building { --ui-icon-mask: url('/static/icons/building.svg'); }
.ui-icon--profile { --ui-icon-mask: url('/static/icons/user-round.svg'); }
.ui-icon--theme { --ui-icon-mask: url('/static/icons/palette.svg'); }
.ui-icon--mode { --ui-icon-mask: url('/static/icons/sun-moon.svg'); }
.ui-icon--logout { --ui-icon-mask: url('/static/icons/log-out.svg'); }
.ui-icon--workflow { --ui-icon-mask: url('/static/icons/workflow.svg'); }
.ui-action-icon--add { --ui-icon-mask: url('/static/icons/plus.svg'); }
.ui-action-icon--close { --ui-icon-mask: url('/static/icons/x.svg'); }
.ui-action-icon--forward { --ui-icon-mask: url('/static/icons/arrow-right.svg'); }
.ui-action-icon--sidebar-toggle { --ui-icon-mask: url('/static/icons/panel-left-close.svg'); }
.ui-action-icon--lab-toggle { --ui-icon-mask: url('/static/icons/chevron-down.svg'); transition: transform 150ms ease-out; }
.lab-group-toggle[aria-expanded="false"] .ui-action-icon--lab-toggle { transform: rotate(-90deg); }

/* 树形层级提示改用 CSS 绘制，避免残留不同字体风格的 Unicode 图标。 */
.department-tree-caret,
.department-tree-leaf { display: inline-block; width: 14px; height: 14px; flex: none; }
.department-tree-caret::after { display: block; width: 6px; height: 6px; margin: 2px 0 0 3px; border-right: 1.5px solid #8195a3; border-bottom: 1.5px solid #8195a3; content: ""; transform: rotate(45deg); }
.department-tree-leaf::after { display: block; width: 4px; height: 4px; margin: 5px; border-radius: 50%; background: #9aafbf; content: ""; }

/* 统计明细沿用看板信息层级，并让桌面端卡片填满可用纵向空间。 */
.lab-overview-details.lab-resource-analytics { display:block; min-height:clamp(600px,62vh,860px); padding:18px; border:1px solid var(--admin-line); border-radius:10px; background:var(--admin-surface); box-shadow:0 4px 16px #203f5910; }
.lab-resource-analytics-heading { display:flex; align-items:baseline; justify-content:space-between; gap:16px; margin-bottom:16px; padding-bottom:13px; border-bottom:1px solid var(--admin-line); }
.lab-resource-analytics-heading h2 { margin:0; color:var(--admin-ink); font-size:19px; }
.lab-resource-analytics-heading>span { color:var(--admin-muted); font-size:13px; }
.lab-resource-analytics-grid { display:grid; grid-template-columns:minmax(0,1.7fr) minmax(340px,.72fr); align-items:stretch; gap:20px; min-height:clamp(520px,54vh,760px); }
/* 统计两栏在分隔线两侧留出相近的呼吸空间。 */
.lab-overview-details.lab-resource-analytics>section { display:flex; flex-direction:column; min-width:0; min-height:0; padding:4px 0 2px; border:0; border-radius:0; background:transparent; box-shadow:none; }
.lab-resource-analytics-grid>.lab-applicant-stats { padding:4px 0 2px 24px!important; border-left:1px solid var(--admin-line)!important; }
.lab-stat-section-heading { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:15px; }
.lab-stat-section-heading h3 { margin:0; font-size:17px; }
.lab-stat-section-heading>span { color:var(--admin-muted); font-size:13px; white-space:nowrap; }
.lab-device-usage-layout { display:grid; flex:1; grid-template-rows:auto minmax(0,1fr) auto; gap:15px; min-height:0; }
.lab-device-usage-summary { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; }
.lab-device-usage-summary>div { display:grid; gap:5px; min-width:0; padding:10px 12px; border:1px solid var(--admin-line); border-radius:8px; background:var(--admin-paper); }
.lab-device-usage-summary span { color:var(--admin-muted); font-size:12px; }
.lab-device-usage-summary strong { overflow-wrap:anywhere; color:var(--admin-ink); font-size:16px; }
.lab-device-usage-analysis { display:grid; grid-template-columns:minmax(0,1.05fr) minmax(300px,.95fr); align-items:stretch; gap:20px; min-height:0; }
.lab-device-pie-panel { display:flex; align-items:center; justify-content:flex-start; gap:20px; min-width:0; min-height:0; }
.lab-device-pie { position:relative; width:176px; height:176px; flex:none; border:1px solid #dce7ef; border-radius:50%; background:conic-gradient(#e5edf3 0% 100%); box-shadow:inset 0 0 0 1px #ffffffaa; }
.lab-device-pie-center { position:absolute; inset:35px; display:grid; align-content:center; justify-items:center; border:1px solid #e5edf3; border-radius:50%; background:var(--admin-surface); }
.lab-device-pie-center strong { color:var(--admin-ink); font-size:23px; line-height:1.2; }
.lab-device-pie-center span { color:var(--admin-muted); font-size:12px; }
.lab-device-pie-legend { display:grid; flex:1; height:100%; gap:12px; max-height:100%; min-width:0; min-height:0; margin:0; padding:0; overflow:auto; list-style:none; }
.lab-device-pie-legend li { display:grid; grid-template-columns:11px minmax(0,1fr); align-items:center; column-gap:9px; color:var(--admin-ink); font-size:13px; }
.lab-device-pie-legend li>i { width:9px; height:9px; border-radius:50%; background:var(--pie-color,#2588ca); }
.lab-device-pie-legend li>span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.lab-device-pie-legend li>strong { grid-column:2; color:var(--admin-muted); font-size:12px; font-weight:500; }
.lab-device-pie-legend .lab-pie-empty { display:block; color:var(--admin-muted); }
.lab-device-bars { display:flex; flex-direction:column; gap:11px; min-width:0; min-height:0; }
.lab-device-bars h4 { margin:0; color:var(--admin-ink); font-size:14px; }
.lab-device-bars-list { display:grid; align-content:start; gap:12px; min-height:0; overflow:auto; }
.lab-device-bar-row { display:grid; gap:6px; min-width:0; }
.lab-device-bar-heading { display:flex; align-items:baseline; justify-content:space-between; gap:10px; min-width:0; color:var(--admin-ink); font-size:13px; }
.lab-device-bar-heading>span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.lab-device-bar-heading>strong { flex:none; color:var(--admin-muted); font-size:12px; font-weight:500; }
.lab-device-bar-track { display:block; height:10px; overflow:hidden; border-radius:999px; background:var(--admin-paper); }
.lab-device-bar-track i { display:block; height:100%; border-radius:inherit; background:linear-gradient(90deg,var(--admin-accent-strong),#49a4ba); }
.lab-device-details { min-width:0; border-top:1px solid var(--admin-line); color:var(--admin-ink); }
.lab-device-details summary { padding-top:10px; color:var(--admin-accent-strong); font-size:13px; font-weight:600; cursor:pointer; }
.lab-device-details .lab-stat-scroll { max-height:220px; margin-top:8px; overflow:auto; }
.lab-device-details table { width:100%; font-size:13px; }
.lab-device-details th,.lab-device-details td { padding:8px 10px; }
.lab-applicant-summary { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin-bottom:12px; }
.lab-applicant-summary>div { display:grid; align-content:center; gap:4px; min-width:0; padding:10px; border:1px solid var(--admin-line); border-radius:8px; background:var(--admin-paper); }
.lab-applicant-summary span { color:var(--admin-muted); font-size:11px; }
.lab-applicant-summary strong { overflow-wrap:anywhere; color:var(--admin-ink); font-size:15px; }
.lab-applicant-chart-legend { display:flex; gap:16px; margin:0 0 8px 2px; color:var(--admin-muted); font-size:12px; }
.lab-applicant-chart-legend>span { display:inline-flex; align-items:center; gap:6px; }
.lab-applicant-chart-legend i { width:9px; height:9px; border-radius:50%; background:#2778d7; }
.lab-applicant-chart-legend .applicant-hours-mark { background:#39a79b; }
.lab-applicant-chart { display:grid; align-content:start; gap:13px; flex:1; min-height:0; overflow:auto; padding:3px 4px 4px 1px; }
.lab-applicant-chart-person { display:grid; gap:7px; min-width:0; padding:10px 11px; border:1px solid var(--admin-line); border-radius:8px; background:var(--admin-paper); }
.lab-applicant-chart-person-heading { display:flex; align-items:center; gap:9px; color:var(--admin-ink); font-size:13px; }
.lab-applicant-chart-person-heading>span { display:grid; place-items:center; width:23px; height:23px; flex:none; border-radius:50%; background:var(--admin-accent-soft); color:var(--admin-accent-strong); font-size:11px; font-weight:700; }
.lab-applicant-metric-line { display:grid; grid-template-columns:38px minmax(48px,1fr) auto; align-items:center; gap:8px; color:var(--admin-muted); font-size:11px; }
.lab-applicant-metric-line>strong { color:var(--admin-ink); font-size:11px; font-weight:600; white-space:nowrap; }
.lab-applicant-metric-track { display:block; height:8px; overflow:hidden; border-radius:999px; background:color-mix(in srgb,var(--admin-line) 58%,transparent); }
.lab-applicant-metric-track i { display:block; height:100%; border-radius:inherit; }
.lab-applicant-metric-track .applicant-count-fill { background:linear-gradient(90deg,#1768d1,#54a0e4); }
.lab-applicant-metric-track .applicant-hours-fill { background:linear-gradient(90deg,#228e85,#5fc6ae); }
.lab-applicant-details { margin-top:10px; border-top:1px solid var(--admin-line); color:var(--admin-ink); }
.lab-applicant-details summary { padding-top:9px; color:var(--admin-accent-strong); font-size:12px; font-weight:600; cursor:pointer; }
.lab-applicant-details .lab-stat-scroll { max-height:220px; margin-top:8px; overflow:auto; }
.lab-applicant-details table { width:100%; table-layout:fixed; font-size:12px; }
.lab-applicant-details th,.lab-applicant-details td { padding:8px 7px; }
.lab-ranking-tabs { display:inline-flex; flex:none; padding:4px; border:1px solid var(--admin-line); border-radius:8px; background:var(--admin-paper); }
.lab-ranking-tabs button { padding:7px 11px; border:0; border-radius:6px; background:transparent; color:var(--admin-muted); font-size:12px; white-space:nowrap; }
.lab-ranking-tabs button[aria-selected="true"] { background:var(--admin-surface); color:var(--admin-accent-strong); box-shadow:0 1px 4px #203f5918; font-weight:650; }
.lab-applicant-stats .lab-stat-scroll { max-height:none; min-height:0; }
.lab-applicant-stats table { width:100%; table-layout:fixed; font-size:14px; }
.lab-applicant-stats th,.lab-applicant-stats td { padding:13px 12px; }
.lab-applicant-stats th:first-child,.lab-applicant-stats td:first-child { width:8%; }
.lab-applicant-stats th:nth-child(2),.lab-applicant-stats td:nth-child(2) { width:34%; }
.lab-applicant-stats th:nth-child(3),.lab-applicant-stats td:nth-child(3) { width:24%; }
.lab-applicant-stats th:nth-child(4),.lab-applicant-stats td:nth-child(4) { width:34%; }
/* 设备标签按内容自然定宽，空间不足时换行并保留轻微左侧留白。 */
.lab-equipment-list-text { display:flex; align-items:flex-start; flex-wrap:wrap; gap:5px 6px; width:100%; min-width:0; padding-left:6px; white-space:normal; }
.lab-equipment-pill { display:inline-flex!important; align-items:center; justify-content:flex-start; flex:0 1 auto; width:max-content; max-width:100%; gap:8px; min-width:0; padding:4px 8px; border:1px solid #d7e7f4; border-radius:999px; background:#f2f8fe; color:#36556e; font-size:14px; line-height:1.4; }
.lab-equipment-pill>span { flex:0 1 auto; min-width:0; overflow-wrap:anywhere; }
.lab-equipment-pill>strong { display:grid; place-items:center; flex:none; min-width:20px; height:20px; padding:0 5px; border-radius:50%; background:#deedfc; color:#1764cf; font-size:10px; font-weight:650; }
/* 设备关联采用左右设备池，卡片展示设备照片与基础资料并以方向箭头移动。 */
.lab-equipment-modal { width:min(1280px,calc(100vw - 32px)); max-height:calc(100vh - 32px); }
.lab-equipment-assignment { display:grid; gap:12px; padding:15px; border:1px solid var(--admin-line); border-radius:9px; background:var(--admin-paper); }
.lab-equipment-assignment h3 { margin:0; color:var(--admin-ink); font-size:15px; }
.lab-equipment-assignment p { margin:4px 0 0; color:var(--admin-muted); font-size:12px; }
.lab-equipment-transfer-form { gap:14px; }
.lab-equipment-transfer-layout { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); align-items:stretch; gap:14px; min-width:0; }
.lab-equipment-transfer-panel { grid-template-rows:auto minmax(0,1fr); min-width:0; min-height:0; }
.lab-equipment-transfer-heading { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.lab-equipment-transfer-heading>span { display:grid; place-items:center; min-width:28px; height:28px; padding:0 7px; border:1px solid var(--admin-line); border-radius:14px; background:var(--admin-surface); color:var(--admin-muted); font-size:12px; font-weight:600; }
.lab-equipment-list { display:grid; align-content:start; grid-template-columns:minmax(0,1fr); gap:8px; height:min(56vh,560px); min-height:260px; overflow:auto; padding:2px 4px 2px 0; }
.lab-equipment-card { display:grid; grid-template-columns:70px minmax(0,1fr) auto; align-items:center; gap:11px; min-width:0; padding:8px; border:1px solid var(--admin-line); border-radius:8px; background:var(--admin-surface); touch-action:pan-y; }
.lab-equipment-card-photo { display:grid; place-items:center; width:70px; height:60px; overflow:hidden; border:1px solid var(--admin-line); border-radius:6px; background:var(--admin-paper); color:var(--admin-muted); font-size:10px; }
.lab-equipment-card-photo img { display:block; width:100%; height:100%; object-fit:cover; }
.lab-equipment-card-photo img[hidden],.lab-equipment-card-photo span[hidden] { display:none; }
.lab-equipment-card-info { display:grid; gap:4px; min-width:0; }
.lab-equipment-card-info strong { overflow:hidden; color:var(--admin-ink); font-size:13px; text-overflow:ellipsis; white-space:nowrap; }
.lab-equipment-card-info small { overflow-wrap:anywhere; color:var(--admin-muted); font-size:11px; line-height:1.4; }
.lab-equipment-transfer-button { display:grid; place-items:center; min-width:58px; height:34px; padding:0 9px; border:1px solid var(--admin-line); border-radius:6px; background:var(--admin-surface); color:var(--admin-accent-strong); font-size:12px; font-weight:650; line-height:1; cursor:pointer; }
.lab-equipment-transfer-button:hover { border-color:var(--admin-accent); background:var(--admin-accent-soft); }
.lab-equipment-transfer-button.is-remove { color:#a24c4c; }
.lab-equipment-transfer-button.is-remove:hover { border-color:#d9aaaa; background:#fff4f2; }
.lab-equipment-empty { display:grid; place-items:center; min-height:190px; margin:0; border:1px dashed var(--admin-line); border-radius:8px; color:var(--admin-muted); font-size:12px; }
.lab-equipment-available-list .lab-equipment-card.is-entering { animation:lab-equipment-from-right 220ms ease-out; }
.lab-equipment-associated-list .lab-equipment-card.is-entering { animation:lab-equipment-from-left 220ms ease-out; }
@keyframes lab-equipment-from-right { from { opacity:.4; transform:translateX(18px); } to { opacity:1; transform:translateX(0); } }
@keyframes lab-equipment-from-left { from { opacity:.4; transform:translateX(-18px); } to { opacity:1; transform:translateX(0); } }
.lab-equipment-transfer-form .form-actions { margin-top:0; }
.lab-master-table { min-width:1180px; }
.lab-master-table .lab-actions { min-width:320px; }
.lab-stats-modal { width:min(1180px,calc(100vw - 28px)); }
:root[data-mode="dark"] .lab-equipment-pill { border-color:#3b5872; background:#263a4e; color:#d6e4f0; }
:root[data-mode="dark"] .lab-equipment-pill>strong { background:#294968; color:#c8e2ff; }
:root[data-mode="dark"] .lab-equipment-card-photo { background:#1b2937; }
:root[data-mode="dark"] .lab-equipment-transfer-button:hover { background:#29415a; }
:root[data-mode="dark"] .lab-device-pie { border-color:var(--admin-line); }
:root[data-mode="dark"] .lab-device-pie-center { border-color:var(--admin-line); }
@media(max-width:1280px) {
  .lab-equipment-modal { width:min(1100px,calc(100vw - 28px)); }
  .lab-resource-analytics-grid { grid-template-columns:1fr; gap:18px; }
  .lab-overview-details.lab-resource-analytics { min-height:0; }
  .lab-resource-analytics-grid>.lab-applicant-stats { min-height:380px; padding:16px 0 2px!important; border-top:1px solid var(--admin-line)!important; border-left:0!important; }
}
@media(max-width:780px) {
  .lab-equipment-transfer-layout { grid-template-columns:minmax(0,1fr); }
  .lab-equipment-list { height:30vh; min-height:190px; }
  .lab-device-usage-analysis { grid-template-columns:1fr; }
  .lab-device-pie-panel { justify-content:flex-start; }
  .lab-ranking-tabs button { padding:7px 9px; font-size:11px; }
}
@media(max-width:560px) {
  .lab-equipment-modal { width:calc(100vw - 18px); padding:14px; }
  .lab-equipment-modal .master-modal-head { margin:-14px -14px 14px; padding:13px 14px; }
  .lab-equipment-assignment { padding:11px; }
  .lab-equipment-card { grid-template-columns:58px minmax(0,1fr) auto; gap:8px; padding:7px; }
  .lab-equipment-card-photo { width:58px; height:52px; }
  .lab-equipment-transfer-button { min-width:50px; height:31px; padding:0 6px; }
  .lab-equipment-list { height:25vh; min-height:160px; }
}
@media(prefers-reduced-motion:reduce) {
  .lab-equipment-card.is-entering { animation:none!important; }
}
@media(max-width:580px) {
  .lab-stat-section-heading { align-items:flex-start; flex-direction:column; }
  .lab-ranking-tabs { max-width:100%; }
  .lab-overview-details.lab-resource-analytics { padding:14px; }
  .lab-resource-analytics-heading { align-items:flex-start; flex-direction:column; gap:4px; }
  .lab-resource-analytics-heading h2 { font-size:17px; }
  .lab-resource-analytics-grid>.lab-applicant-stats { min-height:340px; }
  .lab-device-usage-summary { grid-template-columns:1fr; }
  .lab-applicant-stats th,.lab-applicant-stats td { padding:9px 6px; font-size:12px; }
  .lab-device-pie-panel { justify-content:flex-start; gap:12px; }
  .lab-device-pie { width:140px; height:140px; }
}

/* 用户身份与模式、退出入口统一为胶囊控件，头像图标表示当前账号。 */
.header-user { min-width:0; min-height:34px; gap:8px; padding:4px 9px; border:1px solid #9bc5ef; border-radius:8px; background:#ffffffb8; }
.header-avatar { width:24px; height:24px; font-size:12px; }
.header-user>span:last-child { line-height:1; }
.header-user strong { font-size:12px; }
.header-user small { margin-top:2px; font-size:10px; }
:root[data-mode="dark"] .header-user { border-color:var(--admin-line); background:#243344; }
:root[data-mode="dark"] .header-user strong { color:var(--admin-ink); }

/* 看板页由固定头部和弹性表格区组成，只有表格容器承担纵向滚动。 */
@media(min-width:651px) {
  html:has(body.board-page) { height:100%; overflow:hidden; }
  body.board-page { height:100vh; height:100dvh; min-height:0; overflow:hidden; }
  body.board-page .app-shell { grid-template-rows:minmax(0,1fr); height:100vh; height:100dvh; min-height:0; overflow:hidden; }
  body.board-page .sidebar { height:calc(100vh - 16px); height:calc(100dvh - 16px); min-height:0; }
  body.board-page .main-shell { display:flex; flex-direction:column; height:100%; min-height:0; overflow:hidden; }
  body.board-page .topbar { flex:none; }
  body.board-page .content { display:flex; flex:1; flex-direction:column; width:100%; height:0; min-height:0; margin:0; padding:12px 0 0; overflow:hidden; }
  body.board-page .content>.flash { flex:none; }
  body.board-page .calendar-panel { display:flex; flex:1; flex-direction:column; min-height:0; margin:0; overflow:hidden; }
  body.board-page .calendar-panel-head { flex:none; }
  body.board-page .calendar-panel .board-wrap { flex:1; min-height:0; max-height:none; overflow:auto; }
  /* 楼层总览随看板弹性填满视口，并在页面底部留出空隙。 */
  body.board-page:has(.floor-map-root) .content { padding-bottom:18px; }
}

/* 筛选项改为标签在左、下拉框在右，并统一文字层级。 */
.board-navigation-row .board-filter label { display:flex; align-items:center; gap:6px; width:auto; min-width:0; font-size:12px; }
.board-navigation-row .board-filter select { width:132px; min-height:34px; font-size:12px; }
.board-table .resource-head { font-size:13px; font-weight:700; letter-spacing:normal; color:#2e4b60; }
.board-table .resource-cell strong { font-size:13px; font-weight:700; }
.board-table .date-head strong { font-weight:700; }

@media(max-width:850px) {
  .board-navigation-row .board-filter label { flex:1; min-width:175px; }
  .board-navigation-row .board-filter select { flex:1; min-width:0; }
}
@media(max-width:650px) {
  body.board-page { overflow:auto; }
  body.board-page .app-shell { height:auto; min-height:100vh; min-height:100dvh; overflow:visible; }
  body.board-page .main-shell { height:auto; min-height:0; overflow:visible; }
  body.board-page .content { display:block; height:auto; min-height:0; padding-top:12px; overflow:visible; }
  body.board-page .calendar-panel { min-height:65vh; overflow:hidden; }
  body.board-page .calendar-panel .board-wrap { min-height:320px; }
  .board-navigation-row .board-filter label { flex:1 1 100%; min-width:0; }
  .board-navigation-row .board-filter select { width:auto; }
}

/* 看板筛选与视图切换垂直居中；排期按实际时间连续绘制，重叠项分层显示。 */
.board-navigation-row { align-items:center; }
.board-navigation-row .board-filter { align-items:center; }
.board-navigation-row .board-filter label { display:flex; align-items:center; }
.board-view-group { display:flex; flex:none; align-items:center; gap:7px; margin-left:auto; }
.board-view-label { color:#5e7183; font-size:12px; font-weight:600; white-space:nowrap; }
.calendar-panel-title { display:flex; min-width:0; align-items:center; gap:14px; flex-wrap:wrap; }
.calendar-panel-title .board-view-group { flex:none; margin-left:0; }
.calendar-panel-title .board-switch { width:auto; margin:0; justify-content:flex-start; }
.board-table .schedule-track { height:auto; padding:0; vertical-align:middle; background:#fff; }
.board-table tbody tr:nth-child(even) .schedule-track { background:#fbfcfd; }
/* 时间轴每条泳道高46px，卡片高44px，上下留出均匀间距并避免相邻泳道重叠。 */
.schedule-timeline { position:relative; min-height:50px; overflow:hidden; }
.schedule-day-divider { position:absolute; z-index:0; top:0; bottom:0; width:1px; background:#e5ebf0; pointer-events:none; }
.schedule-bar { position:absolute; z-index:1; top:3px; left:0; width:1px; height:44px; box-sizing:border-box; display:flex; flex-direction:column; align-items:center; justify-content:center; overflow:hidden; padding:2px 7px; border:1px solid #cbdfe9; border-left:3px solid #427d91; border-radius:5px; background:linear-gradient(110deg,#eef6f9,#f5f9fb); color:#243e50; text-align:center; text-decoration:none; line-height:1.15; }
.schedule-bar strong { overflow:hidden; color:#365c71; font-size:11px; font-variant-numeric:tabular-nums; text-overflow:clip; white-space:nowrap; }
.schedule-bar small { overflow:hidden; color:#526f82; font-size:12px; font-weight:600; text-overflow:clip; white-space:nowrap; }
.schedule-bar:hover { z-index:2; border-color:#8fb1c0; background:#eaf4f7; text-decoration:none; }
@media(max-width:850px) { .board-navigation-row { align-items:center; } .board-view-group { margin-left:auto; } }
@media(max-width:650px) { .board-navigation-row { align-items:center; } .board-navigation-row .board-filter { align-items:center; } .board-view-group { flex:0 0 auto; margin-left:auto; } }

/* 两组看板控件各自成胶囊，表格资源名称统一居中。 */
.board-navigation-row { gap:14px; }
.board-navigation-row .board-filter { gap:8px; padding:4px 8px; border:1px solid #d5e0e8; border-radius:999px; background:#edf2f6; box-shadow:0 2px 7px #223d5408; }
.board-navigation-row .board-filter label { font-size:11px; }
.board-navigation-row .board-filter select,
.board-navigation-row .board-filter input { width:132px; min-height:34px; padding:5px 8px; border:1px solid #d0dce6; border-radius:7px; background:#fff; color:#29485e; font-size:12px; }
.board-navigation-row .board-filter button { min-height:34px; padding:5px 13px; }
body.board-page.lab-board-page .calendar-panel-head { justify-content:flex-start; }
body.board-page.lab-board-page .board-navigation-row { width:100%; justify-content:flex-start; }
.board-view-group { gap:8px; padding:3px 5px 3px 11px; border:1px solid #d5e0e8; border-radius:999px; background:#edf2f6; }
.board-view-label { color:#5e7183; font-size:11px; }
.calendar-panel-head .board-switch { gap:3px; padding:0; border:0; border-radius:0; background:transparent; }
/* 三个看板视图入口略微放大，保留紧凑的胶囊排列。 */
.calendar-panel-head .board-switch a { padding:8px 13px; font-size:13px; }
.board-table .resource-head,
.board-table .resource-cell { text-align:center; }
.board-table .lab-group-row .lab-group-cell,
.board-table .lab-group-row .lab-group-band { background: linear-gradient(100deg, #e8f0f6, #f0f5f8); }
.board-table .lab-group-row .lab-group-cell { box-shadow: inset 3px 0 #4b8098; }
.board-table .lab-group-label strong { color: #294e65; font-size: 14px; font-weight: 700; }
.board-table .lab-group-label small { color: #708596; font-size: 10px; }
:root[data-mode="dark"] .board-table .lab-group-row .lab-group-cell,
:root[data-mode="dark"] .board-table .lab-group-row .lab-group-band { background: #253545; }
:root[data-mode="dark"] .board-table .lab-group-label strong { color: var(--admin-ink); }
.lab-group-toggle { justify-content:center; }
.lab-group-label { display:flex; flex-direction:column; align-items:center; gap:2px; }
.lab-group-label strong { font-size:13px; }
.lab-group-label small { color:#718494; font-size:10px; font-weight:400; white-space:nowrap; }
.lab-group-band { padding:0 8px; }
.schedule-timeline { overflow:visible; }
.schedule-timeline:has(.schedule-bar:hover),
.schedule-timeline:has(.schedule-bar:focus-visible) { z-index:12; }
.schedule-bar { overflow:visible; }
.schedule-tooltip { position:absolute; z-index:20; top:calc(100% + 5px); left:0; display:none; min-width:176px; max-width:260px; padding:8px 10px; border:1px solid #cbdbe5; border-radius:7px; background:#fff; box-shadow:0 5px 18px #203d5526; color:#29485e; white-space:normal; line-height:1.45; pointer-events:none; }
.schedule-bar:hover .schedule-tooltip,
.schedule-bar:focus-visible .schedule-tooltip { display:block; }
.schedule-tooltip strong { display:block; margin:0 0 3px; color:#365c71; font-size:12px; white-space:nowrap; }
.schedule-tooltip span { display:block; color:#526f82; font-size:13px; font-weight:600; white-space:nowrap; }
.lab-summary-bar { border-color:#d4d5c0; border-left-color:#89894e; background:linear-gradient(110deg,#f2f2e7,#fafaf4); }
.lab-summary-bar:hover { border-color:#b7b88b; background:#efefdf; }
.lab-summary-bar strong { color:#62633d; }
:root[data-mode="dark"] .board-navigation-row .board-filter,
:root[data-mode="dark"] .board-view-group { border-color:var(--admin-line); background:#1a2836; }
:root[data-mode="dark"] .board-navigation-row .board-filter :is(input,select) { border-color:var(--admin-line); background:#253545; color:var(--admin-ink); }
:root[data-mode="dark"] .lab-group-label small { color:var(--admin-muted); }
:root[data-mode="dark"] .schedule-tooltip { border-color:var(--admin-line); background:#253545; color:var(--admin-ink); }
:root[data-mode="dark"] .schedule-tooltip :is(strong,span) { color:#d7e6ef; }
:root[data-mode="dark"] .lab-summary-bar { border-color:#6d704c; background:#35392f; }
@media(max-width:850px) {
  .board-navigation-row .board-filter { flex-wrap:wrap; border-radius:16px; }
  .board-view-group { margin-left:auto; }
  .calendar-panel-title .board-view-group { margin-left:0; }
}

/* 固定看板画布至少为 1920×1080；较小窗口通过页面滚动条浏览。 */
html:has(body.board-page.lab-board-page) { height:auto !important; min-width:1920px; overflow:auto !important; }
body.board-page.lab-board-page { width:100%; min-width:1920px; min-height:1080px; height:auto !important; overflow:auto !important; }
body.board-page.lab-board-page .app-shell { width:100%; min-width:1920px; min-height:1080px; height:auto !important; overflow:visible !important; }
body.board-page.lab-board-page .sidebar { min-height:1080px; height:auto !important; }
body.board-page.lab-board-page .main-shell { min-width:1704px; min-height:1080px; height:auto !important; overflow:visible !important; }
body.board-page.lab-board-page .content { display:block !important; width:100%; max-width:none; min-width:1704px; min-height:1017px; height:auto !important; padding:18px 24px 48px; overflow:visible !important; }
body.board-page.lab-board-page .calendar-panel { display:block !important; min-height:0; margin:0; overflow:visible !important; }
body.board-page.lab-board-page .calendar-panel .board-wrap { display:block; height:auto; max-height:none; min-height:0; overflow:visible !important; }
.lab-date-navigation { display:flex; align-items:center; justify-content:space-between; gap:16px; margin:0 0 10px; padding:8px 12px; border:1px solid #dbe5ed; border-radius:7px; background:#f4f8fb; }
.lab-date-navigation strong { color:#3e5c72; font-size:13px; font-variant-numeric:tabular-nums; }
.lab-date-navigation .button { padding:6px 12px; border-color:#cfdae4; color:#315d78; white-space:nowrap; }
.board-table.period-3d,.board-table.period-5d,.board-table.period-7d { width:100%; min-width:100%; }
.board-table.period-3d .resource-head,.board-table.period-3d .resource-cell,
.board-table.period-5d .resource-head,.board-table.period-5d .resource-cell,
.board-table.period-7d .resource-head,.board-table.period-7d .resource-cell { width:240px; min-width:240px; }
.board-table.period-3d th.date-head { width:calc((100% - 240px) / 3); }
.board-table.period-5d th.date-head { width:calc((100% - 240px) / 5); }
.board-table.period-7d th.date-head { width:calc((100% - 240px) / 7); }
.board-table.period-3d .date-head,.board-table.period-5d .date-head,.board-table.period-7d .date-head { padding:8px 3px; }
:root[data-mode="dark"] .lab-date-navigation { border-color:var(--admin-line); background:#202f3e; }
:root[data-mode="dark"] .lab-date-navigation strong { color:var(--admin-ink); }
:root[data-mode="dark"] .lab-date-navigation .button { border-color:var(--admin-line); background:#253545; color:var(--admin-ink); }
