:root {
  --bg: #f5f7f8;
  --surface: #ffffff;
  --surface-soft: #f8fafb;
  --ink: #18212b;
  --muted: #667085;
  --line: #dfe5ea;
  --line-strong: #c8d1d8;
  --accent: #12645a;
  --accent-soft: #e7f3f0;
  --warning: #a15c11;
  --danger: #b42318;
  --ok: #087443;
  --shadow: 0 12px 32px rgba(22, 34, 45, 0.07);
}

* { box-sizing: border-box; }

html {
  height: 100%;
  overflow: hidden;
}

body {
  margin: 0;
  height: 100%;
  max-height: 100vh;
  display: grid;
  grid-template-columns: 236px minmax(0, 1fr);
  color: var(--ink);
  background: var(--bg);
  font-family: "Microsoft YaHei", "PingFang SC", system-ui, sans-serif;
  overflow: hidden;
}

body.is-locked {
  display: block;
  overflow: auto;
  height: auto;
  max-height: none;
}
body.is-locked .sidebar, body.is-locked main { display: none; }

.login-screen {
  display: none;
  min-height: 100vh;
  place-items: center;
  padding: 24px;
  background: radial-gradient(circle at 20% 20%, #e7f3f0, transparent 28%), var(--bg);
}

body.is-locked .login-screen { display: grid; }

.login-card {
  display: grid;
  gap: 14px;
  width: min(420px, 100%);
  padding: 28px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface);
  box-shadow: var(--shadow);
}

.login-brand {
  display: grid;
  gap: 10px;
  justify-items: center;
  text-align: center;
  margin-bottom: 4px;
}

.login-brand .brand-logo {
  width: min(200px, 100%);
  margin: 0;
}

.login-card h1 { margin: 0; font-size: 18px; line-height: 1.4; font-weight: 700; }
.login-card p { margin: 0; color: var(--muted); line-height: 1.6; font-size: 13px; }

.sidebar {
  position: sticky;
  top: 0;
  height: 100vh;
  padding: 22px 16px;
  color: #fff;
  background: #10231f;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 10px;
  padding: 2px 6px 14px;
  flex-shrink: 0;
  text-align: left;
}
.brand-text { display: grid; gap: 8px; min-width: 0; width: 100%; }
.brand-mark {
  display: grid;
  width: 40px;
  height: 40px;
  place-items: center;
  border-radius: 8px;
  background: #f0c66c;
  color: #10231f;
  font-weight: 800;
}

.brand-logo {
  display: block;
  width: min(220px, 100%);
  height: auto;
  object-fit: contain;
}

.brand-logo--sidebar {
  width: min(160px, 100%);
  height: auto;
  flex-shrink: 0;
  background: #fff;
  border-radius: 6px;
  padding: 6px 10px;
}

.brand small { display: block; margin-top: 2px; color: #b9ccc8; }

.nav-list {
  display: grid;
  gap: 4px;
  margin-top: 12px;
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  align-content: start;
  justify-items: stretch;
}

.nav-item {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 100%;
  padding: 10px 12px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: #d9e6e2;
  text-align: left;
  cursor: pointer;
  font: inherit;
}

.nav-item:hover, .nav-item.active { background: rgba(255, 255, 255, 0.08); color: #fff; }

.session-box {
  display: grid;
  gap: 8px;
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  color: #b9ccc8;
  font-size: 13px;
  flex-shrink: 0;
}

.session-actions {
  display: flex;
  gap: 8px;
  align-items: stretch;
}

.session-actions button,
.session-box button {
  flex: 1;
  color: #d9e6e2;
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 6px;
  padding: 8px 10px;
  cursor: pointer;
  white-space: nowrap;
}

.role-switch {
  display: grid;
  gap: 4px;
  margin-top: 4px;
}

.role-switch.is-collapsed {
  display: none;
}

.role-switch span {
  font-size: 11px;
  color: #8fa9a3;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.role-switch select {
  width: 100%;
  padding: 8px 10px;
  border-radius: 6px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  background: #f4f7f6;
  color: #10231f;
  font-size: 13px;
  cursor: pointer;
}

.role-switch select option {
  background: #fff;
  color: #10231f;
}

.role-switch.hidden {
  display: none;
}

main {
  min-width: 0;
  min-height: 0;
  height: 100vh;
  max-height: 100vh;
  padding: 16px 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  overflow: hidden;
}

.view-error-banner {
  flex: 0 0 auto;
  padding: 12px 16px;
  border: 1px solid #f5c2c0;
  border-radius: 10px;
  background: #fff5f5;
  color: #b42318;
}

.panel {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: var(--shadow);
  overflow: hidden;
}

.panel-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--line);
  flex-shrink: 0;
}

.panel-title-block { display: grid; gap: 6px; min-width: 0; }

.panel-head h2 { margin: 0; font-size: 18px; }

.panel-subtitle {
  margin: 0;
  font-size: 13px;
  line-height: 1.55;
  color: var(--muted);
  font-weight: normal;
}

.panel-body {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  padding: 14px 18px 16px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  overflow: hidden;
}

.panel-body > .toolbar,
.panel-body > .button-row,
.panel-body > .partner-filter-bar,
.panel-body > .guide-box,
.panel-body > .guide-box-collapsible,
.panel-body > .guide-open-btn,
.panel-body > .master-list-chrome,
.panel-body > .hint,
.panel-body > .error,
.panel-body > .partner-filter-meta,
.panel-body > .dash-widget-inquiry,
.panel-body > .master-tabs,
.panel-body > .master-subtabs,
.panel-body > .list-pager,
.panel-body > form,
.panel-body > .admin-section:not(.results-scroll) {
  flex-shrink: 0;
}

.panel-body > .dash-board {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
}

.panel-body > .admin-section.results-scroll,
.panel-body > .results-scroll {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.panel-body > .admin-section.results-scroll > .results-inner,
.panel-body > .results-scroll > .results-inner,
.panel-body > .results-scroll.table-scroll {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
}

.panel-body > .content-scroll,
.panel-body > .table-scroll {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
}

/* 嵌套 table-scroll 不要自成滚动层，否则滚轮被 contain 吃掉，外层列表滚不动 */
.panel-body .content-scroll .table-scroll,
.panel-body .results-inner .table-scroll,
.panel-body .content-scroll .purchase-list-table,
.panel-body .results-inner .purchase-list-table {
  flex: none;
  min-height: auto;
  overflow: visible;
}

.results-scroll > .admin-section-title {
  flex-shrink: 0;
}

.button-row, .toolbar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }

/* ??????/??/??????? input 100% ?????? */
.toolbar .order-search { flex: 1 1 220px; width: auto; min-width: 140px; }
.toolbar .order-sort { width: auto; flex: 0 0 auto; }
.toolbar .search-go-btn, .toolbar .order-create-btn { flex: 0 0 auto; white-space: nowrap; }

button, .btn {
  border: 1px solid var(--line-strong);
  border-radius: 8px;
  background: var(--surface);
  color: var(--ink);
  padding: 8px 12px;
  cursor: pointer;
  font: inherit;
}

button.primary, .btn.primary {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}

button.danger { color: var(--danger); border-color: #fecdca; }

table.data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}

table.data-table th, table.data-table td {
  padding: 10px 8px;
  border-bottom: 1px solid var(--line);
  text-align: left;
  vertical-align: top;
}

table.data-table th { color: var(--muted); font-weight: 600; background: var(--surface-soft); }
table.data-table tr:hover td { background: #fafcfd; }

.view-refresh-hint {
  margin: 0 0 8px;
  padding: 6px 12px;
  font-size: 13px;
  color: var(--muted);
  background: rgba(37, 99, 235, 0.06);
  border-radius: 6px;
}
.view-loading-panel {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 240px;
  color: var(--muted);
  gap: 12px;
}
.view-loading-spinner {
  width: 28px;
  height: 28px;
  border: 3px solid rgba(0, 0, 0, 0.08);
  border-top-color: var(--accent, #2563eb);
  border-radius: 50%;
  animation: view-spin 0.7s linear infinite;
}
@keyframes view-spin { to { transform: rotate(360deg); } }

.empty { color: var(--muted); text-align: center; padding: 24px; }

.tabs { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }

.tab {
  border: 1px solid var(--line);
  background: var(--surface-soft);
  border-radius: 999px;
  padding: 6px 12px;
  cursor: pointer;
}

.tab.active { background: var(--accent-soft); border-color: #b7ddd4; color: var(--accent); }

/* ???????????/??/??? ????? Tab */
.master-tabs {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
  border-bottom: 2px solid var(--line);
  margin: 0 0 4px;
}

.master-tab {
  border: none;
  background: transparent;
  border-radius: 0;
  padding: 10px 16px 12px;
  margin-bottom: -2px;
  cursor: pointer;
  font: inherit;
  font-size: 15px;
  font-weight: 600;
  color: var(--muted);
  border-bottom: 2px solid transparent;
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
}

.master-tab:hover { color: var(--ink); }

.master-tab.active {
  color: var(--accent);
  border-bottom-color: var(--accent);
  background: transparent;
}

.master-tab-count {
  font-size: 12px;
  font-weight: 500;
  color: var(--muted);
}

.master-tab.active .master-tab-count { color: #5a8f86; }

/* ????????? ? ???? Tab */
.master-subtabs {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: 12px 0 16px;
  padding-bottom: 12px;
  border-bottom: 1px dashed var(--line);
}

.kb-dept-tabs {
  flex-wrap: wrap;
  gap: 4px 2px;
}
.kb-sub-tabs {
  margin-top: 4px;
}

.sub-tab {
  border: 1px solid transparent;
  background: transparent;
  border-radius: 6px;
  padding: 5px 11px;
  cursor: pointer;
  font: inherit;
  font-size: 13px;
  color: var(--muted);
}

.sub-tab:hover {
  color: var(--ink);
  background: var(--surface-soft);
}

.sub-tab.active {
  color: var(--accent);
  background: var(--accent-soft);
  border-color: #b7ddd4;
  font-weight: 500;
}

.form-card, .stat-grid { display: grid; gap: 12px; }

.form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
}

label { display: grid; gap: 6px; font-size: 12px; color: var(--muted); }

input, select, textarea {
  width: 100%;
  padding: 8px 10px;
  border: 1px solid var(--line-strong);
  border-radius: 8px;
  font: inherit;
  color: var(--ink);
  background: #fff;
}

/* ????????????? */
.picker { position: relative; }
.picker-input { width: 100%; }
.picker-dropdown {
  position: absolute;
  z-index: 30;
  left: 0;
  right: 0;
  top: calc(100% + 4px);
  max-height: 220px;
  overflow: auto;
  margin: 0;
  padding: 4px;
  border: 1px solid var(--line-strong);
  border-radius: 8px;
  background: #fff;
  box-shadow: var(--shadow);
}
.picker-dropdown.hidden { display: none; }
.picker-option {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  width: 100%;
  padding: 8px 10px;
  border: none;
  border-radius: 6px;
  background: transparent;
  text-align: left;
  cursor: pointer;
  font: inherit;
  color: var(--ink);
}
.picker-option:hover,
.picker-option.active { background: var(--accent-soft); }
.picker-option-label { font-size: 13px; }
.picker-option-hint { font-size: 11px; color: var(--muted); }
.picker-empty { padding: 10px; font-size: 12px; color: var(--muted); text-align: center; }

.bom-lines { display: grid; gap: 12px; margin-top: 8px; }
.bom-line-row {
  display: grid;
  gap: 8px;
  padding: 10px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--surface-2);
}
.bom-line-main {
  display: grid;
  grid-template-columns: 1fr 88px 88px auto auto;
  gap: 8px;
  align-items: end;
}
.bom-line-row .picker { min-width: 0; }
.bom-line-desc textarea {
  width: 100%;
  min-height: 52px;
  resize: vertical;
  font: inherit;
}
.bom-line-files label { display: block; font-size: 12px; margin-bottom: 4px; }
.bom-line-att-list { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.bom-att-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--surface);
  border: 1px solid var(--border);
  font-size: 11px;
}
.bom-att-chip.pending { opacity: 0.85; }
.bom-att-rm {
  border: none;
  background: transparent;
  color: var(--danger, #c0392b);
  cursor: pointer;
  padding: 0 2px;
  font-size: 14px;
  line-height: 1;
}
.bom-line-row .bom-line-price {
  white-space: nowrap;
  align-self: center;
  min-width: 100px;
}

.npi-bom-group {
  margin-bottom: 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
  overflow: hidden;
}

.npi-bom-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 0 0 12px;
}

.npi-bom-stat-card {
  flex: 1 1 140px;
  min-width: 130px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--surface-soft);
  cursor: pointer;
  font: inherit;
  text-align: left;
  transition: border-color 0.15s, box-shadow 0.15s;
}

.npi-bom-stat-card.readonly {
  cursor: default;
  opacity: 0.92;
}

.npi-bom-stat-card.has-pending {
  border-color: #fecaca;
  background: #fff5f5;
}

.npi-bom-stat-card.active,
.npi-bom-stat-card:not(.readonly):hover {
  border-color: #1a6b5c;
  box-shadow: 0 0 0 2px rgba(26, 107, 92, 0.12);
}

.npi-bom-stat-num {
  font-size: 22px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--ink);
}

.npi-bom-stat-lbl {
  font-size: 13px;
  font-weight: 600;
  margin-top: 2px;
}

.kb-dept-stats {
  display: flex;
  gap: 8px;
}

.kb-toolbar {
  display: flex;
  flex-wrap: nowrap;
  gap: 8px;
  align-items: center;
  margin-bottom: 12px;
}

.kb-toolbar .order-search {
  flex: 1 1 240px;
  min-width: 160px;
}

.kb-toolbar select {
  width: auto;
  flex: 0 0 auto;
}

.kb-toolbar button {
  flex: 0 0 auto;
  white-space: nowrap;
}

.kb-doc-table td:nth-child(2) {
  max-width: 220px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.npi-bom-stat-sub {
  font-size: 11px;
  color: var(--muted);
  margin-top: 4px;
  line-height: 1.35;
}

.npi-bom-pending-panel {
  margin: 0 0 16px;
  padding: 12px;
  border: 1px solid #fecaca;
  border-radius: 10px;
  background: #fffbfb;
}

.npi-bom-pending-panel .admin-section-title {
  margin-bottom: 8px;
}

.npi-bom-pending-panel h4 {
  margin: 0;
  font-size: 14px;
  color: #b42318;
}

.badge-red {
  background: #fee2e2;
  color: #b42318;
}

.npi-bom-group summary {
  cursor: pointer;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  list-style: none;
  background: var(--surface-soft);
}

.npi-bom-group summary::-webkit-details-marker { display: none; }

.npi-bom-group[open] summary {
  border-bottom: 1px solid var(--line);
}

.npi-bom-group .npi-bom-table {
  margin: 8px 12px 12px;
}
.npi-bom-table tbody tr.npi-bom-row-common {
  background: #e8f5e9;
}
.npi-bom-table tbody tr.npi-bom-row-new {
  background: #fff3e0;
}
.npi-bom-legend-common {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 4px;
  background: #e8f5e9;
  font-size: 12px;
}
.npi-bom-legend-new {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 4px;
  background: #fff3e0;
  font-size: 12px;
}
.npi-btn-common {
  background: #2e7d32;
  color: #fff;
  border-color: #2e7d32;
}
.npi-btn-new.primary {
  background: #e65100;
  border-color: #e65100;
}
.npi-price-ref { color: #2e7d32; font-size: 12px; font-weight: 600; }
.npi-price-done { color: var(--ok, #1a6b5c); font-size: 12px; }
.npi-price-missing { color: #e65100; font-size: 12px; }

.npi-btn-trial-po {
  background: #1565c0;
  color: #fff;
  border-color: #1565c0;
}
.npi-fee-group {
  margin-bottom: 16px;
  padding: 12px;
  border: 1px solid var(--border);
  border-radius: 8px;
  background: var(--surface);
}
.npi-fee-group summary {
  cursor: pointer;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}
.npi-fee-table tbody tr.npi-fee-row {
  background: #e3f2fd;
}
.po-line-fee {
  background: #fff8e1 !important;
}

.bom-cost-total {
  margin-left: 10px;
  font-size: 13px;
  font-weight: 600;
  color: #1a6b5c;
}

.bom-modal-total {
  font-weight: 500;
  color: #1a6b5c;
}

.form-section-title {
  margin: 16px 0 8px;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
}

.form-section-title:first-of-type { margin-top: 0; }

.form-span-2 { grid-column: 1 / -1; }

.contact-lines { display: grid; gap: 10px; margin-top: 8px; }

.contact-line {
  display: grid;
  grid-template-columns: 1fr 1fr 1.2fr 88px auto;
  gap: 8px;
  align-items: end;
  padding: 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fafcfb;
}

.contact-line-remove {
  align-self: center;
  margin-bottom: 2px;
}

.address-lines { display: grid; gap: 10px; margin-top: 8px; }

.address-line {
  display: grid;
  grid-template-columns: 120px 1fr auto;
  gap: 8px;
  align-items: start;
  padding: 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fafcfb;
}

.address-detail-label { min-width: 0; }

.address-line-remove {
  align-self: start;
  margin-top: 22px;
}

@media (max-width: 720px) {
  .address-line {
    grid-template-columns: 1fr;
  }
  .address-line-remove { margin-top: 0; justify-self: start; }
}

@media (max-width: 720px) {
  .contact-line {
    grid-template-columns: 1fr 1fr;
  }
  .contact-line-remove { grid-column: 1 / -1; justify-self: start; }
}

.stat-grid {
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
}

.stat-card {
  padding: 16px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--surface-soft);
}

.stat-card strong { display: block; font-size: 24px; margin-top: 6px; }

/* 工作台：模块按内容高度，卡片同排对齐最高者（不人为固定高度） */
.dash-board {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 14px;
}
.dash-widget {
  display: flex;
  flex-direction: column;
  flex: 0 1 auto;
  max-width: 100%;
  height: auto;
  min-height: 0;
  padding: 12px 14px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--surface);
  box-shadow: 0 1px 2px rgba(0,0,0,.03);
  box-sizing: border-box;
}
.dash-widget-inquiry,
.dash-widget-customer,
.dash-widget-master,
.dash-widget-supplier,
.dash-widget-todo {
  width: fit-content;
  max-width: min(560px, 100%);
}
.dash-region-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
}
.dash-region-chip {
  border: 1px solid var(--line);
  background: var(--surface-soft);
  border-radius: 999px;
  padding: 4px 10px;
  font: inherit;
  font-size: 12px;
  cursor: pointer;
  color: var(--text);
}
.dash-region-chip:hover { border-color: var(--accent); color: var(--accent); }
.dash-region-chip b { font-weight: 700; margin-left: 2px; }
.partner-badges {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-left: 6px;
  vertical-align: middle;
}
.partner-badges .badge { font-size: 11px; padding: 1px 6px; }
.partner-filter-bar--crm {
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: flex-end;
  gap: 6px 8px;
}
.partner-filter-bar--crm .partner-filter-keyword {
  flex: 0 1 200px;
  min-width: 140px;
  max-width: 240px;
  order: 0;
}
.partner-filter-bar--crm .partner-filter-classify {
  display: flex;
  flex-wrap: nowrap;
  align-items: flex-end;
  gap: 6px;
  flex: 1 1 auto;
  min-width: 0;
  order: 1;
  overflow-x: auto;
}
.partner-filter-bar--crm .partner-filter-clear {
  flex-shrink: 0;
  order: 2;
  margin-left: auto;
}
.crm-classify-field {
  display: grid;
  gap: 1px;
  font-size: 10px;
  color: var(--muted);
  flex: 1 1 0;
  min-width: 72px;
  margin: 0;
}
.crm-classify-field select {
  width: 100%;
  min-width: 0;
  padding: 4px 6px;
  border: 1px solid var(--line);
  border-radius: 5px;
  font: inherit;
  font-size: 12px;
  line-height: 1.2;
  background: #fff;
  height: 28px;
}
.dash-status-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex: 0 0 auto;
  min-height: 24px;
  height: 24px;
  margin-bottom: 10px;
  font-size: 12px;
  color: var(--muted);
  box-sizing: border-box;
}
.dash-status-head b { color: var(--text); font-size: 14px; }
.dash-status-head .btn-sm {
  flex: 0 0 auto;
  height: 24px;
  padding: 0 8px;
  font-size: 11px;
  line-height: 22px;
}
.dash-status-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: stretch;
  align-content: flex-start;
  flex: 0 0 auto;
  height: auto;
}
.dash-status-card,
button.dash-status-card,
div.dash-status-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  flex: 0 0 auto;
  width: 88px;
  min-width: 88px;
  max-width: 88px;
  height: var(--dash-card-h, auto);
  min-height: var(--dash-card-h, 0);
  padding: 8px 6px;
  margin: 0;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--surface);
  cursor: pointer;
  font: inherit;
  line-height: 1.2;
  overflow: hidden;
  appearance: none;
  -webkit-appearance: none;
  transition: border-color .15s, box-shadow .15s, transform .12s;
}
.dash-status-card:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(0,0,0,.06);
}
.dash-status-card strong {
  display: block;
  font-size: 18px;
  line-height: 1.1;
  font-weight: 700;
  color: var(--text);
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dash-status-card span {
  display: block;
  margin-top: 3px;
  font-size: 10px;
  line-height: 1.2;
  color: var(--muted);
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dash-status-card.tone-orange { border-color: #f0c9a0; background: #fff8f1; }
.dash-status-card.tone-orange strong { color: #c05621; }
.dash-status-card.tone-blue { border-color: #b7d3f0; background: #f3f8fd; }
.dash-status-card.tone-blue strong { color: #2b6cb0; }
.dash-status-card.tone-green { border-color: #b7e0c7; background: #f2faf5; }
.dash-status-card.tone-green strong { color: #2f855a; }
.dash-status-card.tone-gray { border-color: var(--line); background: var(--surface-soft); }
.dash-status-card.tone-red { border-color: #f0b4b0; background: #fff5f5; }
.dash-status-card.tone-red strong { color: #c53030; }
.dash-status-card.tone-accent {
  border-color: #9fd0c4;
  background: linear-gradient(160deg, #f2faf7 0%, #e8f5f0 100%);
  cursor: default;
  width: 88px;
  min-width: 88px;
  max-width: 88px;
  height: var(--dash-card-h, auto);
  min-height: var(--dash-card-h, 0);
}
.dash-status-card.tone-accent strong {
  color: #1a6b5c;
  font-size: 18px;
}
.dash-status-card.tone-accent em {
  display: block;
  margin-top: 1px;
  font-style: normal;
  font-size: 9px;
  line-height: 1.1;
  color: var(--muted);
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dash-conv-card { pointer-events: none; }
.dash-status-list { display: flex; flex-direction: column; gap: 8px; max-height: 55vh; overflow: auto; }
.dash-status-row {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px;
  background: var(--surface-soft); cursor: pointer; text-align: left; font: inherit; width: 100%;
}
.dash-status-row:hover { border-color: var(--accent); }

.grid-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 12px;
}
.grid-form label { display: flex; flex-direction: column; gap: 4px; font-size: 13px; }
.grid-form textarea { min-height: 72px; resize: vertical; }
.grid-form button[type="submit"] { grid-column: 1 / -1; justify-self: start; }

.pf-phase-bar { display: flex; gap: 6px; flex-wrap: wrap; margin: 12px 0; }
.pf-phase { flex: 1; min-width: 100px; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-soft); font-size: 11px; }
.pf-phase-active { border-color: var(--accent); background: #eef6ff; }
.pf-phase-done { border-color: #86efac; background: #f0fdf4; }
.pf-phase-label { display: block; font-weight: 600; margin-bottom: 4px; }
.pf-phase-progress { color: var(--muted); }
.pf-phase-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; }
.pf-track-layout { display: grid; grid-template-columns: 240px 1fr; gap: 16px; min-height: 400px; }
@media (max-width: 900px) { .pf-track-layout { grid-template-columns: 1fr; } }
.pf-case-list { display: flex; flex-direction: column; gap: 8px; max-height: 520px; overflow-y: auto; }
.pf-case-btn { text-align: left; padding: 10px 12px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); cursor: pointer; }
.pf-case-btn.active { border-color: var(--accent); background: #eef6ff; }
.pf-case-detail h4 { margin: 0 0 8px; }
.pf-step-list { list-style: none; padding: 0; margin: 8px 0; }
.pf-step { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--line); font-size: 13px; }
.pf-step.done { opacity: 0.75; }
.pf-step-main { display: flex; gap: 8px; flex: 1; }
.pf-phase-detail { margin-bottom: 10px; border: 1px solid var(--line); border-radius: 8px; padding: 8px 12px; }

.hint { font-size: 12px; color: var(--muted); margin: 0; }

.guide-open-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0 0 12px;
  padding: 7px 14px;
  border: 1px solid #c8e6df;
  border-radius: 8px;
  background: linear-gradient(180deg, #f4fbf9 0%, #eef8f5 100%);
  color: #1a6b5c;
  font-size: 13px;
  font-weight: 600;
  line-height: 1.3;
  cursor: pointer;
  white-space: nowrap;
}
.guide-open-btn:hover {
  background: #e6f5f0;
  border-color: #9fd4c8;
}
.guide-open-btn:focus-visible {
  outline: 2px solid #1a6b5c;
  outline-offset: 2px;
}

.guide-modal {
  width: min(560px, 100%);
}
.guide-modal .guide-steps {
  margin: 4px 0 0;
  font-size: 14px;
  line-height: 1.65;
}
.guide-modal .guide-note {
  margin-top: 14px;
}

.guide-box {
  margin: 0 0 16px;
  padding: 14px 16px 12px;
  border: 1px solid #c8e6df;
  border-radius: 10px;
  background: linear-gradient(180deg, #f4fbf9 0%, #f8fcfb 100%);
  font-size: 13px;
  line-height: 1.6;
  color: var(--ink);
}

.guide-box-title {
  font-weight: 600;
  font-size: 14px;
  color: #1a6b5c;
  margin-bottom: 8px;
}

.guide-steps {
  margin: 0;
  padding-left: 1.25rem;
  color: #374151;
}

.guide-steps li { margin: 4px 0; }

.guide-steps li::marker { color: #5a8f86; font-weight: 600; }

.guide-note {
  margin: 10px 0 0;
  padding-top: 10px;
  border-top: 1px dashed #c8e6df;
  font-size: 12px;
  color: var(--muted);
}

.guide-box-collapsible {
  padding: 0;
}

.guide-box-collapsible > summary {
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin: 0;
  padding: 12px 16px;
  cursor: pointer;
  user-select: none;
}

.guide-box-collapsible > summary::-webkit-details-marker { display: none; }

.guide-box-collapsible > summary:hover {
  background: rgba(26, 107, 92, 0.06);
}

.guide-box-chevron {
  flex-shrink: 0;
  width: 8px;
  height: 8px;
  border-right: 2px solid #1a6b5c;
  border-bottom: 2px solid #1a6b5c;
  transform: rotate(-45deg);
  transition: transform 0.2s ease;
}

.guide-box-collapsible[open] .guide-box-chevron {
  transform: rotate(45deg);
  margin-top: -4px;
}

.guide-box-collapsible .guide-box-body {
  padding: 0 16px 14px;
}

.modal-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(16, 35, 31, 0.45);
  display: grid;
  place-items: center;
  padding: 20px;
  z-index: 20;
  overflow: auto;
}

.modal,
.modal-card {
  width: min(720px, 100%);
  max-width: 100%;
  max-height: min(90vh, 900px);
  margin: auto;
  overflow: auto;
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 20px;
  box-shadow: var(--shadow);
  color: var(--ink);
}

.modal-card h3 {
  margin: 0 0 12px;
  font-size: 17px;
}

.modal-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  justify-content: flex-end;
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px solid var(--line);
}

/* 通用弹窗壳：标题/关闭固定，仅中间内容滚动 */
.modal.modal-shell,
.modal.kb-modal-shell {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  padding: 0;
  max-height: min(92vh, 960px);
}
.modal.modal-shell > .modal-shell-head,
.modal.kb-modal-shell > .kb-modal-head {
  flex: 0 0 auto;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  padding: 14px 16px 12px;
  border-bottom: 1px solid var(--line);
  background: var(--surface);
  position: sticky;
  top: 0;
  z-index: 3;
}
.modal.modal-shell > .modal-shell-head h3,
.modal.kb-modal-shell > .kb-modal-head h3 {
  margin: 0;
  font-size: 16px;
  line-height: 1.35;
}
.modal.modal-shell > .modal-shell-head .hint {
  margin: 4px 0 0;
}
.modal.modal-shell > .modal-shell-head .button-row {
  flex-shrink: 0;
  margin: 0;
}
.modal.modal-shell > .modal-shell-body,
.modal.kb-modal-shell > .kb-modal-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  padding: 12px 16px;
  overscroll-behavior: contain;
}
.modal.modal-shell > .modal-shell-foot,
.modal.kb-modal-shell > .kb-modal-foot {
  flex: 0 0 auto;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  justify-content: flex-end;
  padding: 10px 16px 14px;
  border-top: 1px solid var(--line);
  background: var(--surface);
  position: sticky;
  bottom: 0;
  z-index: 3;
  margin-top: 0;
}
.modal.modal-shell > .modal-shell-foot .hint,
.modal.modal-shell > .modal-shell-foot #modalError,
.modal.modal-shell > .modal-shell-foot #empFormError,
.modal.modal-shell > .modal-shell-foot #empResignErr {
  flex: 1 1 100%;
  margin: 4px 0 0;
  text-align: left;
}

/* 资料库弹窗：标题/操作条固定，仅中间内容滚动 */
.modal.kb-modal-shell > .kb-modal-head {
  align-items: center;
  padding: 14px 16px 10px;
}

.modal-card .dash-status-list {
  max-height: min(55vh, 480px);
  overflow: auto;
  overscroll-behavior: contain;
}

.hidden { display: none !important; }

.status-badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
}
.status-on { background: #e6f4ef; color: #1a6b5c; }
.status-off { background: #f2f4f7; color: #667085; }

.field {
  display: grid;
  gap: 6px;
  font-size: 13px;
}
.field-label {
  display: block;
  font-size: 12px;
  color: var(--muted);
  margin-bottom: 2px;
}
.field input, .field select, .field textarea {
  width: 100%;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface);
  color: var(--ink);
  font: inherit;
}


.role-check-group {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 16px;
  padding: 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fafcfb;
}

.role-check {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  color: var(--ink);
}

.role-check input { width: auto; }

.rules-summary-cell {
  max-width: 320px;
  font-size: 12px;
  line-height: 1.45;
  color: var(--muted);
}

.panel-workflows {
  display: flex;
  flex-direction: column;
  min-height: 0;
}

.panel-workflows .panel-head {
  flex-shrink: 0;
}

.panel-workflows .panel-body {
  display: flex;
  flex-direction: column;
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

.panel-workflows .guide-box-collapsible,
.panel-workflows .guide-open-btn {
  flex-shrink: 0;
}

.panel-workflows .workflow-master-detail {
  flex: 1;
  min-height: 0;
}

.workflow-master-detail {
  display: grid;
  grid-template-columns: minmax(260px, 32%) 1fr;
  gap: 20px;
  align-items: stretch;
  margin-top: 12px;
  min-height: 360px;
}

.workflow-master-col {
  min-height: 0;
  overflow-y: auto;
  padding-right: 4px;
}

.workflow-search-wrap {
  margin-bottom: 10px;
}

.workflow-search-input {
  width: 100%;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  font: inherit;
  background: #fff;
}

.workflow-search-input:focus {
  outline: 2px solid var(--accent-soft);
  border-color: var(--accent);
}

.workflow-search-meta {
  margin: 8px 0 0;
}

.partner-filter-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 10px 12px;
  margin: 0 0 12px;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--surface-soft);
}

.partner-filter-keyword {
  flex: 1 1 180px;
  min-width: 160px;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  font: inherit;
  background: #fff;
}

.partner-filter-pickers {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 12px;
  flex: 2 1 320px;
}

.partner-filter-pickers label {
  flex: 1 1 200px;
  min-width: 180px;
  margin: 0;
  font-size: 12px;
}

.partner-filter-select {
  display: block;
  width: 100%;
  margin-top: 4px;
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  font: inherit;
  background: #fff;
}

.bom-block {
  margin-bottom: 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
  overflow: hidden;
}

.bom-block > summary {
  padding: 10px 14px;
  cursor: pointer;
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 12px;
  background: var(--surface-soft);
}

.bom-block > summary::-webkit-details-marker { display: none; }

.bom-block[open] > summary {
  border-bottom: 1px solid var(--line);
}

.bom-block > table,
.bom-block > button {
  margin-left: 14px;
  margin-right: 14px;
}

.bom-block > button:last-of-type {
  margin-bottom: 12px;
}

.partner-filter-clear {
  flex-shrink: 0;
  padding: 8px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  cursor: pointer;
  font: inherit;
}

.list-pager {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px 16px;
  margin: 0 0 10px;
  padding: 8px 0;
}

/* 物料列表顶栏：左搜索 / 中维护说明 / 右提示分页，左右均衡 */
.master-list-chrome {
  display: grid;
  grid-template-columns: minmax(0, 1.35fr) auto minmax(0, 1fr);
  gap: 10px 16px;
  align-items: center;
  margin: 0 0 10px;
  padding: 10px 14px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--surface-soft);
}
.master-list-chrome--boms {
  grid-template-columns: minmax(0, 1.5fr) auto;
}
.master-list-chrome--quotes {
  grid-template-columns: minmax(0, 1.7fr) auto minmax(0, 0.95fr);
  padding: 8px 12px;
  gap: 8px 12px;
}
.master-list-chrome--quotes.master-list-chrome--boms {
  grid-template-columns: minmax(0, 1.7fr) auto;
}
.master-list-chrome-left,
.master-list-chrome-mid,
.master-list-chrome-right {
  min-width: 0;
}
.master-list-chrome-left .partner-filter-bar {
  margin: 0;
  padding: 0;
  border: none;
  border-radius: 0;
  background: transparent;
  align-items: center;
  gap: 6px 8px;
}
.master-list-chrome-left .partner-filter-keyword {
  flex: 1 1 140px;
  min-width: 120px;
  padding: 6px 8px;
}
.master-list-chrome-left .partner-filter-pickers {
  flex: 2 1 220px;
  gap: 6px 8px;
}
.master-list-chrome-left .partner-filter-classify {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 10px;
  flex: 1 1 280px;
}
.master-list-chrome--entity {
  grid-template-columns: minmax(0, 1.6fr) auto;
}
.master-list-chrome-left .partner-filter-pickers label {
  flex: 1 1 110px;
  min-width: 100px;
  font-size: 11px;
}
.master-list-chrome-left .partner-filter-select {
  margin-top: 2px;
  padding: 5px 8px;
  font-size: 12px;
}
.master-list-chrome-left .partner-filter-clear {
  padding: 5px 10px;
  font-size: 12px;
}
.master-list-chrome-left .search-go-btn {
  flex: 0 0 auto;
  padding: 5px 12px;
  font-size: 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  cursor: pointer;
}
.master-list-chrome-mid {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 8px;
  flex-wrap: nowrap;
  white-space: nowrap;
}
.master-list-chrome-mid .guide-open-btn {
  margin: 0;
}
.master-list-chrome-mid .col-picker {
  flex: 0 0 auto;
}
.master-list-chrome-mid .col-picker-btn {
  padding: 0.28rem 0.7rem;
  font-size: 13px;
  line-height: 1.2;
}
.master-list-chrome-right {
  display: flex;
  justify-content: flex-end;
  align-items: center;
}
.master-list-chrome-right .master-list-chrome-meta {
  width: auto;
  align-items: flex-end;
}
.master-list-chrome-tools {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: flex-end;
  gap: 0.5rem 0.75rem;
  width: auto;
}
.col-picker {
  flex: 0 0 auto;
}
.col-picker-btn {
  font-size: 13px;
  padding: 0.28rem 0.7rem;
  border: 1px solid #c5cdd8;
  border-radius: 4px;
  background: #fff;
  color: #334155;
  cursor: pointer;
}
.col-picker-btn:hover {
  border-color: #64748b;
  background: #f8fafc;
}
.col-picker-modal .col-picker-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 10px 14px;
  max-height: min(52vh, 420px);
  overflow: auto;
  padding: 2px 2px 4px;
}
/* 覆盖全局 label { display:grid }，避免勾选框与文字竖排、中文逐字换行 */
.col-picker-modal label.col-picker-item,
.col-picker-modal .col-picker-item {
  display: flex !important;
  flex-direction: row !important;
  align-items: center;
  gap: 8px;
  margin: 0;
  min-width: 0;
  font-size: 13px;
  line-height: 1.4;
  color: #334155;
  cursor: pointer;
  user-select: none;
  writing-mode: horizontal-tb;
  word-break: keep-all;
  overflow-wrap: normal;
  white-space: nowrap;
}
.col-picker-modal .col-picker-item input {
  margin: 0;
  flex: 0 0 auto;
  width: 15px;
  height: 15px;
}
.col-picker-modal .col-picker-item span {
  display: inline;
  flex: 0 1 auto;
  min-width: 0;
  writing-mode: horizontal-tb;
  white-space: nowrap;
  word-break: keep-all;
  overflow-wrap: normal;
}
.col-picker-modal-actions {
  justify-content: space-between;
}
.col-picker-modal-actions-right {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
@media (max-width: 640px) {
  .col-picker-modal .col-picker-grid {
    grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
  }
  .col-picker-modal label.col-picker-item,
  .col-picker-modal .col-picker-item,
  .col-picker-modal .col-picker-item span {
    white-space: normal;
  }
}
.master-list-chrome-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  justify-content: center;
  gap: 6px;
  width: auto;
  max-width: 100%;
  text-align: right;
}
.master-list-chrome-meta .master-list-hint {
  margin: 0;
  max-width: 42ch;
  font-size: 12px;
  line-height: 1.45;
  color: var(--muted);
}
.master-list-chrome-meta .list-pager {
  margin: 0;
  padding: 0;
  width: auto;
  justify-content: flex-end;
  gap: 6px 10px;
  flex-wrap: nowrap;
}
.master-list-chrome-meta .list-pager .hint {
  font-size: 12px;
}
.master-list-chrome-meta .list-pager-actions button {
  padding: 5px 8px;
  font-size: 12px;
}
@media (max-width: 1100px) {
  .master-list-chrome,
  .master-list-chrome--boms,
  .master-list-chrome--quotes {
    grid-template-columns: 1fr;
  }
  .master-list-chrome-mid {
    justify-content: flex-start;
  }
  .master-list-chrome-right,
  .master-list-chrome-meta {
    align-items: flex-start;
    text-align: left;
  }
  .master-list-chrome-meta .list-pager {
    justify-content: flex-start;
  }
  .master-list-chrome-meta .master-list-hint {
    max-width: none;
  }
}

.list-pager-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.list-pager-actions button {
  padding: 6px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  cursor: pointer;
  font: inherit;
}

.list-pager-actions button:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}

.partner-filter-date {
  display: block;
  width: 100%;
  margin-top: 4px;
  padding: 7px 10px;
  border: 1px solid var(--line);
  border-radius: 8px;
  font: inherit;
  background: #fff;
}

/* ???? ? ?????? */
.npi-inquiry-filter-bar {
  flex-wrap: nowrap;
  align-items: center;
  padding: 8px 10px;
  gap: 8px;
}

.npi-inquiry-filter-bar .partner-filter-keyword {
  flex: 1 1 120px;
  min-width: 100px;
  max-width: 200px;
  padding: 6px 8px;
  font-size: 13px;
}

.npi-inquiry-filter-bar .partner-filter-pickers {
  flex: 0 1 auto;
  flex-wrap: nowrap;
  gap: 6px 8px;
  min-width: 0;
}

.npi-inquiry-filter-bar .partner-filter-pickers label {
  flex: 0 0 auto;
  min-width: 0;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  white-space: nowrap;
  font-size: 12px;
}

.npi-inquiry-filter-bar .npi-filter-lbl {
  color: var(--muted);
  flex-shrink: 0;
}

.npi-inquiry-filter-bar .npi-filter-select-sm,
.npi-inquiry-filter-bar .npi-filter-date-sm {
  display: inline-block;
  width: auto;
  min-width: 0;
  margin-top: 0;
  padding: 5px 6px;
  font-size: 12px;
  line-height: 1.2;
}

.npi-inquiry-filter-bar .npi-filter-select-sm {
  max-width: 96px;
}

.npi-inquiry-filter-bar label:nth-child(1) .npi-filter-select-sm {
  max-width: 88px;
}

.npi-inquiry-filter-bar label:nth-child(4) .npi-filter-select-sm {
  max-width: 108px;
}

.npi-inquiry-filter-bar .npi-filter-date-sm {
  width: 118px;
  padding: 4px 4px;
}

.npi-inquiry-filter-bar .npi-filter-clear-sm {
  padding: 5px 10px;
  font-size: 12px;
}

@media (max-width: 900px) {
  .npi-inquiry-filter-bar {
    flex-wrap: wrap;
  }
  .npi-inquiry-filter-bar .partner-filter-pickers {
    flex-wrap: wrap;
  }
}

/* ???? ? ???? */
.npi-funnel-panel {
  margin: 0 0 12px;
  padding: 14px 16px;
  border: 1px solid #dbeafe;
  border-radius: 10px;
  background: linear-gradient(180deg, #f0f7ff 0%, #f8fbff 100%);
}

/* ????? ? ??? / ??? */
.npi-assess-tabs {
  display: flex;
  gap: 8px;
  flex-shrink: 0;
  margin-bottom: 4px;
}
.npi-assess-tab {
  flex: 0 0 auto;
  padding: 8px 14px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface-soft);
  color: var(--muted);
  font: inherit;
  cursor: pointer;
}
.npi-assess-tab b { color: var(--ink); margin-left: 4px; }
.npi-assess-tab.active {
  border-color: var(--accent);
  background: #eef6ff;
  color: var(--ink);
  font-weight: 600;
}
.npi-assess-list {
  display: grid;
  gap: 8px;
  align-content: start;
}
.npi-assess-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  width: 100%;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
  text-align: left;
  font: inherit;
  cursor: pointer;
  color: inherit;
}
.npi-assess-row:hover {
  border-color: var(--accent);
  background: #f7fbfa;
}
.npi-assess-row-main {
  display: grid;
  gap: 2px;
  min-width: 0;
  flex: 1;
}
.npi-assess-row-title {
  font-size: 13px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.npi-assess-row-preview {
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.npi-assess-row-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  flex-shrink: 0;
}
.npi-assess-card {
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
}
.npi-assess-card-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: flex-start;
  flex-wrap: wrap;
}
.npi-assess-mine {
  margin-top: 8px;
  padding: 8px 10px;
  border-radius: 8px;
  font-size: 13px;
}
.npi-assess-mine.pending {
  color: #c05621;
  background: #fff8f1;
  border: 1px solid #f0c9a0;
}
.npi-assess-mine.done {
  background: #f2faf5;
  border: 1px solid #b7e0c7;
}
.npi-assess-mine-body {
  margin-top: 4px;
  white-space: pre-wrap;
  font-size: 13px;
}

.panel-body > .npi-assess-tabs {
  flex-shrink: 0;
}

.npi-funnel-title {
  font-weight: 600;
  font-size: 14px;
  color: #1e40af;
  margin-bottom: 10px;
}

.npi-funnel-grid {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 4px;
}

.npi-funnel-stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 56px;
  padding: 6px 8px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid #dbeafe;
}

.npi-funnel-stat.highlight {
  border-color: #86efac;
  background: #f0fdf4;
}

.npi-funnel-stat-btn {
  cursor: pointer;
  font: inherit;
  transition: border-color 0.15s, box-shadow 0.15s;
}

.npi-funnel-stat-btn:hover {
  border-color: #1e40af;
  box-shadow: 0 0 0 2px rgba(30, 64, 175, 0.12);
}

.npi-funnel-stat-btn.active {
  border-color: #1e40af;
  background: #eff6ff;
  box-shadow: 0 0 0 2px rgba(30, 64, 175, 0.18);
}

.npi-funnel-filter-hint {
  margin: 8px 0 0;
  color: #1e40af;
}

.npi-funnel-num {
  font-size: 18px;
  font-weight: 700;
  color: var(--ink);
  line-height: 1.2;
}

.npi-funnel-lbl {
  font-size: 11px;
  color: var(--muted);
  margin-top: 2px;
}

.npi-funnel-arrow {
  font-size: 11px;
  color: #64748b;
  padding: 0 2px;
}

.npi-funnel-foot {
  margin: 10px 0 0;
}

.npi-inquiry-main {
  flex: 1;
  min-width: 0;
}

.npi-inquiry-head {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 0;
  font-size: 13px;
  line-height: 1.4;
  min-width: 0;
  overflow: hidden;
}

.npi-inquiry-no {
  flex-shrink: 0;
}

.npi-inquiry-sep {
  flex-shrink: 0;
  color: var(--muted);
  margin: 0 5px;
}

.npi-inquiry-customer {
  flex-shrink: 0;
  max-width: 140px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.npi-inquiry-product {
  flex-shrink: 0;
  color: #1a6b5c;
  font-weight: 600;
  max-width: 120px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.npi-inquiry-subject {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--muted);
  font-size: 12px;
}

.npi-inquiry-date {
  flex-shrink: 0;
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}

.npi-inquiry-head .badge {
  flex-shrink: 0;
  margin-left: 6px;
  font-size: 10px;
}

.npi-inquiry-row .npi-pipeline-wrap {
  margin-top: 8px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface-soft);
  font-size: 12px;
}

.inquiry-replies {
  margin-top: 10px;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface-soft);
  display: flex;
  flex-direction: column;
  gap: 10px;
  max-height: 280px;
  overflow-y: auto;
}

.inquiry-replies-empty {
  padding: 8px 10px;
}

.inquiry-reply {
  padding: 8px 10px;
  border-radius: 8px;
  border-left: 3px solid var(--line);
  background: var(--surface);
}

.inquiry-reply-sales {
  border-left-color: #2563eb;
  background: rgba(37, 99, 235, 0.06);
}

.inquiry-reply-design {
  border-left-color: #0891b2;
  background: rgba(8, 145, 178, 0.06);
}

.inquiry-reply-tech {
  border-left-color: #ca8a04;
  background: rgba(202, 138, 4, 0.08);
}

.inquiry-reply-quality {
  border-left-color: #16a34a;
  background: rgba(22, 163, 74, 0.08);
}

.inquiry-reply-system {
  border-left-color: var(--muted);
  background: rgba(100, 116, 139, 0.08);
}

.inquiry-reply-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 4px;
  font-size: 12px;
}

.inquiry-reply-head time {
  color: var(--muted);
  font-size: 11px;
}

.inquiry-reply-body {
  font-size: 13px;
  line-height: 1.55;
  white-space: pre-wrap;
  word-break: break-word;
}

.inquiry-reply-quote {
  margin: 6px 0 8px;
  padding: 6px 10px;
  border-left: 3px solid #94a3b8;
  background: rgba(148, 163, 184, 0.12);
  border-radius: 0 6px 6px 0;
  font-size: 12px;
  color: var(--muted);
  white-space: pre-wrap;
}
.inquiry-reply-quote-head {
  font-weight: 600;
  margin-bottom: 2px;
  color: var(--ink);
}
.inquiry-reply-actions {
  margin-top: 6px;
}
.inquiry-reply-pending-sales {
  box-shadow: inset 3px 0 0 #ea580c;
}
.npi-comm-pending-hint {
  margin: 8px 0 0;
  padding: 8px 10px;
  border-radius: 8px;
  background: #fff7ed;
  border: 1px solid #fdba74;
  color: #9a3412;
  font-size: 13px;
}
.npi-row-comm-pending {
  border-color: #fdba74 !important;
  background: #fffaf5;
}

.row-actions .btn-sm.active {
  outline: 2px solid var(--primary);
}

.npi-pipeline-wrap > summary {
  padding: 6px 10px;
  cursor: pointer;
  list-style: none;
  user-select: none;
}

.npi-pipeline-wrap > summary::-webkit-details-marker { display: none; }

.npi-pipeline-steps {
  margin: 0;
  padding: 4px 10px 10px 28px;
  list-style: none;
}

.npi-pipeline-step {
  display: grid;
  grid-template-columns: 12px 1fr auto;
  gap: 8px;
  align-items: start;
  padding: 4px 0;
  color: var(--muted);
}

.npi-pipeline-step.npi-step-done { color: var(--ink); }

.npi-pipeline-step.npi-step-fail { color: #b42318; }

.npi-pipeline-dot {
  width: 8px;
  height: 8px;
  margin-top: 4px;
  border-radius: 50%;
  background: #cbd5e1;
}

.npi-step-done .npi-pipeline-dot { background: #22c55e; }

.npi-step-fail .npi-pipeline-dot { background: #ef4444; }

.npi-pipeline-label { line-height: 1.4; }

.npi-pipeline-step small { white-space: nowrap; color: var(--muted); font-size: 11px; }

.partner-filter-meta {
  margin: 0 0 8px;
}

.workflow-detail-col {
  min-height: 0;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.workflow-detail-scroll {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  padding-right: 8px;
  scrollbar-gutter: stable;
}

.workflow-master-table tbody tr.workflow-master-row {
  cursor: pointer;
}

.workflow-master-table tbody tr.workflow-master-row:hover,
.workflow-master-table tbody tr.workflow-master-row.selected {
  background: #eff6ff;
}

.workflow-detail-panel {
  display: grid;
  gap: 16px;
}

.workflow-detail-head {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 12px;
  align-items: flex-start;
}

.workflow-detail-section h4 {
  margin: 0 0 6px;
}

.workflow-scenario-list {
  display: grid;
  gap: 10px;
  margin-top: 8px;
}

.workflow-scenario-card {
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  padding: 12px 14px;
  background: #fff;
}

.workflow-scenario-card.configured {
  border-left: 4px solid #16a34a;
  background: #f0fdf4;
}

.workflow-scenario-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 4px;
}

.workflow-scenario-desc {
  margin: 0 0 6px;
}

.workflow-scenario-preview {
  margin: 0 0 8px;
  font-size: 0.92rem;
  color: #374151;
}

.badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 0.78rem;
  background: #f3f4f6;
  color: #4b5563;
}

.badge.badge-ok,
.badge-green {
  background: #dcfce7;
  color: #166534;
}
.badge-blue { background: #dbeafe; color: #1d4ed8; }
.badge-orange { background: #ffedd5; color: #c2410c; }
.badge-gray { background: #f3f4f6; color: #4b5563; }
.badge-red { background: #fee2e2; color: #b91c1c; }

@media (max-width: 900px) {
  .workflow-master-detail {
    grid-template-columns: 1fr;
    height: auto;
    min-height: 0;
  }
  .workflow-master-col {
    max-height: 240px;
  }
  .workflow-detail-scroll {
    max-height: calc(100vh - 280px);
  }
}

.lifecycle-panel {
  margin-bottom: 20px;
  padding: 16px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: linear-gradient(180deg, #f8fcfb 0%, #fff 100%);
}

.lifecycle-panel-head h4 {
  margin: 0 0 6px;
  font-size: 15px;
}

.lifecycle-diagram-wrap {
  margin: 12px 0;
  padding: 16px;
  border-radius: 8px;
  background: #fff;
  border: 1px solid var(--line);
  overflow: auto;
}

/* ???????????????? */
.state-chart {
  min-width: min(100%, 680px);
  min-height: 120px;
  padding: 8px 4px;
}

.state-chart-track {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 0;
  justify-content: center;
}

.state-node {
  padding: 8px 14px;
  border-radius: 999px;
  border: 2px solid #1a6b5c;
  background: #e6f4ef;
  color: #134e44;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
}

.state-node-start {
  border-color: #94a3b8;
  background: #f1f5f9;
  color: #475569;
  border-radius: 8px;
}

.state-node-pending { border-color: #d97706; background: #fff7ed; color: #9a3412; }
.state-node-approved { border-color: #2563eb; background: #eff6ff; color: #1e40af; }
.state-node-scheduled { border-color: #7c3aed; background: #f5f3ff; color: #5b21b6; }
.state-node-rejected { border-color: #dc2626; background: #fef2f2; color: #991b1b; }
.state-node-effective { border-color: #1a6b5c; background: #1a6b5c; color: #fff; }

.state-chart-binding .state-chart-track,
.state-chart-batch .state-chart-track {
  flex-wrap: wrap;
}

.state-branch-batch {
  min-width: 140px;
}

.state-edge {
  display: flex;
  flex-direction: column;
  align-items: center;
  min-width: 48px;
  padding: 0 4px;
}

.state-edge-line {
  display: block;
  width: 36px;
  height: 2px;
  background: #94a3b8;
  position: relative;
}

.state-edge-line::after {
  content: "";
  position: absolute;
  right: -1px;
  top: -4px;
  border: 5px solid transparent;
  border-left-color: #94a3b8;
}

.state-edge-down {
  min-height: 28px;
  justify-content: flex-end;
}

.state-edge-down .state-edge-line {
  width: 2px;
  height: 24px;
}

.state-edge-down .state-edge-line::after {
  right: -4px;
  top: auto;
  bottom: -1px;
  border: 5px solid transparent;
  border-top-color: #94a3b8;
  border-left-color: transparent;
}

.state-edge-label {
  font-size: 11px;
  color: var(--muted);
  margin-top: 2px;
  text-align: center;
  max-width: 88px;
  line-height: 1.3;
}

.state-chart-branches {
  display: flex;
  flex-wrap: wrap;
  gap: 24px 48px;
  justify-content: center;
  margin-top: 12px;
  padding-top: 16px;
  border-top: 1px dashed var(--line);
  position: relative;
}

.state-chart-branches::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  width: 2px;
  height: 16px;
  background: #94a3b8;
  transform: translateX(-50%);
}

.state-branch {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  min-width: 120px;
}

.state-branch-approve .state-node-approved { margin-top: 0; }

@media (max-width: 640px) {
  .state-chart-track { flex-direction: column; align-items: stretch; }
  .state-edge { flex-direction: row; min-width: 0; padding: 4px 0; }
  .state-edge-line { width: 100%; max-width: 120px; }
  .state-chart-branches { flex-direction: column; align-items: center; }
}

.lifecycle-states-table {
  margin-top: 8px;
  font-size: 13px;
}

.lifecycle-modal-hint {
  margin: 0 0 12px;
  line-height: 1.55;
}

.workflow-rules-toolbar {
  margin-bottom: 10px;
}

.workflow-rules-table td.button-row button {
  font-size: 12px;
  padding: 4px 10px;
}

.workflow-scenario-card .button-row button {
  font-size: 12px;
  padding: 4px 10px;
}

.workflow-rules { display: grid; gap: 10px; margin-top: 8px; }

.workflow-rule-line {
  display: grid;
  grid-template-columns: 1fr 1.2fr 88px 1fr auto;
  gap: 8px;
  align-items: start;
  padding: 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fafcfb;
}

.workflow-rule-line .rule-approver-wrap {
  grid-column: 1 / -1;
}

.workflow-rule-remove {
  align-self: start;
  margin-top: 22px;
}

@media (max-width: 820px) {
  .workflow-rule-line {
    grid-template-columns: 1fr 1fr;
  }
  .workflow-rule-remove { grid-column: 1 / -1; margin-top: 0; }
}

.visually-hidden-file {
  position: fixed;
  left: -10000px;
  top: 0;
  width: 1px;
  height: 1px;
  opacity: 0;
}

@media (max-width: 900px) {
  body {
    grid-template-columns: 1fr;
    grid-template-rows: auto minmax(0, 1fr);
  }
  .sidebar {
    position: static;
    height: auto;
    max-height: 36vh;
  }
  main {
    height: auto;
    max-height: none;
    min-height: 0;
  }
}

/* ?? ?????????????? / ???+????? */
.system-notice,
.system-notice.action-notice {
  position: fixed;
  z-index: 10000;
  max-width: min(360px, calc(100vw - 24px));
  padding: 6px 10px;
  border-radius: 6px;
  font-size: 13px;
  line-height: 1.35;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
  display: inline-flex;
  align-items: center;
  gap: 8px;
  pointer-events: auto;
}
/* display:inline-flex ????? [hidden]??????? */
.system-notice[hidden],
.system-notice.action-notice[hidden],
.system-notice.is-hidden {
  display: none !important;
}
.system-notice.ok,
.system-notice.action-notice.ok {
  color: #fff;
  background: #1a7f37;
  border: 1px solid #166534;
}
.system-notice.error,
.system-notice.action-notice.error {
  color: #fff;
  background: #b42318;
  border: 1px solid #912018;
}
.action-notice-text {
  flex: 1 1 auto;
  min-width: 0;
  word-break: break-word;
}
.action-notice-close {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.45);
  border-radius: 4px;
  background: transparent;
  color: #fff;
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
}
.action-notice-close:hover {
  background: rgba(255, 255, 255, 0.18);
}

/* ?? ??????? V1??? */
.admin-section {
  display: grid;
  gap: 10px;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
}
.admin-section-title h3 { margin: 0; font-size: 15px; }
.results-scroll {
  overflow: hidden;
  min-height: 0;
  display: flex;
  flex-direction: column;
}

.results-inner {
  flex: 1 1 auto;
  min-height: 0;
  max-height: none;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
}
.list-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-bottom: 1px solid var(--line);
}
.list-row:last-child { border-bottom: 0; }
.list-row-main { flex: 1; min-width: 0; font-size: 13px; }
.list-row-actions { white-space: nowrap; }

.partner-list {
  display: grid;
  gap: 0;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--surface);
  overflow: hidden;
}
.partner-list-row {
  margin: 0;
  padding: 0;
  gap: 0;
  border-bottom: 1px solid var(--line);
}
.partner-list-row:last-child { border-bottom: 0; }
.partner-list-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
  padding: 12px 14px;
  border: 0;
  background: transparent;
  text-align: left;
  cursor: pointer;
  font: inherit;
  color: inherit;
}
.partner-list-main:hover { background: var(--surface-soft, #f5f8f7); }
.partner-list-title {
  font-size: 14px;
  line-height: 1.4;
}
.data-table--clickable tbody tr.data-row-clickable {
  cursor: pointer;
}
.data-table--clickable tbody tr.data-row-clickable:hover {
  background: var(--accent-soft, #f0f4ff);
}
.data-table--clickable tbody tr.data-row-clickable .list-actions-cell {
  cursor: default;
}
.partner-list-preview {
  font-size: 12px;
  line-height: 1.45;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.partner-list-del {
  flex-shrink: 0;
  margin: 10px 12px 10px 0;
  align-self: center;
}
.partner-detail-list {
  margin: 0 0 12px;
  padding-left: 18px;
  line-height: 1.7;
  font-size: 13px;
}
.partner-detail-modal .form-section-title {
  margin: 12px 0 6px;
  font-size: 13px;
  font-weight: 600;
}
.report-row { cursor: pointer; }
.report-row:hover { background: var(--accent-soft); }
.report-meta, .memo-meta { font-size: 11px; color: var(--muted); }
.report-content { margin-top: 8px; line-height: 1.6; white-space: pre-wrap; max-height: 400px; overflow: auto; }
.badge-ai { background: var(--accent-soft); color: var(--accent); }
.reports-tabs .reports-tab-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); }
.reports-tab-btn, .report-gen-btn, .search-go-btn, .memo-kind-btn, .memo-add-btn {
  padding: 8px 14px;
  border: 1px solid var(--line);
  border-radius: 6px;
  background: var(--surface);
  cursor: pointer;
  font-size: 13px;
}
.search-go-btn { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.reports-hint { font-size: 12px; color: var(--muted); margin: 8px 0; line-height: 1.6; }
.reports-toolbar { margin-top: 6px; flex-wrap: wrap; gap: 8px; }
.toolbar-spacer { flex: 1; }
.reports-person-group { margin-bottom: 14px; }
.reports-group-title {
  font-size: 13px;
  font-weight: 600;
  padding: 6px 0;
  border-bottom: 2px solid var(--line);
  margin-bottom: 6px;
}
.memo-done { opacity: 0.55; }
.memo-done b { text-decoration: line-through; }
.memo-row-todo { border-left: 4px solid #16a34a !important; background: rgba(22, 163, 74, 0.07) !important; }
.memo-row-memo { border-left: 4px solid #d97706 !important; background: rgba(217, 119, 6, 0.08) !important; }
.memo-type-badge { display: inline-block; font-size: 11px; padding: 2px 8px; border-radius: 4px; font-weight: 600; margin-right: 4px; }
.memo-badge-todo { background: #dcfce7; color: #15803d; }
.memo-badge-memo { background: #fef3c7; color: #b45309; }
.memo-content-preview { font-size: 12px; line-height: 1.5; }
.memo-src-ai, .memo-src-manual { font-size: 11px; color: var(--muted); margin-right: 4px; }
.memo-kind-btn.active { font-weight: 600; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12); }
.memo-add-btn.todo.on { background: #16a34a; color: #fff; border-color: #16a34a; font-weight: 600; }
.memo-add-btn.memo.on { background: #d97706; color: #fff; border-color: #d97706; font-weight: 600; }
.memo-form-box {
  margin-top: 10px;
  padding: 16px;
  border-radius: 10px;
  border: 2px solid var(--line);
  background: var(--surface);
  display: grid;
  gap: 8px;
}
.memo-form-todo { border-color: #16a34a !important; background: rgba(22, 163, 74, 0.06) !important; }
.memo-form-memo { border-color: #d97706 !important; background: rgba(217, 119, 6, 0.07) !important; }
.memo-form-hint { margin: 0; font-size: 12px; color: var(--muted); }
.memo-form-box input, .memo-form-box textarea {
  padding: 8px;
  border: 1px solid var(--line);
  border-radius: 4px;
}
.memo-form-box .primary.todo { background: #16a34a; border-color: #16a34a; }
.memo-form-box .primary.memo { background: #d97706; border-color: #d97706; }
.btn-sm {
  padding: 4px 10px;
  border: 1px solid var(--line);
  border-radius: 4px;
  font-size: 12px;
  cursor: pointer;
  background: var(--surface);
}
.memo-del-btn, .report-del-btn { background: var(--danger) !important; color: #fff !important; border-color: var(--danger) !important; }
.save-status { font-size: 12px; color: var(--muted); margin-left: 8px; }
#reportsPersonFilter, #reportsTypeFilter {
  padding: 6px 8px;
  border: 1px solid var(--line);
  border-radius: 4px;
  min-width: 140px;
}

/* ?? ???????? V1??? */
.panel-email { border: 0; box-shadow: none; background: transparent; }
.panel-email .panel-body-email { padding: 0; }
.email-workspace {
  display: flex;
  gap: 0;
  height: calc(100vh - 48px);
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--line);
}
.email-sidebar {
  width: 340px;
  min-width: 340px;
  border-right: 1px solid var(--line);
  display: flex;
  flex-direction: column;
  background: #f8f9fb;
}
.email-toolbar {
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
  display: flex;
  gap: 4px;
}
.email-toolbar button {
  border: none;
  border-radius: 6px;
  padding: 5px 10px;
  cursor: pointer;
  font-size: 11px;
  background: #e8e8e8;
}
.email-toolbar button:first-child { background: var(--accent); color: #fff; }
.email-compose-btn { background: #07c160 !important; color: #fff !important; }
.email-search-wrap { padding: 4px 8px; border-bottom: 1px solid var(--line); }
.email-search-wrap input {
  width: 100%;
  padding: 6px 8px;
  border: 1px solid #ddd;
  border-radius: 6px;
  font-size: 12px;
  box-sizing: border-box;
}
.email-filter-bar {
  display: flex;
  border-bottom: 1px solid var(--line);
  background: #fff;
  font-size: 11px;
}
.email-filter-btn {
  flex: 1;
  padding: 6px;
  text-align: center;
  cursor: pointer;
  color: #666;
  border-bottom: 2px solid transparent;
}
.email-filter-btn.active { color: var(--accent); font-weight: 600; border-bottom-color: var(--accent); }
.email-folder-tabs {
  flex: 0 0 auto;
  max-height: 40%;
  overflow-y: auto;
  border-bottom: 1px solid var(--line);
  background: #fff;
  padding: 4px 0;
}
.email-folder-item {
  padding: 6px 12px;
  cursor: pointer;
  font-size: 11px;
  color: #666;
  border-left: 2px solid transparent;
}
.email-folder-item.active { background: var(--accent-soft); color: var(--accent); border-left-color: var(--accent); }
.email-list { flex: 1; overflow-y: auto; padding: 4px 0; }
.email-list-empty { padding: 30px; text-align: center; color: #999; font-size: 13px; }
.email-list-empty span { font-size: 11px; display: block; margin-top: 6px; }
.email-list-item {
  padding: 10px 14px;
  cursor: pointer;
  border-bottom: 1px solid #f0f0f0;
}
.email-list-item.active { background: var(--accent-soft); border-left: 3px solid var(--accent); }
.email-list-item-top { display: flex; justify-content: space-between; font-size: 12px; }
.email-unread-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
  margin-right: 6px;
}
.email-star, .email-todo { cursor: pointer; margin-right: 4px; }
.email-todo { color: #ddd; }
.email-todo.marked { color: #f0ad4e; }
.email-date { color: #999; font-size: 10px; }
.email-list-subject { font-size: 13px; margin: 2px 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.email-list-subject.unread { font-weight: 600; }
.email-list-preview { font-size: 11px; color: #888; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.email-main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.email-empty {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #999;
  font-size: 14px;
}
.email-detail {
  flex: 1;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  min-height: 0;
}
.email-header { padding: 12px 16px; border-bottom: 1px solid #eee; }
.email-detail-subject { font-weight: 600; font-size: 15px; margin-bottom: 6px; }
.email-star-inline { cursor: pointer; margin-right: 6px; }
.email-detail-meta { font-size: 12px; color: #666; }
.email-actions {
  padding: 6px 12px;
  border-bottom: 1px solid #eee;
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
}
.email-actions button {
  border: none;
  border-radius: 4px;
  padding: 4px 12px;
  cursor: pointer;
  font-size: 11px;
  background: #e8e8e8;
}
.email-actions button:first-child { background: var(--accent); color: #fff; }
.email-ai-btn { background: #fef9e7 !important; border: 1px solid #f0c674 !important; }
.email-actions .marked { background: #fff3cd !important; }
.email-del-btn { background: #fa5151 !important; color: #fff !important; margin-left: auto; }
.email-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  padding: 12px 16px;
  font-size: 13px;
  line-height: 1.7;
  white-space: pre-wrap;
}
.email-ai-draft {
  flex-shrink: 0;
  border-top: 2px solid #f0c674;
  background: #fef9e7;
  padding: 10px 16px;
  max-height: 40vh;
  overflow-y: auto;
}
.email-ai-draft-title { font-size: 11px; color: #b7950b; font-weight: 600; margin-bottom: 4px; }
.email-draft-text { font-size: 13px; line-height: 1.6; white-space: pre-wrap; max-height: 200px; overflow-y: auto; }
.email-ai-draft-actions { display: flex; gap: 6px; margin-top: 8px; flex-wrap: wrap; }
.email-ai-draft-actions button {
  border: none;
  border-radius: 6px;
  padding: 6px 14px;
  cursor: pointer;
  font-size: 12px;
  background: #e8e8e8;
}
.email-ai-draft-actions button:first-child { background: var(--accent); color: #fff; }
.email-compose {
  flex: 1;
  display: flex;
  flex-direction: column;
  padding: 16px 20px;
  gap: 6px;
  overflow-y: auto;
}
.email-compose label { font-size: 12px; color: #666; }
.email-compose input, .email-compose select, .email-compose textarea {
  width: 100%;
  padding: 7px 10px;
  border: 1px solid #ddd;
  border-radius: 6px;
  font-size: 13px;
}
.email-compose textarea { flex: 1; min-height: 120px; resize: none; }
.email-compose-title { font-weight: 600; font-size: 15px; }
.email-compose-ai { display: flex; gap: 4px; }
.email-compose-ai button { background: var(--accent); color: #fff; border: none; border-radius: 6px; padding: 6px 12px; cursor: pointer; }
.email-compose-actions { display: flex; gap: 8px; margin-top: 10px; }
.email-send-btn { background: #07c160 !important; color: #fff !important; border: none; border-radius: 6px; padding: 8px 20px; cursor: pointer; }
.email-settings-overlay {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background: rgba(0, 0, 0, 0.4);
  display: flex;
  align-items: center;
  justify-content: center;
}
.email-settings-modal {
  background: #fff;
  border-radius: 12px;
  width: 560px;
  max-width: calc(100vw - 32px);
  max-height: 85vh;
  overflow-y: auto;
  padding: 24px;
  box-shadow: 0 8px 30px rgba(0, 0, 0, 0.18);
}
.email-settings-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
.email-settings-head h3 { margin: 0; font-size: 16px; }
.email-settings-close { border: none; background: none; font-size: 20px; cursor: pointer; color: #999; }
.email-settings-label { font-size: 12px; color: #666; margin-bottom: 8px; font-weight: 600; }
.email-settings-empty { text-align: center; padding: 24px; color: #bbb; font-size: 13px; }
.email-acc-card { padding: 12px 14px; border: 1px solid #eee; border-radius: 8px; margin-bottom: 10px; }
.email-acc-title { font-weight: 600; font-size: 13px; margin-bottom: 4px; }
.email-acc-meta { font-size: 12px; color: #666; line-height: 1.5; }
.email-acc-on { color: #07c160; }
.email-acc-off { color: #999; }
.email-acc-error { font-size: 11px; color: #fa5151; margin-top: 4px; }
.email-acc-hint { font-size: 11px; color: #e67e22; margin-top: 4px; background: #fff8f0; padding: 6px 8px; border-radius: 4px; }
.email-acc-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed #eee; }
.email-acc-actions button { padding: 5px 12px; border-radius: 4px; cursor: pointer; font-size: 11px; background: #fff; border: 1px solid #ddd; }
.email-scope-save-btn { margin-left: auto !important; }
.email-prov-grid { display: flex; flex-wrap: wrap; gap: 6px; }
.email-prov-btn { padding: 7px 10px; border: 1px solid #ddd; border-radius: 6px; cursor: pointer; font-size: 11px; background: #fff; text-align: center; }
.email-prov-btn span { font-size: 9px; color: #999; }
.email-new-form { margin-top: 14px; padding: 16px; background: #f8f9fb; border-radius: 8px; border: 1px solid #e8e8e8; display: grid; gap: 8px; }
.email-form-title { font-weight: 600; font-size: 14px; }
.email-form-note { font-size: 11px; color: #b7950b; background: #fef9e7; padding: 8px 10px; border-radius: 4px; }
.email-form-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.email-form-actions .email-save-btn { flex: 1; background: var(--accent); color: #fff; border: none; border-radius: 6px; padding: 9px; cursor: pointer; }
.email-scope-block { margin-top: 10px; padding-top: 10px; border-top: 1px dashed #e8e8e8; }
.email-scope-hint { font-size: 11px; color: #999; margin-bottom: 6px; }
.email-scope-radios { display: flex; flex-wrap: wrap; gap: 6px; }
.email-scope-radio {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12px;
  padding: 6px 8px;
  border: 1px solid #eee;
  border-radius: 6px;
  background: #fafafa;
  cursor: pointer;
}
.email-scope-radio.active { border-color: var(--accent); background: var(--accent-soft); }
.email-scope-line { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #666; cursor: pointer; }

@media (max-width: 900px) {
  .email-workspace { flex-direction: column; height: auto; min-height: calc(100vh - 80px); }
  .email-sidebar { width: 100%; min-width: 0; max-height: 45vh; }
}

/* ???? / ?? / ?? */
.quote-summary {
  margin: 12px 0;
  padding: 12px 14px;
  background: var(--accent-soft, #f0f4ff);
  border-radius: 8px;
  display: grid;
  gap: 6px;
  font-size: 13px;
}
.sf-bom-table { width: 100%; font-size: 12px; border-collapse: collapse; }
.sf-bom-table th, .sf-bom-table td { padding: 6px 8px; border-bottom: 1px solid var(--line, #eee); text-align: left; }
.sf-other-fee-row { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; }
.sf-other-fee-row button { border: none; background: transparent; color: var(--danger, #e74c3c); cursor: pointer; font-size: 16px; }
.order-detail-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px 16px; margin: 12px 0; font-size: 13px; }
.order-detail-grid .detail-field b { display: block; font-size: 11px; color: var(--muted, #888); margin-bottom: 2px; }
.item-table-header, .item-row { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 8px; padding: 6px 0; font-size: 12px; border-bottom: 1px solid var(--line, #eee); }
.item-table-header { font-weight: 600; color: var(--muted, #888); }
.btn-sm { padding: 4px 10px; border-radius: 4px; border: 1px solid var(--line, #ddd); font-size: 11px; cursor: pointer; background: #fff; }

/* V1 ?????? */
.so-list-row {
  display: grid;
  grid-template-columns: minmax(110px, 1.1fr) minmax(90px, 1fr) minmax(180px, 2fr) minmax(72px, 0.7fr) minmax(88px, 0.8fr) minmax(118px, 0.9fr);
  gap: 8px;
  align-items: start;
  padding: 8px 10px;
  border-bottom: 1px solid var(--line, #eee);
  font-size: 12px;
  cursor: pointer;
  transition: background 0.1s;
}
.so-list-row:hover { background: var(--accent-soft, #f0f4ff); }
.so-list-head {
  display: grid;
  grid-template-columns: minmax(110px, 1.1fr) minmax(90px, 1fr) minmax(180px, 2fr) minmax(72px, 0.7fr) minmax(88px, 0.8fr) minmax(118px, 0.9fr);
  gap: 8px;
  padding: 8px 10px;
  background: var(--surface-soft, #f8fafc);
  font-size: 11px;
  font-weight: 700;
  color: var(--muted, #888);
  position: sticky;
  top: 0;
  z-index: 1;
}
.so-col { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.so-col small { font-size: 10px; color: var(--muted); word-break: break-all; }
.so-col-meta { align-items: flex-end; text-align: right; }
.so-col-attach { align-items: center; justify-content: center; }
.order-list-wrap { border-bottom: 1px solid var(--line, #eee); }
.order-list-wrap.expanded { background: #f8fafc; }
.order-expand-panel { padding: 0 10px 12px; background: #f8fafc; }
.order-items-brief { font-size: 11px; color: var(--muted); }
.order-chevron { font-size: 10px; color: var(--muted); }
.so-inline-items { display: grid; gap: 3px; }
.so-inline-item {
  display: grid;
  grid-template-columns: 1fr 0.8fr 72px auto auto auto;
  gap: 6px;
  font-size: 11px;
  align-items: center;
}
.so-inline-part { font-weight: 600; }
.so-inline-model { color: var(--muted); font-size: 10px; }
.order-line-card {
  border: 1px solid var(--line, #eee);
  border-radius: 8px;
  padding: 10px 12px;
  margin-bottom: 8px;
  background: #fff;
}
.order-line-head { margin-bottom: 6px; }
.order-line-meta { font-size: 11px; color: var(--muted); margin-bottom: 8px; }
.line-stage-track {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px;
  font-size: 10px;
  margin: 8px 0;
}
.line-stage-track .stage-dot { font-size: 11px; }
.line-stage-track .stage-line { width: 12px; height: 1px; background: var(--line); }
.line-row-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.order-act-btn {
  padding: 4px 10px;
  border: 1px solid var(--line);
  border-radius: 4px;
  background: #fff;
  font-size: 11px;
  cursor: pointer;
}
.order-act-btn.primary { background: var(--accent); color: #fff; border-color: var(--accent); }
.io-expand-panel { margin-top: 10px; padding: 10px; background: #fff; border: 1px solid var(--line); border-radius: 8px; }
.io-qty-table { width: 100%; font-size: 12px; border-collapse: collapse; }
.io-qty-table th, .io-qty-table td { padding: 6px 8px; border-bottom: 1px solid var(--line); text-align: left; }
.io-qty-table .io-num { text-align: right; }
.io-modal-actions { margin-top: 10px; display: flex; gap: 8px; }
.wh-io-tabs { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.wh-io-tab { padding: 8px 14px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface-soft); cursor: pointer; font: inherit; }
.wh-io-tab.active { border-color: var(--accent); background: #eef7f5; font-weight: 600; }
.wh-stat-grid { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.wh-fifo-banner { padding: 10px 12px; border-radius: 8px; margin-top: 6px; font-size: 12px; line-height: 1.5; }
.wh-fifo-warn { background: #fff8e6; border: 1px solid #f0c040; color: #7a5b00; }
.wh-fifo-ok { background: #ecfdf3; border: 1px solid #86efac; color: #166534; }
.wh-fifo-info { background: #eff6ff; border: 1px solid #93c5fd; color: #1e40af; }
.wh-fifo-error { background: #fff5f5; border: 1px solid #fca5a5; color: #b42318; }
.wh-fifo-list { margin: 6px 0 0 18px; padding: 0; }
.wh-shelf-row { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; }
.wh-shelf-row input { flex: 1; min-width: 0; }
.wh-stat-card { flex: 1 1 140px; padding: 12px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface-soft); cursor: pointer; text-align: left; font: inherit; }
.wh-stat-card.active, .wh-stat-card:hover { border-color: var(--accent); box-shadow: 0 0 0 2px rgba(26, 107, 92, 0.1); }
.wh-stat-num { font-size: 22px; font-weight: 700; }
.wh-stat-lbl { font-size: 13px; color: var(--muted); margin-top: 4px; }
.io-slip-bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 10px 0; font-size: 13px; }
.trace-code-box { font-family: monospace; background: #f5f5f5; padding: 8px 12px; border-radius: 6px; word-break: break-all; }
.so-form-table-wrap { overflow-x: auto; }
.so-form-table { width: 100%; min-width: 900px; font-size: 12px; border-collapse: collapse; }
.so-form-table th, .so-form-table td { padding: 6px 8px; border-bottom: 1px solid var(--line); }
.so-form-table thead tr { background: #f0f4f8; }
.form-card { background: #fff; border: 1px solid var(--line); border-radius: 8px; padding: 16px; }
.order-sort, .search-go-btn { font-size: 12px; padding: 6px 10px; border-radius: 4px; border: 1px solid var(--line); }

/* ?? V1 */
.reimburse-form-panel {
  margin: 0 0 12px;
  padding: 14px;
  background: #f8fafc;
  border: 1px solid var(--line);
  border-radius: 8px;
}
.reimburse-form-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-bottom: 10px;
}
.reimburse-form-panel label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; }
.reimburse-form-panel input, .reimburse-form-panel select, .reimburse-form-panel textarea {
  padding: 6px 8px;
  border: 1px solid var(--line);
  border-radius: 4px;
  font-size: 12px;
}
.reimburse-attach-btn {
  padding: 6px 12px;
  border: 1px dashed var(--line);
  border-radius: 4px;
  background: #fff;
  font-size: 12px;
  cursor: pointer;
}
#reimburseAttachPreview { margin: 8px 0; display: flex; flex-wrap: wrap; gap: 8px; }
.reimburse-att-preview-row {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 8px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 6px;
  font-size: 11px;
  max-width: 100%;
}
.reimburse-att-thumb {
  width: 48px;
  height: 48px;
  object-fit: cover;
  border-radius: 4px;
  border: 1px solid var(--line);
}
.reimburse-att-rm {
  border: none;
  background: transparent;
  color: var(--danger, #c00);
  cursor: pointer;
  font-size: 14px;
  padding: 2px 6px;
}
.reimburse-att-link {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  margin-right: 8px;
  font-size: 10px;
  text-decoration: none;
  color: inherit;
}
.reimburse-list-row { align-items: flex-start; }
.reimb-act-btn { margin-left: 4px; }

/* ???? V1 ???? */
.order-detail-table.item-table-header,
.order-detail-table.item-row { display: grid; grid-template-columns: 1.2fr 0.9fr 72px 64px 72px 80px; gap: 6px; padding: 6px 8px; font-size: 12px; }
.order-detail-table.item-table-header { background: #f0f4f8; font-weight: 700; color: var(--muted); }
.order-detail-table.item-row { border-bottom: 1px solid var(--line); }
.order-row-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--line); }
.order-act-btn.danger { border-color: #e74c3c; color: #e74c3c; }
.po-list-head { margin-top: 0; }

.po-status-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 8px;
}
.po-status-chip {
  border: 1px solid var(--line, #e2e8f0);
  background: var(--surface, #fff);
  border-radius: 999px;
  padding: 4px 10px;
  font-size: 12px;
  cursor: pointer;
  color: var(--text, #334155);
}
.po-status-chip b {
  margin-left: 4px;
  font-variant-numeric: tabular-nums;
}
.po-status-chip.active {
  border-color: var(--primary, #2563eb);
  background: color-mix(in srgb, var(--primary, #2563eb) 12%, #fff);
  color: var(--primary, #2563eb);
  font-weight: 600;
}
.order-detail-table.po-detail-cols.item-table-header,
.order-detail-table.po-detail-cols.item-row {
  grid-template-columns: 1.3fr 0.9fr 72px 56px 56px 72px 80px 72px;
}
.po-create-form .data-table select {
  max-width: 100%;
  font-size: 12px;
}
.po-doc-banner {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  margin-bottom: 10px;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 8px;
  background: linear-gradient(180deg, #f8fafc, #fff);
}
.po-doc-banner-title {
  font-size: 18px;
  font-weight: 700;
  letter-spacing: 4px;
}
.po-doc-table-wrap {
  max-height: min(42vh, 420px);
  overflow: auto;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 8px;
}
.po-doc-table {
  font-size: 12px;
  margin: 0;
}
.po-doc-totals {
  display: flex;
  justify-content: flex-end;
  gap: 18px;
  margin-top: 10px;
  font-size: 13px;
  flex-wrap: wrap;
}
.po-doc-grand {
  font-size: 15px;
}
.po-detail-modal .order-detail-grid {
  margin-top: 4px;
}
.po-list-actions,
.so-col.po-list-actions,
.so-col-attach.po-list-actions {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  gap: 6px;
  align-items: center;
  justify-content: flex-end;
  white-space: nowrap;
}
.list-actions-cell {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: nowrap !important;
  gap: 6px;
  align-items: center;
  white-space: nowrap;
  vertical-align: middle;
}
.list-actions-cell .button-row,
td.list-actions-cell {
  white-space: nowrap;
}
.results-inner > .so-list-head,
.results-inner > .po-list-head {
  position: sticky;
  top: 0;
  z-index: 2;
}
#poOrdersPanel.results-scroll,
#purchaseListPanel.results-scroll,
#masterListPanel.results-scroll {
  flex: 1 1 auto;
  min-height: 0;
}
#poOrdersPanel .results-inner,
#purchaseListPanel .results-inner,
#masterListPanel .results-inner {
  overflow-y: auto !important;
  overflow-x: auto;
  min-height: 0;
  max-height: none;
}
#poOrdersPanel .data-table thead th,
#purchaseListPanel .data-table thead th,
#masterListPanel .data-table thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  box-shadow: 0 1px 0 var(--line);
}
.purchase-list-table {
  width: 100%;
}

/* ???? */
.fin-kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: 12px;
}
.fin-kpi-grid--compact { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.fin-kpi {
  padding: 14px 16px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface);
}
.fin-kpi-title { font-size: 12px; color: var(--muted); margin-bottom: 6px; }
.fin-kpi-value { font-size: 22px; font-weight: 800; line-height: 1.2; }
.fin-kpi-sub { font-size: 11px; color: var(--muted); margin-top: 4px; }
.fin-kpi.tone-ar .fin-kpi-value { color: #12645a; }
.fin-kpi.tone-ap .fin-kpi-value { color: #a15c11; }
.fin-kpi.tone-fund .fin-kpi-value { color: #1d4ed8; }
.fin-kpi.tone-in .fin-kpi-value { color: var(--ok); }
.fin-kpi.tone-out .fin-kpi-value { color: var(--danger); }
.fin-quick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
.fin-quick-btn {
  padding: 14px 12px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: var(--surface-soft);
  cursor: pointer;
  font-size: 14px;
  text-align: center;
}
.fin-quick-btn:hover { border-color: var(--accent); background: var(--accent-soft); }
.fin-inline-form {
  margin-top: 16px;
  padding: 16px;
  border: 1px dashed var(--line);
  border-radius: 8px;
  background: var(--surface-soft);
}
.fin-inline-form h4 { margin: 0 0 12px; font-size: 14px; }
.fin-form-wrap.hidden { display: none; }
.seg-tabs { display: flex; gap: 6px; flex-wrap: wrap; }
.seg-tab {
  padding: 6px 12px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--surface);
  cursor: pointer;
  font-size: 12px;
}
.seg-tab.active { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 700; }
.form-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
@media (max-width: 640px) { .form-grid-2 { grid-template-columns: 1fr; } }

/* AI ??????????? */
.npi-ai-summary { margin-top: 8px; }
.npi-ai-lang-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; align-items: center; }
.npi-ai-lang-tabs .btn-sm.active {
  background: var(--accent, #0f5c4c);
  color: #fff;
  border-color: var(--accent, #0f5c4c);
}
.npi-ai-body { padding: 10px; background: var(--surface-soft, #f4f7f6); border-radius: 8px; border: 1px solid var(--line, #e5e9ec); }

/* ?? AI ???????????????? V1? ?? */
#ai-assistant-root {
  position: fixed;
  right: 22px;
  bottom: 22px;
  z-index: 1200;
  font-family: "Microsoft YaHei", "PingFang SC", system-ui, sans-serif;
}
#ai-assistant-root.is-hidden,
body.is-locked #ai-assistant-root {
  display: none !important;
}
.ai-fab {
  position: relative;
  width: 56px;
  height: 56px;
  border: none;
  border-radius: 50%;
  background: linear-gradient(145deg, #e11d2e 0%, #b42318 100%);
  color: #fff;
  cursor: pointer;
  box-shadow: 0 8px 24px rgba(180, 35, 24, 0.45);
  display: grid;
  place-items: center;
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.ai-fab:hover {
  transform: translateY(-2px) scale(1.04);
  box-shadow: 0 12px 28px rgba(180, 35, 24, 0.55);
}
.ai-fab.is-open {
  transform: scale(0.92);
  opacity: 0.92;
}
.ai-fab-icon {
  font-size: 14px;
  font-weight: 800;
  letter-spacing: 0;
  line-height: 1.1;
  position: relative;
  z-index: 1;
  white-space: nowrap;
}
.ai-fab-pulse {
  position: absolute;
  inset: -4px;
  border-radius: 50%;
  border: 2px solid rgba(225, 29, 46, 0.45);
  animation: ai-fab-pulse 2.2s ease-out infinite;
  pointer-events: none;
}
@keyframes ai-fab-pulse {
  0% { transform: scale(0.92); opacity: 0.7; }
  70% { transform: scale(1.25); opacity: 0; }
  100% { transform: scale(1.25); opacity: 0; }
}
.ai-panel {
  position: absolute;
  right: 0;
  bottom: 68px;
  width: min(380px, calc(100vw - 28px));
  height: min(520px, calc(100vh - 100px));
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 16px;
  box-shadow: 0 18px 48px rgba(22, 34, 45, 0.18);
  overflow: hidden;
  transition: width 0.2s ease, height 0.2s ease;
}
.ai-panel.is-expanded {
  width: min(760px, calc(100vw - 28px));
  height: min(1040px, calc(100vh - 100px));
}
.ai-panel[hidden] { display: none !important; }
.ai-panel-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
  padding: 14px 14px 12px;
  background: linear-gradient(135deg, #c41e26 0%, #8f151b 100%);
  color: #fff;
}
.ai-panel-title {
  display: flex;
  gap: 10px;
  align-items: center;
  min-width: 0;
}
.ai-panel-avatar {
  flex: 0 0 auto;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.2);
  display: grid;
  place-items: center;
  font-weight: 800;
  font-size: 15px;
}
.ai-panel-title strong {
  display: block;
  font-size: 15px;
}
.ai-panel-title p {
  margin: 2px 0 0;
  font-size: 11px;
  opacity: 0.88;
  line-height: 1.35;
}
.ai-panel-actions {
  display: flex;
  gap: 4px;
  flex: 0 0 auto;
}
.ai-panel-btn {
  border: none;
  background: rgba(255, 255, 255, 0.16);
  color: #fff;
  border-radius: 8px;
  padding: 4px 8px;
  cursor: pointer;
  font-size: 12px;
  line-height: 1.4;
}
.ai-panel-btn:hover { background: rgba(255, 255, 255, 0.28); }
.ai-panel-body {
  flex: 1;
  overflow: auto;
  padding: 14px;
  background: #f7f8fa;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.ai-msg { display: flex; }
.ai-msg-user { justify-content: flex-end; }
.ai-msg-bot { justify-content: flex-start; }
.ai-bubble {
  max-width: 88%;
  padding: 9px 12px;
  border-radius: 12px;
  font-size: 13px;
  line-height: 1.55;
  word-break: break-word;
}
.ai-msg-user .ai-bubble {
  background: #12645a;
  color: #fff;
  border-bottom-right-radius: 4px;
}
.ai-msg-bot .ai-bubble {
  background: #fff;
  border: 1px solid var(--line);
  color: var(--ink);
  border-bottom-left-radius: 4px;
}
.ai-thinking .ai-bubble { color: var(--muted); font-style: italic; }
.ai-panel-foot {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 8px;
  padding: 10px 12px;
  border-top: 1px solid var(--line);
  background: #fff;
}
#ai-input {
  width: 100%;
  resize: none;
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 8px 10px;
  font: inherit;
  font-size: 13px;
  line-height: 1.4;
  outline: none;
}
#ai-input:focus { border-color: #c41e26; box-shadow: 0 0 0 3px rgba(196, 30, 38, 0.12); }
.ai-send-btn {
  align-self: end;
  border: none;
  border-radius: 10px;
  padding: 8px 14px;
  background: #c41e26;
  color: #fff;
  font-weight: 700;
  cursor: pointer;
  font-size: 13px;
}
.ai-send-btn:hover { background: #a1181f; }
.ai-send-btn:disabled { opacity: 0.55; cursor: not-allowed; }
@media (max-width: 480px) {
  #ai-assistant-root { right: 14px; bottom: 14px; }
  .ai-panel { height: min(70vh, 480px); }
  .ai-panel.is-expanded {
    width: calc(100vw - 28px);
    height: min(92vh, calc(100vh - 80px));
  }
}

/* 生产计划：可滚动 + 紧凑分区 */
.panel-body:has(#pmPlanScroll) {
  gap: 8px;
  padding-top: 10px;
}
.panel-body:has(#pmPlanScroll) > .panel-subtitle,
.panel:has(#pmPlanScroll) .panel-subtitle {
  font-size: 12px;
  line-height: 1.4;
}
.pm-plan-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 8px;
  flex-shrink: 0;
}
.pm-plan-toolbar .btn-sm,
.pm-plan-toolbar button {
  padding: 4px 10px;
  font-size: 12px;
}
.pm-batch-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  margin: 0;
  color: var(--muted);
}
.pm-batch-label input {
  width: 72px;
  padding: 3px 6px;
  font-size: 12px;
}
.pm-plan-tabs {
  flex-shrink: 0;
  margin: 0;
}
.pm-plan-warn {
  margin: 0;
  flex-shrink: 0;
  padding: 6px 10px;
}
.pm-plan-warn .wh-fifo-list {
  margin: 0;
  font-size: 12px;
}
#pmPlanScroll.results-scroll {
  flex: 1 1 auto;
  min-height: 0;
  padding: 0;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
}
.pm-plan-scroll-inner {
  padding: 0;
}
.pm-compact-table {
  width: 100%;
  font-size: 12px;
  border-collapse: collapse;
}
.pm-compact-table th,
.pm-compact-table td {
  padding: 5px 8px !important;
  line-height: 1.35;
  vertical-align: middle;
}
.pm-compact-table.sticky-head thead th {
  position: sticky;
  top: 0;
  z-index: 2;
  background: var(--surface-soft, #f8fafb);
  box-shadow: 0 1px 0 var(--line);
}
.pm-muted {
  font-size: 11px;
  color: var(--muted);
}
.pm-actions {
  white-space: nowrap;
}
.pm-actions .btn-sm {
  padding: 2px 8px;
  font-size: 11px;
}
.pm-row-shortage {
  background: #fff5f5;
}
.pm-tab-hint {
  margin: 8px 10px 4px;
  font-size: 12px;
}

/* 销售预测 · 月份矩阵（覆盖默认 .modal 720px） */
.modal.fc-recognize-modal,
#fcRecognizeModal.modal,
#fcForm.modal {
  width: min(1280px, 98vw) !important;
  max-width: min(1280px, 98vw) !important;
  max-height: 94vh !important;
  display: flex !important;
  flex-direction: column !important;
  overflow: hidden !important;
  padding-bottom: 12px;
}
.fc-recognize-modal .fc-rec-head,
.fc-recognize-modal .fc-rec-meta,
.fc-recognize-modal .fc-rec-actions,
.fc-recognize-modal > label,
.fc-recognize-modal > .button-row,
.fc-recognize-modal > .btn-sm,
.fc-recognize-modal > .hint,
#fcForm.modal > h3,
#fcForm.modal > .form-grid,
#fcForm.modal > label,
#fcForm.modal > .btn-sm,
#fcForm.modal > .hint {
  flex: 0 0 auto;
}
.fc-mx-scroll {
  flex: 1 1 auto;
  min-height: 180px;
  max-height: min(58vh, 560px);
  overflow: auto;
  margin-top: 8px;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 8px;
  background: var(--surface, #fff);
}
.fc-mx-table {
  white-space: nowrap;
  border-collapse: separate;
  border-spacing: 0;
  margin: 0;
  min-width: 100%;
}
.fc-mx-table thead th {
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--surface-soft, #f8fafb);
  box-shadow: 0 1px 0 var(--line, #e2e8f0);
  font-size: 11px;
  padding: 6px 4px;
  text-align: center;
  vertical-align: bottom;
}
.fc-mx-product-head,
.fc-mx-product-cell {
  position: sticky;
  left: 0;
  z-index: 2;
  background: var(--surface, #fff);
  min-width: 220px;
  max-width: 280px;
  box-shadow: 1px 0 0 var(--line, #e2e8f0);
}
.fc-mx-table thead .fc-mx-product-head {
  z-index: 4;
  background: var(--surface-soft, #f8fafb);
}
.fc-mx-month .fc-mx-y {
  display: block;
  font-size: 10px;
  color: var(--muted);
  font-weight: 500;
  line-height: 1.1;
}
.fc-mx-month .fc-mx-m {
  display: block;
  font-weight: 600;
}
.fc-mx-qty-cell {
  padding: 2px 3px !important;
}
.fc-mx-qty {
  width: 58px;
  padding: 4px 2px;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.fc-mx-product {
  width: 100%;
  max-width: 260px;
}
.fc-mx-meta {
  font-size: 11px;
  color: var(--muted);
  margin-top: 2px;
  white-space: normal;
  line-height: 1.35;
}
.fc-mx-warn {
  color: var(--danger);
}
.fc-mx-del-cell,
.fc-mx-del-head {
  width: 36px;
  position: sticky;
  right: 0;
  background: var(--surface, #fff);
  z-index: 2;
  box-shadow: -1px 0 0 var(--line, #e2e8f0);
}
.fc-mx-table thead .fc-mx-del-head {
  z-index: 4;
  background: var(--surface-soft, #f8fafb);
}
#fcMatrixWrap {
  display: flex;
  flex-direction: column;
  min-height: 0;
  flex: 1 1 auto;
  overflow: hidden;
}

/* 备料建议：先选成品/月份，结果区可独立滚动 */
.panel.fc-mrp-panel {
  display: flex;
  flex-direction: column;
  min-height: 0;
  height: 100%;
  overflow: hidden;
}
.panel.fc-mrp-panel .panel-body {
  display: flex;
  flex-direction: column;
  min-height: 0;
  flex: 1 1 auto;
  overflow: hidden;
}
.fc-mrp-layout {
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-height: 0;
  flex: 1 1 auto;
  overflow: hidden;
}
.fc-mrp-setup {
  flex: 0 0 auto;
  max-height: none;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: visible;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 10px;
  padding: 10px 12px;
  background: var(--surface-soft, #f8fafb);
}
.fc-mrp-setup.is-collapsed .fc-mrp-setup-grid,
.fc-mrp-setup.is-collapsed > p.hint {
  display: none;
}
.fc-mrp-scope-bar {
  flex: 0 0 auto;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 10px;
  padding: 10px 12px;
  background: var(--surface-soft, #f8fafb);
}
.fc-mrp-scope-left { min-width: 0; flex: 1 1 240px; }
.fc-mrp-scope-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.fc-mrp-scope-chip {
  display: inline-flex;
  align-items: center;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 12px;
  background: #fff;
  border: 1px solid var(--line, #e2e8f0);
}
.fc-mrp-scope-chip.muted { color: var(--muted); }
.fc-mrp-fc-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 8px;
}
.fc-mrp-fc-tab.active {
  border-color: var(--primary, #2563eb);
  background: color-mix(in srgb, var(--primary, #2563eb) 12%, #fff);
  color: var(--primary, #2563eb);
  font-weight: 600;
}
.fc-mrp-wizard {
  max-width: min(720px, 96vw);
  max-height: 90vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.fc-mrp-wiz-steps {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}
.fc-mrp-wiz-step {
  border: 1px solid var(--line, #e2e8f0);
  background: #fff;
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 12px;
  cursor: pointer;
}
.fc-mrp-wiz-step.active {
  border-color: var(--primary, #2563eb);
  background: color-mix(in srgb, var(--primary, #2563eb) 12%, #fff);
  color: var(--primary, #2563eb);
  font-weight: 600;
}
.fc-mrp-wiz-step.done { opacity: 0.85; }
.fc-mrp-wiz-body {
  min-height: 220px;
  max-height: min(52vh, 420px);
  overflow: auto;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 8px;
  padding: 10px;
  background: var(--surface-soft, #fafbfc);
}
.fc-mrp-wiz-list {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.fc-mrp-wiz-toolbar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 8px;
}
.fc-mrp-wiz-months {
  max-height: none;
}
.fc-mrp-wiz-footer {
  margin-top: 12px;
  justify-content: flex-end;
}
.fc-mrp-month-chip.is-prepared {
  border-color: #86efac;
  background: #f0fdf4;
}
.ga-org-tree {
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 10px;
  padding: 16px 12px 24px;
  background: #f8fafc;
  max-height: min(78vh, 860px);
  overflow: auto;
}
.ga-org-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin: 0 0 8px;
  font-size: 12px;
  color: var(--muted, #64748b);
}
.ga-org-legend span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.ga-org-dot {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  display: inline-block;
}
.ga-org-dot.company { background: #0f766e; }
.ga-org-dot.dept { background: #1d4ed8; }
.ga-org-dot.section { background: #7c3aed; }
.ga-org-dot.team { background: #94a3b8; }

/* 自上而下组织图：公司 / 部 / 课 / 班组 */
.ga-org-chart {
  display: flex;
  justify-content: center;
  padding-top: 20px;
  position: relative;
  list-style: none;
  margin: 0;
  padding-left: 0;
  padding-right: 0;
}
.ga-org-chart-root {
  padding-top: 0;
  min-width: max-content;
  margin: 0 auto;
}
.ga-org-chart-node {
  display: flex;
  flex-direction: column;
  align-items: center;
  position: relative;
  padding: 20px 10px 0;
  text-align: center;
}
.ga-org-chart-root > .ga-org-chart-node {
  padding-top: 0;
}
/* 子节点连线：横杠 + 竖线 */
.ga-org-chart-node::before,
.ga-org-chart-node::after {
  content: "";
  position: absolute;
  top: 0;
  border-top: 2px solid #cbd5e1;
  width: 50%;
  height: 20px;
}
.ga-org-chart-node::before {
  right: 50%;
}
.ga-org-chart-node::after {
  left: 50%;
  border-left: 2px solid #cbd5e1;
}
.ga-org-chart-node:only-child::before,
.ga-org-chart-node:only-child::after {
  display: none;
}
.ga-org-chart-root > .ga-org-chart-node:only-child {
  padding-top: 0;
}
.ga-org-chart-node:first-child::before,
.ga-org-chart-node:last-child::after {
  border-top: none;
}
.ga-org-chart-node:last-child::before {
  border-right: 2px solid #cbd5e1;
  border-radius: 0 6px 0 0;
}
.ga-org-chart-node:first-child::after {
  border-radius: 6px 0 0 0;
}
/* 父到子的竖线（来自子 ul） */
.ga-org-chart-node > .ga-org-chart::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  width: 0;
  height: 20px;
  border-left: 2px solid #cbd5e1;
}

.ga-org-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  min-width: 118px;
  max-width: 148px;
  padding: 10px 10px;
  border-radius: 10px;
  background: #fff;
  border: 1px solid #e2e8f0;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
  position: relative;
  z-index: 1;
}
.ga-org-card-top {
  display: flex;
  align-items: center;
  gap: 6px;
}
.ga-org-card-actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  flex-wrap: nowrap;
  max-width: 100%;
}
.ga-org-roles {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  width: 100%;
}
.ga-org-role-btn {
  border: none;
  background: transparent;
  color: #1d4ed8;
  font-size: 11px;
  line-height: 1.25;
  padding: 0;
  cursor: pointer;
  white-space: normal;
  text-align: center;
  max-width: 100%;
  overflow: hidden;
}
.ga-org-role-btn:hover {
  text-decoration: underline;
}
.ga-org-type-company > .ga-org-card {
  background: linear-gradient(180deg, #ecfdf5, #fff);
  border-color: #5eead4;
  min-width: 220px;
  max-width: 360px;
  padding: 14px 18px;
}
.ga-org-type-company .ga-org-name b {
  font-size: 1.05rem;
}
.ga-org-type-dept > .ga-org-card {
  border-top: 3px solid #3b82f6;
  min-width: 124px;
  max-width: 158px;
}
/* 课卡收窄 + 部下换行，避免把上面部门行撑开 */
.ga-org-type-section {
  padding-left: 3px;
  padding-right: 3px;
}
.ga-org-type-section > .ga-org-card {
  border-top: 3px solid #8b5cf6;
  min-width: 100px;
  max-width: 148px;
  padding: 6px 6px;
  gap: 2px;
}
.ga-org-type-section .ga-org-badge {
  font-size: 10px;
  padding: 0 4px;
}
.ga-org-type-section .ga-org-name {
  font-size: 11px;
  line-height: 1.25;
  max-width: 78px;
}
.ga-org-type-section .ga-org-count {
  font-size: 11px;
}
.ga-org-type-section .ga-org-people-btn {
  padding: 1px 5px;
  font-size: 11px;
}
.ga-org-type-dept > .ga-org-chart {
  flex-wrap: wrap;
  justify-content: center;
  max-width: 300px;
  row-gap: 0;
}
.ga-org-type-dept > .ga-org-chart > .ga-org-chart-node::before,
.ga-org-type-dept > .ga-org-chart > .ga-org-chart-node::after {
  display: none;
}
.ga-org-type-dept > .ga-org-chart {
  border-top: 2px solid #cbd5e1;
  margin-top: 4px;
  padding-top: 12px;
}
.ga-org-type-dept > .ga-org-chart > .ga-org-chart-node {
  padding-top: 8px;
}
.ga-org-type-team > .ga-org-card {
  border-style: dashed;
  background: #f8fafc;
  min-width: 76px;
  max-width: 96px;
  padding: 5px 5px;
}
.ga-org-type-section > .ga-org-chart {
  flex-wrap: wrap;
  justify-content: center;
  max-width: 320px;
}
.ga-org-type-section > .ga-org-chart > .ga-org-chart-node::before,
.ga-org-type-section > .ga-org-chart > .ga-org-chart-node::after {
  display: none;
}
.ga-org-type-section > .ga-org-chart {
  border-top: 2px solid #e2e8f0;
  margin-top: 2px;
  padding-top: 10px;
}
.ga-org-type-section > .ga-org-chart > .ga-org-chart-node {
  padding: 6px 2px 0;
}
.ga-org-chart-node.is-pending > .ga-org-card {
  border-color: #fbbf24;
  background: #fffbeb;
}
.ga-org-toggle {
  width: 22px;
  height: 22px;
  border: 1px solid #cbd5e1;
  border-radius: 6px;
  background: #fff;
  cursor: pointer;
  font-size: 14px;
  line-height: 1;
  padding: 0;
  color: #334155;
}
.ga-org-toggle:hover {
  border-color: #94a3b8;
  background: #f1f5f9;
}
.ga-org-row-expandable {
  cursor: pointer;
}
.ga-org-row-expandable:hover {
  border-color: #94a3b8;
}
.ga-org-badge {
  display: inline-block;
  font-size: 11px;
  padding: 1px 7px;
  border-radius: 999px;
  background: #f1f5f9;
  color: #64748b;
  font-weight: 600;
}
.ga-org-type-company .ga-org-badge { background: #ccfbf1; color: #0f766e; }
.ga-org-type-dept .ga-org-badge { background: #dbeafe; color: #1d4ed8; }
.ga-org-type-section .ga-org-badge { background: #ede9fe; color: #6d28d9; }
.ga-org-type-team .ga-org-badge { background: #f1f5f9; color: #64748b; }
.ga-org-name {
  font-size: 13px;
  line-height: 1.35;
  color: #0f172a;
  word-break: break-word;
}
.ga-org-code {
  display: none;
}
.ga-org-count {
  font-size: 12px;
  font-weight: 600;
  color: #0369a1;
}
.ga-org-count.is-empty {
  color: #94a3b8;
  font-weight: 500;
}
.ga-org-leader {
  display: none;
}
.ga-org-leader-btn {
  max-width: 72px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  padding: 2px 6px;
  font-size: 11px;
  line-height: 1.3;
  color: #475569;
  background: #f8fafc;
  border: 1px solid #e2e8f0;
}
.ga-org-leader-btn:hover {
  border-color: #94a3b8;
  background: #f1f5f9;
  color: #0f172a;
}
.ga-org-people-btn {
  margin-top: 0;
  flex-shrink: 0;
}
.ga-org-toggle-spacer { display: none; }
.ga-org-empty-hint { display: none; }
/* 兼容旧类名（详情弹窗等仍可能用） */
.ga-org-ul { list-style: none; margin: 0; padding: 0; }
.ga-org-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}
.ga-org-mismatch-row td {
  background: #fffbeb;
}
.emp-row-contract-warn td {
  background: #fef2f2;
}
.emp-row-resigning td {
  background: #fff7ed;
}
.emp-contract-urgent {
  color: #b91c1c;
  font-weight: 600;
}
.emp-status-chip {
  border: 1px solid var(--border, #d1d5db);
  background: #fff;
  border-radius: 999px;
  padding: 4px 12px;
  cursor: pointer;
  font: inherit;
}
.emp-status-chip.is-on {
  border-color: #2563eb;
  background: #eff6ff;
  color: #1d4ed8;
}
.badge-orange {
  background: #ffedd5;
  color: #c2410c;
}

/* —— 总务工作台（改版） —— */
.ga-shell {
  --ga-ink: #15231f;
  --ga-muted: #5b6b66;
  --ga-line: #d7e2dd;
  --ga-soft: #f3f7f5;
  --ga-panel: #ffffff;
  --ga-accent: #0f6b5c;
  --ga-accent-2: #c45c26;
  --ga-accent-3: #3d5a80;
  display: grid;
  gap: 16px;
  color: var(--ga-ink);
  padding-bottom: 8px;
}
.panel-body > .ga-shell {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
  align-content: start;
}
.ga-hero {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 16px;
  padding: 22px 24px;
  border-radius: 18px;
  background:
    radial-gradient(900px 240px at 12% -30%, rgba(90, 190, 170, 0.22), transparent 50%),
    linear-gradient(135deg, #16352f 0%, #1c3d36 45%, #21443c 100%);
  color: #f4faf8;
  box-shadow: 0 18px 40px rgba(18, 40, 34, 0.18);
  animation: gaHeroIn 0.45s ease-out;
}
.ga-hero--ops {
  background:
    radial-gradient(900px 240px at 12% -30%, rgba(90, 190, 170, 0.2), transparent 50%),
    linear-gradient(135deg, #16352f 0%, #1c3d36 45%, #21443c 100%);
}
.ga-hero--hr {
  background:
    radial-gradient(900px 240px at 88% -20%, rgba(196, 92, 38, 0.22), transparent 48%),
    linear-gradient(135deg, #2a241f 0%, #3a2e26 48%, #2f3632 100%);
}
.ga-metric-strip--6 {
  grid-template-columns: repeat(6, minmax(0, 1fr));
}
@media (max-width: 1100px) {
  .ga-metric-strip--6 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
.ga-metric--click {
  cursor: pointer;
  font: inherit;
  text-align: left;
  appearance: none;
  width: 100%;
}
.ga-metric--click:hover {
  border-color: #9fc4ba;
}
@keyframes gaHeroIn {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: none; }
}
.ga-eyebrow {
  margin: 0 0 6px;
  font-size: 12px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(220, 240, 234, 0.72);
}
.ga-hero-title {
  margin: 0;
  font-size: clamp(1.35rem, 2vw, 1.75rem);
  font-weight: 700;
  letter-spacing: -0.02em;
}
.ga-hero-desc {
  margin: 8px 0 0;
  max-width: 42rem;
  color: rgba(220, 240, 234, 0.78);
  font-size: 13px;
  line-height: 1.55;
}
.ga-hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: flex-start;
}
.ga-hero-actions .primary {
  background: #e8f7f2;
  color: #0f3d35;
  border-color: transparent;
}
.ga-hero-actions button:not(.primary):not(.ga-btn-ghost) {
  background: rgba(255,255,255,0.08);
  color: #eef8f4;
  border-color: rgba(255,255,255,0.18);
}
.ga-btn-ghost {
  background: transparent !important;
  color: rgba(238,248,244,0.9) !important;
  border: 1px dashed rgba(255,255,255,0.28) !important;
}

.ga-metric-strip {
  display: grid;
  grid-template-columns: 1.35fr repeat(5, minmax(0, 1fr));
  gap: 10px;
}
.ga-kq-tabs .ga-kq-tab {
  border: 1px solid var(--ga-line, #d5e0db);
  background: #fff;
  color: #445;
  padding: 6px 14px;
  border-radius: 999px;
  cursor: pointer;
  font: inherit;
}
.ga-kq-tabs .ga-kq-tab.is-on {
  background: #1f4f44;
  border-color: #1f4f44;
  color: #fff;
  font-weight: 600;
}

/* 考勤页：压缩顶栏与指标，把空间留给列表 */
.ga-kq-simple {
  gap: 10px;
}
.ga-kq-simple .ga-hero--kq {
  padding: 10px 14px;
  border-radius: 12px;
  box-shadow: 0 6px 16px rgba(18, 40, 34, 0.12);
  gap: 8px;
  align-items: center;
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
}
.ga-kq-simple .ga-hero--kq .ga-hero-copy {
  min-width: 0;
  flex: 1 1 auto;
}
.ga-kq-hero-row {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 12px 14px;
}
.ga-kq-simple .ga-hero--kq .ga-eyebrow {
  margin: 0 0 2px;
  font-size: 11px;
}
.ga-kq-simple .ga-hero--kq .ga-hero-title {
  font-size: 1.1rem;
  line-height: 1.25;
  margin: 0;
  white-space: nowrap;
}
.ga-kq-simple .ga-hero--kq .ga-hero-desc {
  margin: 4px 0 0;
  font-size: 12px;
  max-width: 36rem;
  line-height: 1.4;
}
.ga-kq-period {
  display: inline-flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.ga-kq-period input,
.ga-kq-period select,
.ga-kq-period button {
  width: auto !important;
  min-width: 0;
  margin: 0;
  flex: 0 0 auto;
}
.ga-kq-period #gaKqYearInp {
  width: 76px !important;
  padding: 6px 8px;
}
.ga-kq-period #gaKqMonthInp {
  width: 72px !important;
  padding: 6px 8px;
}
.ga-kq-period button {
  padding: 6px 12px;
  white-space: nowrap;
}
.ga-kq-simple .ga-kq-tabs {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin: 0;
}
.ga-kq-simple .ga-kq-tabs .ga-kq-tab {
  padding: 5px 12px;
  font-size: 13px;
}
.ga-kq-summary-line {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  align-items: baseline;
  padding: 8px 12px;
  border: 1px solid var(--ga-line, #d7e2dd);
  border-radius: 10px;
  background: #f7faf9;
  font-size: 13px;
  color: #334;
}
.ga-kq-summary-line b {
  color: #0f3d35;
  font-variant-numeric: tabular-nums;
}
.ga-kq-hint {
  margin: 4px 0 0 !important;
  font-size: 12px;
}
.ga-kq-simple .ga-panel--list {
  margin: 0;
  padding: 0;
  overflow: hidden;
}
.ga-kq-simple .ga-panel-head--slim {
  padding: 8px 12px;
  margin: 0;
  gap: 8px;
}
.ga-kq-simple .ga-panel-head--slim h3 {
  margin: 0;
  font-size: 14px;
}
.ga-kq-simple .ga-panel-head--slim p {
  margin: 2px 0 0;
  font-size: 12px;
}
.ga-kq-mini-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.ga-kq-mini-actions button {
  padding: 4px 10px;
  font-size: 12px;
}
.ga-kq-list-scroll {
  max-height: min(62vh, 640px);
  overflow: auto;
}
.ga-kq-simple .ga-kq-more {
  margin-top: 8px;
}
.ga-kq-simple .ga-kq-more > summary {
  cursor: pointer;
  font-weight: 600;
  color: #667;
  font-size: 13px;
}
tr.ga-kq-emp-row {
  cursor: pointer;
}
tr.ga-kq-emp-row:hover {
  background: #f3faf7;
}
tr.ga-kq-apply-row {
  cursor: pointer;
}
tr.ga-kq-apply-row:hover {
  background: #f3faf7;
}
.ga-kq-emp-modal .ga-kq-emp-scroll {
  max-height: min(58vh, 520px);
}
.ga-kq-emp-matrix .ga-kq-sticky {
  min-width: 44px;
  left: 0;
}
.ga-kq-simple .ga-kq-month-strip {
  grid-template-columns: repeat(auto-fill, minmax(88px, 1fr));
  gap: 6px;
  margin-top: 6px;
}
.ga-kq-simple .ga-kq-month-strip .ga-metric {
  padding: 8px 10px;
}
.ga-kq-simple .ga-kq-month-strip .ga-metric-v {
  font-size: 1.1rem;
}
tr.ga-kq-day-row {
  cursor: pointer;
}
tr.ga-kq-day-row:hover {
  background: #f3faf7;
}
tr.ga-kq-day--holiday,
tr.ga-kq-day-holiday {
  background: #fff7ed;
}
tr.ga-kq-day--holiday > td,
tr.ga-kq-day-holiday > td {
  background: #fff7ed;
}
tr.ga-kq-day--makeup,
tr.ga-kq-day-makeup {
  background: #f0fdf4;
}
tr.ga-kq-day--makeup > td,
tr.ga-kq-day-makeup > td {
  background: #f0fdf4;
}
tr.ga-kq-day--weekend,
tr.ga-kq-day-weekend {
  background: #f3f4f6;
}
tr.ga-kq-day--weekend > td,
tr.ga-kq-day-weekend > td {
  background: #f3f4f6;
  color: #556;
}
tr.ga-kq-day--weekend .ga-kq-dtype,
tr.ga-kq-day-weekend .ga-kq-dtype {
  color: #667;
}
tr.ga-kq-day-row:hover > td {
  filter: brightness(0.97);
}
.ga-kq-emp-scroll {
  max-height: min(70vh, 780px);
  overflow: auto;
}
.ga-kq-emp-matrix {
  font-size: 12px;
  border-collapse: separate;
  border-spacing: 0;
}
.ga-kq-emp-matrix th,
.ga-kq-emp-matrix td.ga-kq-cell {
  min-width: 72px;
  text-align: center;
  white-space: nowrap;
  padding: 4px 6px;
}
.ga-kq-emp-matrix .ga-kq-sticky {
  position: sticky;
  left: 0;
  z-index: 2;
  background: #fff;
  min-width: 88px;
  text-align: left;
}
.ga-kq-emp-matrix thead .ga-kq-sticky { z-index: 3; background: #f8faf9; }
.ga-kq-emp-matrix .ga-kq-sticky-2 { left: 88px; min-width: 72px; }
.ga-kq-emp-matrix .ga-kq-sticky-3 { left: 160px; min-width: 40px; text-align: center; }
.ga-kq-cell-red {
  background: #fee2e2 !important;
  color: #991b1b;
  font-weight: 600;
}
.ga-kq-cell-ot { color: #555; }
.ga-kq-cell-hol { background: #ffedd5; }
.ga-kq-cell-wk { background: #f3f4f6; }
.ga-kq-cell-mk { background: #dcfce7; }
tr.ga-kq-emp-ot td { background: #fafafa; }
tr.ga-kq-emp-ot td.ga-kq-cell-red { background: #fecaca !important; }

tr.ga-kq-day--holiday .ga-kq-dtype { color: #9a3412; }
tr.ga-kq-day--makeup .ga-kq-dtype { color: #166534; }

.ga-comp-form {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 14px;
  align-items: end;
  padding: 8px 4px 12px;
}
.ga-comp-form label {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12px;
  color: #445;
}
.ga-comp-form input {
  width: auto !important;
  min-width: 0;
  padding: 6px 8px;
  margin: 0;
}
.ga-comp-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 4px 0 8px;
}
.ga-comp-chip {
  display: inline-flex;
  align-items: center;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 12px;
  border: 1px solid #d7e2dd;
  background: #f7faf9;
}
.ga-comp-chip.is-work {
  background: #dcfce7;
  border-color: #86efac;
  color: #166534;
}
.ga-comp-chip.is-rest {
  background: #f3f4f6;
  border-color: #d1d5db;
  color: #4b5563;
}

.ga-kq-filter {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
  margin: 6px 0;
}
.ga-kq-filter select,
.ga-kq-filter button {
  width: auto !important;
  padding: 5px 10px;
  font-size: 12px;
  margin: 0;
}
.ga-kq-apply-tools input[type="search"] {
  padding: 6px 10px;
  border: 1px solid var(--line, #d1d5db);
  border-radius: 8px;
  font: inherit;
  font-size: 13px;
}
.ga-kq-chip {
  border: 1px solid #d1d5db;
  background: #fff;
  border-radius: 999px;
  cursor: pointer;
  color: #374151;
}
.ga-kq-chip.is-on {
  border-color: #0f766e;
  background: #ecfdf5;
  color: #0f3d35;
  font-weight: 600;
}
.ga-punch-match {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 999px;
  font-size: 12px;
  line-height: 1.5;
  white-space: nowrap;
}
.ga-punch-match.is-ok { background: #ecfdf5; color: #047857; }
.ga-punch-match.is-warn { background: #fffbeb; color: #b45309; }
.ga-punch-match.is-bad { background: #fef2f2; color: #b91c1c; }
.ga-punch-match.is-na { background: #f3f4f6; color: #6b7280; }
.ga-emp-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 12px;
  margin: 0 0 8px;
  font-size: 12px;
  color: #445;
}
.ga-emp-meta b { color: #0f3d35; }
.ga-day-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 6px;
}
@media (max-width: 1100px) {
  .ga-day-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .ga-day-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.ga-day-col {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.ga-day-card {
  border: 1px solid #d7e2dd;
  border-radius: 8px;
  padding: 4px 6px;
  background: #fff;
  min-height: 40px;
}
.ga-day-card.wk { background: #f3f4f6; }
.ga-day-card.hol { background: #ffedd5; }
.ga-day-card.mk { background: #dcfce7; }
.ga-day-card.is-red { background: #fee2e2; border-color: #fecaca; }
.ga-day-card.is-ok { border-color: #9fc4ba; }
.ga-day-card-h {
  display: flex;
  justify-content: space-between;
  gap: 4px;
  font-size: 11px;
  color: #667;
}
.ga-day-card-h b { color: #15231f; font-size: 12px; }
.ga-day-card-m {
  margin-top: 2px;
  font-size: 12px;
  font-weight: 600;
  color: #0f3d35;
  font-variant-numeric: tabular-nums;
}
.ga-day-card-s { font-size: 10px; color: #667; line-height: 1.25; }
.ga-kq-emp-modal .modal-shell-body { max-height: min(78vh, 860px); }

.ga-print-modal .modal-shell-body { max-height: min(80vh, 920px); }
.ga-print-page { padding: 4px 0 16px; }
.ga-print-head h2 { margin: 0 0 4px; font-size: 18px; }
.ga-print-head p { margin: 0 0 4px; font-size: 12px; }
.ga-print-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 11px;
  table-layout: fixed;
}
.ga-print-table th,
.ga-print-table td {
  border: 1px solid #99a;
  padding: 2px 3px;
  text-align: center;
  vertical-align: middle;
}
.ga-print-table thead th { background: #f3f7f5; }
.ga-print-day {
  width: 48px;
  text-align: left !important;
  white-space: nowrap;
}
.ga-print-day span { display: block; font-size: 10px; color: #667; }
.ga-print-name { font-weight: 700; }
.ga-print-cell { min-height: 20px; font-variant-numeric: tabular-nums; }
.ga-print-cell.is-red { background: #fee2e2; color: #991b1b; font-weight: 600; }
.ga-print-table tr.wk td { background: #f8f8f8; }
.ga-print-table tr.hol td { background: #fff7ed; }
.ga-print-sign { margin-top: 10px; }
.ga-print-sign h4 { margin: 8px 0 4px; font-size: 13px; }
.ga-sign-line {
  display: grid;
  grid-template-columns: 110px 1fr 40px 120px;
  gap: 8px;
  align-items: end;
  margin: 5px 0;
  font-size: 12px;
}
.ga-sign-line em {
  border-bottom: 1px solid #334;
  min-height: 18px;
  font-style: normal;
}
.ga-print-break { height: 12px; }

@media print {
  body * { visibility: hidden !important; }
  #modalRoot,
  #modalRoot * { visibility: visible !important; }
  #modalRoot {
    position: static !important;
    inset: auto !important;
    background: #fff !important;
    display: block !important;
    padding: 0 !important;
    overflow: visible !important;
  }
  #modalRoot .modal {
    box-shadow: none !important;
    border: none !important;
    max-width: none !important;
    max-height: none !important;
    width: 100% !important;
    padding: 0 !important;
    overflow: visible !important;
  }
  #modalRoot .no-print,
  #modalRoot .modal-shell-head { display: none !important; }
  #modalRoot .modal-shell-body {
    max-height: none !important;
    overflow: visible !important;
  }
  .ga-print-page { page-break-after: always; }
  .ga-print-page:last-child { page-break-after: auto; }
  .ga-print-break { display: none; }
  .ga-kq-emp-modal .ga-day-grid { grid-template-columns: repeat(5, 1fr); }
}

.badge-warn {
  background: #ffedd5;
  color: #9a3412;
}
.badge-ok {
  background: #dcfce7;
  color: #166534;
}
button.linkish {
  background: none;
  border: none;
  padding: 0;
  color: var(--accent, #2563eb);
  cursor: pointer;
  font: inherit;
  text-decoration: underline;
}
@media (max-width: 1100px) {
  .ga-metric-strip { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .ga-metric-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.ga-metric {
  padding: 14px 16px;
  border-radius: 14px;
  background: var(--ga-panel);
  border: 1px solid var(--ga-line);
  display: grid;
  gap: 4px;
  min-height: 96px;
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}
.ga-metric--hero {
  background: linear-gradient(160deg, #eaf6f2, #ffffff 60%);
  border-color: #c5ddd5;
}
.ga-metric.is-warn {
  border-color: #f0c9a0;
  background: #fff8f1;
}
.ga-metric:hover {
  transform: translateY(-1px);
  box-shadow: 0 10px 24px rgba(20, 40, 34, 0.06);
}
.ga-metric-k {
  font-size: 12px;
  color: var(--ga-muted);
}
.ga-metric-v {
  font-size: 1.65rem;
  font-weight: 700;
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}
.ga-metric-unit {
  font-size: 0.95rem;
  margin-left: 2px;
  font-weight: 600;
  color: var(--ga-muted);
}
.ga-metric-s {
  font-size: 12px;
  color: var(--ga-muted);
}

.ga-main-grid,
.ga-bottom-grid {
  display: grid;
  gap: 14px;
  align-items: start;
}
.ga-main-grid {
  grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.9fr);
}
.ga-bottom-grid {
  grid-template-columns: minmax(0, 1.55fr) minmax(260px, 0.85fr);
}
@media (max-width: 980px) {
  .ga-main-grid,
  .ga-bottom-grid { grid-template-columns: 1fr; }
}

.ga-panel {
  margin: 0;
  padding: 18px 18px 16px;
  border-radius: 16px;
  background: var(--ga-panel);
  border: 1px solid var(--ga-line);
  box-shadow: 0 1px 0 rgba(255,255,255,0.8) inset;
}
.ga-panel-head {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: flex-start;
  margin-bottom: 14px;
}
.ga-panel-head h3 {
  margin: 0;
  font-size: 1.05rem;
  letter-spacing: -0.01em;
}
.ga-panel-head p {
  margin: 4px 0 0;
  font-size: 12px;
  color: var(--ga-muted);
}
.ga-panel-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.ga-link-btn {
  border: none;
  background: transparent;
  color: var(--ga-accent);
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  padding: 4px 0;
  white-space: nowrap;
}
.ga-link-btn:hover { text-decoration: underline; }

.ga-mix-row {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  gap: 14px;
  margin-bottom: 14px;
}
@media (max-width: 720px) {
  .ga-mix-row { grid-template-columns: 1fr; }
}
.ga-mix-block {
  padding: 12px 14px;
  border-radius: 12px;
  background: var(--ga-soft);
}
.ga-mix-title {
  font-size: 12px;
  color: var(--ga-muted);
  margin-bottom: 10px;
}
.ga-seg {
  display: flex;
  height: 12px;
  border-radius: 999px;
  overflow: hidden;
  background: #d9e5e0;
}
.ga-seg span { display: block; height: 100%; transition: width 0.4s ease; }
.ga-seg-a { background: #0f6b5c; }
.ga-seg-b { background: #c45c26; }
.ga-seg-c { background: #3d5a80; }
.ga-legend {
  list-style: none;
  margin: 10px 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 14px;
  font-size: 12px;
  color: var(--ga-muted);
}
.ga-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  margin-right: 6px;
  vertical-align: middle;
}
.ga-dot-a { background: #0f6b5c; }
.ga-dot-b { background: #c45c26; }
.ga-dot-c { background: #3d5a80; }
.ga-pill-stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}
.ga-pill {
  padding: 10px 8px;
  border-radius: 10px;
  background: #fff;
  border: 1px solid var(--ga-line);
  display: grid;
  gap: 2px;
  text-align: center;
}
.ga-pill span { font-size: 11px; color: var(--ga-muted); }
.ga-pill b { font-size: 1.15rem; font-variant-numeric: tabular-nums; }
.ga-pill em { font-style: normal; font-size: 11px; color: var(--ga-muted); }
.ga-pill--accent {
  background: #e7f3f0;
  border-color: #b9d6ce;
}

.ga-comp-preview {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
}
@media (max-width: 900px) {
  .ga-comp-preview { grid-template-columns: 1fr; }
}
.ga-chart-card {
  padding: 12px;
  border-radius: 12px;
  border: 1px solid var(--ga-line);
  background: #fff;
}
.ga-chart-card h4 {
  margin: 0 0 10px;
  font-size: 12px;
  font-weight: 600;
  color: var(--ga-muted);
  letter-spacing: 0.02em;
}

.ga-rate-card {
  width: 100%;
  display: grid;
  gap: 8px;
  text-align: left;
  padding: 14px 16px;
  margin-bottom: 10px;
  border-radius: 14px;
  border: 1px solid var(--ga-line);
  background: linear-gradient(180deg, #f7faf9, #ffffff);
  cursor: pointer;
  font: inherit;
  color: inherit;
  transition: border-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
}
.ga-rate-card:hover {
  border-color: #9fc4ba;
  transform: translateY(-1px);
  box-shadow: 0 12px 28px rgba(20, 40, 34, 0.08);
}
.ga-rate-top {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  color: var(--ga-muted);
}
.ga-rate-num {
  font-size: 2rem;
  font-weight: 750;
  letter-spacing: -0.04em;
  font-variant-numeric: tabular-nums;
  line-height: 1;
}
.ga-rate-num span {
  font-size: 1rem;
  margin-left: 2px;
  color: var(--ga-muted);
  font-weight: 600;
}
.ga-rate-meta {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  font-size: 12px;
  color: var(--ga-muted);
}
.ga-rate-bar {
  height: 6px;
  border-radius: 999px;
  background: #e2ece8;
  overflow: hidden;
}
.ga-rate-bar i {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, #0f6b5c, #2a9d8f);
  border-radius: inherit;
}
.ga-delta { font-weight: 700; font-size: 12px; }
.ga-delta.is-up { color: #b42318; }
.ga-delta.is-down { color: #087443; }
.ga-delta.is-flat { color: var(--ga-muted); }
.ga-footnote {
  margin: 4px 0 0;
  font-size: 11px;
  color: var(--ga-muted);
}

.ga-split-lists {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
@media (max-width: 720px) {
  .ga-split-lists { grid-template-columns: 1fr; }
}
.ga-list-label {
  font-size: 12px;
  color: var(--ga-muted);
  margin-bottom: 8px;
}
.ga-list-label b {
  color: var(--ga-ink);
  margin-left: 4px;
}
.ga-people-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 6px;
}
.ga-people-list li {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  align-items: center;
  padding: 10px 12px;
  border-radius: 10px;
  background: var(--ga-soft);
  cursor: pointer;
  transition: background 0.15s ease;
}
.ga-people-list li:hover { background: #e7f0ec; }
.ga-people-list li.is-urgent {
  background: #fff4eb;
}
.ga-people-list b { display: block; font-size: 13px; }
.ga-people-list span {
  display: block;
  font-size: 11px;
  color: var(--ga-muted);
  margin-top: 2px;
}
.ga-people-list em {
  font-style: normal;
  font-size: 11px;
  color: var(--ga-muted);
  white-space: nowrap;
}
.ga-early-panel {
  padding-bottom: 8px;
}
.ga-early-list {
  list-style: none;
  margin: 0;
  padding: 0 8px 8px;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 4px 12px;
}
@media (max-width: 900px) {
  .ga-early-list { grid-template-columns: 1fr; }
}
.ga-early-row {
  display: grid;
  grid-template-columns: 28px 1fr auto;
  gap: 8px;
  align-items: center;
  padding: 7px 10px;
  border-radius: 8px;
  cursor: pointer;
}
.ga-early-row:hover { background: #eef6f3; }
.ga-early-rank {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 700;
  background: #e5eeea;
  color: #345;
}
.ga-early-row.ga-rank--1 .ga-early-rank,
.ga-early-tr.ga-rank--1 .ga-early-rank { background: #f5d76e; color: #5c4500; }
.ga-early-row.ga-rank--2 .ga-early-rank,
.ga-early-tr.ga-rank--2 .ga-early-rank { background: #d7dee7; color: #334; }
.ga-early-row.ga-rank--3 .ga-early-rank,
.ga-early-tr.ga-rank--3 .ga-early-rank { background: #e8c4a8; color: #5c3a1e; }
.ga-early-who b { display: block; font-size: 13px; }
.ga-early-who span { font-size: 11px; color: #667; }
.ga-early-time {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.ga-early-time strong,
.ga-early-time b { display: inline; font-size: 13px; color: #0f3d35; }
.ga-early-time em {
  font-style: normal;
  font-size: 11px;
  color: #667;
}
.ga-early-time em.is-early,
.ga-early-tag.is-early { color: #0f6b5c; font-weight: 600; }
.ga-early-time em.is-late,
.ga-early-tag.is-late { color: #9a3412; }

/* 总务看板改版：紧凑三栏 */
.ga-dash-ops { gap: 10px; }
.ga-dash-top {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px 12px;
  padding: 8px 2px;
}
.ga-eyebrow--ink {
  color: var(--ga-muted, #5b6b66) !important;
  text-transform: none;
  letter-spacing: 0.04em;
}
.ga-dash-title {
  margin: 0;
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--ga-ink, #15231f);
}
.ga-dash-actions {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
}
.ga-dash-actions button {
  padding: 5px 10px;
  font-size: 12px;
}
.ga-chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.ga-chip {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  padding: 5px 10px;
  border: 1px solid var(--ga-line, #d7e2dd);
  border-radius: 999px;
  background: #f7faf9;
  font-size: 12px;
  color: #445;
}
.ga-chip em { font-style: normal; color: #667; }
.ga-chip b { font-variant-numeric: tabular-nums; color: #0f3d35; }
.ga-chip i { font-style: normal; color: #889; font-size: 11px; }
.ga-chip.is-warn {
  background: #fff7ed;
  border-color: #fdba74;
  color: #9a3412;
}
.ga-chip.is-warn b { color: #9a3412; }
.ga-dash-grid {
  display: grid;
  grid-template-columns: minmax(280px, 1.1fr) minmax(260px, 1fr) minmax(200px, 0.75fr);
  gap: 10px;
  align-items: start;
}
@media (max-width: 1100px) {
  .ga-dash-grid { grid-template-columns: 1fr 1fr; }
  .ga-dash-grid > .ga-panel--side { grid-column: 1 / -1; }
}
@media (max-width: 720px) {
  .ga-dash-grid { grid-template-columns: 1fr; }
}
.ga-dash-ops .ga-panel {
  padding: 10px 12px;
  border-radius: 12px;
}
.ga-early-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin: 0 0 8px;
}
.ga-early-tabs .ga-kq-tab { padding: 4px 10px; font-size: 12px; }
.ga-early-period input[type="date"],
.ga-early-period input[type="number"],
.ga-early-period select {
  width: auto !important;
  padding: 4px 8px;
  font-size: 12px;
}
.ga-early-period input[type="number"] { width: 72px !important; }
.ga-early-period input[type="date"] { width: 132px !important; }
.ga-early-period #gaEarlyWeekPrev,
.ga-early-period #gaEarlyWeekNext {
  min-width: 30px;
  padding: 0 8px;
  height: 30px;
  line-height: 28px;
}
.ga-early-dept {
  margin-top: 1px;
  font-size: 11px;
  color: #7a8a84;
  max-width: 160px;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ga-early-time em.hint {
  display: block;
  font-style: normal;
  font-size: 10px;
  color: #8a9;
  margin-top: 1px;
}
.ga-early-scroll { max-height: min(42vh, 360px); overflow: auto; }
.ga-early-table { font-size: 12px; }
.ga-early-table th,
.ga-early-table td { padding: 5px 6px; white-space: nowrap; }
.ga-early-table .ga-early-rank {
  width: 22px;
  height: 22px;
  font-size: 11px;
}
.ga-early-tr { cursor: pointer; }
.ga-early-tr:hover { background: #f3faf7; }
.ga-early-tag { font-size: 11px; }
.ga-todo-split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px 12px;
}
@media (max-width: 560px) {
  .ga-todo-split { grid-template-columns: 1fr; }
}
.ga-people-list--compact li { padding: 6px 8px; }
.ga-kv--compact li { padding: 4px 0; font-size: 12px; }
.ga-policy--compact {
  margin-top: 10px;
  padding-top: 8px;
  border-top: 1px dashed var(--ga-line, #d7e2dd);
  font-size: 11px;
  color: #667;
  line-height: 1.45;
}
.ga-policy--compact p { margin: 0 0 2px; }
.ga-empty {
  margin: 0;
  padding: 18px 12px;
  text-align: center;
  color: var(--ga-muted);
  font-size: 13px;
  background: var(--ga-soft);
  border-radius: 10px;
}

.ga-kv {
  list-style: none;
  margin: 0 0 12px;
  padding: 0;
  display: grid;
  gap: 0;
}
.ga-kv li {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px solid var(--ga-line);
  font-size: 13px;
}
.ga-kv li span { color: var(--ga-muted); }
.ga-side-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 14px;
}
.ga-policy {
  padding: 12px;
  border-radius: 12px;
  background: var(--ga-soft);
  font-size: 12px;
  color: var(--ga-muted);
  line-height: 1.55;
}
.ga-policy p { margin: 4px 0 0; }

.ga-grid-2 {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}
@media (max-width: 960px) {
  .ga-grid-2 { grid-template-columns: 1fr; }
}

.ga-bar-row {
  display: grid;
  grid-template-columns: minmax(64px, 30%) 1fr auto;
  gap: 8px;
  align-items: center;
  margin-bottom: 7px;
  font-size: 12px;
}
.ga-bar-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--ga-ink);
}
.ga-bar-track {
  height: 7px;
  background: #e4eeea;
  border-radius: 999px;
  overflow: hidden;
}
.ga-bar-fill {
  display: block;
  height: 100%;
  background: #0f6b5c;
  border-radius: 999px;
}
.ga-bar-val {
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  color: var(--ga-muted);
  font-size: 11px;
}

.ga-comp-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}
@media (max-width: 800px) {
  .ga-comp-grid { grid-template-columns: 1fr; }
}
.ga-comp-block {
  padding: 12px 14px;
  border-radius: 12px;
  background: var(--ga-soft, #f3f7f5);
  border: 1px solid var(--ga-line, #d7e2dd);
}
.ga-comp-block h4 {
  margin: 0 0 10px;
  font-size: 13px;
}
.ga-comp-kpis {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.ga-comp-kpis > div {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  padding: 8px 12px;
  background: var(--ga-soft, #f3f7f5);
  border-radius: 10px;
  border: 1px solid var(--ga-line, #d7e2dd);
}

/* 兼容旧类名（组织页等仍可能引用） */
.ga-dash-hero { display: none; }
.ga-turnover-up { color: #b42318; font-weight: 600; }
.ga-turnover-down { color: #087443; font-weight: 600; }
.ga-org-type-company { /* keep */ }
.ga-org-type-company { /* keep */ }
.ga-org-empty-hint {
  font-size: 11px;
}
.ga-org-unassigned {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  margin: 0 0 10px;
  padding: 8px 10px;
  background: #fffbeb;
  border: 1px solid #fbbf24;
  border-radius: 8px;
}
.ga-org-unassigned-btn {
  border: 1px solid #f59e0b;
  background: #fff;
  border-radius: 6px;
  padding: 4px 10px;
  cursor: pointer;
}
.modal.ga-org-detail-modal {
  width: min(960px, 100%);
  max-height: min(92vh, 900px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  padding: 0;
}
.ga-org-detail-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  padding: 16px 18px 10px;
  border-bottom: 1px solid var(--line, #e2e8f0);
  flex: 0 0 auto;
}
.ga-org-detail-body {
  flex: 1 1 auto;
  min-height: 0;
  overflow: auto;
  padding: 10px 18px 18px;
  -webkit-overflow-scrolling: touch;
}
.ga-org-detail-table-wrap {
  overflow: auto;
  max-height: none;
}
.ga-org-node {
  padding: 4px 0;
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
}
.fc-mrp-setup-bar .hint {
  margin: 0;
  flex: 1 1 auto;
}
.fc-mrp-setup-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) minmax(220px, 1fr);
  gap: 12px;
  min-height: 0;
  overflow: visible;
  margin-top: 8px;
}
.fc-mrp-setup-grid.fc-mrp-setup-grid-3 {
  grid-template-columns: minmax(200px, 0.9fr) minmax(180px, 0.85fr) minmax(200px, 1fr);
}
.fc-mrp-setup-block {
  display: flex;
  flex-direction: column;
  min-height: 0;
  min-width: 0;
  overflow: visible;
}
.fc-mrp-setup-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 6px;
  flex: 0 0 auto;
}
.fc-mrp-pick-list {
  flex: 0 1 auto;
  min-height: 80px;
  max-height: 200px;
  overflow: auto;
  overscroll-behavior: contain;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 8px;
  background: var(--surface, #fff);
  padding: 4px;
}
.fc-mrp-forecast-list {
  max-height: 140px;
  min-height: 72px;
}
.fc-mrp-early-list {
  max-height: 160px;
}
.fc-mrp-block-forecast .fc-mrp-pick-row {
  grid-template-columns: 16px minmax(0, 1fr);
  gap: 6px;
  padding: 4px 6px;
  font-size: 12px;
}
.fc-mrp-block-forecast .fc-mrp-pick-meta {
  display: none;
}
.fc-mrp-block-forecast .fc-mrp-pick-main small {
  font-size: 11px;
}
.fc-mrp-month-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  max-height: 160px;
  overflow: auto;
  overscroll-behavior: contain;
  padding: 2px 0;
  align-content: flex-start;
}
.fc-mrp-month-chip.is-prepared {
  border-color: #86efac;
  background: color-mix(in srgb, #dcfce7 55%, #fff);
}
.npi-bom-stat-card.fc-mrp-stat {
  cursor: pointer;
  user-select: none;
}
.npi-bom-stat-card.fc-mrp-stat:hover {
  outline: 2px solid color-mix(in srgb, var(--primary, #2563eb) 35%, transparent);
}
.npi-bom-stat-card.fc-mrp-stat.active {
  outline: 2px solid var(--primary, #2563eb);
  box-shadow: 0 0 0 1px var(--primary, #2563eb);
}
.fc-mrp-pick-row {
  display: grid;
  grid-template-columns: 18px minmax(0, 1fr) auto;
  gap: 8px;
  align-items: start;
  padding: 6px 8px;
  border-radius: 6px;
  cursor: pointer;
  font-size: 13px;
}
.fc-mrp-pick-row:hover {
  background: var(--surface-soft, #f1f5f9);
}
.fc-mrp-pick-main {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.fc-mrp-pick-main small {
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fc-mrp-pick-meta {
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}
.fc-mrp-month-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  max-height: 140px;
  overflow: auto;
  overscroll-behavior: contain;
  padding: 2px 0;
}
.fc-mrp-month-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 8px;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 6px;
  background: var(--surface, #fff);
  font-size: 12px;
  cursor: pointer;
  user-select: none;
}
.fc-mrp-month-chip:has(input:checked) {
  border-color: var(--primary, #2563eb);
  background: color-mix(in srgb, var(--primary, #2563eb) 10%, #fff);
}
.fc-mrp-result {
  flex: 1 1 auto;
  min-height: 180px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.fc-mrp-result > .toolbar,
.fc-mrp-result > .npi-bom-stats {
  flex: 0 0 auto;
}
.panel.fc-mrp-panel #fcMrpScroll {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.panel.fc-mrp-panel #fcMrpScroll > .results-inner {
  flex: 1 1 auto;
  min-height: 0;
  min-width: 0;
  overflow: auto;
  overscroll-behavior: contain;
}
.fc-mrp-row-recommend td {
  background: color-mix(in srgb, #fef3c7 55%, transparent);
}
.fc-mrp-row-recommend:hover td {
  background: color-mix(in srgb, #fde68a 65%, transparent);
}
.fc-mrp-row-prepared td {
  background: color-mix(in srgb, #dcfce7 50%, transparent);
}
.fc-mrp-row-unprepared td {
  background: color-mix(in srgb, #ffedd5 45%, transparent);
}
.fc-mrp-row-early td {
  background: color-mix(in srgb, #fef3c7 40%, transparent);
}
@media (max-width: 900px) {
  .fc-mrp-setup-grid {
    grid-template-columns: 1fr;
  }
  .fc-mrp-pick-list {
    max-height: 180px;
  }
}

/* 销售预测 · 分析看板 */
.fc-analytics-board {
  flex: 0 0 auto;
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 10px;
  padding: 10px 12px;
  background: var(--surface-soft, #f8fafb);
  margin-bottom: 4px;
}
.fc-analytics-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 8px;
}
.fc-analytics-stats {
  margin-bottom: 8px;
}
.fc-analytics-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}
.fc-analytics-col-title {
  font-size: 12px;
  font-weight: 600;
  margin-bottom: 4px;
}
.fc-analytics-list {
  margin: 0;
  padding-left: 18px;
  font-size: 12px;
  color: var(--text, #334155);
  line-height: 1.45;
}
.fc-analytics-list .hint {
  list-style: none;
  margin-left: -18px;
  color: var(--muted);
}
@media (max-width: 900px) {
  .fc-analytics-cols {
    grid-template-columns: 1fr;
  }
}

/* ===== 宿舍管理 dorm ===== */
.panel-body:has(.dorm-shell) {
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.panel-body > .panel-head:has(+ .panel-body .dorm-shell),
.panel:has(.dorm-shell) > .panel-head:empty {
  display: none;
}
.dorm-shell {
  --dorm-ink: #1a2421;
  --dorm-muted: #5f6f6a;
  --dorm-line: #d5e2dc;
  --dorm-soft: #f2f7f5;
  --dorm-taken: #0f6b5c;
  --dorm-empty: #e8eef0;
  --dorm-warn: #c45c26;
  padding: 4px 4px 24px;
  gap: 12px;
}
.dorm-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 4px;
}
.dorm-title {
  margin: 0;
  font-size: 20px;
  color: var(--dorm-ink);
}
.dorm-sub {
  margin: 4px 0 0;
  color: var(--dorm-muted);
  font-size: 12px;
}
.dorm-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 8px 0 12px;
}
.dorm-tab {
  border: 1px solid var(--dorm-line);
  background: #fff;
  border-radius: 999px;
  padding: 8px 14px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  font: inherit;
}
.dorm-tab em {
  font-style: normal;
  font-size: 11px;
  background: var(--dorm-soft);
  color: var(--dorm-muted);
  padding: 2px 8px;
  border-radius: 999px;
}
.dorm-tab.is-active {
  background: var(--dorm-taken);
  border-color: var(--dorm-taken);
  color: #fff;
}
.dorm-tab.is-active em {
  background: rgba(255,255,255,.2);
  color: #fff;
}
.dorm-summary {
  display: grid;
  gap: 10px;
  margin-bottom: 12px;
}
.dorm-summary-metrics {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 8px;
}
@media (max-width: 1100px) {
  .dorm-summary-metrics { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .dorm-summary-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.dorm-metric {
  background: #fff;
  border: 1px solid var(--dorm-line);
  border-radius: 12px;
  padding: 10px 10px;
  min-width: 0;
}
.dorm-metric span {
  display: block;
  font-size: 11px;
  color: var(--dorm-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dorm-metric strong {
  font-size: 20px;
  color: var(--dorm-ink);
  line-height: 1.2;
}
.dorm-metric.warn strong { color: var(--dorm-warn); }
.dorm-summary-floors {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.dorm-sum-floor {
  background: var(--dorm-soft);
  border-radius: 8px;
  padding: 6px 10px;
  font-size: 12px;
  color: var(--dorm-ink);
}
.dorm-toolbar {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 10px;
  align-items: center;
  margin: 8px 0 10px;
}
.dorm-floor-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.dorm-pill {
  border: 1px solid var(--dorm-line);
  background: #fff;
  border-radius: 8px;
  padding: 6px 12px;
  cursor: pointer;
  font: inherit;
}
.dorm-pill.is-active {
  background: #12352f;
  color: #fff;
  border-color: #12352f;
}
.dorm-toolbar-right {
  display: flex;
  gap: 8px;
  align-items: center;
}
.dorm-toolbar input,
.dorm-toolbar-right input {
  min-width: 180px;
  border: 1px solid var(--dorm-line);
  border-radius: 8px;
  padding: 7px 10px;
}
.dorm-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  font-size: 12px;
  color: var(--dorm-muted);
  margin-bottom: 12px;
}
.dorm-leg {
  display: inline-block;
  width: 12px;
  height: 12px;
  border-radius: 3px;
  margin-right: 4px;
  vertical-align: -1px;
}
.dorm-leg--taken { background: var(--dorm-taken); }
.dorm-leg--empty { background: var(--dorm-empty); border: 1px solid #c5d0d4; }
.dorm-leg--unsigned { background: #f3c9a8; }
.dorm-leg--amenity { background: #dbe4ea; border: 1px dashed #8aa0ad; }
.dorm-floor {
  margin-bottom: 14px;
}
.dorm-floor-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  margin: 0 0 8px;
  padding-bottom: 4px;
  border-bottom: 2px solid #12352f;
}
.dorm-floor-head h3 {
  margin: 0;
  font-size: 15px;
}
.dorm-floor-head span {
  font-size: 12px;
  color: var(--dorm-muted);
}
.dorm-plan {
  display: flex;
  flex-direction: column;
  gap: 4px;
  overflow-x: auto;
  padding-bottom: 4px;
}
.dorm-plan-label {
  font-size: 11px;
  color: var(--dorm-muted);
  letter-spacing: .04em;
}
.dorm-plan-corridor {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 22px;
  margin: 2px 0;
  border-radius: 4px;
  background: repeating-linear-gradient(
    -45deg,
    #eef3f1,
    #eef3f1 6px,
    #e4ebe8 6px,
    #e4ebe8 12px
  );
  border: 1px dashed #b7c7c1;
  color: #5f6f6a;
  font-size: 11px;
  font-weight: 600;
}
.dorm-plan-row {
  display: grid;
  grid-template-columns: repeat(var(--dorm-cols, 14), minmax(72px, 1fr));
  gap: 4px;
  min-width: max(100%, calc(var(--dorm-cols, 14) * 76px));
}
.dorm-cell {
  border: 1px solid var(--dorm-line);
  border-radius: 6px;
  padding: 5px 6px;
  min-height: 64px;
  background: #fff;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.dorm-cell--spacer {
  border: 0;
  background: transparent;
  min-height: 0;
}
.dorm-cell--room.dorm-cell--empty { background: #f7faf9; }
.dorm-cell--room.dorm-cell--partial { border-color: #9dcdc2; }
.dorm-cell--room.dorm-cell--full { border-color: #f0b089; background: #fffaf6; }
.dorm-cell--room.is-unsigned { box-shadow: inset 0 0 0 1px rgba(196, 92, 38, .25); }
.dorm-cell-top {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 4px;
}
.dorm-cell-no {
  font-size: 13px;
  font-weight: 700;
  color: var(--dorm-ink);
  line-height: 1.1;
}
.dorm-cell-tag {
  font-size: 10px;
  padding: 1px 5px;
  border-radius: 4px;
  background: var(--dorm-soft);
  color: var(--dorm-taken);
  white-space: nowrap;
}
.dorm-cell--full .dorm-cell-tag { background: #ffedd5; color: #c2410c; }
.dorm-cell-fill {
  font-size: 11px;
  color: var(--dorm-muted);
}
.dorm-cell-fill b { color: var(--dorm-ink); }
.dorm-slotbar {
  display: flex;
  gap: 3px;
  align-items: stretch;
  height: 8px;
  margin: 2px 0 1px;
}
.dorm-slotbar .dorm-slot {
  flex: 1 1 0;
  min-width: 0;
  border-radius: 99px;
  background: #dfe8e4;
  border: 1px solid #c5d2cd;
}
.dorm-slotbar .dorm-slot.is-on {
  background: linear-gradient(90deg, #0f6b5c, #2a9d8f);
  border-color: #0f6b5c;
}
.dorm-slotbar .dorm-slot.is-on.is-unsigned {
  background: linear-gradient(90deg, #c45c26, #e07a3d);
  border-color: #c45c26;
}
.dorm-cell--full .dorm-slotbar .dorm-slot.is-on {
  background: linear-gradient(90deg, #c45c26, #e07a3d);
  border-color: #b45309;
}
.dorm-cell-names {
  font-size: 11px;
  line-height: 1.25;
  color: var(--dorm-ink);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.dorm-cell--amenity {
  align-items: center;
  justify-content: center;
  text-align: center;
  background: #e8eef2;
  border-style: dashed;
  border-color: #8aa0ad;
  color: #3d5563;
  font-size: 11px;
  font-weight: 600;
  min-height: 64px;
}
.dorm-cell--stairs { background: #edf2f6; }
.dorm-cell--elevator { background: #e7f0fb; }
.dorm-cell--toilet { background: #eaf6f1; }
.dorm-room-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 10px;
}
.dorm-room {
  background: #fff;
  border: 1px solid var(--dorm-line);
  border-radius: 14px;
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-height: 148px;
}
.dorm-room--empty { background: #fafcfc; }
.dorm-room--full { border-color: #f0b089; box-shadow: inset 0 0 0 1px rgba(196,92,38,.12); }
.dorm-room--partial { border-color: #9dcdc2; }
.dorm-room-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
}
.dorm-room-no {
  font-size: 20px;
  font-weight: 700;
  letter-spacing: .02em;
  color: var(--dorm-ink);
}
.dorm-room-fill {
  display: flex;
  align-items: center;
  gap: 6px;
}
.dorm-room-count {
  font-size: 13px;
  color: var(--dorm-muted);
}
.dorm-room-count b {
  color: var(--dorm-ink);
  font-size: 16px;
}
.dorm-room-tag {
  font-size: 11px;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--dorm-soft);
  color: var(--dorm-taken);
}
.dorm-room--full .dorm-room-tag { background: #ffedd5; color: #c2410c; }
.dorm-room--empty .dorm-room-tag { background: #eef2f4; color: #64748b; }
.dorm-room-bar {
  height: 4px;
  background: #e7eeeb;
  border-radius: 99px;
  overflow: hidden;
}
.dorm-room-bar i {
  display: block;
  height: 100%;
  background: linear-gradient(90deg, #0f6b5c, #2a9d8f);
  border-radius: 99px;
}
.dorm-room--full .dorm-room-bar i { background: linear-gradient(90deg, #c45c26, #e07a3d); }
.dorm-beds {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
}
.dorm-bed {
  border-radius: 8px;
  padding: 6px 7px;
  min-height: 44px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.dorm-bed.is-taken {
  background: rgba(15, 107, 92, .1);
  border: 1px solid rgba(15, 107, 92, .28);
}
.dorm-bed.is-unsigned {
  background: #fff1e6;
  border-color: #f0b089;
}
.dorm-bed.is-empty {
  background: #f4f7f8;
  border: 1px dashed #c5d0d4;
  color: #94a3b8;
}
.dorm-bed-mark {
  font-size: 10px;
  opacity: .75;
}
.dorm-bed-name {
  font-size: 12px;
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dorm-bed.is-taken .dorm-bed-name { color: var(--dorm-ink); }
.dorm-form-card {
  background: #fff;
  border: 1px solid var(--dorm-line);
  border-radius: 12px;
  padding: 10px 12px;
  margin: 0 0 12px;
}
.dorm-form-card summary {
  cursor: pointer;
  font-weight: 600;
}
.dorm-form { margin-top: 10px; }
.dorm-check { display: flex; align-items: center; gap: 8px; }
.dorm-stay-board {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 10px;
}
.dorm-stay-group {
  background: #fff;
  border: 1px solid var(--dorm-line);
  border-radius: 12px;
  overflow: hidden;
}
.dorm-stay-group > header {
  display: flex;
  justify-content: space-between;
  padding: 8px 12px;
  background: var(--dorm-soft);
  border-bottom: 1px solid var(--dorm-line);
}
.dorm-stay-group ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.dorm-stay-person {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 12px;
  border-bottom: 1px solid #eef3f1;
  align-items: center;
}
.dorm-stay-person:last-child { border-bottom: 0; }
.dorm-stay-person .muted {
  display: block;
  font-size: 11px;
  color: var(--dorm-muted);
  margin-top: 2px;
}
.dorm-stay-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  justify-content: flex-end;
}
.dorm-section-title {
  margin: 14px 0 8px;
  font-size: 14px;
}
.dorm-apply-list {
  display: grid;
  gap: 8px;
}
.dorm-apply-card {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  background: #fff;
  border: 1px solid var(--dorm-line);
  border-radius: 12px;
  padding: 12px;
  align-items: flex-start;
}
.dorm-apply-card--pending {
  border-color: #f0b089;
  background: #fffaf5;
}
.dorm-apply-title {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
}
.dorm-apply-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 12px;
  font-size: 12px;
  color: var(--dorm-muted);
}
.dorm-apply-reason {
  margin: 8px 0 0;
  font-size: 13px;
}
.dorm-apply-actions {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 110px;
}
.dorm-table-wrap {
  overflow: auto;
  border: 1px solid var(--dorm-line);
  border-radius: 12px;
  background: #fff;
}
.dorm-hist-table td.dorm-hist-note {
  max-width: 360px;
  font-size: 12px;
  color: var(--dorm-muted);
  white-space: normal;
}
.dorm-meter-head {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 20px;
  align-items: flex-end;
  justify-content: space-between;
  margin: 8px 0 12px;
}
.dorm-meter-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}
.dorm-meter-controls label {
  display: flex;
  gap: 6px;
  align-items: center;
  font-size: 13px;
  color: var(--dorm-muted);
}
.dorm-meter-controls input[type="month"] {
  border: 1px solid var(--dorm-line);
  border-radius: 8px;
  padding: 6px 8px;
}
.dorm-meter-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  margin-bottom: 10px;
}
.dorm-meter-stat {
  border: 1px solid var(--dorm-line);
  background: #fff;
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 13px;
  cursor: pointer;
}
.dorm-meter-stat.is-on {
  border-color: #0f766e;
  background: #ecfdf5;
  color: #0f766e;
}
.dorm-meter-stat-note {
  font-size: 13px;
  color: var(--dorm-muted);
  margin-left: 4px;
}
.dorm-meter-wrap {
  max-height: min(70vh, 720px);
}
.dorm-meter-table {
  width: 100%;
  min-width: 1180px;
  border-collapse: collapse;
  table-layout: fixed;
}
.dorm-meter-table th,
.dorm-meter-table td {
  padding: 8px 10px;
  border-bottom: 1px solid #e8eeec;
  vertical-align: top;
  font-size: 12.5px;
  line-height: 1.35;
}
.dorm-meter-table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: #f4f7f6;
  color: #4b5c57;
  font-weight: 600;
  white-space: nowrap;
}
.dorm-meter-num {
  text-align: right;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.dorm-meter-people {
  margin-top: 2px;
  font-size: 11px;
  color: var(--dorm-muted);
  white-space: normal;
  word-break: break-all;
}
.dorm-meter-actions {
  white-space: nowrap;
  min-width: 120px;
}
.dorm-meter-actions .btn-sm {
  margin: 0 4px 4px 0;
}
.dorm-meter-charge {
  color: #b45309;
  font-weight: 600;
  white-space: normal;
}
.dorm-meter-waive {
  color: #047857;
  white-space: normal;
}
.dorm-meter-row--missing td {
  background: #fcfcfd;
}
.dorm-meter-row--pending td {
  background: #fffbeb;
}
.dorm-meter-row--confirmed td {
  background: #f0fdf4;
}
.dorm-agree-link {
  font-size: 12px;
  margin-left: 4px;
}
.dorm-modal-mask {
  position: fixed;
  inset: 0;
  z-index: 80;
  background: rgba(15, 23, 42, 0.45);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
}
.dorm-modal {
  width: min(720px, 100%);
  max-height: min(88vh, 900px);
  background: #fff;
  border-radius: 14px;
  box-shadow: 0 18px 50px rgba(0,0,0,.22);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.dorm-modal-head,
.dorm-modal-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--dorm-line);
}
.dorm-modal-foot {
  border-bottom: 0;
  border-top: 1px solid var(--dorm-line);
  justify-content: flex-end;
}
.dorm-modal-head h3 {
  margin: 0;
  font-size: 16px;
}
.dorm-modal-body {
  padding: 14px 16px;
  overflow: auto;
  display: grid;
  gap: 10px;
}
.dorm-modal-body .field {
  display: grid;
  gap: 4px;
  font-size: 13px;
}
.dorm-sign-agree-box {
  max-height: 280px;
  overflow: auto;
  border: 1px solid var(--dorm-line);
  border-radius: 10px;
  padding: 10px 12px;
  background: #f8faf9;
  font-size: 13px;
  line-height: 1.5;
}
.dorm-sign-agree-box .dorm-agree-warn {
  color: #b91c1c;
  font-weight: 700;
}
@media (max-width: 720px) {
  .dorm-apply-card { flex-direction: column; }
  .dorm-apply-actions { flex-direction: row; width: 100%; }
}

.dorm-room-type {
  font-size: 11px;
  color: #5f6f6a;
  margin-top: 2px;
}
.dorm-room--single .dorm-room-type,
.dorm-room[data-room] .dorm-room-type {
  font-weight: 600;
}

.dorm-assign-row { display:flex; flex-wrap:wrap; gap:8px; margin-top:10px; align-items:center; }
.dorm-archive-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 10px;
  align-items: center;
}
.dorm-agree-pdf {
  display: inline-flex;
  align-items: center;
  padding: 6px 12px;
  border-radius: 8px;
  background: #eff6ff;
  border: 1px solid #93c5fd;
  color: #1d4ed8;
  text-decoration: none;
  font-size: 13px;
  font-weight: 600;
}
.dorm-agree-pdf:hover { background: #dbeafe; }
.dorm-fee-panel { max-width: 720px; }
.dorm-fee-form .full { grid-column: 1 / -1; }
.dorm-fee-preview {
  margin-top: 16px;
  padding: 12px 14px;
  background: #f8fafc;
  border-radius: 10px;
  border: 1px solid #e2e8f0;
}
.dorm-fee-preview ul { margin: 8px 0 0; padding-left: 18px; line-height: 1.8; }
.dorm-assign-room { border:1px solid var(--dorm-line,#d5e2dc); border-radius:8px; padding:6px 8px; }

.dorm-sign-preview { margin-top:8px; }
.dorm-sign-preview img { max-width:240px; max-height:90px; border:1px solid #d5e2dc; border-radius:8px; background:#fff; }

.dorm-doc-parties { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.dorm-party { border: 1px dashed #c5d2cd; border-radius: 10px; padding: 10px; background: #fafcfc; }
.dorm-party-label { font-weight: 700; margin-bottom: 6px; }
.dorm-seal { width: 96px; height: 96px; object-fit: contain; }
.dorm-handsign { max-width: 100%; max-height: 80px; background: #fff; border: 1px solid #e5e7eb; border-radius: 6px; }

.emp-recruit-layout {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 16px;
  align-items: start;
}
.emp-recruit-qr {
  border: 1px solid #e2e8f0;
  border-radius: 10px;
  padding: 12px;
  background: #f8fafc;
  text-align: center;
}
.emp-recruit-qr img {
  width: 200px;
  height: 200px;
  background: #fff;
  border-radius: 8px;
}
@media (max-width: 800px) {
  .emp-recruit-layout { grid-template-columns: 1fr; }
}
