:root {
  --font-sans: "MiSans", "HarmonyOS Sans SC", "Microsoft YaHei UI", "Microsoft YaHei", "Segoe UI Variable", "Segoe UI", system-ui, sans-serif;
  --font-number: "Aptos", "Segoe UI Variable", "Microsoft YaHei UI", sans-serif;
  --font-mono: "Cascadia Mono", Consolas, "SFMono-Regular", monospace;
  --accent: #2563eb;
  --accent-dark: #1d4ed8;
  --accent-soft: #eef4ff;
  --canvas: #f5f6f8;
  --surface: #fcfcfd;
  --surface-2: #f0f2f4;
  --text: #1f2933;
  --muted: #66717d;
  --border: #dde2e7;
  --success: #16794b;
  --success-soft: #eaf7f0;
  --warning: #a15c08;
  --warning-soft: #fff4df;
  --danger: #b43b35;
  --danger-soft: #fceceb;
  --sidebar: #243039;
  --sidebar-text: #dce3e7;
  --radius-sm: 6px;
  --radius: 8px;
  --focus: 0 0 0 3px rgb(37 99 235 / 20%);
  color-scheme: light;
  font-family: var(--font-sans);
}

* { box-sizing: border-box; }
html { min-width: 320px; background: var(--canvas); }
body { min-height: 100vh; margin: 0; color: var(--text); background: var(--canvas); font-size: 15px; line-height: 1.55; font-family: var(--font-sans); font-synthesis: none; }
button, input, select, textarea { font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
a { color: inherit; text-decoration: none; }
button { color: inherit; cursor: pointer; }
svg { display: block; width: 16px; height: 16px; flex: 0 0 16px; }
:focus-visible { outline: 0; box-shadow: var(--focus); }

.skip-link { position: fixed; z-index: 200; top: 8px; left: 8px; padding: 8px 12px; color: var(--surface); background: var(--accent); border-radius: var(--radius-sm); transform: translateY(-160%); }
.skip-link:focus { transform: translateY(0); }
.app-shell { min-height: 100vh; }

.sidebar { position: fixed; z-index: 30; inset: 0 auto 0 0; width: 220px; display: flex; flex-direction: column; padding: 0 12px; color: var(--sidebar-text); background: var(--sidebar); }
.brand { height: 68px; display: flex; align-items: center; gap: 10px; padding: 0 10px; border-bottom: 1px solid rgb(255 255 255 / 9%); }
.brand-mark { width: 28px; height: 28px; display: flex; align-items: flex-end; justify-content: center; gap: 3px; padding: 6px; background: var(--accent); border-radius: var(--radius-sm); }
.brand-mark span { width: 3px; background: #f8fafc; border-radius: 1px; }
.brand-mark span:nth-child(1) { height: 9px; }
.brand-mark span:nth-child(2) { height: 15px; }
.brand-mark span:nth-child(3) { height: 12px; }
.brand-logo { width: 28px; height: 28px; border-radius: var(--radius-sm); object-fit: contain; }
.brand strong, .brand small { display: block; }
.brand strong { color: #f8fafc; font-size: 15px; letter-spacing: .04em; }
.brand small { margin-top: 1px; color: #aebbc2; font-size: 12px; }
.nav-list { display: flex; flex-direction: column; gap: 2px; padding: 14px 0; overflow-y: auto; flex: 1; }
.business-menu-loading { display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 96px; color: #cbd4d9; font-size: 14px; }
.business-menu-spinner { width: 20px; height: 20px; flex: 0 0 20px; border: 2px solid rgb(255 255 255 / 18%); border-top-color: #93c5fd; border-radius: 50%; animation: business-menu-spin 800ms linear infinite; }
@keyframes business-menu-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .business-menu-spinner { animation: none; } }
.nav-section { padding: 16px 14px 6px; color: #7a8b99; font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.nav-list a { min-height: 42px; display: grid; grid-template-columns: 18px 1fr auto; align-items: center; gap: 10px; padding: 0 11px; color: #cbd4d9; border-radius: var(--radius-sm); font-size: 14px; font-weight: 600; transition: background-color 160ms cubic-bezier(.25,1,.5,1), color 160ms cubic-bezier(.25,1,.5,1); position: relative; }
.nav-list a:hover { color: #f8fafc; background: rgb(255 255 255 / 6%); }
.nav-list a.is-active { color: #f8fafc; background: rgb(37 99 235 / 70%); }
.nav-list a.is-active::before { content: ''; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; background: #93c5fd; border-radius: 0 2px 2px 0; }
.nav-list a > span:first-child { display: grid; place-items: center; }
.nav-list a > span:first-child svg { width: 18px; height: 18px; }
.nav-count { min-width: 22px; height: 22px; display: grid; place-items: center; padding: 0 5px; color: #f8fafc; background: rgb(255 255 255 / 14%); border-radius: 11px; font-size: 12px; }
.nav-count-warn { background: #d97706; }
.nav-flow-step { min-width: 36px; height: 20px; display: grid; place-items: center; padding: 0 6px; color: #8fa0a9; background: rgb(255 255 255 / 6%); border-radius: 10px; font-size: 11px; font-weight: 500; }
.nav-count-warn { color: #33200a; background: #f8c66e; }
.sidebar-footer { position: relative; margin-top: auto; padding: 12px 0 14px; border-top: 1px solid rgb(255 255 255 / 9%); }
.sync-status { display: flex; align-items: center; gap: 8px; padding: 8px 11px; color: #aebbc2; font-size: 13px; }
.signal-dot { width: 8px; height: 8px; flex: 0 0 8px; background: #4cc084; border-radius: 50%; }
.user-chip { width: 100%; display: grid; grid-template-columns: 32px 1fr 16px; align-items: center; gap: 9px; padding: 8px 10px; color: #e5ebee; text-align: left; background: transparent; border: 0; border-radius: var(--radius-sm); }
.user-chip:hover { background: rgb(255 255 255 / 6%); }
.user-chip strong, .user-chip small { display: block; }
.user-chip strong { font-size: 14px; }
.user-chip small { color: #9cabb3; font-size: 12px; }
.avatar { width: 32px; height: 32px; display: grid; place-items: center; color: #183b72; background: #dce9ff; border-radius: 50%; font-weight: 700; }

/* 账号悬浮提示 */
.user-tooltip { position: absolute; bottom: 100%; left: 8px; right: 8px; margin-bottom: 6px; padding: 10px; background: #1e2d3d; border: 1px solid rgb(255 255 255 / 10%); border-radius: var(--radius-md); box-shadow: 0 8px 24px rgb(0 0 0 / 35%); z-index: 50; }
.user-tooltip::after { content: ''; position: absolute; bottom: -6px; left: 24px; width: 0; height: 0; border-left: 6px solid transparent; border-right: 6px solid transparent; border-top: 6px solid #1e2d3d; }
.user-tooltip-info { display: flex; align-items: center; gap: 10px; }
.user-tooltip-info strong { display: block; color: #e5ebee; font-size: 13px; }
.user-tooltip-info small { display: block; color: #9cabb3; font-size: 12px; }
.user-tooltip .button { color: #e5ebee; background: rgb(255 255 255 / 8%); border-color: rgb(255 255 255 / 15%); }
.user-tooltip .button:hover { background: rgb(255 255 255 / 15%); color: #fff; }

.workspace { min-height: 100vh; margin-left: 220px; }
.topbar { position: sticky; z-index: 20; top: 0; height: 56px; display: flex; align-items: center; gap: 14px; padding: 0 22px; background: rgb(252 252 253 / 94%); backdrop-filter: blur(8px); border-bottom: 1px solid var(--border); }
.page-heading h1 { margin: 0; font-size: 19px; font-weight: 700; letter-spacing: -.01em; line-height: 1.3; }
.topbar-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; }
.system-clock { display: flex; align-items: center; gap: 8px; color: var(--muted); }
.system-clock > svg { color: var(--accent); }
.system-clock strong, .system-clock small { display: block; }
.system-clock strong { color: var(--text); font-size: 14px; font-weight: 600; }
.system-clock small { font-size: 12px; }
.icon-button { width: 36px; height: 36px; display: grid; place-items: center; padding: 0; color: var(--muted); background: transparent; border: 1px solid transparent; border-radius: var(--radius-sm); }
.icon-button:hover { color: var(--text); background: var(--surface-2); }
.has-indicator { position: relative; }
.has-indicator::after { content: ""; position: absolute; top: 7px; right: 7px; width: 7px; height: 7px; background: var(--danger); border: 2px solid var(--surface); border-radius: 50%; }
.mobile-menu { display: none; }

#main-content { min-height: calc(100vh - 56px); padding: 20px 22px 40px; }
.page-stack { display: grid; gap: 16px; max-width: 1440px; margin: 0 auto; }

/* ── 步骤指示器 ── */
.workflow-bar { background: var(--surface); border-bottom: 1px solid var(--border); padding: 0 22px; }
.workflow-steps { display: flex; align-items: center; gap: 0; max-width: 1440px; margin: 0 auto; overflow-x: auto; }
.workflow-dot { display: flex; align-items: center; gap: 6px; padding: 10px 4px; color: var(--muted); font-size: 12px; font-weight: 500; white-space: nowrap; text-decoration: none; flex-shrink: 0; }
.workflow-dot:hover { color: var(--text); }
.workflow-dot.is-done { color: var(--success); }
.workflow-dot.is-current { color: var(--accent); font-weight: 700; }
.workflow-dot .wf-num { width: 22px; height: 22px; display: grid; place-items: center; border-radius: 50%; font-size: 11px; background: var(--surface-2); }
.workflow-dot.is-done .wf-num { background: var(--success-soft); color: var(--success); }
.workflow-dot.is-current .wf-num { background: var(--accent-soft); color: var(--accent); }
.wf-line { flex: 0 0 20px; height: 1px; background: var(--border); }
.wf-line.is-done { background: var(--success); }
.wf-label { display: none; }
@media (min-width: 900px) { .wf-label { display: inline; } }

/* ── 新侧边栏样式 ── */
.nav-section-main { color: #8ab4f8 !important; font-size: 12px !important; padding-top: 6px !important; }
.nav-section-admin { color: #f0c060 !important; font-size: 12px !important; }
.nav-section-tools { color: #9cabb3 !important; font-size: 11px !important; padding-top: 8px !important; }
.nav-list a.nav-dashboard { font-weight: 700; font-size: 15px; padding: 8px 12px; margin-bottom: 8px; gap: 10px; border-radius: var(--radius); }
.nav-list a.nav-dashboard.is-active { background: var(--accent); color: #fff; }
.nav-list a.nav-dashboard svg { width: 22px; height: 22px; }
.nav-step-num { width: 20px; height: 20px; display: grid; place-items: center; color: #8ab4f8; background: rgb(138 180 248 / 12%); border-radius: 50%; font-size: 11px; font-weight: 700; }
.nav-list a.is-active .nav-step-num { color: #f8fafc; background: rgb(255 255 255 / 25%); }
.nav-list a.nav-production { grid-template-columns: 22px 1fr; }
/* Business menus follow the configured directory tree. */
.business-menu-tree { list-style: none; margin: 0; padding: 0; min-width: 0; }
.business-menu-tree[hidden] { display: none; }
.business-menu-tree .business-menu-tree { background: rgb(0 0 0 / 12%); }
.business-menu-item { margin: 0; padding: 0; }
.nav-list a.business-menu-link,
.business-menu-toggle { width: 100%; min-height: 46px; display: grid; grid-template-columns: 22px minmax(0, 1fr); align-items: center; gap: 8px; padding: 0 11px 0 calc(11px + var(--menu-indent, 0px)); margin: 0; color: #cbd4d9; background: transparent; border: 0; border-radius: var(--radius-sm); font: inherit; font-size: 14px; font-weight: 500; text-align: left; cursor: pointer; }
.business-menu-toggle { grid-template-columns: 22px minmax(0, 1fr) 14px; }
.business-menu-tree .nav-label { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.business-menu-toggle > span:first-child { display: grid; place-items: center; }
.business-menu-toggle svg { width: 18px; height: 18px; }
.business-menu-toggle .business-menu-arrow { display: grid; place-items: center; transition: transform 160ms; }
.business-menu-toggle .business-menu-arrow svg { width: 14px; height: 14px; }
.business-menu-toggle[aria-expanded="true"] .business-menu-arrow { transform: rotate(90deg); }
.business-menu-toggle:hover { background: rgb(255 255 255 / 6%); color: #f8fafc; }
.business-menu-toggle.is-active-ancestor { color: #93c5fd; }
.business-menu-toggle:focus-visible,
.nav-list a.business-menu-link:focus-visible { outline: 2px solid #93c5fd; outline-offset: -2px; }
.nav-list a.business-menu-link.is-active { color: #fff; background: rgb(37 99 235 / 70%); }


/* ── 工作台面板 ── */
.pipeline { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; margin-bottom: 20px; }
.pipeline-card { display: flex; flex-direction: column; gap: 6px; padding: 14px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); text-decoration: none; transition: box-shadow 160ms; }
.pipeline-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.pipeline-card .step-tag { align-self: flex-start; padding: 2px 8px; color: var(--accent); background: var(--accent-soft); border-radius: 10px; font-size: 11px; font-weight: 600; }
.pipeline-card .step-tag.is-active { color: var(--success); background: var(--success-soft); }
.pipeline-card .step-count { font-size: 24px; font-weight: 800; color: var(--text); line-height: 1.1; word-break: keep-all; }
.pipeline-card .step-hint { color: var(--muted); font-size: 12px; margin: 0; line-height: 1.3; }
.pipeline-card.is-next { border-color: var(--accent); background: var(--accent-soft); }

/* ── 总览数据卡片 ── */
.summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; margin-bottom: 20px; }
.summary-card { display: flex; flex-direction: column; gap: 4px; padding: 14px 16px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); text-decoration: none; transition: box-shadow 160ms; }
.summary-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.summary-card .summary-label { font-size: 12px; color: var(--muted); }
.summary-card .summary-value { font-size: 22px; font-weight: 800; color: var(--text); }

/* ── 快捷操作 ── */
.quick-actions { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 20px; }

/* ── 待办列表 ── */
.todo-list { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.todo-item { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--border); font-size: 14px; }
.todo-item:last-child { border-bottom: 0; }
.todo-item .todo-icon { flex-shrink: 0; width: 20px; color: var(--warning); }
.todo-item a { color: var(--accent); font-weight: 600; }
.todo-item a:hover { text-decoration: underline; }

/* ── 机台队列卡片 ── */
.machine-queue-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 12px; }
.machine-queue-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.mq-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; background: var(--surface-2); font-weight: 700; }
.mq-block { display: flex; align-items: center; gap: 8px; padding: 8px 14px; border-bottom: 1px solid var(--border); font-size: 13px; }
.mq-block:last-child { border-bottom: 0; }
.mq-block .mq-order { width: 22px; height: 22px; display: grid; place-items: center; background: var(--surface-2); border-radius: 50%; font-size: 11px; font-weight: 700; flex-shrink: 0; }
.mq-block .mq-info { flex: 1; min-width: 0; }
.mq-block .mq-info strong { display: block; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mq-block .mq-info span { color: var(--muted); font-size: 11px; }
.mq-block .mq-time { color: var(--muted); font-size: 11px; white-space: nowrap; }
.mq-block-locked { background: linear-gradient(90deg, #fff9e6 0%, transparent 100%); border-left: 3px solid var(--warning, #f0a000); }
.mq-block-locked .mq-order { background: var(--warning, #f0a000); color: #fff; }
.mq-actions { display: flex; gap: 2px; align-items: center; }
.mq-actions button { width: 24px; height: 24px; display: grid; place-items: center; padding: 0; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); cursor: pointer; font-size: 12px; color: var(--muted); }
.mq-roller-warning { display: flex; flex-direction: column; gap: 3px; padding: 6px 14px; background: #fff3cd; border-bottom: 1px solid #ffc107; font-size: 11px; }
.mq-roller-warning span { color: #856404; font-weight: 600; }
.mq-actions button:hover { color: var(--text); background: var(--surface-2); }
.mq-actions .machine-switch { height: 24px; padding: 0 2px; border: 1px solid var(--border); border-radius: 4px; background: var(--surface); font-size: 10px; color: var(--muted); cursor: pointer; max-width: 72px; }
.mq-actions .machine-switch:focus { outline: 1px solid var(--accent); }
.page-toolbar, .simple-toolbar { display: flex; align-items: center; gap: 10px; min-height: 40px; }
.page-toolbar > div:first-child { max-width: 680px; }
.page-toolbar .eyebrow { display: block; font-size: 11px; font-weight: 700; letter-spacing: .05em; color: var(--muted); margin: 0 0 2px; }
.page-toolbar h2, .simple-toolbar h2 { margin: 0; font-size: 19px; font-weight: 700; letter-spacing: -.01em; line-height: 1.3; }
.page-toolbar p, .simple-toolbar p { margin: 2px 0 0; color: var(--muted); font-size: 13px; }
.toolbar-spacer { flex: 1; }
.compact-toolbar { min-height: auto; padding: 10px 12px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.compact-toolbar .select { width: auto; max-width: 140px; flex-shrink: 0; }
.toolbar-note { margin: 0; color: var(--muted); font-size: 12px; }
.eyebrow { margin: 0 0 3px; color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .04em; }

.button { min-height: 40px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 8px 15px; border: 1px solid transparent; border-radius: var(--radius-sm); font-size: 14px; font-weight: 600; white-space: nowrap; transition: background-color 160ms cubic-bezier(.25,1,.5,1), border-color 160ms cubic-bezier(.25,1,.5,1); cursor: pointer; }
.button:disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; }
.button-primary { color: #f8fafc; background: var(--accent); }
.button-primary:hover { background: var(--accent-dark); }
.button-secondary { color: var(--text); background: var(--surface); border-color: var(--border); }
.button-sm { min-height:32px; padding:4px 12px; font-size:13px; }
.button-secondary:hover { background: var(--surface-2); border-color: #c7cfd6; }
.button-quiet { color: var(--accent); background: transparent; }
.button-danger { color: #fdf9f8; background: var(--danger); }
.link-button { display: inline-flex; align-items: center; gap: 5px; padding: 5px 2px; color: var(--accent); background: transparent; border: 0; font-size: 14px; font-weight: 600; }
.link-button:hover { color: var(--accent-dark); text-decoration: underline; text-underline-offset: 3px; }

.panel { min-width: 0; padding: 16px 18px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.panel-flush { padding: 0; overflow: hidden; }
.panel-header { min-height: 52px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-bottom: 12px; }
.panel-flush > .panel-header { padding: 14px 18px 12px; border-bottom: 1px solid var(--border); }
.panel-header h3 { margin: 0; font-size: 15px; font-weight: 700; }
.panel-header .eyebrow { margin: 0 0 2px; }
.panel-header small { color: var(--muted); font-size: 12px; }
.panel-body { padding: 18px; }
.content-grid { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(340px, 1fr); gap: 18px; align-items: start; }
.content-grid-balanced { grid-template-columns: 1fr 1fr; }

.workflow { display: grid; grid-template-columns: repeat(5, 1fr); margin: 0; padding: 14px 16px; list-style: none; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.workflow li { position: relative; display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 34px; color: var(--muted); font-weight: 600; }
.workflow li:not(:last-child)::after { content: ""; position: absolute; top: 50%; right: -12%; width: 24%; height: 1px; background: var(--border); }
.workflow b { width: 26px; height: 26px; display: grid; place-items: center; border: 1px solid var(--border); border-radius: 50%; font-size: 13px; }
.workflow .done { color: var(--success); }
.workflow .done b { color: var(--success); background: var(--success-soft); border-color: #b6ddc8; }
.workflow .active { color: var(--accent); }
.workflow .active b { color: #f8fafc; background: var(--accent); border-color: var(--accent); }
.queue-list { display: grid; }
.queue-item { display: grid; grid-template-columns: 58px minmax(260px, 1fr) 110px 120px 16px; align-items: center; gap: 14px; min-height: 64px; padding: 8px 18px; border-bottom: 1px solid var(--border); }
.queue-item:last-child { border-bottom: 0; }
.queue-item:hover { background: #f8f9fb; }
.queue-order { font-size: 15px; }
.queue-time { color: var(--muted); font-size: 14px; text-align: right; }
.primary-cell strong, .primary-cell small { display: block; }
.primary-cell strong { font-size: 15px; }
.primary-cell small { margin-top: 3px; color: var(--muted); font-size: 13px; line-height: 1.45; }
.overview-line { display: flex; align-items: center; gap: 0; padding: 16px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.overview-line > div { min-width: 180px; display: flex; align-items: baseline; gap: 7px; padding: 0 24px; border-right: 1px solid var(--border); }
.overview-line > div:first-child { padding-left: 0; }
.overview-line > div:last-child { border-right: 0; }
.overview-line span { color: var(--muted); }
.overview-line strong { font-size: 24px; }
.overview-line small { color: var(--muted); }

.kpi-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
.kpi { min-height: 96px; display: grid; align-content: center; gap: 4px; padding: 14px 18px; border-right: 1px solid var(--border); }
.kpi:last-child { border-right: 0; }
.kpi-icon { display: none; }
.kpi-label { color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .04em; }
.kpi-value { font-size: 22px; line-height: 1.2; }
.kpi-meta { color: var(--muted); font-size: 12px; }
.metric-strip { display: grid; grid-template-columns: repeat(5, 1fr); border: 1px solid var(--border); border-radius: var(--radius); }
.metric-strip > div { min-height: 82px; display: grid; align-content: center; gap: 3px; padding: 12px 16px; border-right: 1px solid var(--border); }
.metric-strip > div:last-child { border-right: 0; }
.metric-strip strong { font-size: 17px; }
.metric-strip small { color: var(--muted); font-size: 13px; }

.status { width: fit-content; display: inline-flex; align-items: center; gap: 7px; padding: 4px 9px; border-radius: 12px; font-size: 13px; font-weight: 600; white-space: nowrap; }
.status > span { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.status-pending { color: var(--warning); background: var(--warning-soft); }
.status-running { color: var(--accent-dark); background: var(--accent-soft); }
.status-complete { color: var(--success); background: var(--success-soft); }
.status-danger { color: var(--danger); background: var(--danger-soft); }
.status-muted { color: var(--muted); background: var(--surface-2); }

.table-wrap { overflow: auto; }
.data-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.data-table th { height: 38px; padding: 0 12px; color: var(--muted); text-align: left; background: var(--surface-2); border-bottom: 1px solid var(--border); font-size: 12px; font-weight: 600; white-space: nowrap; letter-spacing: .02em; }
.data-table td { min-height: 46px; padding: 10px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; }
.data-table tbody tr:last-child td { border-bottom: 0; }
.task-row { cursor: pointer; transition: background-color 120ms; }
.task-row:hover { background: #f8f9fb; }
.task-row.is-selected { background: var(--accent-soft); }
.task-row.is-selected td:first-child { box-shadow: inset 3px 0 0 var(--accent); }
.task-layout { display: grid; grid-template-columns: minmax(580px, 1fr) 350px; gap: 18px; align-items: start; }
.task-detail { position: sticky; top: 92px; }
.detail-list { display: grid; }
.detail-list > div { display: grid; grid-template-columns: 110px 1fr; gap: 12px; min-height: 46px; align-items: center; border-bottom: 1px solid var(--border); }
.detail-list > div:last-child { border-bottom: 0; }
.detail-list span { color: var(--muted); }
.detail-list strong { text-align: right; overflow-wrap: anywhere; }
.detail-actions { display: grid; gap: 8px; margin-top: 16px; }
.detail-actions .button { width: 100%; }
.detail-empty { min-height: 260px; display: grid; place-items: center; color: var(--muted); }

.search-wrap { min-width: 280px; height: 40px; display: flex; align-items: center; gap: 8px; padding: 0 11px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); }
.search-wrap:focus-within { border-color: var(--accent); box-shadow: var(--focus); }
.search-wrap svg { color: var(--muted); }
.search-input { width: 100%; font-size: 14px; color: var(--text); background: transparent; border: 0; outline: 0; }
.input, .select { min-height: 40px; width: 100%; padding: 8px 11px; color: var(--text); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); }

/* ── 图片上传 ── */
.image-upload-area { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.image-thumb { position: relative; display: inline-flex; }
.image-thumb .image-remove { position: absolute; top: -6px; right: -6px; width: 20px; height: 20px; border-radius: 50%; background: var(--danger); color: #fff; border: 2px solid #fff; font-size: 12px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.image-add-btn { width: 80px; height: 80px; border: 2px dashed var(--border); border-radius: 4px; display: flex; align-items: center; justify-content: center; font-size: 28px; color: var(--muted); cursor: pointer; }
.image-add-btn:hover { border-color: var(--accent); color: var(--accent); }

/* ── 荒料选择器 ── */
.block-pick-row { transition: background 120ms; }
.block-pick-row:hover { background: var(--surface-2) !important; }
.block-pick-row.is-picked { background: var(--accent-soft) !important; }
textarea.input { resize: vertical; }
.input:hover, .select:hover { border-color: #b9c2ca; }
.input:focus, .select:focus { outline: 0; border-color: var(--accent); box-shadow: var(--focus); }
.field { display: grid; gap: 6px; color: var(--text); font-size: 14px; font-weight: 600; }
.field-required { color: var(--danger); font-weight: 700; font-size: 13px; margin-right: 1px; }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

.schedule-legend { display: flex; align-items: center; flex-wrap: wrap; gap: 18px; color: var(--muted); font-size: 14px; }
.schedule-legend > span { display: inline-flex; align-items: center; gap: 7px; }
.schedule-legend small { margin-left: auto; color: var(--muted); font-size: 13px; }
.legend-swatch { width: 16px; height: 16px; display: inline-block; background: var(--surface); border: 1px solid var(--border); border-radius: 3px; }
.legend-day { background: var(--accent-soft); border-color: #b8cdf5; }
.legend-night { background: #394a55; border-color: #394a55; }
.legend-locked { background: #e5e8eb; }
.schedule-shell { overflow: hidden; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.schedule-scroll { max-height: calc(100vh - 270px); overflow: auto; }
.schedule-grid { display: grid; min-width: 1480px; grid-template-columns: 150px repeat(31, 42px); }
.schedule-head, .schedule-employee, .schedule-cell { min-height: 46px; display: flex; align-items: center; justify-content: center; border-right: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.schedule-head { position: sticky; z-index: 5; top: 0; flex-direction: column; color: var(--muted); background: var(--surface-2); font-weight: 600; }
.schedule-head small { font-size: 12px; }
.schedule-sticky { position: sticky; z-index: 4; left: 0; justify-content: flex-start; padding: 0 12px; background: var(--surface); }
.schedule-head.schedule-sticky { z-index: 8; background: var(--surface-2); }
.schedule-employee { flex-direction: column; align-items: flex-start; }
.schedule-employee strong { font-size: 14px; }
.schedule-employee small { color: var(--muted); font-size: 12px; }
.weekend { background: #faf7f2; }
.shift-button { width: 32px; height: 32px; display: grid; place-items: center; padding: 0; border: 1px solid var(--border); border-radius: 4px; font-size: 14px; font-weight: 700; }
.shift-day { color: var(--accent-dark); background: var(--accent-soft); border-color: #b8cdf5; }
.shift-night { color: #f8fafc; background: #394a55; border-color: #394a55; }
.shift-empty { color: var(--muted); background: var(--surface); }
.shift-button:disabled { color: #7d8790; background: #e5e8eb; cursor: not-allowed; }

.qr-card { display: grid; grid-template-columns: 108px 1fr; gap: 16px; align-items: center; margin-top: 16px; padding: 14px; background: var(--surface-2); border-radius: var(--radius); }
.qr-code { width: 108px; height: 108px; padding: 8px; background: #fafbfc; border: 1px solid var(--border); }
.qr-code > span { width: 100%; height: 100%; display: grid; grid-template-columns: repeat(8, 1fr); }
.qr-code i { background: #26333c; }
.qr-code b { background: transparent; }
.qr-card > div:last-child { display: grid; gap: 4px; }
.qr-card small { color: var(--muted); font-size: 13px; }
.summary-box { display: grid; grid-template-columns: auto 1fr; gap: 12px; align-items: start; margin: 14px 0; padding: 14px; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius); }
.summary-box > span { color: var(--accent); }
.summary-box strong { font-size: 15px; }
.summary-box p { margin: 3px 0 0; color: var(--muted); font-size: 14px; }

.recipe-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.recipe-card { padding: 18px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.recipe-card header, .recipe-card footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.recipe-card h3 { margin: 3px 0 0; font-size: 17px; }
.recipe-card footer { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); color: var(--muted); }
.recipe-metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; margin-top: 14px; overflow: hidden; background: var(--border); border: 1px solid var(--border); border-radius: var(--radius-sm); }
.recipe-metrics > div { padding: 10px; background: var(--surface); }
.recipe-metrics span, .recipe-metrics strong { display: block; }
.recipe-metrics span { color: var(--muted); font-size: 13px; }
.recipe-metrics strong { margin-top: 3px; font-size: 14px; }
.recipe-metrics small { color: var(--muted); font-size: 12px; font-weight: 400; }
.mono { font-family: Consolas, "SFMono-Regular", monospace; font-size: 13px; }

.quality-list { display: grid; gap: 8px; }
.quality-card { width: 100%; display: grid; grid-template-columns: 32px minmax(0, 1fr) auto 16px; align-items: center; gap: 12px; padding: 13px; text-align: left; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.quality-card:hover { background: #f8f9fb; }
.quality-mark { width: 32px; height: 32px; display: grid; place-items: center; color: var(--danger); background: var(--danger-soft); border-radius: 50%; }
.quality-mark.done { color: var(--success); background: var(--success-soft); }
.quality-card strong, .quality-card small { display: block; }
.quality-card small { margin-top: 2px; color: var(--muted); font-size: 13px; }
.quality-card p { margin: 4px 0 0; color: var(--muted); font-size: 14px; }
.comparison-bars { display: grid; gap: 16px; }
.comparison-row { display: grid; grid-template-columns: 110px 1fr; gap: 14px; }
.comparison-label { display: flex; justify-content: space-between; margin: 5px 0; color: var(--muted); font-size: 13px; }
.progress-list { display: grid; gap: 16px; }
.progress-row { display: grid; grid-template-columns: minmax(170px, 1fr) minmax(100px, 1fr) 72px; align-items: center; gap: 12px; }
.progress-row strong, .progress-row small { display: block; }
.progress-row small { margin-top: 2px; color: var(--muted); font-size: 13px; }
.progress-row b { text-align: right; }
.progress-track { height: 8px; overflow: hidden; background: #e7eaed; border-radius: 4px; }
.progress-track span { display: block; height: 100%; background: var(--accent); border-radius: 4px; }
.rank { min-width: 30px; height: 30px; display: inline-grid; place-items: center; background: var(--surface-2); border-radius: 15px; font-weight: 700; }
.rank-1 { color: #7a4b07; background: #fff0ce; }
.score { font-size: 18px; }

	/* ── 接口模拟器 ── */
	.sim-status-bar { display:flex; align-items:center; gap:8px; padding:14px 20px; background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); flex-wrap:wrap; }
	.sim-status-item { display:flex; flex-direction:column; align-items:center; gap:2px; flex:1; min-width:80px; }
	.sim-status-item b { font-size:26px; line-height:1; color:var(--text); font-family:var(--font-number); }
	.sim-status-item small { font-size:11px; color:var(--muted); }
	.sim-status-arrow { color:var(--border); font-size:18px; flex-shrink:0; }

	/* 接口分组 */
	.sim-section { margin-bottom:24px; }
	.sim-section-head { display:flex; align-items:flex-start; gap:10px; margin-bottom:14px; }
	.sim-section-icon { font-size:20px; flex-shrink:0; margin-top:2px; }
	.sim-section-head h3 { margin:0 0 3px; font-size:15px; }
	.sim-section-head p { margin:0; font-size:12px; color:var(--muted); }

	/* 接口卡片网格 */
	.sim-iface-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:12px; }
	.sim-iface-grid-sm { grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); max-width:720px; }
	.sim-iface-card { display:flex; flex-direction:column; gap:14px; padding:16px 18px; background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); transition:border-color .15s; }
	.sim-iface-card:hover { border-color:var(--accent); }
	.sim-iface-card.is-primary { border-left:3px solid var(--accent); background:#F2F7FC; }
	.sim-iface-head { display:flex; align-items:flex-start; gap:10px; }
	.sim-iface-icon { width:36px; height:36px; display:flex; align-items:center; justify-content:center; color:var(--accent); background:var(--accent-soft); border-radius:var(--radius-sm); flex-shrink:0; }
	.sim-iface-card.is-primary .sim-iface-icon { color:#fff; background:var(--accent); }
	.sim-iface-title h4 { margin:0; font-size:14px; }
	.sim-iface-title p { margin:2px 0 0; color:var(--muted); font-size:12px; line-height:1.4; }
	.sim-iface-params { display:flex; flex-wrap:wrap; gap:5px; }
	.sim-param-tag { display:inline-block; padding:3px 8px; background:var(--surface-2); border:1px solid var(--border); border-radius:12px; font-size:11px; color:var(--muted); white-space:nowrap; }
	.sim-iface-action { margin-top:auto; }
	.sim-iface-action .button { width:100%; justify-content:center; }
.event-log { max-height: 420px; overflow: auto; }
.event-row { min-height: 50px; display: grid; grid-template-columns: 82px 100px 1fr auto; align-items: center; gap: 12px; padding: 9px 16px; border-bottom: 1px solid var(--border); }
.event-row:last-child { border-bottom: 0; }
.event-row p { margin: 0; }
.event-time, .event-type { color: var(--muted); }

.tabs { display: flex; gap: 4px; margin-bottom: 16px; padding: 4px; background: var(--surface-2); border-radius: var(--radius); }
.tab { min-height: 36px; padding: 0 14px; color: var(--muted); background: transparent; border: 0; border-radius: var(--radius-sm); font-weight: 600; }
.tab.is-active { color: var(--accent-dark); background: var(--surface); }
.alert-list { display: grid; }
.alert-item { padding: 14px 0; border-bottom: 1px solid var(--border); }
.alert-item:last-child { border-bottom: 0; }
.alert-item strong { font-size: 15px; }
.alert-item p { margin: 3px 0 0; color: var(--muted); }
.alert-icon { display: none; }

.app-dialog { width: min(680px, calc(100vw - 32px)); max-height: calc(100vh - 40px); padding: 0; color: var(--text); background: var(--surface); border: 0; border-radius: var(--radius); box-shadow: 0 20px 50px rgb(31 41 51 / 18%); }
.app-dialog::backdrop { background: rgb(31 41 51 / 46%); }
.app-dialog form { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; max-height: calc(100vh - 40px); }
.dialog-header, .dialog-footer { display: flex; align-items: center; gap: 10px; padding: 14px 18px; }
.dialog-header { justify-content: space-between; border-bottom: 1px solid var(--border); user-select: none; -webkit-user-select: none; }
.dialog-header h2 { margin: 0; font-size: 19px; user-select: none; -webkit-user-select: none; }
.dialog-body { overflow: auto; padding: 18px; }
.dialog-footer { justify-content: flex-end; border-top: 1px solid var(--border); }
.operation-feedback { margin: 12px 18px; padding: 12px; color: var(--danger); background: var(--danger-soft); border: 1px solid var(--danger); border-radius: var(--radius-sm, 6px); overflow-wrap: anywhere; }
.load-feedback { margin: 0 0 16px; }
.load-feedback p { margin: 0 0 12px; }
.loading-feedback { margin: 0 0 16px; padding: 12px; color: var(--primary); background: var(--surface); border: 1px solid var(--border); }
.toast-region { position: fixed; z-index: 100; right: 18px; bottom: 18px; display: grid; gap: 8px; width: min(360px, calc(100vw - 36px)); pointer-events: none; }
.toast { display: grid; grid-template-columns: 18px 1fr; gap: 9px; align-items: center; padding: 12px 14px; color: #f8fafc; background: #2a3740; border-radius: var(--radius); font-size: 14px; }
.toast-link{color:#93c5fd;text-decoration:underline;font-weight:600;cursor:pointer;white-space:nowrap;margin-left:4px}.toast-link:hover{color:#bfdbfe}
.empty-state { min-height: 220px; display: grid; place-items: center; padding: 24px; color: var(--muted); text-align: center; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }


.analysis-details { overflow: hidden; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.analysis-details summary { min-height: 48px; display: flex; align-items: center; padding: 0 16px; color: var(--accent); font-weight: 600; cursor: pointer; }
.analysis-details summary:hover { background: #f8f9fb; }
.analysis-body { display: grid; gap: 18px; padding: 18px; border-top: 1px solid var(--border); }
.summary-box > div:only-child { grid-column: 1 / -1; }

.export-section { overflow: hidden; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.export-section-head { min-height: 82px; display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 14px 18px; background: var(--surface-2); border-bottom: 1px solid var(--border); }
.export-section-head > div:first-child { display: flex; align-items: center; gap: 12px; }
.export-section-head h3 { margin: 0; font-size: 18px; }
.export-section-head p { margin: 3px 0 0; color: var(--muted); font-size: 14px; }
.section-number { width: 30px; height: 30px; display: grid; place-items: center; flex: 0 0 30px; color: #f8fafc; background: var(--accent); border-radius: 50%; font-weight: 700; }
.inline-select { min-width: 400px; display: grid; grid-template-columns: auto minmax(260px, 1fr); align-items: center; gap: 10px; font-weight: 600; }
.inline-select > span { white-space: nowrap; }
.month-select { min-width: 250px; grid-template-columns: auto minmax(150px, 1fr); }
.export-list { display: grid; }
.export-row { min-height: 72px; display: grid; grid-template-columns: 38px minmax(260px, 1fr) 100px 150px; align-items: center; gap: 14px; padding: 10px 18px; border-bottom: 1px solid var(--border); }
.export-row:last-child { border-bottom: 0; }
.document-icon { width: 36px; height: 36px; display: grid; place-items: center; color: var(--accent); background: var(--accent-soft); border-radius: 50%; }
.export-row h4 { margin: 0; font-size: 16px; }
.export-row p { margin: 3px 0 0; color: var(--muted); font-size: 14px; }
.export-row > strong { color: var(--muted); font-size: 14px; font-weight: 600; }
.form-ready { color: var(--success); font-weight: 600; text-align: right; }
.export-section-actions { min-height: 66px; display: flex; align-items: center; justify-content: flex-end; gap: 16px; padding: 12px 18px; background: #f8f9fb; border-top: 1px solid var(--border); }
.form-note { margin: 0; color: var(--muted); font-size: 13px; }
@media (max-width: 1180px) {
  .content-grid, .content-grid-balanced, .task-layout { grid-template-columns: 1fr; }
  .inline-select { min-width: 340px; }
  .task-detail { position: static; }
  .kpi-grid { grid-template-columns: repeat(2, 1fr); }
  .kpi:nth-child(2) { border-right: 0; }
  .kpi:nth-child(-n+2) { border-bottom: 1px solid var(--border); }
}

@media (max-width: 900px) {
  .sidebar { transform: translateX(-100%); transition: transform 180ms cubic-bezier(.25,1,.5,1); }
  .sidebar.is-open { transform: translateX(0); }
  .workspace { margin-left: 0; }
  .mobile-menu { display: grid; }
  .topbar { padding: 0 18px; }
  #main-content { padding: 20px 18px 32px; }
  .system-clock { display: none; }
  .workflow span { font-size: 13px; }
  .queue-item { grid-template-columns: 54px minmax(220px, 1fr) auto 16px; }
  .queue-time { display: none; }
}

@media (max-width: 640px) {
  .export-section-head { align-items: stretch; flex-direction: column; gap: 12px; }
  .inline-select, .month-select { min-width: 0; width: 100%; grid-template-columns: 1fr; gap: 5px; }
  .export-row { grid-template-columns: 38px 1fr; padding: 12px; }
  .export-row > strong { grid-column: 2; }
  .export-row .form-ready, .export-row .button { grid-column: 2; justify-self: start; }
  .export-section-actions { align-items: stretch; flex-direction: column; }
  .export-section-actions .button { width: 100%; }
  .topbar { height: 60px; }
  #main-content { min-height: calc(100vh - 60px); padding: 16px 12px 28px; }
  .page-heading h1 { font-size: 18px; }
  .simple-toolbar, .page-toolbar { align-items: stretch; flex-direction: column; }
  .toolbar-spacer { display: none; }
  .page-toolbar .button, .simple-toolbar .button, .search-wrap, .page-toolbar .select { width: 100%; }
  .workflow { grid-template-columns: 1fr; gap: 5px; padding: 10px; }
  .workflow li { justify-content: flex-start; min-height: 34px; }
  .workflow li::after { display: none; }
  .queue-item { grid-template-columns: 48px 1fr 16px; min-height: 72px; padding: 10px 12px; }
  .queue-item .status { grid-column: 2; }
  .overview-line { align-items: stretch; flex-direction: column; padding: 0; }
  .overview-line > div { width: 100%; padding: 12px 0; border-right: 0; border-bottom: 1px solid var(--border); }
  .overview-line > div:last-child { border-bottom: 0; }
  .kpi-grid, .recipe-grid { grid-template-columns: 1fr; }
  .sim-iface-card { min-width:100%; }
  .sim-status-bar { gap:6px; padding:12px; }
  .sim-status-item b { font-size:22px; }
  .metric-strip, .recipe-metrics { grid-template-columns: 1fr 1fr; }
  .metric-strip > div:nth-child(even) { border-right: 0; }
  .form-grid { grid-template-columns: 1fr; }
  .progress-row { grid-template-columns: 1fr 60px; }
  .progress-row .progress-track { grid-column: 1 / -1; grid-row: 2; }
  .event-row { grid-template-columns: 72px 1fr; }
  .event-row p { grid-column: 1 / -1; }
  .event-row .status { display: none; }
  .dialog-footer .button { flex: 1; }
}
/* 荒料登记表人工导入 */
.block-import-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin: 14px 0 10px; }
.block-import-kpis > div { display: grid; gap: 3px; padding: 10px 12px; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm); }
.block-import-kpis span { color: var(--muted); font-size: 12px; }
.block-import-kpis strong { font-size: 21px; line-height: 1.2; }
.block-import-kpis .has-warning strong { color: var(--danger); }
.block-import-note { margin: 0 0 10px; color: var(--muted); font-size: 13px; }
.block-import-preview { max-height: 310px; overflow: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); }
.block-import-table { min-width: 600px; font-size: 13px; }
.block-import-table thead { position: sticky; z-index: 1; top: 0; background: var(--surface-2); }
.block-import-table td { vertical-align: middle; }
.block-import-table td small { display: block; margin-top: 3px; color: var(--muted); }
.import-placeholder, .import-error { min-height: 72px; display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 14px; padding: 14px; color: var(--muted); background: var(--surface-2); border: 1px dashed var(--border); border-radius: var(--radius-sm); text-align: center; }
.import-error { color: var(--danger); background: var(--danger-soft); border-style: solid; }

@media (max-width: 640px) {
  .block-import-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* 现场管理快捷操作 */
.work-action-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.work-action { min-height: 94px; display: grid; grid-template-columns: 30px minmax(0, 1fr) 16px; align-items: center; gap: 10px; padding: 14px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.work-action:hover { background: var(--surface-2); border-color: #b9c2ca; }
.work-action.is-primary { border-color: #8eb1f0; background: var(--accent-soft); }
.work-action > b { width: 28px; height: 28px; display: grid; place-items: center; color: var(--accent-dark); background: var(--accent-soft); border-radius: 50%; font-size: 13px; }
.work-action.is-primary > b { color: #fff; background: var(--accent); }
.work-action strong, .work-action small { display: block; }
.work-action strong { font-size: 14px; }
.work-action small { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.35; }
.export-handoff-note { display: grid; grid-template-columns: 34px 1fr; gap: 12px; align-items: center; padding: 16px 18px; }
.export-handoff-note > svg { color: var(--accent); }
.export-handoff-note strong { font-size: 15px; }
.export-handoff-note p { margin: 3px 0 0; color: var(--muted); }

@media (max-width: 1080px) { .work-action-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 640px) { .work-action-grid { grid-template-columns: 1fr; } }
.task-machine-select { width: 132px; }
.task-group-toggle { min-height: 40px; display: inline-flex; align-items: center; gap: 7px; padding: 0 4px; color: var(--muted); font-weight: 600; white-space: nowrap; }
.task-group-toggle input { width: 16px; height: 16px; accent-color: var(--accent); }
.machine-group-row td { padding: 8px 14px; color: var(--accent-dark); background: var(--accent-soft); border-bottom: 1px solid #c9d9f5; font-size: 13px; }
.machine-group-row strong { margin-right: 8px; }
.machine-group-row span { color: var(--muted); }

@media (max-width: 640px) { .task-machine-select { width: 100%; } .task-group-toggle { min-height: 36px; } }
.confirmation-needed { border-color: #e4bd76; background: var(--warning-soft); }
.confirmation-needed > span { color: var(--warning); }
.claim-needed { border-color: #93c5fd; background: #eff6ff; }
.claim-needed > span { color: var(--accent); }
/* 异常待处理 */
.exception-summary { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius); background: var(--border); }
.exception-summary > div { padding: 14px 18px; background: var(--surface); }
.exception-summary > div + div { border-left: 1px solid var(--border); }
.exception-summary span, .exception-summary strong { display: block; }
.exception-summary span { color: var(--muted); font-size: 13px; }
.exception-summary strong { margin-top: 3px; font-size: 24px; }
.exception-group { padding-bottom: 0; overflow: hidden; }
.exception-group .panel-header { padding: 16px 18px 0; }
.exception-hint { margin: 5px 18px 14px; color: var(--muted); font-size: 13px; }
.exception-list { border-top: 1px solid var(--border); }
.exception-item { min-height: 64px; display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 10px 18px; border-bottom: 1px solid var(--border); color: inherit; }
.exception-item:last-child { border-bottom: 0; }
.exception-item:hover { background: var(--surface-2); }
.exception-icon { width: 32px; height: 32px; display: grid; place-items: center; border-radius: 50%; }
.level-urgent .exception-icon { color: var(--danger); background: var(--danger-soft); }
.level-warning .exception-icon { color: var(--warning); background: var(--warning-soft); }
.exception-copy { min-width: 0; }
.exception-copy strong, .exception-copy small { display: block; }
.exception-copy small { margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.35; }
.exception-action { display: inline-flex; align-items: center; gap: 5px; color: var(--accent-dark); font-size: 13px; font-weight: 700; white-space: nowrap; }
.exception-action svg { width: 16px; height: 16px; }
.exception-more { margin: 0; padding: 12px 18px; color: var(--muted); background: var(--surface-2); font-size: 12px; }

@media (max-width: 640px) {
  .exception-summary { grid-template-columns: 1fr; }
  .exception-summary > div + div { border-left: 0; border-top: 1px solid var(--border); }
  .exception-item { grid-template-columns: 32px minmax(0, 1fr); padding: 11px 14px; }
  .exception-action { grid-column: 2; justify-self: start; }
}
/* 操作优先的简洁首页 */
.simple-home { max-width: 920px; }
.home-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.home-heading h2 { margin: 2px 0 0; font-size: 24px; }
.kpi-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-bottom: 14px; }
.kpi-card { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 16px 10px; color: inherit; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); text-align: center; }
.kpi-card:hover { background: var(--surface-2); border-color: #b9c2ca; }
.kpi-card-icon { width: 32px; height: 32px; display: grid; place-items: center; color: var(--muted); border-radius: var(--radius-sm); }
.kpi-card-icon svg { width: 20px; height: 20px; }
.kpi-card b { font-size: 24px; font-weight: 700; letter-spacing: -.02em; }
.kpi-card small { font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); font-weight: 600; }
.kpi-card.tone-running { border-color: #8eb1f0; background: var(--accent-soft); }
.kpi-card.tone-running b { color: var(--accent-dark); }
.kpi-card.tone-warning { border-color: #f0c060; background: #fff8ec; }
.kpi-card.tone-warning b { color: #b45309; }
.kpi-card.tone-danger { border-color: #f08080; background: #fef3f3; }
.kpi-card.tone-danger b { color: #b91c1c; }
.action-tile-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.action-tile { min-height: 132px; display: grid; grid-template-columns: 1fr 18px; grid-template-rows: auto 1fr; align-items: end; gap: 10px; padding: 16px; color: inherit; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
.action-tile:hover { background: var(--surface-2); border-color: #b9c2ca; }
.action-tile.is-primary { border-color: #8eb1f0; background: var(--accent-soft); }
.action-tile-icon { width: 42px; height: 42px; display: grid; place-items: center; color: var(--accent-dark); background: var(--accent-soft); border-radius: var(--radius-sm); }
.action-tile.is-primary .action-tile-icon { color: #fff; background: var(--accent); }
.action-tile-icon svg { width: 23px; height: 23px; }
.action-tile > span:nth-child(2) { grid-column: 1; }
.action-tile strong, .action-tile small { display: block; }
.action-tile strong { font-size: 15px; }
.action-tile small { margin-top: 5px; color: var(--muted); font-size: 13px; }
.action-tile > svg { grid-column: 2; grid-row: 2; width: 18px; height: 18px; color: var(--muted); }
.home-secondary { display: flex; flex-wrap: wrap; gap: 10px 18px; padding: 0 2px; }
.home-secondary a { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 13px; }
.home-secondary a:hover { color: var(--accent-dark); }
.home-secondary svg { width: 17px; height: 17px; }
.tools-menu { position: relative; }
.tools-menu summary { min-height: 40px; display: inline-flex; align-items: center; gap: 6px; padding: 0 12px; cursor: pointer; color: var(--muted); font-weight: 700; list-style: none; }
.tools-menu summary::-webkit-details-marker { display: none; }
.tools-menu summary svg { width: 17px; height: 17px; }
.tools-menu[open] summary { color: var(--accent-dark); }
.tools-menu > div { position: absolute; z-index: 4; top: calc(100% + 6px); right: 0; display: grid; gap: 6px; min-width: 156px; padding: 8px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: 0 8px 20px rgba(20, 33, 45, .12); }
.tools-menu .button { justify-content: flex-start; white-space: nowrap; }

@media (max-width: 900px) { .kpi-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } .action-tile-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 640px) { .kpi-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } .action-tile-grid { grid-template-columns: 1fr; } .action-tile { min-height: 96px; grid-template-columns: 50px 1fr 18px; grid-template-rows: 1fr; align-items: center; } .action-tile > span:nth-child(2) { grid-column: 2; } .action-tile > svg { grid-column: 3; grid-row: 1; } .home-secondary { display: grid; } .tools-menu { width: 100%; } .tools-menu summary { width: 100%; justify-content: center; border: 1px solid var(--border); border-radius: var(--radius-sm); } .tools-menu > div { left: 0; right: 0; } }
/* 异常清单按类别展开，默认不堆满任务明细 */
.exception-group > summary { min-height: 76px; display: grid; grid-template-columns: 36px minmax(0, 1fr) auto 18px; align-items: center; gap: 12px; padding: 12px 18px; cursor: pointer; list-style: none; }
.exception-group > summary::-webkit-details-marker { display: none; }
.exception-group > summary > span:nth-child(2) small, .exception-group > summary > span:nth-child(2) strong { display: block; }
.exception-group > summary > span:nth-child(2) small { color: var(--muted); font-size: 12px; }
.exception-group > summary > span:nth-child(2) strong { margin-top: 2px; font-size: 16px; }
.exception-group > summary > svg { width: 18px; height: 18px; color: var(--muted); transition: transform .15s ease; }
.exception-group[open] > summary > svg { transform: rotate(90deg); }
.exception-group > summary:hover { background: var(--surface-2); }
.exception-group > summary .exception-icon { color: var(--warning); background: var(--warning-soft); }
.exception-group > summary .exception-icon.is-urgent { color: var(--danger); background: var(--danger-soft); }
.exception-group-body { border-top: 1px solid var(--border); }
.exception-group .exception-hint { margin: 10px 18px; }

@media (max-width: 640px) { .exception-group > summary { grid-template-columns: 34px minmax(0, 1fr) 18px; padding: 12px 14px; } .exception-group > summary .status { display: none; } }
/* 统一中文字形与字号增强 */
.kpi-value, .overview-line strong, .exception-summary strong, .performance-kpis strong { font-family: var(--font-number); font-weight: 700; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.mono { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0; }
.status { font-size: 12px; font-weight: 700; letter-spacing: .01em; }
.primary-cell strong, .action-tile strong, .exception-copy strong { font-weight: 700; letter-spacing: .005em; }
.primary-cell small, .action-tile small, .exception-copy small, .panel-header small { line-height: 1.45; }
.data-table td { line-height: 1.5; }
/* 排班说明按需展开 */
.schedule-info-panel { padding: 0; overflow: hidden; }
.schedule-info-panel > summary { min-height: 56px; display: grid; grid-template-columns: 22px minmax(0, 1fr) 18px; align-items: center; gap: 10px; padding: 0 14px; cursor: pointer; list-style: none; }
.schedule-info-panel > summary::-webkit-details-marker { display: none; }
.schedule-info-panel > summary > span { color: var(--accent-dark); }
.schedule-info-panel > summary > svg { color: var(--muted); transition: transform .15s ease; }
.schedule-info-panel[open] > summary > svg { transform: rotate(90deg); }
.schedule-info-panel > summary:hover { background: var(--surface-2); }
.schedule-info-panel > div { padding: 0 12px 12px; border-top: 1px solid var(--border); }
.schedule-info-panel .schedule-defaults { margin-top: 12px; }
.schedule-info-panel .schedule-legend { margin-top: 10px; padding: 8px 2px 0; }
@media (max-width: 640px) { .schedule-info-panel .schedule-defaults { gap: 8px; } }

/* 排班计划与机台实际登录核对 */
.schedule-reconciliation { padding: 0; overflow: hidden; }
.schedule-reconciliation > summary { min-height: 64px; display: grid; grid-template-columns: 34px minmax(0, 1fr) auto 18px; align-items: center; gap: 12px; padding: 10px 14px; cursor: pointer; list-style: none; }
.schedule-reconciliation > summary::-webkit-details-marker { display: none; }
.schedule-reconciliation > summary:hover { background: var(--surface-2); }
.reconciliation-icon { width: 30px; height: 30px; display: grid; place-items: center; color: var(--success, #16865c); background: #e9f7f1; border-radius: 10px; }
.reconciliation-icon.has-difference { color: #ad5d00; background: #fff0da; }
.reconciliation-icon svg { width: 17px; height: 17px; }
.schedule-reconciliation summary small, .schedule-reconciliation summary strong { display: block; }
.schedule-reconciliation summary small { margin-bottom: 2px; color: var(--muted); font-size: 12px; }
.schedule-reconciliation summary strong { color: var(--ink); font-size: 15px; }
.schedule-reconciliation > summary > svg { color: var(--muted); transition: transform .15s ease; }
.schedule-reconciliation[open] > summary > svg { transform: rotate(90deg); }
.reconciliation-meta { color: var(--muted); font-size: 12px; white-space: nowrap; }
.reconciliation-list { border-top: 1px solid var(--border); }
.reconciliation-list a { display: grid; grid-template-columns: minmax(0, 1fr) 18px; gap: 2px 10px; padding: 10px 14px; color: inherit; text-decoration: none; border-bottom: 1px solid var(--border); }
.reconciliation-list a:hover { background: var(--surface-2); }
.reconciliation-list a strong, .reconciliation-list a span, .reconciliation-list a small { grid-column: 1; min-width: 0; }
.reconciliation-list a strong { color: var(--ink); font-size: 14px; }
.reconciliation-list a span, .reconciliation-list a small { color: var(--muted); font-size: 12px; }
.reconciliation-list a small { color: #9a5a12; }
.reconciliation-list a svg { grid-column: 2; grid-row: 1 / span 3; align-self: center; width: 16px; height: 16px; color: var(--muted); }
.reconciliation-list > p { margin: 0; padding: 10px 14px; color: var(--muted); font-size: 12px; }
.recon-summary{display:flex;gap:8px;padding:8px 14px;flex-wrap:wrap}
.recon-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:700;border:1px solid}
.recon-item-badge{display:inline-flex;align-items:center;padding:1px 6px;border-radius:4px;font-size:10px;font-weight:700;color:#fff;white-space:nowrap}
.reconciliation-list a{grid-template-columns:minmax(0,1fr) 18px}
.reconciliation-list a .recon-item-badge{grid-column:1;justify-self:start;margin-bottom:2px}
@media (max-width: 640px) { .schedule-reconciliation > summary { grid-template-columns: 32px minmax(0, 1fr) 18px; } .reconciliation-meta { display: none; } }
/* 机台硬度适配 */
.machine-config-note { margin: 0; }
.machine-config-table-wrap { padding: 0; overflow: hidden; }
.machine-config-table th:not(:first-child), .machine-config-table td:not(:first-child) { text-align: center; }
.machine-config-table td:last-child, .machine-config-table th:last-child { min-width: 190px; text-align: left; }
.capability-check { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; cursor: pointer; color: var(--muted); font-size: 13px; font-weight: 700; }
.capability-check input { width: 16px; height: 16px; accent-color: var(--accent); }
.capability-check:has(input:checked) { color: var(--accent-dark); }
.machine-note-input { min-width: 170px; height: 34px; font-size: 13px; }
@media (max-width: 640px) { .machine-config-page .page-toolbar { align-items: stretch; } .machine-config-page .page-toolbar > .button { width: 100%; justify-content: center; } }
/* 建议排产时间线 */
.machine-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px}.schedule-machine-card{padding:0;overflow:hidden}.machine-plan-list{list-style:none;margin:0;padding:0}.machine-plan-list li{display:grid;grid-template-columns:48px 1fr auto;gap:10px;align-items:center;padding:12px;border-top:1px solid var(--border)}.plan-order{display:flex;flex-direction:column;align-items:center;gap:2px}.plan-order strong{font-size:13px;font-weight:800;color:var(--accent-dark);min-width:24px;text-align:center}.plan-order .icon-button.small{width:22px;height:22px;padding:0;border-radius:4px;font-size:12px;line-height:1}.machine-plan-list strong,.machine-plan-list small{display:block}.machine-plan-list small{margin-top:3px;color:var(--muted);font-size:12px}.meta-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.meta-row span{display:inline-flex;align-items:center;gap:2px;font-size:11px}.block-actions{margin-left:auto}.block-actions .select.compact{width:100px;font-size:11px;padding:2px 4px}.risk-row{background:var(--warning-soft)}.scheduling-v2 .toolbar-actions{display:flex;gap:8px;align-items:center;padding:0 0 12px 0;flex-wrap:wrap}.scheduling-v2 .toolbar-actions .button:not(.button-secondary){background:var(--accent);color:#fff}.empty-machines{padding:16px}.empty-machines .muted{color:var(--muted);font-size:13px}.plan-selector{display:flex;align-items:center;gap:6px}.plan-selector span{font-size:12px;color:var(--muted)}@media(max-width:640px){.machine-plan-grid{grid-template-columns:1fr}.machine-plan-list li{grid-template-columns:40px 1fr}.machine-plan-list .block-actions{grid-column:1/-1;justify-self:start}.scheduling-v2 .toolbar-actions{flex-direction:column}}
.photo-gallery{margin-top:12px;border-top:1px solid var(--border);padding-top:10px}.photo-gallery strong{font-size:12px;color:var(--muted)}.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px;margin-top:8px}.photo-thumb{position:relative;border-radius:6px;overflow:hidden;background:var(--surface-2);aspect-ratio:1}.photo-thumb img{width:100%;height:100%;object-fit:cover;display:block}.photo-thumb small{position:absolute;bottom:0;left:0;right:0;background:rgba(0,0,0,0.6);color:#fff;font-size:10px;padding:2px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.photo-delete-btn{position:absolute;top:2px;right:2px;width:20px;height:20px;border-radius:50%;background:rgba(220,38,38,0.85);color:#fff;font-size:14px;line-height:1;padding:0;display:flex;align-items:center;justify-content:center;border:none;cursor:pointer}.photo-delete-btn:hover{background:#dc2626}
.simulation-warning{border-color:#e4bd76;background:#fffbeb}.simulation-warning strong{color:#b45309}.simulation-warning .icon{color:#d97706}
.source-tag{display:inline-flex;align-items:center;padding:1px 6px;border-radius:4px;font-size:10px;font-weight:700;white-space:nowrap}
.source-sim{background:#fef2f2;color:#dc2626}.source-real{background:#f0fdf4;color:#16a34a}.source-mixed{background:#fffbeb;color:#b45309}
.quality-bar-chart{margin-top:10px}.qc-bar-row{display:flex;align-items:center;gap:10px;padding:6px 0}.qc-bar-row+.qc-bar-row{border-top:1px solid var(--border)}.qc-label{width:48px;font-size:12px;font-weight:700;color:var(--accent-dark);text-align:right;flex-shrink:0}.qc-bar-track{flex:1;height:16px;background:var(--surface-2);border-radius:8px;overflow:hidden}.qc-bar{height:100%;border-radius:8px;min-width:2px;transition:width .4s}.qc-stats{font-size:11px;color:var(--muted);white-space:nowrap;min-width:140px}.trends-month{font-size:11px;color:var(--muted);margin-bottom:8px}.trends-empty,.trends-error{font-size:13px;color:var(--muted);padding:16px 0}

.auto-generated-row{background:var(--warning-soft)}.auto-generated-row .text-warning{color:var(--warning);display:flex;align-items:center;gap:2px;font-size:11px}

/* 表单字段结构化 - 录入对话框分类样式 */
.entry-cat-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:700;line-height:1.6}
.entry-cat-badge svg{width:14px;height:14px;flex:0 0 14px}
.entry-cat-snapshot .entry-cat-badge,.entry-cat-section.entry-cat-snapshot .entry-cat-badge{background:#eef2ff;color:#4338ca}
.entry-cat-auto .entry-cat-badge,.entry-cat-section.entry-cat-auto .entry-cat-badge{background:#f0fdf4;color:#166534}
.entry-cat-manual .entry-cat-badge,.entry-cat-section.entry-cat-manual .entry-cat-badge{background:#eff6ff;color:#1d4ed8}
.entry-cat-handwrite .entry-cat-badge,.entry-cat-section.entry-cat-handwrite .entry-cat-badge{background:#fffbeb;color:#b45309}
.entry-cat-snapshot{background:#f8f9fc;border-left:3px solid #818cf8;padding:12px 14px;border-radius:var(--radius-sm)}
.entry-cat-auto{background:#f6fbf7;border-left:3px solid #34d399;padding:12px 14px;border-radius:var(--radius-sm)}
.entry-cat-manual{border-left:3px solid var(--accent)}
.entry-cat-handwrite{border-left:3px solid #f59e0b}
.entry-section{margin-bottom:16px}
.entry-section:last-child{margin-bottom:0}
.entry-section h3{display:flex;align-items:center;gap:10px;margin:0 0 10px;font-size:14px}
.entry-section h3 small{color:var(--muted);font-weight:400;font-size:12px}
.snapshot-dl{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px 16px;margin:0}
.snapshot-dl div{display:flex;gap:6px;align-items:baseline}
.snapshot-dl dt{font-size:11px;color:var(--muted);white-space:nowrap;min-width:80px}
.snapshot-dl dd{margin:0;font-size:13px;font-weight:600;color:var(--text);word-break:break-all}
.entry-dialog-intro{margin-bottom:14px;padding:10px 12px;background:var(--surface-2);border-radius:var(--radius-sm);font-size:13px}
.entry-dialog-intro strong{display:block;margin-bottom:2px}
.entry-dialog-intro p{margin:0;color:var(--muted);font-size:12px}
.field-hint{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.entry-summary .entry-cat-section{margin-bottom:10px;padding:8px 10px;border-radius:var(--radius-sm);background:var(--surface)}
.entry-summary .entry-cat-section dl{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:4px 12px;margin:0;padding-top:6px}
.entry-summary .entry-cat-section dl div{display:flex;gap:4px;align-items:baseline}
.entry-summary .entry-cat-section dl dt{font-size:11px;color:var(--muted);white-space:nowrap}
.entry-summary .entry-cat-section dl dd{margin:0;font-size:12px;font-weight:600}
.entry-summary .archive-time{margin:10px 0 0;font-size:11px;color:var(--muted)}
#app-dialog .entry-section{margin-bottom:14px}
#app-dialog .entry-section .form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
#app-dialog .entry-cat-snapshot,#app-dialog .entry-cat-auto{opacity:.85}
#app-dialog .attachment-note{margin-top:12px;padding:8px 12px;background:var(--accent-soft);border-radius:var(--radius-sm);font-size:12px;color:var(--accent-dark)}

/* 录入对话框滚动容器 */
.entry-dialog-body{max-height:60vh;overflow-y:auto;padding-right:4px}
.entry-section-title{display:flex;align-items:center;gap:10px;margin:0 0 10px;font-size:14px;font-weight:600}
.entry-section-title small{color:var(--muted);font-weight:400;font-size:12px}

/* Toggle 勾选按钮组 */
.toggle-group{display:inline-flex;gap:0;border-radius:6px;overflow:hidden;border:1px solid var(--border)}
.toggle-btn{padding:5px 12px;border:none;background:var(--surface);color:var(--muted);font-size:13px;cursor:pointer;transition:all .15s;border-right:1px solid var(--border);white-space:nowrap}
.toggle-btn:last-child{border-right:none}
.toggle-btn:hover{background:var(--surface-2)}
.toggle-btn.is-active{background:var(--accent);color:#fff}
.toggle-btn.is-active.is-danger{background:var(--danger)}
.toggle-btn.is-active.is-success{background:var(--success)}
/* 多选项 toggle（如包胶类型 5 选）允许换行 */
.toggle-group.toggle-wrap{flex-wrap:wrap}
.toggle-group.toggle-wrap .toggle-btn{border-right:1px solid var(--border)}
.toggle-group.toggle-wrap .toggle-btn:first-child{border-radius:6px 0 0 6px}

/* ── 内联录入面板（双栏） ── */
.entry-panel{display:flex;gap:16px;background:#faf9f6;border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin-top:12px}
.entry-panel-left,
.entry-panel-right{flex:1;min-width:0}
.entry-panel .entry-section{margin-bottom:14px}
.entry-panel .entry-section:last-child{margin-bottom:0}
.entry-panel .entry-section-title{margin:0 0 8px;font-size:13px}
.entry-panel .form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px}

/* 面板内 toggle 舒适化颜色 — 合格/正常 绿色，不合格/异常 红色 */
.entry-panel .toggle-btn{padding:4px 10px;font-size:12px;min-height:30px}
.entry-panel .toggle-btn.is-active[data-value="pass"],
.entry-panel .toggle-btn.is-active[data-value="qualified"],
.entry-panel .toggle-btn.is-active[data-value="normal"],
.entry-panel .toggle-btn.is-active[data-value="yes"],
.entry-panel .toggle-btn.is-active[data-value="neat"]{background:#e8f5e9;color:#2e7d32;border-color:#a5d6a7}
.entry-panel .toggle-btn.is-active[data-value="fail"],
.entry-panel .toggle-btn.is-active[data-value="unqualified"],
.entry-panel .toggle-btn.is-active[data-value="abnormal"],
.entry-panel .toggle-btn.is-active[data-value="no"],
.entry-panel .toggle-btn.is-active[data-value="messy"]{background:#fce4e4;color:#c62828;border-color:#ef9a9a}

/* 选中任务行 */
.task-row-selected{background:#eef4ff !important;border-left:3px solid var(--accent)}

/* 选中任务信息栏 */
.entry-task-info{display:flex;align-items:center;gap:16px;padding:8px 14px;background:#f0f4f8;border-radius:var(--radius-sm);font-size:13px;margin-bottom:12px}
.entry-task-info strong{font-size:14px}

/* 面板操作栏 */
.entry-panel-actions{display:flex;justify-content:flex-end;gap:8px;padding-top:14px;border-top:1px solid var(--border);margin-top:14px}

/* 面板内快照区覆盖 */
.entry-panel .entry-cat-snapshot{background:#f0f4f8;padding:10px 14px;border-radius:var(--radius-sm)}
.entry-panel .entry-cat-snapshot .snapshot-dl{font-size:12px}
.entry-panel .entry-cat-snapshot .snapshot-dl dt{min-width:70px}
.entry-panel .entry-cat-snapshot .snapshot-dl dd{font-size:12px}

/* 面板内字段标签紧凑化 */
.entry-panel .field span{font-size:12px}
.entry-panel .field .input,
.entry-panel .field .select{font-size:13px;padding:4px 8px}
.entry-panel .field textarea.input{font-size:13px;padding:5px 8px}

@media (max-width: 960px) {
  .entry-panel{flex-direction:column}
}

@media (max-width: 640px) {
  body { font-size: 14px; }
  .page-heading h1 { font-size: 18px; }
  .page-toolbar h2,.simple-toolbar h2 { font-size: 18px; }
  .input,.select { font-size: 16px; }
}

/* ── 毛板归档：主从分栏 ── */
.archive-layout{display:flex;gap:0;min-height:calc(100vh - 220px)}
.archive-list-panel{width:380px;min-width:300px;border-right:1px solid var(--border);overflow-y:auto;background:var(--surface)}
.archive-detail-panel{flex:1;min-width:0;overflow-y:auto;padding:20px;background:#faf9f6}

/* 归档筛选栏 */
.archive-filter-bar{display:flex;flex-wrap:wrap;gap:8px;padding:10px 14px;border-bottom:1px solid var(--border);background:var(--surface-2)}
.archive-filter-bar select,
.archive-filter-bar .input{font-size:12px;padding:4px 8px;min-width:0}
.archive-filter-bar .search-wrap{flex:1;min-width:140px}

/* 归档列表 */
.archive-list{padding:0}
.archive-list .data-table{font-size:12px}
.archive-list .data-table th{position:sticky;top:0;z-index:1;background:var(--surface-2)}
.archive-list .data-table td{padding:6px 10px;white-space:nowrap}
.archive-list-row{cursor:pointer;transition:background .12s}
.archive-list-row:hover{background:var(--accent-soft)}
.archive-list-row.is-selected{background:#eef4ff !important;border-left:3px solid var(--accent)}

/* 归档结果标签 */
.archive-result-tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.archive-result-tag.is-qualified{background:#e8f5e9;color:#2e7d32}
.archive-result-tag.is-unqualified{background:#fce4e4;color:#c62828}

/* 时间线 */
.archive-timeline{display:flex;align-items:flex-start;gap:0;padding:16px 0;margin-bottom:16px;overflow-x:auto}
.archive-timeline-step{display:flex;flex-direction:column;align-items:center;min-width:72px;position:relative;flex-shrink:0}
.archive-timeline-step::after{content:'';position:absolute;top:12px;left:calc(50% + 12px);width:calc(100% - 24px);height:2px;background:var(--border)}
.archive-timeline-step:last-child::after{display:none}
.archive-timeline-step .step-dot{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;border:2px solid var(--border);background:var(--surface);z-index:1}
.archive-timeline-step.is-done .step-dot{border-color:var(--success);background:var(--success-soft);color:var(--success)}
.archive-timeline-step.is-active .step-dot{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.archive-timeline-step.is-error .step-dot{border-color:var(--danger);background:var(--danger-soft);color:var(--danger)}
.archive-timeline-step .step-label{font-size:10px;color:var(--muted);margin-top:4px;text-align:center;line-height:1.3}
.archive-timeline-step .step-time{font-size:10px;color:var(--muted);text-align:center;white-space:nowrap}

/* 归档只读字段 */
.archive-field{display:flex;align-items:baseline;gap:6px;padding:3px 0;font-size:12px}
.archive-field .af-label{color:var(--muted);min-width:70px;flex-shrink:0;font-size:11px}
.archive-field .af-value{font-weight:500}
.archive-field .af-empty{color:var(--muted);font-style:italic}

/* 归档 toggle 只读标签 */
.archive-toggle-tag{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:600}
.archive-toggle-tag.is-pass{background:#e8f5e9;color:#2e7d32}
.archive-toggle-tag.is-fail{background:#fce4e4;color:#c62828}

/* 归档区域摘要行 */
.archive-section-summary{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px;cursor:pointer;user-select:none}
.archive-section-summary .summary-icon{font-size:14px}
.archive-section-summary.is-all-pass{color:#2e7d32}
.archive-section-summary.is-has-fail{color:#c62828}

/* 归档区域详情（默认折叠） */
.archive-section-detail{display:none;margin-top:6px}
.archive-section-detail.is-open{display:block}

/* 详情面板滚动区域 */
.archive-detail-scroll{max-height:calc(100vh - 240px);overflow-y:auto;padding-right:4px}

/* 机台数据占位 */
.archive-machine-placeholder{display:flex;align-items:center;justify-content:center;gap:10px;padding:24px;margin-top:16px;border:1px dashed var(--border);border-radius:var(--radius);color:var(--muted);font-size:13px;background:var(--surface-2)}

/* ── 质量分析区 ── */
.analysis-toggle{display:flex;align-items:center;gap:8px;padding:10px 20px;cursor:pointer;border-top:1px solid var(--border);background:var(--surface-2);font-size:13px;font-weight:600;user-select:none}
.analysis-toggle:hover{background:var(--accent-soft)}
.analysis-panel{display:none;padding:20px;background:var(--surface);border-top:1px solid var(--border)}
.analysis-panel.is-open{display:block}

/* 分析 Tab */
.analysis-tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--border)}
.analysis-tab{padding:6px 14px;border:none;background:none;font-size:12px;cursor:pointer;color:var(--muted);border-bottom:2px solid transparent;transition:all .15s}
.analysis-tab.is-active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.analysis-tab:hover{color:var(--accent)}

/* 图表容器 */
.analysis-chart-area{display:flex;gap:20px;min-height:300px}
.analysis-chart{flex:1;min-width:0}
.analysis-summary{width:240px;flex-shrink:0;padding:12px;background:var(--surface-2);border-radius:var(--radius-sm);font-size:12px}
.analysis-summary table{width:100%}
.analysis-summary td{padding:3px 4px}
.analysis-summary .as-num{text-align:right;font-weight:600;font-variant-numeric:tabular-nums}

/* SVG 图表 */
.analysis-chart svg{width:100%;height:100%}
.analysis-chart .bar:hover{opacity:.8;cursor:pointer}
.analysis-chart .axis-line{stroke:var(--border);stroke-width:1}
.analysis-chart .axis-label{fill:var(--muted);font-size:10px}
.analysis-chart .chart-bar-pass{fill:#a5d6a7}
.analysis-chart .chart-bar-fail{fill:#ef9a9a}
.analysis-chart .chart-line{fill:none;stroke:var(--accent);stroke-width:2}
.analysis-chart .chart-dot{fill:var(--accent)}

/* 导出按钮 */
.analysis-export{float:right;font-size:11px}

@media (max-width: 960px) {
  .archive-layout{flex-direction:column}
  .archive-list-panel{width:100%;min-width:0;max-height:300px;border-right:none;border-bottom:1px solid var(--border)}
  .analysis-chart-area{flex-direction:column}
  .analysis-summary{width:100%}
}

/* ── 小白轮维护 ── */
.wheel-machine-selector{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.wheel-machine-chip{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 12px;border:2px solid var(--border);border-radius:8px;background:var(--surface);cursor:pointer;font:inherit;color:inherit;min-width:56px;transition:border-color .15s,background .15s}
.wheel-machine-chip:hover{border-color:var(--primary);background:var(--surface-2)}
.wheel-machine-chip.is-active{border-color:var(--primary);background:#e8f0fe}
.wheel-machine-chip.has-warning{animation:pulse-warn 2s infinite}
@keyframes pulse-warn{0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,.3)}50%{box-shadow:0 0 0 4px rgba(239,68,68,0)}}
.wheel-systems-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.wheel-system-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:14px}
.wheel-item{display:flex;flex-direction:column;gap:2px;padding:8px 0;border-bottom:1px solid var(--border)}
.wheel-item:last-child{border-bottom:0}
.wheel-item-low{background:#fef2f2;margin:0 -14px;padding-left:14px;padding-right:14px;border-radius:4px}
.wheel-item-info{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px}
.wheel-item-info strong{font-size:12px}
.wheel-item-bar{height:4px;background:var(--border);border-radius:2px;overflow:hidden}
.wheel-item-bar span{display:block;height:100%;border-radius:2px;transition:width .3s}
@media (max-width:640px){.wheel-systems-grid{grid-template-columns:1fr}}

/* 只打印当前板片标签，避免把库存列表和操作按钮印到标签上。 */
@media print {
  body.printing-slab-label > :not(#app-dialog) { display: none !important; }
  body.printing-slab-label #app-dialog { position: static; display: block; width: 80mm; max-width: none; max-height: none; margin: 0; padding: 0; border: 0; box-shadow: none; overflow: visible; }
  body.printing-slab-label #app-dialog::backdrop { display: none; }
  body.printing-slab-label .dialog-header,
  body.printing-slab-label #dialog-footer,
  body.printing-slab-label #dialog-body > :not(.slab-qr-label) { display: none !important; }
  body.printing-slab-label .slab-qr-label { text-align: center; color: #000; break-inside: avoid; }
}
.form-help {
  margin-top: 0.5rem;
  color: var(--muted);
  font-size: 0.75rem;
  line-height: 1.5;
}
.vendor-map-head,.vendor-map-row{display:grid;grid-template-columns:1fr 1fr 1fr 1.4fr 1fr 32px;gap:6px;align-items:center;margin-bottom:6px}
.vendor-map-head{font-size:.72rem;color:var(--muted);font-weight:700}
@media (max-width:900px){.vendor-map-head{display:none}.vendor-map-row{grid-template-columns:1fr 1fr}.vendor-map-row .icon-button{justify-self:end}}

/* ── 同步对账台（DEV18）── */
.reconcile-section summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:10px;width:100%}
.reconcile-section summary::-webkit-details-marker{display:none}
.reconcile-hint{font-size:.8rem;color:var(--muted);margin:0 0 10px}
.reconcile-empty{font-size:.85rem;color:var(--muted);margin:0}
.reconcile-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.reconcile-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface)}
.reconcile-item strong{display:block;font-size:.88rem}
.reconcile-item small{display:block;color:var(--muted);font-size:.76rem;margin-top:2px}
.reconcile-filters{display:flex;flex-wrap:wrap;align-items:end;gap:12px}
.reconcile-filters label{display:flex;flex:1 1 160px;min-width:0;flex-direction:column;gap:4px;font-size:.85rem}
.reconcile-filters input,.reconcile-filters select{width:100%;min-width:0}
.reconciliation-page .page-toolbar{flex-wrap:wrap}
.reconciliation-page .page-toolbar>div{flex:1 1 260px;min-width:0}
.reconcile-summary h3{margin:0;overflow-wrap:anywhere}
.reconcile-count{font-size:1.25rem}
.reconcile-range{color:var(--muted);font-size:.85rem;overflow-wrap:anywhere}
.reconcile-pagination{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px}
.reconcile-pagination span{flex:1 1 200px;color:var(--muted);font-size:.85rem}
.reconcile-item{flex-wrap:wrap}
.reconcile-item>div{min-width:0;flex:1 1 220px;overflow-wrap:anywhere}
.reconcile-item p{margin:4px 0;font-size:.85rem}
.reconcile-task-fields>div{display:grid;grid-template-columns:90px minmax(0,1fr);gap:8px;padding:4px 0}
.reconcile-task-fields dd{margin:0;overflow-wrap:anywhere}
@media(max-width:480px){.reconcile-filters label{flex-basis:100%}.reconcile-summary{flex-wrap:wrap}.reconcile-summary .toolbar-spacer{display:none}.reconcile-summary h3{flex-basis:100%}.reconciliation-page .kpi-grid{grid-template-columns:1fr}}
.form-grid.settings-numeric-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.settings-numeric-grid fieldset { min-width: 0; }
.slab-row { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)) auto; gap:8px; align-items:end; margin-bottom:8px; }
.slab-row .field { min-width:0; }
@media (max-width: 767px) { .slab-row { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width: 767px) {
  .form-grid.settings-numeric-grid { grid-template-columns: minmax(0, 1fr); }
}
.field[hidden] { display: none; }
.wire-confirm { display: flex; align-items: flex-start; gap: 8px; }
.wire-confirm input { width: auto; flex: none; margin-top: 3px; }
/* Internal evidence attribution and explicit shared calendars. */
.cost-attribution-row,.shared-calendar-resource { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr)); gap:12px; min-width:0; margin:12px 0; padding:12px; border:1px solid var(--border); border-radius:8px; }
.cost-attribution-row .field,.shared-calendar-resource .field { min-width:0; }
.cost-attribution-row input,.shared-calendar-resource input,.shared-calendar-resource textarea,.shared-calendar-resource select { max-width:100%; width:100%; box-sizing:border-box; }

/* Keep order actions reachable while scrolling the wide order table. */
.order-table th:last-child, .order-table td:last-child { position: sticky; right: 0; background: var(--surface, #fff); box-shadow: -3px 0 5px #0001; z-index: 1; }
.order-table th:last-child { z-index: 2; }

.business-menu-icon { width: 18px; height: 18px; filter: brightness(0) invert(.85); }
[data-business-denied] { display: none !important; }
