/* apps/web 业务壳：UIprd Token 别名 + list-shell / 业务叠层视觉对齐。
 * 壳结构走 ui-shell（layout.md）；本文件不另造侧栏排布。
 * 弹层走 dialog.ui-dialog / aside.ui-drawer + ui-drawer-backdrop（规范 API）。 */

:root {
  --pearl: var(--color-bg-page);
  --page-bg: var(--color-bg-page);
  --surface: var(--color-bg);
  --border: var(--color-border);
  --primary: var(--color-primary);
  --gold: var(--color-primary);
  --gold-soft: var(--color-brand-30);
  --gold-deep: var(--color-primary-hover);
  --gold-wash: var(--color-table-selected);
  --gold-wash-strong: rgba(194, 65, 12, 0.18);
  --ink: var(--color-text);
  --ink-2: var(--color-text-secondary);
  --muted: var(--color-text-secondary);
  --muted-2: var(--color-text-tertiary);
  --nav-bg: var(--color-bg);
  --success: var(--color-success);
  --success-wash: var(--color-success-soft);
  --warning: var(--color-warning);
  --danger: var(--color-danger);
  --danger-wash: var(--color-danger-soft);
  --mask: rgba(20, 20, 20, 0.4);
  --grid-line: var(--color-divider);
  --stripe: var(--color-bg-subtle);
  --row-hover: var(--color-table-hover);
  --stats-bg: var(--color-bg-page);
  --stats-label-bg: var(--color-primary-soft);
  --tag-bg: var(--color-bg-muted);
  --toast-ok-bg: var(--color-bg);
  --toast-err-bg: var(--color-bg);
  --scroll-thumb: var(--color-gray-30);
  --scroll-thumb-hover: var(--color-gray-40);
  --btn-disabled-bg: var(--color-gray-40);
  --btn-disabled-border: var(--color-gray-40);
  --btn-disabled-text: var(--color-white);
  --font: var(--font-sans);
  --mono: var(--font-mono);
  --btn-h: var(--control-h-md);
  --btn-h-sm: var(--control-h-sm);
  --btn-fs: var(--fs-button);
  --btn-pad-x: var(--space-4);
  --btn-gap: var(--space-2);
  /* Table Pro 行高（业务层显式钉死，避免旧 Token/缓存仍是 40） */
  --table-row-h: 46px;
  --row-h: var(--table-row-h);
  --pager-h: var(--control-h-md);
  --cell-pad-x: var(--space-3);
  --cell-clip-en: 40;
  --cell-clip-zh: 20;
  --drawer-w: min(80vw, 100%);
  --dialog-w: 400px;
  --modal-w-sm: 520px;
  --modal-w-md: 640px;
  --modal-w-lg: 760px;
  --fs-ctrl: 12px;
  --lh-body: var(--lh-normal);
  --toolbar-pad-y: var(--space-3);
  --toolbar-pad-x: var(--space-4);
  --footer-pad-y: var(--space-2);
  --footer-pad-x: var(--space-4);
  --overlay-pad-y: var(--space-4);
  --overlay-pad-x: var(--space-5);
  --card-pad-y: var(--space-4);
  --card-pad-x: var(--space-5);
  --form-row-gap: var(--space-4);
  --field-gap: var(--space-2);
  --inline-gap: var(--space-2);
  --dur: var(--dur-normal);
  --dur-fast: var(--dur-fast);
  --dur-nav: var(--dur-slow);
  --dur-overlay: var(--dur-enter);
  --ease-ep: var(--ease-out);
  --ease-drawer: var(--ease-emphasized);
  --ease-panel: var(--ease-out);
  --shadow-md: var(--shadow-card);
}

html, body, .ui-shell, .ui-page-main-body, .list-shell, .table-scroll {
  overscroll-behavior-x: none;
}

.ui-page-main-body > .list-shell,
.ui-page-main-body > .ops-ex {
  flex: 1 1 auto;
  min-height: 0;
  height: 100%;
}

/* 2.3.7 种子库：左侧竖排页内 Tab */
.list-shell > .dev-seed {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 0;
  flex: 1 1 auto;
  min-height: 0;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
}
.dev-seed__tabs {
  flex: 0 0 auto;
  width: max-content;
  min-width: 7.5rem;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--space-1);
  padding: 0 var(--space-3) 0 0;
  margin-right: var(--space-3);
  border-right: 1px solid var(--color-border);
  box-sizing: border-box;
}
.dev-seed__tab {
  appearance: none;
  border: 0;
  background: transparent;
  color: var(--color-text);
  font-family: inherit;
  font-size: var(--fs-body);
  font-weight: var(--fw-medium);
  height: 36px;
  min-height: 36px;
  padding: 0 var(--space-3);
  border-radius: var(--radius-md);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  text-align: left;
  white-space: nowrap;
  transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}
.dev-seed__tab:hover:not(.is-active) {
  background: var(--color-bg-subtle);
}
.dev-seed__tab.is-active,
.dev-seed__tab[aria-selected="true"] {
  background: var(--color-secondary);
  color: var(--color-text-inverse);
}
.dev-seed__tab:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
}
.dev-seed__panel {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  overflow: hidden;
  position: relative;
}

/* 2.11.1 异常处理：主区满宽贴齐已开页面底边（领星式工作区，不再浮白卡顶缝）
 * 须压过 uiguide「.ui-page:has(> .ui-page-top) > .ui-page-main」 */
.ui-page:has(> .ui-page-top) > .ui-page-main.page-main--flush-top,
.ui-page:has(> .ui-opened-pages) > .ui-page-main.page-main--flush-top {
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: var(--color-bg);
}
.ui-page:has(> .ui-page-top) > .ui-page-main.page-main--flush-top .ops-ex__head,
.ui-page:has(> .ui-opened-pages) > .ui-page-main.page-main--flush-top .ops-ex__head {
  margin: 0;
  padding: var(--space-2) var(--space-4);
  border-bottom: 1px solid var(--color-border);
  background: var(--color-bg);
}
.ui-page:has(> .ui-page-top) > .ui-page-main.page-main--flush-top .ops-ex__body,
.ui-page:has(> .ui-opened-pages) > .ui-page-main.page-main--flush-top .ops-ex__body {
  padding: var(--space-3) var(--space-4) var(--space-2);
  background: var(--color-bg-page);
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  min-height: 0;
}
/* 列表视图：壳拉满，表体吃剩余高度，底栏贴底（达成情况 KPI 无 list-shell 不受影响） */
.ui-page:has(> .ui-page-top) > .ui-page-main.page-main--flush-top .ops-ex__body > .list-shell,
.ui-page:has(> .ui-opened-pages) > .ui-page-main.page-main--flush-top .ops-ex__body > .list-shell {
  flex: 1 1 auto;
  min-height: 0;
  height: auto;
}
.ui-page:has(> .ui-page-top) > .ui-page-main.page-main--flush-top .ops-ex .table-scroll,
.ui-page:has(> .ui-opened-pages) > .ui-page-main.page-main--flush-top .ops-ex .table-scroll {
  flex: 1 1 0;
  min-height: 0;
}
.ui-page:has(> .ui-page-top) > .ui-page-main.page-main--flush-top .ops-ex .list-footer,
.ui-page:has(> .ui-opened-pages) > .ui-page-main.page-main--flush-top .ops-ex .list-footer {
  flex-shrink: 0;
  padding-block: var(--space-1);
  align-items: center;
}

/* ── Buttons（覆盖 uiguide：默认高 40 = --control-h-md） ── */
button.ui-btn,
.ui button.ui-btn,
.ui-btn {
  appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--btn-gap);
  box-sizing: border-box;
  height: var(--control-h-md);
  min-height: var(--control-h-md);
  padding: 0 var(--space-4);
  border-radius: var(--radius-md);
  font-size: var(--fs-button);
  font-weight: var(--fw-medium);
  line-height: 1;
  text-align: center;
  border: 1px solid transparent;
  cursor: pointer;
  background: var(--color-bg);
  color: var(--color-text);
  user-select: none;
  white-space: nowrap;
  font-family: inherit;
  transition: background-color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}
button.ui-btn[hidden],
.ui-btn[hidden] { display: none; }
button.ui-btn.ui-btn-sm,
.ui button.ui-btn.ui-btn-sm,
.ui-btn.ui-btn-sm {
  height: var(--control-h-sm);
  min-height: var(--control-h-sm);
  padding: 0 var(--space-3);
  font-size: var(--fs-caption);
}
button.ui-btn.ui-btn-icon,
.ui button.ui-btn.ui-btn-icon,
.ui-btn.ui-btn-icon {
  width: var(--control-h-md);
  min-width: var(--control-h-md);
  padding: 0;
}
button.ui-btn.ui-btn-icon.ui-btn-sm,
.ui-btn.ui-btn-icon.ui-btn-sm {
  width: var(--control-h-sm);
  min-width: var(--control-h-sm);
}
button.ui-btn:focus-visible,
.ui-btn:focus-visible { outline: none; box-shadow: var(--shadow-focus); }
/* default：白底 + 主色边框/字；hover 软底 */
button.ui-btn-default,
.ui button.ui-btn-default,
.ui-btn-default {
  background: var(--color-bg);
  color: var(--color-primary);
  border-color: var(--color-primary);
}
button.ui-btn-default:hover:not(:disabled),
.ui button.ui-btn-default:hover:not(:disabled),
.ui-btn-default:hover:not(:disabled) {
  background: var(--color-primary-soft);
}
button.ui-btn-default:disabled,
.ui-btn-default:disabled { opacity: 0.45; cursor: not-allowed; }
button.ui-btn-primary,
.ui button.ui-btn-primary,
.ui-btn-primary {
  background: var(--color-primary);
  color: #fff;
  border-color: var(--color-primary);
}
button.ui-btn-primary:hover:not(:disabled),
.ui button.ui-btn-primary:hover:not(:disabled),
.ui-btn-primary:hover:not(:disabled) { background: var(--color-primary-hover); color: #fff; }
button.ui-btn-primary:disabled,
.ui-btn-primary:disabled { opacity: 0.45; cursor: not-allowed; }
button.ui-btn-secondary,
.ui button.ui-btn-secondary,
.ui-btn-secondary {
  background: var(--color-bg);
  color: var(--color-primary);
  border-color: var(--color-primary);
}
button.ui-btn-secondary:hover:not(:disabled),
.ui button.ui-btn-secondary:hover:not(:disabled),
.ui-btn-secondary:hover:not(:disabled) {
  background: var(--color-primary-soft);
}
button.ui-btn-danger,
.ui button.ui-btn-danger,
.ui-btn-danger {
  background: var(--color-danger);
  color: #fff;
  border-color: var(--color-danger);
}
button.ui-btn-danger:hover:not(:disabled),
.ui button.ui-btn-danger:hover:not(:disabled),
.ui-btn-danger:hover:not(:disabled) {
  background: var(--color-danger-hover);
  color: #fff;
}
button.ui-btn-danger:disabled,
.ui-btn-danger:disabled { opacity: 0.45; cursor: not-allowed; }
button.ui-btn-quiet,
.ui-btn-quiet {
  background: var(--color-gray-40);
  color: #fff;
  border-color: var(--color-gray-40);
}
button.ui-btn-ghost,
.ui-btn-ghost {
  background: transparent;
  color: var(--color-text-secondary);
  border-color: transparent;
}
button.ui-btn-ghost:hover:not(:disabled),
.ui-btn-ghost:hover:not(:disabled) {
  background: var(--color-bg-subtle);
  color: var(--color-text);
}
/* 字链：压过上方 .ui-btn 的控制高度/水平垫，对齐 base ui-btn-link（操作列勿撑宽） */
button.ui-btn.ui-btn-link,
.ui button.ui-btn.ui-btn-link,
.ui-btn.ui-btn-link {
  height: auto;
  min-height: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--color-primary);
  gap: 0;
}

/* ui-segmented：抵消上方 `.ui button.ui-btn` 默认白底，对齐 ui-guide 浅底轨道 + 白底高亮 */
.ui .ui-segmented,
.ui-segmented {
  display: inline-flex;
  padding: 3px;
  gap: 2px;
  background: var(--color-bg-subtle);
  border: 1px solid #e7e7e7;
  border-radius: var(--radius-md);
}
.ui .ui-segmented .ui-btn,
.ui-segmented .ui-btn,
.ui .ui-segmented button.ui-btn,
.ui-segmented button.ui-btn {
  height: 32px;
  min-height: 32px;
  padding: 0 14px;
  background: transparent;
  color: var(--color-text-secondary);
  border: 0;
  box-shadow: none;
}
.ui .ui-segmented .ui-btn:hover:not(:disabled):not(.is-active),
.ui-segmented .ui-btn:hover:not(:disabled):not(.is-active),
.ui .ui-segmented button.ui-btn:hover:not(:disabled):not(.is-active),
.ui-segmented button.ui-btn:hover:not(:disabled):not(.is-active) {
  color: var(--color-text);
  background: transparent;
}
.ui .ui-segmented .ui-btn.is-active,
.ui-segmented .ui-btn.is-active,
.ui .ui-segmented button.ui-btn.is-active,
.ui-segmented button.ui-btn.is-active {
  background: var(--color-bg);
  color: var(--color-text);
  box-shadow: var(--shadow-sm);
}
.ui .ui-segmented .ui-btn.is-active:hover:not(:disabled),
.ui-segmented .ui-btn.is-active:hover:not(:disabled),
.ui .ui-segmented button.ui-btn.is-active:hover:not(:disabled),
.ui-segmented button.ui-btn.is-active:hover:not(:disabled) {
  background: var(--color-bg);
  color: var(--color-text);
}
button.ui-btn-danger-text,
.ui-btn-danger-text {
  background: transparent;
  color: var(--color-danger);
  border-color: transparent;
}
button.ui-btn.is-loading,
.ui-btn.is-loading { pointer-events: none; position: relative; color: transparent !important; }
button.ui-btn.is-loading::after,
.ui-btn.is-loading::after {
  content: "";
  position: absolute;
  top: 50%; left: 50%;
  width: 4px; height: 4px;
  margin: -2px 0 0 -2px;
  border-radius: 50%;
  background: currentColor;
  box-shadow: -7px 0 0 currentColor, 7px 0 0 currentColor;
  animation: ui-dots 1s ease-in-out infinite;
  color: #fff;
}
button.ui-btn-default.is-loading::after,
button.ui-btn-ghost.is-loading::after,
.ui-btn-default.is-loading::after,
.ui-btn-ghost.is-loading::after { color: var(--color-text); }
@keyframes ui-dots { 0%, 100% { opacity: 0.28; } 50% { opacity: 1; } }

.tag {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 22px;
  padding: 0 var(--space-2);
  border-radius: var(--radius-pill);
  font-size: var(--fs-caption);
  font-weight: 600;
  color: var(--color-text);
  background: var(--color-bg-muted);
}
.tag--ok { background: var(--color-success-soft); color: var(--color-success); }
.tag--warn { background: var(--color-warning-soft); color: var(--color-warning); }
.tag--danger { background: var(--color-danger-soft); color: var(--color-danger); }
.tag--info, .tag--processing { background: var(--color-info-soft); color: var(--color-info); }
.tag--muted, .tag--gold { background: var(--color-bg-muted); color: var(--color-text-secondary); }

.link { color: var(--color-primary); font-weight: 500; cursor: pointer; text-decoration: none; }
.link:hover { text-decoration: underline; }
.link--id { color: var(--color-text); font-weight: 700; }
.link--danger,
.link.is-danger { color: var(--color-danger); }
.link--ok,
.link.is-success { color: var(--color-success); }
a.status-tag-link {
  color: inherit;
  text-decoration: none;
  font-weight: inherit;
}
a.status-tag-link:hover { text-decoration: none; }
a.status-tag-link .ui-tag { cursor: pointer; }
/* 操作列不可点：须压过 .link 主色，对齐 ui-link.is-disabled */
a.link.is-disabled,
a.link[aria-disabled="true"],
.link.is-disabled,
.link[aria-disabled="true"] {
  color: var(--color-text-disabled);
  pointer-events: none;
  cursor: not-allowed;
  text-decoration: none;
}
a.link.is-disabled:hover,
a.link[aria-disabled="true"]:hover,
.link.is-disabled:hover,
.link[aria-disabled="true"]:hover {
  color: var(--color-text-disabled);
  text-decoration: none;
}
.muted { color: var(--color-text-secondary); font-size: var(--fs-caption); }

/* 自动化节点详情：字段名左列更醒目，内容右列完整展示、不抢层级 */
.an-node-detail {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.an-node-detail__row {
  display: grid;
  grid-template-columns: 7.5em minmax(0, 1fr);
  gap: var(--space-3);
  align-items: start;
}
.an-node-detail__label {
  color: var(--color-text);
  font-size: var(--fs-body);
  font-weight: var(--fw-medium);
  line-height: var(--lh-normal, 1.5);
}
.an-node-detail__value {
  color: var(--color-text-secondary);
  font-size: var(--fs-body);
  font-weight: var(--fw-regular);
  line-height: var(--lh-normal, 1.5);
  word-break: break-all;
  white-space: pre-wrap;
}
.an-node-detail__value .ui-text-success,
.an-node-detail__value .ui-text-danger {
  font-weight: var(--fw-medium);
}

/* ── List / table ── */
.list-shell {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  background: transparent;
  border: 0;
  border-radius: 0;
  overflow: hidden;
  position: relative;
}
/* 表单壳内骨架：贴满 list-shell（切页 / 内容区）；勿再对 --page 给壳加 padding */
.list-shell > .ui-skeleton-block--form,
.list-shell > .ui-skeleton-block--form-body {
  flex: 1 1 auto;
  min-height: 0;
  width: 100%;
  margin: 0;
  box-sizing: border-box;
}
/* 同壳刷新：骨架落在 table-scroll / 内容槽，工具栏常显 */
.list-shell > .table-scroll > .ui-skeleton-block--form-body,
.list-shell > .ui-table-wrap > .ui-skeleton-block--form-body {
  flex: 1 1 auto;
  min-height: 120px;
  width: 100%;
  margin: 0;
  box-sizing: border-box;
}
.table-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: 0;
  border: 0;
  border-bottom: 0;
  flex-shrink: 0;
  flex-wrap: wrap;
  background: transparent;
}
/* 视图条：单行状态 + 切换，强制 y 轴居中 */
.table-bar--view {
  align-items: center;
  min-height: calc(var(--control-h-md) + var(--space-3));
}
.table-bar-left { flex: 1; min-width: 0; }
.table-bar-left:has(.filter-fields) {
  flex: 0 1 auto;
  min-width: min-content;
  overflow: visible;
}
.table-bar-left--status {
  display: inline-flex;
  align-items: center;
  min-height: var(--control-h-md);
  color: var(--color-text-secondary);
  font-size: var(--fs-body);
  line-height: var(--lh-tight);
}
.table-bar-right {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-left: auto;
}
/* 右侧：文案操作（筛选/重置）+ 图标工具簇；工具簇左分隔 */
.table-bar-tools {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  margin-left: var(--space-1);
  padding-left: var(--space-3);
  border-left: 1px solid var(--color-divider);
  min-height: var(--control-h-md);
}
.table-bar-tools .ui-btn.ui-btn-icon {
  width: var(--control-h-md);
  min-width: var(--control-h-md);
  height: var(--control-h-md);
  padding: 0;
}
.table-bar-tools .qt-tool-ico {
  display: block;
  flex-shrink: 0;
}
.table-bar-title {
  display: inline-flex;
  align-items: center;
  min-height: var(--control-h-md);
  font-size: var(--fs-body);
  font-weight: 600;
}
/* table-bar 半宽折叠：对齐 Table Pro；展开后 extra 第二行仅左侧筛区 */
.table-bar.has-filter-bar {
  border: 0;
  padding: 0;
  border-radius: 0;
  box-sizing: border-box;
  background: transparent;
}
/* 筛栏控件统一高 36（--control-h-filter）；局部覆盖，不改全局 40/48 */
.table-bar.filter-bar,
.table-bar.has-filter-bar {
  --control-h-md: var(--control-h-filter);
  --control-h-sm: var(--control-h-filter);
  --control-h-lg: var(--control-h-filter);
  --btn-h: var(--control-h-filter);
  --btn-h-sm: var(--control-h-filter);
  --ui-select-h: var(--control-h-filter);
  --ui-suggest-h: var(--control-h-filter);
  --ui-date-h: var(--control-h-filter);
}
.table-bar.filter-bar .ui-btn:not(.ui-btn-link),
.table-bar.has-filter-bar .ui-btn:not(.ui-btn-link),
.table-bar.filter-bar input.ui-input,
.table-bar.has-filter-bar input.ui-input,
.table-bar.filter-bar input.wide,
.table-bar.has-filter-bar input.wide,
.table-bar.filter-bar .ui-suggest-input,
.table-bar.has-filter-bar .ui-suggest-input,
.table-bar.filter-bar select.ui-input,
.table-bar.has-filter-bar select.ui-input,
.table-bar.filter-bar .ui-select-trigger,
.table-bar.has-filter-bar .ui-select-trigger,
.table-bar.filter-bar .ui-date-trigger,
.table-bar.has-filter-bar .ui-date-trigger,
.table-bar.filter-bar .page-segment button,
.table-bar.has-filter-bar .page-segment button {
  height: var(--control-h-filter);
  min-height: var(--control-h-filter);
  box-sizing: border-box;
}
.table-bar.filter-bar .table-bar-tools .ui-btn.ui-btn-icon,
.table-bar.has-filter-bar .table-bar-tools .ui-btn.ui-btn-icon {
  width: var(--control-h-filter);
  min-width: var(--control-h-filter);
  height: var(--control-h-filter);
}

/* 3.2.3 主子多维表：筛选面板（U9 自定义 Select；工具栏密度 --control-h-filter / 宽≥108） */
.wj-bitable-filter-dropdown {
  position: relative;
  display: inline-flex;
  align-items: center;
}
.wj-bitable-filter-menu {
  display: none;
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  /* 高于 .wj-bitable-fill-handle(10000)，避免填充柄盖在筛选面板上穿模 */
  z-index: 10050;
  min-width: 36rem;
  max-width: min(52rem, 96vw);
  max-height: min(70vh, 32rem);
  overflow: hidden;
  padding: var(--space-3);
  box-sizing: border-box;
  list-style: none;
  margin: 0;
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card);
}
.wj-bitable-filter-dropdown.is-open > .wj-bitable-filter-menu:not([hidden]) {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  align-items: stretch;
}
.wj-bitable-filter-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
}
.wj-bitable-filter-logic {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: var(--space-3);
  min-width: 0;
}
.wj-bitable-filter-logic-label {
  font-size: var(--fs-caption);
  color: var(--color-text-secondary);
  flex: 0 0 auto;
}
.wj-bitable-filter-logic-seg.page-segment {
  flex: 0 1 auto;
  min-width: 0;
  height: var(--control-h-filter);
}
.wj-bitable-filter-logic-seg.page-segment button {
  height: 100%;
  min-height: 0;
  padding: 0 var(--space-3);
  font-size: var(--fs-body);
}
.wj-bitable-filter-rows {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  min-width: 0;
}
.wj-bitable-filter-row {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
  max-width: 100%;
}
.wj-bitable-filter-and {
  font-size: var(--fs-caption);
  color: var(--color-text-secondary);
  min-width: 1.5em;
  flex: 0 0 auto;
}
.wj-bitable-filter-value {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex: 1 1 auto;
  min-width: 0;
}
.wj-bitable-filter-menu .ui-select,
.wj-bitable-filter-menu .ui-select.ui-select-sm {
  --ui-select-h: var(--control-h-filter);
  flex: 0 1 auto;
  width: auto;
  min-width: 0;
  max-width: 14rem;
}
.wj-bitable-filter-menu .ui-select-trigger {
  height: var(--control-h-filter);
  font-size: var(--fs-body);
}
.wj-bitable-filter-menu .wj-bitable-filter-value .ui-input,
.wj-bitable-filter-menu .wj-bitable-filter-value .ui-date,
.wj-bitable-filter-menu .wj-bitable-filter-value .ui-select {
  --ui-select-h: var(--control-h-filter);
  flex: 1 1 auto;
  width: 100%;
  min-width: 0;
  max-width: none;
  height: var(--control-h-filter);
  box-sizing: border-box;
}
.wj-bitable-filter-row > .ui-btn {
  flex: 0 0 auto;
  width: var(--control-h-filter);
  height: var(--control-h-filter);
  padding: 0;
}
.wj-bitable-filter-value input[type="date"] {
  min-width: 0;
}
.wj-bitable-filter-body > .ui-btn[data-wj-filter-add] {
  align-self: flex-start;
  height: var(--control-h-filter);
  padding: 0 var(--space-3);
  font-size: var(--fs-body);
}
.wj-bitable-filter-actions {
  display: flex;
  justify-content: flex-end;
  gap: var(--space-2);
  flex: 0 0 auto;
  padding-top: var(--space-2);
  border-top: 1px solid var(--color-border);
}
.wj-bitable-filter-actions .ui-btn {
  height: var(--control-h-filter);
  padding: 0 var(--space-4);
  font-size: var(--fs-body);
}
/*
 * 筛选面板 z-index 10050（压过填充柄）。U9 Select/Date/Suggest 挂到 body 后默认 80，
 * 会整层压在面板下，看起来像被底边裁切。打开时须高于筛选面板。
 */
body > .ui-select-menu,
body > .ui-date-panel,
body > .ui-suggest-menu,
body > .ui-dropdown-menu {
  z-index: 10100;
}
.list-footer__serial-jump {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  flex-shrink: 0;
}
.list-footer__serial-jump-label {
  font-size: var(--fs-sm);
  color: var(--color-text-secondary);
}
.list-footer__serial-jump input.ui-input {
  width: 4.5rem;
  min-width: 4.5rem;
  text-align: center;
}
.table-bar.has-bar-extra:not(.is-expanded) > .table-bar-left {
  flex: 0 1 auto;
  min-width: min-content;
  max-width: none;
}
.table-bar.is-bar-fit > .table-bar-left {
  flex: 0 1 auto;
  min-width: min-content;
  max-width: none;
}
.table-bar.is-expanded > .table-bar-left:has(.filter-fields) {
  flex: 0 1 auto;
  min-width: min-content;
  width: auto;
  max-width: none;
}
.table-bar.is-bar-fit [data-act="expand"],
.table-bar.is-bar-fit [data-table-bar-expand] {
  display: none !important;
}
.table-bar-extra {
  display: none;
  flex: 1 1 100%;
  width: 100%;
  box-sizing: border-box;
  margin: 0;
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-divider);
  min-width: 0;
}
.table-bar.is-expanded > .table-bar-extra {
  display: block;
}
.table-bar.is-measuring > .table-bar-extra,
.table-bar.is-bar-fit > .table-bar-extra {
  display: none !important;
}
.table-bar-extra > .filter-fields {
  width: 100%;
  max-width: 100%;
}
/* 筛字段（V10 + V9）：须压过 base `.ui form { display:block }`（form.filter-fields） */
.filter-fields,
.ui form.filter-fields,
form.filter-fields {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  column-gap: var(--space-3);
  row-gap: var(--space-3);
  width: auto;
  max-width: 100%;
  min-width: 0;
  overflow: visible;
  box-sizing: border-box;
  margin: 0;
}
.filter-fields > .field,
.filter-fields > .page-segment,
.filter-fields > .ui-btn,
.filter-fields > .ui-select,
.filter-fields > .ui-suggest {
  flex: 0 0 auto;
  width: max-content;
  max-width: none;
  min-width: max-content;
  margin: 0;
}
.filter-fields .field input.wide,
.filter-fields input.wide,
.filter-fields .field .ui-suggest.ui-suggest--wide {
  width: 160px;
  max-width: none;
  flex-shrink: 0;
  box-sizing: border-box;
}
.filter-fields .field > input:not(.wide):not([type="checkbox"]):not([type="radio"]),
.filter-fields .field > select,
.filter-fields .field > .ui-select,
.filter-fields .field > .ui-suggest:not(.ui-suggest--wide),
.filter-fields > .ui-select {
  width: max-content;
  min-width: 108px;
  max-width: none;
  flex: 0 0 auto;
  flex-shrink: 0;
  box-sizing: border-box;
}
.filter-fields .field .ui-select-trigger {
  width: auto;
  min-width: 108px;
}
.filter-fields .field .ui-select-value {
  flex: 0 0 auto;
  overflow: visible;
  text-overflow: clip;
  max-width: none;
}
/* 日期区间：一组控件，不拆成两个 field */
.field.field--range {
  align-items: center;
}
.field-range {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
}
/* 增强后原生 input 藏进 .ui-date；区间宽钉在触发器上 */
.field-range > .ui-date {
  flex: 0 0 auto;
  width: auto;
  min-width: 140px;
  max-width: 168px;
}
.field-range > .ui-date .ui-date-trigger {
  min-width: 140px;
}
.field > .ui-date {
  flex: 0 0 auto;
  width: auto;
  min-width: 140px;
}
.field > .ui-date:has(.ui-date-native[type="datetime-local"]) {
  min-width: 196px;
}
.field > .ui-date:has(.ui-date-native[type="datetime-local"]) .ui-date-trigger {
  min-width: 196px;
}
.field-sep {
  color: var(--color-text-tertiary);
  flex-shrink: 0;
  line-height: 1;
}
.field {
  display: inline-flex;
  flex-direction: row;
  align-items: center;
  gap: var(--space-2);
  flex: 0 0 auto;
  flex-shrink: 0;
  width: max-content;
  min-width: max-content;
  white-space: nowrap;
}
.field > .lbl {
  flex: 0 0 auto;
  flex-shrink: 0;
  color: var(--color-text-secondary);
  font-size: var(--fs-caption);
  line-height: var(--lh-tight);
  white-space: nowrap;
}
.field > input:not([type="checkbox"]):not([type="radio"]),
.field > .wide,
.ui-field input:not([type="radio"]):not([type="checkbox"]),
.ui-field select,
.ui-field textarea,
select.ui-combo,
select.ui-input,
input.wide {
  box-sizing: border-box;
  height: var(--control-h-md);
  padding: 0 var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  color: var(--color-text);
  font: inherit;
  font-size: var(--fs-body);
}
/* 工具栏搜索：钉死宽度，避免挤扁左侧分段/标题（对齐 Table Pro 筛字段 160） */
.field input.wide,
input.wide {
  width: 160px;
  max-width: 100%;
  flex-shrink: 0;
}
.field > input:not([type="checkbox"]):not([type="radio"]):focus,
.ui-field input:not([type="checkbox"]):not([type="radio"]):focus,
.ui-field textarea:focus,
select.ui-input:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: var(--shadow-focus);
}

.table-scroll {
  flex: 1 1 auto;
  min-height: 0;
  border: 1px solid var(--color-divider);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  overflow: auto;
  overscroll-behavior-x: none;
}

/* 页内说明：list-shell 内 Alert 顶满筛区宽，不额外缩进 */
.list-shell > .ui-alert {
  flex-shrink: 0;
}
.sys-plugin-help .ui-alert-content > .ui-alert-title {
  margin-top: var(--space-3);
}
.list-shell > .table-wrap {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
.list-shell > .table-wrap > .table-scroll {
  flex: 1 1 auto;
  min-height: 0;
}

table.data {
  border-collapse: separate;
  border-spacing: 0;
  width: max-content;
  min-width: 100%;
  font-size: var(--fs-body);
}
table.data th,
table.data td {
  box-sizing: border-box;
  height: var(--table-row-h);
  padding: 0 var(--space-3);
  border-bottom: 1px solid var(--color-divider);
  border-right: 1px solid var(--color-divider);
  white-space: nowrap;
  background: var(--color-bg);
  color: var(--color-text);
  min-width: 96px;
  line-height: var(--lh-tight);
  vertical-align: middle;
}
table.data th {
  position: sticky;
  top: 0;
  z-index: 5;
  background: var(--color-table-header);
  color: var(--color-text-secondary);
  font-size: var(--fs-caption);
  font-weight: 700;
}
/* 末行保留底边：表体未撑满时不因 base 的 last-child 去边而悬空 */
.ui table.data tbody tr:last-child td,
table.data tbody tr:last-child td {
  border-bottom: 1px solid var(--color-divider);
}
/* 表内空态（V11）：icon↑文案↓，单元格 xy 居中 */
table.data td.cell-empty {
  height: auto;
  min-height: 200px;
  padding: var(--space-8) var(--space-4);
  text-align: center;
  vertical-align: middle;
  background: var(--color-bg);
  border-right: 0;
}
.ui-table-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-3);
  width: 100%;
  min-height: 160px;
  margin: 0 auto;
  box-sizing: border-box;
  color: var(--color-text-secondary);
}
.ui-table-empty__icon,
.ui-table-empty > .ui-icon {
  flex-shrink: 0;
  font-size: 40px;
  width: 40px;
  height: 40px;
  line-height: 1;
  color: var(--color-text-tertiary);
}
.ui-table-empty__title {
  margin: 0;
  max-width: 28em;
  font-size: var(--fs-body);
  font-weight: 500;
  line-height: var(--lh-tight);
  color: var(--color-text-secondary);
}
.ui-table-empty__desc {
  margin: 0;
  max-width: 28em;
  font-size: var(--fs-caption);
  line-height: var(--lh-normal);
  color: var(--color-text-tertiary);
}
table.data th.sortable { cursor: pointer; user-select: none; }
table.data th.sortable:hover { color: var(--color-primary); }
table.data th .th-inner { display: inline-flex; align-items: center; gap: 4px; }
table.data th .sort {
  display: inline-flex;
  flex-direction: column;
  width: 10px;
  height: 14px;
  justify-content: center;
  gap: 1px;
  opacity: 0.35;
}
table.data th .sort i {
  display: block;
  width: 0;
  height: 0;
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
}
table.data th .sort .up { border-bottom: 4px solid currentColor; }
table.data th .sort .down { border-top: 4px solid currentColor; }
table.data th.is-asc .sort,
table.data th.is-desc .sort { opacity: 1; color: var(--color-primary); }
table.data th.is-asc .sort .down { opacity: 0.25; }
table.data th.is-desc .sort .up { opacity: 0.25; }
table.data tbody tr:nth-child(even) td { background: var(--color-bg-subtle); }
table.data tbody tr:hover td { background: var(--color-table-hover); }
table.data tr.selected td { background: var(--color-table-selected); }
table.data .fix-l { position: sticky; left: 0; z-index: 1; }
table.data th.fix-l { z-index: 6; background: var(--color-table-header); }
table.data .fix-r {
  position: sticky;
  right: 0;
  z-index: 1;
  text-align: center;
  background: var(--color-bg);
  box-shadow: -6px 0 12px rgba(0, 0, 0, 0.06);
}
table.data th.fix-r {
  z-index: 6;
  background: var(--color-table-header);
}
table.data tbody tr:nth-child(even) td.fix-r {
  background: var(--color-bg-subtle);
}
table.data tbody tr:hover td.fix-r {
  background: var(--color-table-hover);
}
table.data tr.selected td.fix-r {
  background: var(--color-table-selected);
}
table.data .xydc-pin-sel,
table.data .xydc-pin-act {
  position: sticky;
  z-index: 1;
  background: var(--color-bg);
}
table.data .xydc-pin-act {
  right: 0;
  text-align: center;
}
table.data .xydc-pin-sel {
  right: var(--xydc-act-w, 0);
  box-shadow: -6px 0 12px rgba(0, 0, 0, 0.06);
}
table.data th.xydc-pin-sel,
table.data th.xydc-pin-act {
  z-index: 6;
  background: var(--color-table-header);
}
table.data tbody tr:nth-child(even) td.xydc-pin-sel,
table.data tbody tr:nth-child(even) td.xydc-pin-act {
  background: var(--color-bg-subtle);
}
table.data tbody tr:hover td.xydc-pin-sel,
table.data tbody tr:hover td.xydc-pin-act {
  background: var(--color-table-hover);
}
table.data tr.selected td.xydc-pin-sel,
table.data tr.selected td.xydc-pin-act {
  background: var(--color-table-selected);
}
/* 列设置左固定列（data-pin-ix，left 由 JS 按列宽累计）：底色同 fix-r，末列右侧软阴影 */
table.data td.fix-l[data-pin-ix] {
  background: var(--color-bg);
}
table.data tbody tr:nth-child(even) td.fix-l[data-pin-ix] {
  background: var(--color-bg-subtle);
}
table.data tbody tr:hover td.fix-l[data-pin-ix] {
  background: var(--color-table-hover);
}
table.data tr.selected td.fix-l[data-pin-ix] {
  background: var(--color-table-selected);
}
table.data .fix-l-last[data-pin-ix] {
  box-shadow: 6px 0 12px rgba(0, 0, 0, 0.06);
}
.qt-col-set__row .ui-switch + .ui-switch,
.qt-col-set__status + .qt-col-set__status {
  margin-left: 0;
}
.qt-col-set__row--head,
.qt-col-set__row--head:hover {
  cursor: default;
  background: var(--color-bg);
}
.qt-col-set__row--head {
  min-height: 32px;
  font-size: var(--fs-caption);
  color: var(--color-text-tertiary);
}
.qt-col-set__row--head .qt-col-set__label {
  font-size: var(--fs-caption);
  color: inherit;
}
/* 操作列多链/按钮：横向留白（对齐 ui-cell-actions-inner gap）；列随内容收窄；文字居中 */
table.data th.cell-actions,
table.data td.cell-actions {
  white-space: nowrap;
  text-align: center;
  width: 1%;
}
table.data td.cell-actions {
  white-space: nowrap;
}
table.data td.cell-actions.fix-r {
  background: var(--color-bg);
  box-shadow: -6px 0 12px rgba(0, 0, 0, 0.06);
  text-align: center;
}
table.data th.cell-actions.fix-r {
  text-align: center;
}
table.data td.cell-actions .ui-cell-actions-inner {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
}
table.data tbody tr:nth-child(even) td.cell-actions.fix-r {
  background: var(--color-bg-subtle);
}
table.data tbody tr:hover td.cell-actions.fix-r {
  background: var(--color-table-hover);
}
table.data tr.selected td.cell-actions.fix-r {
  background: var(--color-table-selected);
}
table.data td.cell-actions > * + * {
  margin-left: var(--space-2);
}
table.data tfoot td {
  position: sticky;
  bottom: 0;
  z-index: 4;
  background: var(--color-bg-page);
  border-top: 1px solid var(--color-border);
  font-size: var(--fs-caption);
  font-weight: 500;
}
table.data tfoot td.stats-label { color: var(--color-primary); font-weight: 700; text-align: center; }
table.data th.col-check,
table.data td.col-check {
  width: 36px;
  min-width: 36px;
  max-width: 36px;
  text-align: center;
  padding: 0 var(--space-2);
}
table.data .col-check input[type="checkbox"] {
  width: 16px;
  height: 16px;
}
table.data th.col-index,
table.data td.col-index { width: 56px; min-width: 56px; max-width: 56px; }
table.data.table-cols { table-layout: fixed; width: auto; }
table.data.table-cols th,
table.data.table-cols td { min-width: 0; }
/* sticky 表头须保留；relative 会盖掉 sticky。sticky 同样可作 col-resizer 定位参照 */
table.data.table-cols th {
  position: sticky;
  top: 0;
  z-index: 5;
  overflow: visible;
}
table.data.table-cols th .th-inner,
table.data.table-cols td {
  overflow: hidden;
  text-overflow: ellipsis;
}
table.data .col-resizer {
  position: absolute;
  top: 0;
  right: -3px;
  z-index: 5;
  width: 8px;
  height: 100%;
  cursor: col-resize;
}
body.qt-col-resizing {
  cursor: col-resize !important;
  user-select: none !important;
}
body.qt-col-resizing * {
  cursor: col-resize !important;
}

.list-footer {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-3);
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  font-size: var(--fs-body);
  color: var(--color-text-secondary);
  flex-shrink: 0;
  box-sizing: border-box;
}
.list-footer .spacer { flex: 1; min-width: var(--space-2); }
.list-footer__nav {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-left: auto;
}
/* 页码：对齐 ui-pagination / ui-page-btn（高 control-md 40，禁止 sm） */
.pager {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--fs-body);
  color: var(--color-text-secondary);
}
.pager button,
.pager .ui-page-btn {
  appearance: none;
  box-sizing: border-box;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: var(--control-h-md);
  height: var(--control-h-md);
  padding: 0 var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  color: var(--color-text);
  font-family: inherit;
  font-size: var(--fs-body);
  font-weight: var(--fw-regular, 400);
  line-height: 1;
  cursor: pointer;
}
.pager button:hover:not(:disabled):not(.on):not(.is-active),
.pager .ui-page-btn:hover:not(:disabled):not(.on):not(.is-active) {
  border-color: var(--color-primary);
  color: var(--color-primary);
}
.pager button.on,
.pager button.is-active,
.pager .ui-page-btn.on,
.pager .ui-page-btn.is-active {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #fff;
  font-weight: var(--fw-medium, 500);
}
.pager button:disabled,
.pager .ui-page-btn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
.pager button:focus-visible,
.pager .ui-page-btn:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
}
.pager button .ui-icon,
.pager .ui-page-btn .ui-icon {
  font-size: 18px;
  line-height: 1;
  pointer-events: none;
}
.pager-ellipsis {
  min-width: var(--control-h-md);
  height: var(--control-h-md);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: var(--fs-body);
  color: var(--color-text-tertiary);
}
.pager-status {
  display: inline-flex;
  align-items: center;
  height: var(--control-h-md);
  padding: 0 var(--space-2);
  font-size: var(--fs-body);
  color: var(--color-text-secondary);
  white-space: nowrap;
}
/* 每页条数：与页码同高 control-md；禁止 ui-input-sm */
.pager-size {
  display: inline-flex;
  align-items: center;
}
.pager-size .ui-combo,
.pager-size .ui-input,
.pager-size .ui-select,
.pager-size select {
  width: auto;
  min-width: 96px;
  height: var(--control-h-md);
  font-size: var(--fs-body);
  box-sizing: border-box;
}
.pager-size .ui-select {
  --ui-select-h: var(--control-h-md);
}

.page-segment {
  display: inline-flex;
  align-items: stretch;
  flex-shrink: 0;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--color-bg-subtle);
  box-sizing: border-box;
  margin: 0;
}
.page-segment button {
  appearance: none;
  border: 0;
  background: transparent;
  padding: 0 var(--space-4);
  height: var(--control-h-md);
  font: inherit;
  font-size: var(--fs-body);
  color: var(--color-text-secondary);
  cursor: pointer;
  white-space: nowrap;
  flex-shrink: 0;
}
.page-segment button.on {
  background: var(--color-bg);
  color: var(--color-primary);
  font-weight: 600;
  box-shadow: var(--shadow-sm);
}

.cell-int, .cell-decimal, .cell-money, .cell-rate {
  font-variant-numeric: tabular-nums;
  font-weight: var(--fw-bold);
  color: var(--color-numeric, var(--color-brand-60, #2f5bb8));
}
.cell-money.is-neg, .cell-int.is-neg, .cell-decimal.is-neg, .cell-rate.is-neg {
  color: var(--color-danger);
}
.cell-rate.is-pick-up { color: var(--color-success); }
.cell-rate.is-pick-down { color: var(--color-danger); }
.cell-clip { white-space: nowrap; }
.cell-clip[data-clip-full] { cursor: pointer; }
.cell-code { font-family: var(--font-mono); font-size: var(--fs-caption); }
.cell-thumb__img { width: 32px; height: 32px; object-fit: contain; display: block; }
.cell-user__inner {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
}
.cell-user__avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  border-radius: var(--radius-pill);
  background: var(--color-primary-soft);
  color: var(--color-primary);
  font-size: var(--fs-caption);
}
.cell-user__name {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ui-dropdown { position: relative; display: inline-flex; }
.ui-dropdown-trigger {
  height: auto;
  min-height: 0;
  padding: 0 4px;
  border: none;
  background: transparent;
  color: var(--color-text);
  cursor: pointer;
  font: inherit;
}
/* 操作列「更多」与同列 a.link 一致：主色蓝字；语义态见 V18 */
table.data td.cell-actions .ui-dropdown-trigger {
  color: var(--color-primary);
  font-weight: 500;
  padding: 0;
}
table.data td.cell-actions .ui-dropdown-trigger:hover:not(:disabled):not(.is-disabled) {
  text-decoration: underline;
}
table.data td.cell-actions a.link,
table.data td.cell-actions a.ui-link,
table.data td.cell-actions .ui-btn-link {
  color: var(--color-primary);
  font-weight: 500;
}
table.data td.cell-actions a.link.is-danger,
table.data td.cell-actions a.link--danger,
table.data td.cell-actions a.is-danger,
table.data td.cell-actions .ui-btn-link.is-danger {
  color: var(--color-danger);
}
table.data td.cell-actions a.link.is-success,
table.data td.cell-actions a.link--ok,
table.data td.cell-actions .ui-btn-link.is-success {
  color: var(--color-success);
}
table.data td.cell-actions a.link.is-warning,
table.data td.cell-actions .ui-btn-link.is-warning {
  color: var(--color-warning);
}
table.data td.cell-actions a.link.is-disabled,
table.data td.cell-actions a[aria-disabled="true"],
table.data td.cell-actions .ui-btn-link:disabled,
table.data td.cell-actions .ui-btn-link.is-disabled {
  color: var(--color-text-disabled);
  cursor: not-allowed;
  text-decoration: none;
  pointer-events: none;
}
/* 业务下拉：默认靠 hidden；is-open 仅给账户菜单兜底（未走 portal） */
.ui-dropdown-menu {
  z-index: 50;
  min-width: 120px;
}
.ui-dropdown-menu.is-portal,
body > .ui-dropdown-menu {
  z-index: 1600;
}
.ui-dropdown.is-open > .ui-dropdown-menu:not([hidden]) { display: block; }
.ui-dropdown.is-drop-up > .ui-dropdown-menu {
  top: auto;
  bottom: calc(100% + 4px);
}
.account-menu.ui-dropdown > .ui-dropdown-menu {
  right: 0;
  left: auto;
}

.ui-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: 200px;
  padding: var(--space-6) var(--space-4);
  text-align: center;
}
.ui-empty-title { margin: 0; font-size: var(--fs-subtitle); font-weight: 600; }
.ui-empty-desc { margin: 0; max-width: 360px; font-size: var(--fs-caption); color: var(--color-text-secondary); }

.ui-field { margin-bottom: var(--space-4); }
.ui-field:last-child { margin-bottom: 0; }
.ui-field > .ui-label,
.ui-field > label:not(.ui-radio):not(.ui-check) {
  display: block;
  font-size: var(--fs-caption);
  color: var(--color-text-secondary);
  margin-bottom: 4px;
}
.ui-field label .req { color: var(--color-danger); }
.ui-field input:not([type="radio"]):not([type="checkbox"]),
.ui-field select,
.ui-field textarea { width: 100%; }
.ui-field textarea { height: 56px; padding: var(--space-2); resize: vertical; }
.form-page { padding: var(--space-5); overflow-y: auto; }
.form-page .ui-field input,
.form-page .ui-field select { width: 360px; max-width: 100%; }
.form-page__hint { margin-top: 4px; font-size: var(--fs-caption); color: var(--color-text-secondary); }
.form-page__foot { display: flex; gap: var(--space-2); margin-top: var(--space-4); }

select.ui-combo,
select.ui-input { min-width: 108px; appearance: none; background-image: none; }
select.ui-select-native { position: absolute !important; width: 1px !important; height: 1px !important; opacity: 0; pointer-events: none; }

/* 下拉面板须高于 drawer（210）；dialog 内另由 uiguide 挂进 dialog top-layer */
.ui-select-menu,
.ui-date-panel,
.ui-dropdown-menu.is-portal,
body > .ui-dropdown-menu {
  z-index: 1600;
}

/* Dialog / Drawer — 业务尺寸修饰；开合动画走规范 dialog/drawer，勿再叠 .show */
dialog.ui-dialog.ui-dialog--form {
  max-width: min(560px, calc(100% - 32px));
}
/* 2.4.8.6 下发/统计通知：弹层吃满可用高度，表单区可滚，底栏贴底 */
dialog.ui-dialog.ui-dialog--dispatch {
  max-width: min(520px, calc(100% - 32px));
  width: min(520px, calc(100% - 32px));
  height: min(86vh, 720px);
  max-height: min(86vh, 720px);
  box-sizing: border-box;
}
dialog.ui-dialog.ui-dialog--dispatch[open] {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
dialog.ui-dialog.ui-dialog--dispatch > .ui-dialog-header,
dialog.ui-dialog.ui-dialog--dispatch > .ui-dialog-footer {
  flex: 0 0 auto;
}
dialog.ui-dialog.ui-dialog--dispatch > .ui-dialog-body {
  flex: 1 1 auto;
  min-height: 0;
  max-height: none !important;
  overflow-x: hidden !important;
  overflow-y: auto !important;
}
dialog.ui-dialog.ui-dialog--dispatch > .ui-dialog-footer {
  margin-top: auto;
}
/* 脚本管理：生成/展示注册码 — 加高且禁止滚动条
   注意：body 若仅设 overflow-x:hidden，按 CSS 规范 overflow-y 会变成 auto，必出竖滚条 */
dialog.ui-dialog.ui-dialog--repo-code {
  max-width: min(560px, calc(100% - 32px));
  width: min(560px, calc(100% - 32px));
  min-height: 360px;
  box-sizing: border-box;
}
dialog.ui-dialog.ui-dialog--repo-code > .ui-dialog-body {
  max-height: none !important;
  overflow: visible !important;
  overflow-x: visible !important;
  overflow-y: visible !important;
}
.sc-repo-code-row {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-width: 0;
}
.sc-repo-code-row code {
  flex: 1 1 auto;
  min-width: 0;
  display: block;
  word-break: break-all;
  user-select: all;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-md);
  background: var(--color-bg-muted);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: var(--fs-body);
}
.sc-repo-code-row .ui-btn-icon.is-copied {
  color: var(--color-success, #0f766e);
}
dialog.ui-dialog.ui-dialog--lg {
  max-width: min(880px, calc(100% - 32px));
}
/* 2.4.8.6 定时规则：列表态不让整块 body 滚动；仅 .table-scroll 在行多时滚。
   display:flex 必须挂在 [open]，否则 close 后仍被强制显示（原生 dialog 依赖 UA 的 display:none）。 */
dialog.ui-dialog.ui-dialog--xl {
  /* 第一层脚本列表：接近主区满幅 */
  max-width: calc(100vw - 48px);
  width: calc(100vw - 48px);
  max-height: calc(100vh - 48px);
  height: calc(100vh - 64px);
  box-sizing: border-box;
}
/* 第二层：该脚本规则列表，略小露出底层（对齐产品标注约 78% 视口） */
dialog.ui-dialog.ui-dialog--sched-l2 {
  max-width: min(1120px, 78vw);
  width: min(1120px, 78vw);
  max-height: min(760px, 78vh);
  height: min(760px, 78vh);
  box-sizing: border-box;
}
/* 第三层：新建/编辑表单窄窗（对齐产品标注） */
dialog.ui-dialog.ui-dialog--sched-form {
  max-width: min(440px, 92vw);
  width: min(440px, 92vw);
  max-height: min(720px, 78vh);
  height: auto;
  box-sizing: border-box;
}
dialog.ui-dialog.ui-dialog--xl[open],
dialog.ui-dialog.ui-dialog--sched-l2[open],
dialog.ui-dialog.ui-dialog--sched-form[open] {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
dialog.ui-dialog.ui-dialog--xl > .ui-dialog-header,
dialog.ui-dialog.ui-dialog--xl > .ui-dialog-footer,
dialog.ui-dialog.ui-dialog--sched-l2 > .ui-dialog-header,
dialog.ui-dialog.ui-dialog--sched-l2 > .ui-dialog-footer,
dialog.ui-dialog.ui-dialog--sched-form > .ui-dialog-header,
dialog.ui-dialog.ui-dialog--sched-form > .ui-dialog-footer {
  flex: 0 0 auto;
}
dialog.ui-dialog.ui-dialog--sched-l2 > .ui-dialog-header {
  align-items: flex-start;
}
dialog.ui-dialog.ui-dialog--sched-l2 .auto-sched-rules-head {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding-right: var(--space-3);
}
dialog.ui-dialog.ui-dialog--sched-l2 .auto-sched-rules-sub {
  margin: 0;
  line-height: 1.4;
  word-break: break-all;
}
/* 规则列表：底栏不要关闭/新建（新建上移到筛选行） */
dialog.ui-dialog.ui-dialog--xl.is-sched-list > .ui-dialog-footer,
dialog.ui-dialog.ui-dialog--sched-l2.is-sched-list > .ui-dialog-footer {
  display: none;
}
dialog.ui-dialog.ui-dialog--xl > .ui-dialog-body,
dialog.ui-dialog.ui-dialog--sched-l2 > .ui-dialog-body {
  /* 压过全局 .ui-dialog-body 的 max-height + overflow:auto */
  max-height: none !important;
  overflow: hidden !important;
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
dialog.ui-dialog.ui-dialog--xl.is-sched-list > .ui-dialog-body > .table-bar,
dialog.ui-dialog.ui-dialog--xl.is-sched-list > .ui-dialog-body > .list-footer,
dialog.ui-dialog.ui-dialog--sched-l2.is-sched-list > .ui-dialog-body > .table-bar,
dialog.ui-dialog.ui-dialog--sched-l2.is-sched-list > .ui-dialog-body > .list-footer {
  flex: 0 0 auto;
}
dialog.ui-dialog.ui-dialog--xl.is-sched-list > .ui-dialog-body > .table-scroll,
dialog.ui-dialog.ui-dialog--sched-l2.is-sched-list > .ui-dialog-body > .table-scroll {
  flex: 1 1 auto;
  min-height: 280px;
  max-height: none;
  overflow: auto;
}
/* 弹层内空态略收一点，避免把 body 顶出滚动 */
dialog.ui-dialog.ui-dialog--xl.is-sched-list table.data td.cell-empty,
dialog.ui-dialog.ui-dialog--sched-l2.is-sched-list table.data td.cell-empty {
  min-height: 160px;
  padding: var(--space-6) var(--space-4);
}
dialog.ui-dialog.ui-dialog--xl.is-sched-list .ui-table-empty,
dialog.ui-dialog.ui-dialog--sched-l2.is-sched-list .ui-table-empty {
  min-height: 120px;
}
/* 新建/编辑步骤：表单可在 body 内滚动 */
dialog.ui-dialog.ui-dialog--xl.is-sched-form > .ui-dialog-body,
dialog.ui-dialog.ui-dialog--sched-form.is-sched-form > .ui-dialog-body,
dialog.ui-dialog.ui-dialog--sched-form > .ui-dialog-body {
  overflow: auto !important;
  display: block;
  flex: 1 1 auto;
  min-height: 0;
  max-height: none !important;
}
dialog.ui-dialog.ui-dialog--image {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100vh;
  max-width: none;
  max-height: none;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  overflow: hidden;
}
dialog.ui-dialog.ui-dialog--image::backdrop {
  background: rgba(0, 0, 0, 0.72);
}
.ui-dialog-body {
  max-height: min(70vh, 640px);
  overflow: auto;
}
/* 列设置：搜索/批量固定，仅列表滚（对齐 ui-guide .qt-col-set） */
.ui-dialog-body.qt-col-set {
  max-height: min(60vh, 480px);
  overflow: hidden;
}
.ui-drawer-actions { display: inline-flex; align-items: center; gap: var(--space-2); }

/* 2.4.8.6 任务详情抽屉：tab 固定，仅下方内容滚动 */
#autoTaskDrawerRoot > .ui-drawer-header {
  align-items: flex-start;
}
#autoTaskDrawerRoot .ui-drawer-sub {
  margin-top: var(--space-2);
}
#autoTaskDrawerRoot .ui-drawer-body {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  min-height: 0;
}
#autoTaskDrawerRoot .auto-task-drawer-tabs {
  flex-shrink: 0;
  margin-bottom: var(--space-4);
}
#autoTaskDrawerRoot .auto-task-drawer-scroll {
  flex: 1;
  min-height: 0;
  overflow: auto;
}
#autoTaskDrawerRoot .auto-task-params-ro {
  pointer-events: none;
}
#autoTaskDrawerRoot .auto-task-execution-log {
  margin: 0;
  padding: var(--space-3);
  max-height: min(60vh, 480px);
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-word;
  font-family: var(--font-mono);
  font-size: var(--fs-caption);
  line-height: 1.5;
  background: var(--color-bg-subtle, var(--color-bg));
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  color: var(--color-text);
}
#autoTaskDrawerRoot .auto-task-result-summary {
  white-space: pre-wrap;
  word-break: break-word;
  line-height: 1.5;
}

/* 2.4.8.7 操作台运行详情：浅底正文块（禁 ui-pre 黑底） */
.auto-console-detail-text {
  margin: 0;
  padding: var(--space-3);
  max-height: min(40vh, 320px);
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-word;
  line-height: 1.5;
  font-size: var(--fs-body);
  color: var(--color-text);
  background: var(--color-bg-subtle, var(--color-bg));
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
}

/* 2.4.8.6 任务状态：点+字同语义色（规范 badge 默认只染点） */
.auto-task-status.is-success {
  color: var(--color-success);
}
.auto-task-status.is-danger {
  color: var(--color-danger);
}
.auto-task-status.is-warning {
  color: var(--color-warning);
}
.auto-task-status.is-processing {
  color: var(--color-info);
}
.auto-task-status.is-muted {
  color: var(--color-text-tertiary);
}
.auto-task-status.is-muted .ui-badge-status-dot {
  background: var(--color-text-tertiary);
}

/* 2.4.8.6 运行统计（只读；与列表筛选解耦） */
.auto-task-stats {
  margin-bottom: var(--space-4);
  padding: var(--space-4);
  background: var(--color-bg);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-sm);
  box-sizing: border-box;
}
.auto-task-stats__range {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  padding-bottom: var(--space-4);
  margin-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-divider);
}
.auto-task-stats__label {
  font-size: var(--fs-caption);
  color: var(--color-text-secondary);
  font-weight: var(--fw-medium);
}
.auto-task-stats__actions {
  margin-left: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
}
.auto-task-stats__last {
  font-size: var(--fs-caption);
  color: var(--color-text-secondary);
  font-weight: var(--fw-medium);
}
.auto-task-stats__last.is-off,
.ui-field-hint.auto-task-stats__last.is-off {
  color: var(--color-text-secondary);
}
.auto-task-stats__last.is-success,
.ui-field-hint.auto-task-stats__last.is-success {
  color: var(--color-success);
}
.auto-task-stats__last.is-danger,
.ui-field-hint.auto-task-stats__last.is-danger {
  color: var(--color-danger);
}
.auto-task-stats-notify-time {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  align-items: center;
  gap: var(--space-2);
}
.auto-task-stats-notify-time > .ui-select {
  width: auto;
  flex: 1 1 0;
  min-width: 0;
}
.auto-task-stats-notify-time__sep {
  flex: 0 0 auto;
  color: var(--color-text-secondary);
  font-weight: var(--fw-medium);
}
.auto-task-stats__grid {
  margin: 0;
}
.auto-task-stat {
  position: relative;
  overflow: hidden;
  padding-top: calc(var(--space-4) + 4px);
}
.auto-task-stat::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: var(--color-primary);
}
.auto-task-stat .ui-stat-value {
  font-size: 36px;
  line-height: 1.05;
  color: var(--color-numeric, var(--color-text));
  font-variant-numeric: tabular-nums;
}
.auto-task-stat--total {
  background: var(--color-primary-soft);
}
.auto-task-stat--total::before {
  background: var(--color-primary);
}
.auto-task-stat--success {
  background: var(--color-success-soft);
}
.auto-task-stat--success::before {
  background: var(--color-success);
}
.auto-task-stat--failed {
  background: var(--color-danger-soft);
}
.auto-task-stat--failed::before {
  background: var(--color-danger);
}
.auto-task-stat--cancelled {
  background: var(--color-bg-subtle);
}
.auto-task-stat--cancelled::before {
  background: var(--color-text-tertiary);
}

/* 2.4.8.6 / 2.4.8.6.1 任务完成通知：分区拉开，避免控件堆叠 */
.auto-notify-block {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
}
.auto-notify-block > .ui-field {
  margin-bottom: 0;
}
.auto-notify-body:not([hidden]) {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  padding: var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-bg-subtle);
}
.auto-notify-body[hidden],
.auto-notify-panel[hidden] {
  display: none !important;
}
.auto-notify-body > .ui-field,
.auto-notify-types {
  margin-bottom: 0;
}
.auto-notify-type-stack {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-top: var(--space-3);
}
.auto-notify-type {
  padding: var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: var(--color-bg);
}
.auto-notify-type__check {
  font-size: var(--fs-subtitle);
  font-weight: var(--fw-bold);
}
.auto-notify-panel:not([hidden]) {
  display: block;
  margin-top: var(--space-4);
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-border);
}
.auto-notify-panel > .ui-field {
  margin-bottom: var(--space-3);
}
.auto-notify-picker {
  max-height: 160px;
  overflow: auto;
  padding: var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg-subtle);
}
.auto-notify-picker:empty::before {
  content: "暂无可选对象";
  color: var(--color-text-tertiary);
  font-size: var(--fs-caption);
}
.ui-fold {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
}
.ui-fold + .ui-fold { margin-top: var(--space-2); }
.ui-fold-header {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-height: var(--table-row-h);
  padding: 0 var(--space-3);
  border-bottom: 1px solid var(--color-divider);
}
.ui-fold.is-collapsed > .ui-fold-header { border-bottom-color: transparent; }
.ui-fold-toggle {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  border: 0;
  background: transparent;
  cursor: pointer;
  font: inherit;
  font-weight: 600;
  color: var(--color-text);
}
.ui-fold-chev {
  width: 8px;
  height: 8px;
  border-right: 1px solid var(--color-text);
  border-bottom: 1px solid var(--color-text);
  transform: rotate(45deg);
  transition: transform var(--dur-enter) var(--ease-out);
}
.ui-fold.is-collapsed .ui-fold-chev { transform: rotate(-45deg); }
.ui-fold-wrap {
  display: grid;
  grid-template-rows: 1fr;
  transition: grid-template-rows var(--dur-enter) var(--ease-out);
}
.ui-fold.is-collapsed > .ui-fold-wrap { grid-template-rows: 0fr; }
.ui-fold-body {
  overflow: hidden;
  min-height: 0;
  padding: var(--space-3);
  transition: padding var(--dur-enter) var(--ease-out);
}
.ui-fold.is-collapsed > .ui-fold-wrap .ui-fold-body {
  padding-top: 0;
  padding-bottom: 0;
}

.ui-radio-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-3);
}
.ui-field .ui-radio:has(input:checked),
label.ui-radio:has(input:checked) {
  color: var(--color-primary);
  font-weight: var(--fw-medium);
}
.ui-field .ui-radio:has(input:checked) .ui-radio-hint,
label.ui-radio:has(input:checked) .ui-radio-hint {
  color: var(--color-text-secondary);
  font-weight: var(--fw-regular);
}

.ui-doc {
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  color: var(--color-text);
}
.ui-doc > :first-child { margin-top: 0; }
.ui-doc-note {
  margin: 0 0 var(--space-2);
  font-size: var(--fs-caption);
  color: var(--color-text-secondary);
  line-height: var(--lh-body);
}
.ui-doc h3 {
  margin: var(--space-4) 0 var(--space-2);
  font-size: var(--fs-title);
  font-weight: 600;
}
.ui-doc h4 {
  margin: var(--space-3) 0 var(--space-2);
  font-size: var(--fs-body);
  font-weight: 600;
}
.ui-doc p { margin: 0 0 var(--space-2); }
.ui-doc ul,
.ui-doc ol {
  margin: 0 0 var(--space-2);
  padding-left: var(--space-4);
}
.ui-doc li { margin: 0 0 var(--space-1); }
.ui-doc strong { font-weight: 600; }

.ui-chart {
  position: relative;
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-4) var(--space-4) var(--space-2);
}
.ui-chart--flat {
  border: 0;
  padding: 0;
  background: transparent;
  border-radius: 0;
}
.ui-chart-header {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px 16px;
  margin-bottom: 4px;
  min-height: 24px;
}
.ui-chart-title {
  font-size: var(--fs-title);
  font-weight: 600;
  color: var(--color-text);
  line-height: var(--lh-tight);
  margin-right: auto;
}
.ui-chart-legend {
  display: inline-flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
  font-size: var(--fs-caption);
  color: var(--color-text);
}
.ui-chart-legend-item {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
}
.ui-chart-legend-item i {
  width: 12px;
  height: 2px;
  background: var(--color-primary);
  flex-shrink: 0;
}
.ui-chart-legend-item i.is-bar,
.ui-chart-legend-item i.is-swatch {
  width: 8px;
  height: 8px;
}
.ui-chart-legend-item em {
  font-style: normal;
  color: var(--color-text-secondary);
  margin-left: 2px;
}
.ui-chart-body {
  width: 100%;
  position: relative;
}
.ui-chart-body--pie {
  display: flex;
  align-items: center;
  justify-content: center;
}
.ui-chart-svg {
  display: block;
  width: 100%;
  height: 100%;
  overflow: visible;
}
.ui-chart-bar,
.ui-chart-slice { transition: opacity 0.12s ease; }
.ui-chart-tip {
  position: absolute;
  z-index: 5;
  min-width: 140px;
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card);
  pointer-events: none;
  font-size: var(--fs-caption);
  color: var(--color-text);
  line-height: var(--lh-tight);
}
.ui-chart-tip-title {
  font-weight: 600;
  margin-bottom: var(--space-2);
}
.ui-chart-tip-row {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-top: 4px;
}
.ui-chart-tip-row i {
  width: 8px;
  height: 8px;
  flex-shrink: 0;
}
.ui-chart-tip-row span { flex: 1; color: var(--color-text); }
.ui-chart-tip-row b { font-weight: 600; }

/* Toast 布局/样式以 ui-guide `.ui-toast-stack` + `.ui-alert` 为准；仅抬 z-index 盖过页内 dialog */
.ui-toast-stack {
  z-index: 1700;
  max-width: calc(100vw - 40px);
}

.ui-modal--image,
dialog.ui-dialog--image {
  max-width: none;
  background: transparent;
  border: 0;
  box-shadow: none;
}
dialog.ui-dialog--image .ui-modal-image__close {
  position: absolute;
  top: var(--space-4);
  right: var(--space-4);
  z-index: 3;
  color: var(--color-text-inverse);
  background: rgba(0, 0, 0, 0.4);
  pointer-events: auto;
}
dialog.ui-dialog--image .ui-modal-image__close:hover {
  color: var(--color-text-inverse);
  background: rgba(255, 255, 255, 0.18);
}
dialog.ui-dialog--image .ui-modal-image__close .ui-icon {
  color: inherit;
}
.ui-modal-image__stage {
  position: absolute;
  inset: 0;
  z-index: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  min-height: 0;
}
.ui-modal-image__img {
  display: block;
  max-width: none;
  max-height: none;
  object-fit: contain;
  object-position: center;
  transform-origin: center center;
  user-select: none;
  -webkit-user-drag: none;
  pointer-events: auto;
}
dialog.ui-dialog--image.is-zoomed .ui-modal-image__img {
  cursor: grab;
}
dialog.ui-dialog--image.is-zoomed .ui-modal-image__img:active {
  cursor: grabbing;
}
.ui-modal-image__tools {
  position: absolute;
  left: 50%;
  bottom: var(--space-4);
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: var(--space-2);
  border-radius: var(--radius-md);
  background: rgba(17, 24, 39, 0.78);
  color: var(--color-text-inverse);
  transform: translateX(-50%);
  pointer-events: auto;
}
.ui-modal-image__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  min-width: 32px;
  height: 32px;
  padding: 0 var(--space-2);
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: inherit;
  cursor: pointer;
  font: inherit;
  font-size: var(--fs-caption);
  line-height: 1;
}
.ui-modal-image__btn:hover:not(:disabled) {
  background: rgba(255, 255, 255, 0.14);
}
.ui-modal-image__btn:disabled {
  opacity: 0.4;
  cursor: default;
}
.ui-modal-image__btn .ui-icon {
  color: inherit;
}
.ui-modal-image__pct {
  min-width: 40px;
  color: inherit;
  font-size: var(--fs-caption);
  font-variant-numeric: tabular-nums;
  text-align: center;
}
dialog.ui-dialog--lg#yjJsonRoot,
dialog.ui-dialog--json#yjJsonRoot,
#yjJsonRoot {
  z-index: 1300;
  max-height: min(86vh, 720px);
  flex-direction: column;
  overflow: hidden;
  box-sizing: border-box;
}
dialog.ui-dialog--lg#yjJsonRoot[open],
dialog.ui-dialog--json#yjJsonRoot[open],
#yjJsonRoot[open] {
  display: flex;
}
dialog.ui-dialog--lg#yjJsonRoot:not([open]),
dialog.ui-dialog--json#yjJsonRoot:not([open]),
#yjJsonRoot:not([open]) {
  display: none !important;
}
#yjJsonRoot .ui-dialog-header { flex-shrink: 0; }
#yjJsonRoot .ui-dialog-body {
  flex: 1 1 auto;
  min-height: 0;
  max-height: none;
  overflow: auto;
}
.ui-json { font-family: var(--font-mono); font-size: var(--fs-caption); min-width: 0; }
.ui-json-line {
  display: flex;
  gap: 8px;
  min-height: 24px;
  min-width: 0;
  padding-left: calc(var(--d, 0) * 16px);
}
.ui-json-toggle { width: 16px; flex-shrink: 0; border: 0; background: transparent; cursor: pointer; color: var(--color-text-secondary); }
.ui-json-str,
.ui-json__str { word-break: break-all; min-width: 0; }
.ui-json-raw { white-space: pre-wrap; word-break: break-word; }

.account-menu > button {
  border: 0;
  background: transparent;
  padding: 0;
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
  font: inherit;
  color: inherit;
}
.account-menu > button > .ui-icon {
  flex-shrink: 0;
  color: rgba(255, 255, 255, 0.72);
}

#dialogRoot { z-index: 1500; }
#yjImageRoot { z-index: 1300; }
#orgMembersRoot { z-index: 1280; }

.org-member-list { list-style: none; margin: 0; padding: 0; max-height: min(52vh, 420px); overflow: auto; }
.org-member-list__item {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  min-height: 40px;
  padding: var(--space-2) 0;
  border-bottom: 1px solid var(--color-divider);
}
.org-member-list__meta { margin-left: auto; font-size: var(--fs-caption); color: var(--color-text-secondary); }
.org-member-list__empty { padding: var(--space-6) 0; text-align: center; color: var(--color-text-secondary); }

.notify-bell { position: relative; }
.notify-bell__badge {
  position: absolute;
  top: 2px; right: 2px;
  min-width: 16px; height: 16px;
  padding: 0 4px;
  border-radius: var(--radius-pill);
  background: var(--color-danger);
  color: #fff;
  font-size: 10px;
  line-height: 16px;
  text-align: center;
}
#notifyDrawerRoot > .ui-drawer { width: 400px; max-width: 100%; }
#notifyDrawerRoot .ui-drawer-body { display: flex; flex-direction: column; padding: 0; overflow: hidden; background: var(--color-bg); }
.notify-inbox__head-title { display: inline-flex; align-items: center; gap: var(--space-2); }
.notify-inbox__head-badge {
  display: inline-block;
  min-width: 16px; height: 16px;
  padding: 0 4px;
  background: var(--color-danger);
  color: #fff;
  font-size: 10px;
  line-height: 16px;
  text-align: center;
  border-radius: var(--radius-pill);
}
.notify-inbox__toolbar {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: 0 var(--space-4);
  border-bottom: 1px solid var(--color-divider);
  min-height: 40px;
}
.notify-inbox__tabs { display: flex; flex: 1; }
.notify-inbox__tab {
  appearance: none;
  border: 0;
  background: transparent;
  padding: var(--space-3);
  color: var(--color-text-secondary);
  cursor: pointer;
  border-bottom: 2px solid transparent;
}
.notify-inbox__tab.is-active {
  color: var(--color-primary);
  border-bottom-color: var(--color-primary);
  font-weight: 600;
}
.notify-inbox__link, .notify-inbox__all {
  appearance: none;
  border: 0;
  background: transparent;
  color: var(--color-primary);
  cursor: pointer;
  font-size: var(--fs-caption);
}
.notify-inbox__filters {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-3) var(--space-4);
  border-bottom: 1px solid var(--color-divider);
}
.notify-inbox__search {
  flex: 1 1 auto;
  min-width: 0;
  width: auto;
}
/* 增强后 .ui-select 默认 width:100%，须钉死宽度，避免挤掉搜索框 */
.notify-inbox__filters > .ui-select,
.notify-inbox__filters > select.notify-inbox__type {
  flex: 0 0 120px;
  width: 120px;
  max-width: 120px;
}
.notify-inbox__list {
  flex: 1;
  overflow: auto;
  padding: var(--space-3) var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.notify-inbox__foot {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-3) var(--space-4) var(--space-4);
  border-top: 1px solid var(--color-divider);
}
.notify-inbox__foot .spacer {
  flex: 1 1 auto;
  min-width: 0;
}
.notify-inbox__foot > .ui-select,
.notify-inbox__foot > select.notify-inbox__page-size {
  flex: 0 0 auto;
  width: auto;
  min-width: 96px;
  max-width: none;
  height: var(--control-h-md);
  font-size: var(--fs-body);
  box-sizing: border-box;
}
.notify-inbox__foot .ui-select {
  --ui-select-h: var(--control-h-md);
}
.notify-card {
  display: block;
  padding: var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  background: #fff;
  cursor: pointer;
  text-align: left;
}
.notify-card__title { font-weight: 600; }
.notify-card__time, .notify-card__source { font-size: var(--fs-caption); color: var(--color-text-secondary); }
.notify-empty { padding: var(--space-6) 0; text-align: center; color: var(--color-text-secondary); }

/* 通知中心：分段进 table-bar 左；行内标题/正文层次 */
.notify-center-row.is-unread .notify-center-row__title {
  font-weight: 600;
}
.notify-center-row__title {
  line-height: var(--lh-tight);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.notify-center-row__msg {
  margin-top: var(--space-1);
  font-size: var(--fs-caption);
  color: var(--color-text-secondary);
  line-height: var(--lh-normal);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 40em;
}

/* 权限/成员选择弹层（sys-role · table-role） */
.perm-picker {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  min-width: 0;
}
.perm-picker__search {
  flex-shrink: 0;
}
.perm-picker__search .ui-input,
.perm-picker__search input[type="search"] {
  width: 100%;
  box-sizing: border-box;
}
.perm-picker__hint {
  margin: 0;
  font-size: var(--fs-caption);
  line-height: var(--lh-normal);
}
.perm-picker__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  flex-shrink: 0;
}
.perm-picker__all {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  margin: 0;
  font-size: var(--fs-body);
  color: var(--color-text);
  cursor: pointer;
  user-select: none;
}
.perm-picker__all input {
  width: 16px;
  height: 16px;
  margin: 0;
  flex-shrink: 0;
  accent-color: var(--color-primary);
  cursor: pointer;
}
.perm-picker__list {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  max-height: min(50vh, 360px);
  min-height: 120px;
  overflow: auto;
  padding: var(--space-2);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  box-sizing: border-box;
}
label.ui-radio.perm-picker__row,
label.ui-check.perm-picker__row,
.perm-picker__row {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  margin: 0;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-md);
  font-size: var(--fs-body);
  font-weight: var(--fw-regular);
  line-height: var(--lh-normal);
  color: var(--color-text);
  cursor: pointer;
  user-select: none;
  box-sizing: border-box;
}
.perm-picker__row:hover {
  background: var(--color-bg-subtle);
}
label.ui-radio.perm-picker__row input,
label.ui-check.perm-picker__row input,
.perm-picker__row input {
  width: 16px;
  height: 16px;
  margin: 2px 0 0;
  flex-shrink: 0;
  accent-color: var(--color-primary);
  cursor: pointer;
}
.perm-picker__row-text {
  flex: 1 1 auto;
  min-width: 0;
  overflow-wrap: anywhere;
  word-break: break-word;
}
.perm-picker__empty {
  margin: 0;
  padding: var(--space-6) var(--space-3);
  text-align: center;
}

/* 系统角色 · 配置权限树 */
.perm-save-status {
  display: inline-flex;
  align-items: center;
  min-height: var(--control-h-sm);
  font-size: var(--fs-caption);
  font-weight: var(--fw-medium);
  line-height: var(--lh-tight);
}
.perm-save-status--ok { color: var(--color-success); }
.perm-save-status--dirty { color: var(--color-danger); }

.perm-config-shell {
  min-height: 0;
}
.perm-config-shell .table-bar-left--status {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  min-width: 0;
}
.perm-tree-panel {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  padding: var(--space-3) var(--space-4) 0;
  box-sizing: border-box;
}
.perm-tree-search {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-3);
}
.perm-tree-search__field {
  position: relative;
  width: 240px;
  max-width: 100%;
  flex-shrink: 0;
}
.perm-tree-search__input {
  width: 100%;
  padding-right: 36px;
  box-sizing: border-box;
}
.perm-tree-search__clear {
  position: absolute;
  right: var(--space-2);
  top: 50%;
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: var(--radius-md);
  background: var(--color-bg-muted);
  color: var(--color-text-secondary);
  cursor: pointer;
}
.perm-tree-search__clear:hover {
  color: var(--color-text);
  background: var(--color-gray-5, var(--color-bg-subtle));
}
.perm-tree-search__clear .ui-icon {
  font-size: 14px;
  line-height: 1;
}
.perm-tree-search__actions {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-shrink: 0;
}
.perm-tree-search__actions .icon-ui-btn {
  width: var(--control-h-md);
  min-width: var(--control-h-md);
  height: var(--control-h-md);
  padding: 0;
}
.perm-tree-tool-ico {
  display: block;
  width: 16px;
  height: 16px;
  position: relative;
  color: var(--color-text-secondary);
}
.perm-tree-tool-ico--collapse::before,
.perm-tree-tool-ico--collapse::after {
  content: "";
  position: absolute;
  left: 2px;
  right: 2px;
  height: 0;
  border-top: 2px solid currentColor;
}
.perm-tree-tool-ico--collapse::before {
  top: 4px;
  box-shadow: 0 4px 0 currentColor;
}
.perm-tree-tool-ico--collapse::after {
  top: 12px;
}
.perm-tree-tool-ico--expand::before {
  content: "";
  position: absolute;
  left: 7px;
  top: 2px;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 6px 5px 0 5px;
  border-color: currentColor transparent transparent transparent;
}
.perm-tree-tool-ico--expand::after {
  content: "";
  position: absolute;
  left: 2px;
  right: 2px;
  bottom: 3px;
  height: 0;
  border-top: 2px solid currentColor;
}
.perm-tree {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  overflow: hidden;
}
.perm-tree__head {
  flex-shrink: 0;
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) 88px;
  align-items: center;
  min-height: var(--control-h-md);
  border-bottom: 1px solid var(--color-divider);
  background: var(--color-bg-page);
  color: var(--color-text-secondary);
  font-size: var(--fs-caption);
  font-weight: var(--fw-medium);
  box-sizing: border-box;
}
.perm-tree__body {
  flex: 1;
  min-height: 0;
  overflow: auto;
}
.perm-tree__empty {
  padding: var(--space-6) var(--space-4);
  margin: 0;
  text-align: center;
  color: var(--color-text-secondary);
}
.perm-tree__row {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) 88px;
  align-items: center;
  min-height: var(--table-row-h);
  border-bottom: 1px solid var(--color-divider);
  box-sizing: border-box;
}
.perm-tree__head > div {
  padding: var(--space-2) var(--space-4);
}
.perm-tree__col-all {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  padding: var(--space-2) var(--space-4);
}
.perm-tree__col-perm {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3) var(--space-4);
  padding: var(--space-2) var(--space-4);
  min-width: 0;
}
.perm-tree__col-mod {
  min-width: 0;
  padding-right: var(--space-2);
  box-sizing: border-box;
}
.perm-tree__block { border-bottom: 0; }
.perm-tree__row--branch { background: #fff; }
.perm-tree__row--leaf { background: var(--color-bg); }
.perm-tree__hd {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  width: 100%;
  min-height: var(--table-row-h);
  padding: 0;
  border: 0;
  background: transparent;
  text-align: left;
  cursor: pointer;
  color: var(--color-text);
  font: inherit;
  font-size: var(--fs-body);
  font-weight: var(--fw-medium);
  box-sizing: border-box;
}
.perm-tree__hd--static {
  cursor: default;
  font-weight: var(--fw-regular);
}
.perm-tree__hd:hover { color: var(--color-text); }
.perm-tree__label {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.perm-tree__icon {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  position: relative;
}
.perm-tree__icon--chev::before {
  content: "";
  position: absolute;
  left: 4px;
  top: 5px;
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 5px 0 5px 6px;
  border-color: transparent transparent transparent var(--color-text-secondary);
  transform: rotate(0deg);
  transform-origin: 4px 5px;
  transition: transform var(--dur-fast) var(--ease);
}
.perm-tree__icon--chev.is-open::before {
  transform: rotate(90deg);
}
.perm-tree__icon--leaf::before {
  content: "";
  position: absolute;
  left: 6px;
  top: 0;
  width: 8px;
  height: 10px;
  border-left: 1px solid var(--color-text-tertiary);
  border-bottom: 1px solid var(--color-text-tertiary);
}
.perm-opt {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  font-size: var(--fs-caption);
  color: var(--color-text);
  cursor: pointer;
  user-select: none;
}
.perm-opt input {
  width: 16px;
  height: 16px;
  margin: 0;
  flex-shrink: 0;
  accent-color: var(--color-primary);
  cursor: pointer;
}
.perm-opt.is-disabled {
  cursor: default;
  color: var(--color-text-secondary);
  pointer-events: none;
}
.perm-opt.is-disabled input { cursor: default; }
.perm-tree__all {
  width: 16px;
  height: 16px;
  margin: 0;
  accent-color: var(--color-primary);
  cursor: pointer;
}
.perm-tree__all:disabled {
  cursor: default;
  opacity: 0.7;
}

/* 成员管理（系统角色 · 绑定成员/部门） */
.perm-members-shell {
  min-height: 0;
}
.perm-members-shell .table-bar-left--status {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
  min-width: 0;
}
.perm-bind-panel {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  box-sizing: border-box;
}
.perm-bind-block {
  flex: 1;
  min-height: 0;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);
  overflow: hidden;
}
.perm-bind-toolbar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--color-divider);
  background: var(--color-bg-page);
}
.perm-bind-toolbar__left,
.perm-bind-toolbar__right {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2);
  min-width: 0;
}
.perm-bind-toolbar__left strong {
  font-weight: 600;
  color: var(--color-text);
}
.perm-bind-search {
  margin: 0;
}
.perm-bind-search .ui-input {
  width: 160px;
  max-width: 100%;
  box-sizing: border-box;
}
.perm-bind-toolbar .page-segment {
  flex-shrink: 0;
}
.perm-bind-scroll {
  flex: 1;
  min-height: 0;
  overflow: auto;
}
.perm-bind-scroll .data {
  margin: 0;
  border: 0;
  border-radius: 0;
}

.collect-tree { font-size: var(--fs-caption); }

.target-filter-drawer .ui-drawer-body { display: flex; flex-direction: column; }
.target-filter-panel { display: flex; flex-direction: column; flex: 1; min-height: 0; }
.target-filter-block { margin-bottom: var(--space-4); }
.target-filter-block > .ui-label { margin-bottom: var(--space-2); }
.target-filter-prompt-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-3); margin-bottom: var(--space-2);
}
.target-filter-prompt-head .ui-label { margin-bottom: 0; }
.target-filter-prompt-actions { display: flex; gap: var(--space-2); flex-shrink: 0; }
.target-filter-block textarea { resize: none; }
.target-filter-stats {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-4); margin-bottom: var(--space-3);
}
.target-filter-bar {
  height: var(--space-2); border-radius: var(--radius-pill);
  background: var(--color-primary-soft); overflow: hidden;
}
.target-filter-bar > div { height: var(--space-2); width: 0; background: var(--color-primary); }
.target-filter-meta {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-3); margin-top: var(--space-3);
  font-size: var(--fs-caption); color: var(--color-text-secondary);
}
.target-filter-result { flex: 1; min-height: 0; display: flex; flex-direction: column; margin-bottom: 0; }
.target-filter-result-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-3); margin-bottom: var(--space-2);
}
.target-filter-result-head .ui-label { margin-bottom: 0; }
.target-filter-table { flex: 1; min-height: 0; }
.collect-row {
  display: flex;
  align-items: center;
  min-height: var(--table-row-h);
  gap: var(--space-2);
  padding: 0 var(--space-3);
  border-bottom: 1px solid var(--color-divider);
}
.collect-row__toggle {
  width: 16px;
  border: 0;
  background: transparent;
  cursor: pointer;
  color: var(--color-text-secondary);
}
.collect-row__label {
  flex: 1;
  min-width: 0;
  border: 0;
  background: transparent;
  text-align: left;
  cursor: pointer;
  font: inherit;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.collect-row__thumb {
  flex: 0 0 auto;
  width: 28px;
  height: 28px;
  padding: 0;
  border: 1px solid var(--color-divider);
  border-radius: var(--radius-sm, 6px);
  background: var(--color-bg-muted, #f5f5f5);
  cursor: pointer;
  overflow: hidden;
}
.collect-row__thumb img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.collect-kids { padding-left: var(--space-4); }
.collect-row__status {
  flex: 0 0 auto;
  color: var(--color-text-secondary);
}
.collect-row__force {
  flex: 0 0 auto;
  height: auto;
  padding: 0;
}

.profit-snap { display: grid; grid-template-columns: 160px 1fr; }
.profit-snap dt, .profit-snap dd {
  min-height: 32px;
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--color-divider);
  margin: 0;
  font-size: var(--fs-caption);
}
.profit-snap dt { color: var(--color-text-secondary); background: var(--color-bg-page); }
.sales-trend-stack { display: flex; flex-direction: column; gap: var(--space-2); }
.market-picks { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); }
.market-picks label { display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-caption); }

td.cell-inline { cursor: text; }
td.cell-inline input, td .cell-input {
  width: 100%;
  height: var(--control-h-sm);
  margin: 0;
  padding: 0 var(--space-2);
  border: 0;
  border-radius: var(--radius-md);
  font: inherit;
  background: #fff;
}
td.cell-decimal .cell-input,
td.cell-money .cell-input,
td.cell-rate .cell-input { font-variant-numeric: tabular-nums; }

.ui-opened-page-close[hidden] { display: none !important; }

/* Checkbox：自定义方框，不用系统原生外观 */
input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  box-sizing: border-box;
  width: 16px;
  height: 16px;
  margin: 0;
  flex-shrink: 0;
  vertical-align: middle;
  border: 1.5px solid var(--color-border-strong);
  border-radius: var(--radius-sm);
  background-color: var(--color-bg);
  background-repeat: no-repeat;
  background-position: center;
  background-size: 12px 12px;
  cursor: pointer;
  transition:
    background-color var(--dur-fast) var(--ease),
    border-color var(--dur-fast) var(--ease),
    box-shadow var(--dur-fast) var(--ease);
}
input[type="checkbox"]:hover:not(:disabled) {
  border-color: var(--color-primary);
}
input[type="checkbox"]:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
}
input[type="checkbox"]:checked {
  border-color: var(--color-primary);
  background-color: var(--color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.5 8.2l3 3.1 6-6.4' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
input[type="checkbox"]:indeterminate {
  border-color: var(--color-primary);
  background-color: var(--color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.5 8h9' stroke='%23fff' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
}
input[type="checkbox"]:disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
.ui-check input[type="checkbox"],
.ui-check-group input[type="checkbox"],
.ui-check-stack input[type="checkbox"] {
  accent-color: unset;
}

/* Switch 内的 checkbox 只作状态源，须藏掉，避免被上面的自定义方框盖住轨道 */
.ui-switch input[type="checkbox"],
.ui-switch input[type="checkbox"]:hover:not(:disabled),
.ui-switch input[type="checkbox"]:focus-visible,
.ui-switch input[type="checkbox"]:checked,
.ui-switch input[type="checkbox"]:indeterminate,
.ui-switch input[type="checkbox"]:disabled {
  appearance: none;
  -webkit-appearance: none;
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
  margin: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  cursor: inherit;
}

.ui-sidebar-footer a { color: inherit; text-decoration: none; }
.ui-sidebar-footer a:hover { color: var(--color-primary); }

/* 备案：仅登录页底栏；业务壳不挂，正文占满高度 */
.wj-beian {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 40;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px;
  margin: 0;
  padding: 3px 8px;
  box-sizing: border-box;
  font-size: 12px;
  line-height: 1.25;
  color: var(--color-text-tertiary, #8a8f98);
  background: color-mix(in srgb, var(--color-bg-page, #f5f6f8) 88%, transparent);
  pointer-events: none;
}
.wj-beian a {
  pointer-events: auto;
  color: inherit;
  text-decoration: none;
}
.wj-beian a:hover {
  color: var(--color-primary);
  text-decoration: underline;
}
.wj-beian__sep {
  opacity: 0.55;
  user-select: none;
}
body.auth-page {
  padding-bottom: 22px;
  box-sizing: border-box;
}
/* 业务壳贴底，不预留备案条高度 */
body.ui-app:has(> .ui-shell) {
  padding-bottom: 0;
}

/* 侧栏 L1：Icon 上、标题下；无展开 chevron（折叠态仍靠组开合） */
.ui-sidebar-group {
  gap: var(--space-1);
}
.ui-sidebar-group__bd {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  min-width: 0;
}
.ui-sidebar-group__bd[hidden] {
  display: none !important;
}
.ui-sidebar-label {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-1);
  width: 100%;
  margin: 0;
  padding: 16px var(--space-1);
  border: 0;
  border-radius: 0;
  background: transparent;
  box-sizing: border-box;
  font-family: inherit;
  font-size: var(--sidebar-l1-fs);
  font-weight: var(--fw-medium);
  letter-spacing: 0;
  color: #fff;
  line-height: 1.2;
  text-align: center;
  cursor: pointer;
}
.ui-sidebar-label:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
}
.ui-sidebar-label-ico,
.ui-sidebar-label-ico.ui-icon,
.ui-sidebar-label-ico.ui-icon-md {
  flex-shrink: 0;
  font-size: var(--sidebar-l1-ico);
  line-height: 1;
  color: #fff;
}
.ui-sidebar-label-text {
  display: block;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: normal;
}
.ui-sidebar-label:hover,
.ui-sidebar-label:hover .ui-sidebar-label-ico,
.ui-sidebar-group.is-open > .ui-sidebar-label,
.ui-sidebar-group.is-open > .ui-sidebar-label .ui-sidebar-label-ico,
.ui-sidebar-label.is-flyout-open,
.ui-sidebar-label.is-flyout-open .ui-sidebar-label-ico {
  color: #95bbff;
}
.ui-sidebar-item {
  font-size: 14px;
  gap: var(--space-2);
  padding-left: var(--space-3);
  padding-right: var(--space-3);
}
.ui-sidebar-item .ui-icon:not(.ui-sidebar-item-trail) {
  display: none;
}
.ui-sidebar-item-trail {
  display: inline-flex !important;
  margin-left: auto;
  flex-shrink: 0;
  color: rgba(255, 255, 255, 0.72);
}
.ui-sidebar-item.has-flyout.is-flyout-open,
.ui-sidebar-item.has-flyout.is-flyout-open .ui-sidebar-item-trail {
  color: var(--color-primary);
}

/* 2.2：停用常驻中栏；L3/L4 悬停 absolute 悬浮 */
.ui-shell > .ui-subnav {
  display: none !important;
}
.ui-shell:has(> .ui-subnav:not([hidden])) {
  grid-template-columns: var(--sidebar-app-w) minmax(0, 1fr);
  column-gap: var(--space-4);
}
.ui-shell:has(> .ui-subnav:not([hidden])) > .ui-shell-body {
  margin-left: 0;
}

.ui-shell {
  position: relative;
}
/* .nav-flyout 样式以 docs/ui-guide/style/css/components.css 为准；此处不覆盖宽高/定位 */

[data-query-table] .qt-table-pane {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
[data-query-table] .qt-empty-overlay {
  position: absolute;
  inset: 0;
  z-index: 6;
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: none;
  color: var(--color-text-secondary);
}
[data-query-table] .qt-empty-overlay .ui-table-empty {
  pointer-events: none;
}

/* 合计格：可点选统计方式；菜单 fixed 挂 body，避开 list-shell overflow */
[data-query-table] td.qt-stat {
  cursor: pointer;
  user-select: none;
}
[data-query-table] td.qt-stat.is-muted {
  color: var(--color-text-tertiary);
}
.qt-stat-menu {
  position: fixed;
  z-index: 80;
  min-width: 128px;
  max-width: min(240px, calc(100vw - 24px));
  padding: var(--space-1);
  margin: 0;
  box-sizing: border-box;
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-card);
}
.qt-stat-menu[hidden] {
  display: none !important;
}
.qt-stat-menu__item {
  display: flex;
  align-items: center;
  width: 100%;
  box-sizing: border-box;
  padding: var(--space-2) var(--space-3);
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--color-text);
  font: inherit;
  font-size: var(--fs-body);
  text-align: left;
  cursor: pointer;
}
.qt-stat-menu__item:hover:not(:disabled) {
  background: var(--color-bg-subtle);
}
.qt-stat-menu__item.is-active {
  color: var(--color-primary);
  font-weight: var(--fw-medium, 500);
}
.qt-stat-menu__item:disabled {
  color: var(--color-text-disabled);
  cursor: not-allowed;
  opacity: 0.55;
}

/* 顶栏须压过主区 sticky 表头；账户 ui-dropdown-menu 未挂 body，否则会被 thead 遮住 */
.ui-page-top {
  position: relative;
  z-index: 6;
}
/* 已开页面可点：取消账户区负边距抢命中；tab 叠在账户之上 */
.ui-page-top > .ui-opened-pages {
  position: relative;
  z-index: 3;
}
.ui-page-top > .ui-sidebar-account {
  z-index: 2;
  margin-inline-start: 0;
  padding-inline-start: var(--space-4);
  pointer-events: auto;
}

/* .ui i 会把 Remix 图标打成 italic，显式压回 */
.ui-app i.ui-icon,
.ui i.ui-icon {
  font-style: normal !important;
}

.source-flow-toolbar {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.source-flow-card {
  cursor: pointer;
  text-align: left;
  border: 1px solid var(--color-border);
  background: var(--color-bg);
}
.source-flow-card.is-active {
  border-color: var(--color-primary);
}

/* 2.3.1.2.3 报告正文走规范 .ui-report；此处只留抽屉壳与分析态 */
.ai-report-shell {
  min-width: 0;
}
.ui-report__status {
  padding: var(--space-8) var(--space-4);
  text-align: center;
  color: var(--color-text-secondary);
  font-size: var(--fs-subtitle);
}
.ui-report__status.is-err {
  color: var(--color-danger);
}
.ui-report__warn {
  margin: 0 0 var(--space-3);
  color: var(--color-warning);
  font-size: var(--fs-caption);
}
.ui-report__foot {
  margin-top: var(--space-5);
  padding-top: var(--space-4);
  border-top: var(--border-w) solid var(--color-border);
  display: flex;
  justify-content: flex-start;
}

/* 2.11.4 广告规则：表体只在 .table-scroll 滚；底栏固定可见 */
.ad-rules-page.ui-page-main,
.ad-rules-page .ad-rules-page__body {
  display: flex;
  flex-direction: column;
  min-height: 0;
  flex: 1 1 auto;
  height: 100%;
}
.ad-rules-page__body > .ad-rules-head {
  flex: 0 0 auto;
}
.ad-rules-page__body > .list-shell {
  flex: 1 1 auto;
  min-height: 0;
}
.ad-rules-tabs {
  margin: var(--space-3) 0 var(--space-2);
}
.ad-rules-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.ad-rules-status-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--color-text-tertiary, #9ca3af);
}
.ad-rules-status.is-on .ad-rules-status-dot {
  background: var(--color-success, #0f766e);
}
.ad-rules-status.is-on {
  color: var(--color-success, #0f766e);
}
.ad-rules-list .col-actions {
  white-space: nowrap;
}
.ad-rules-list .col-actions .ui-btn-link + .ui-btn-link {
  margin-left: var(--space-3);
}
.ad-rules-digest {
  flex: 0 0 auto;
  padding: var(--space-3);
  border: 1px solid var(--color-divider);
  border-radius: var(--radius-md);
}
.ad-rules-digest__btns {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-2);
}
.ad-rules-camps,
.ad-rules-json {
  width: 100%;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: var(--fs-caption, 12px);
}
.ad-rules-edit-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3);
  margin-bottom: var(--space-4);
}
.ad-rules-page .ui-drawer-xl {
  width: min(960px, 96vw);
  max-width: 96vw;
}
.ad-rules-row-ops {
  display: flex;
  justify-content: flex-end;
}
.ad-rules-more {
  padding: var(--space-1) var(--space-2);
  min-width: 32px;
}
.ad-rules-flyout {
  position: absolute;
  right: var(--space-4);
  z-index: 20;
  display: flex;
  flex-direction: column;
  min-width: 140px;
  padding: var(--space-2);
  background: var(--color-surface, #fff);
  border: 1px solid var(--color-divider);
  border-radius: var(--radius-md);
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
}
.ad-rules-flyout button {
  text-align: left;
  background: none;
  border: 0;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-md);
  cursor: pointer;
  color: var(--color-text);
  font: inherit;
}
.ad-rules-flyout button:hover {
  background: var(--color-fill-secondary, #f3f4f6);
}
.ad-rules-type-mask {
  z-index: 40;
}
.ad-rules-type-modal {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 41;
  width: min(720px, 92vw);
  max-height: min(80vh, 640px);
  display: flex;
  flex-direction: column;
  background: var(--color-surface, #fff);
  border-radius: var(--radius-xl, 20px);
  border: 1px solid var(--color-divider);
  box-shadow: 0 16px 48px rgba(15, 23, 42, 0.18);
}
.ad-rules-type-modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  padding: var(--space-4) var(--space-5);
  border-bottom: 1px solid var(--color-divider);
}
.ad-rules-type-modal__head h2 {
  margin: 0;
  font-size: var(--font-size-lg, 18px);
  font-weight: 600;
}
.ad-rules-type-modal__body {
  padding: var(--space-4) var(--space-5) var(--space-5);
  overflow: auto;
}
.ad-rules-type-cat {
  margin: var(--space-3) 0 var(--space-2);
  font-size: var(--font-size-sm, 13px);
  color: var(--color-text-secondary, #64748b);
  font-weight: 600;
}
.ad-rules-type-cat:first-child {
  margin-top: 0;
}
.ad-rules-type-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
  gap: var(--space-3);
}
.ad-rules-type-card {
  position: relative;
  text-align: left;
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius-md, 10px);
  border: 1px solid var(--color-divider);
  background: var(--color-fill-secondary, #f8fafc);
  cursor: pointer;
  font: inherit;
  color: var(--color-text);
  min-height: 88px;
}
.ad-rules-type-card.is-on {
  background: color-mix(in srgb, var(--color-primary, #5687DF) 12%, #fff);
  border-color: color-mix(in srgb, var(--color-primary, #5687DF) 45%, #fff);
}
.ad-rules-type-card.is-on:hover {
  border-color: var(--color-primary, #5687DF);
}
.ad-rules-type-card.is-disabled {
  opacity: 0.55;
  cursor: not-allowed;
}
.ad-rules-type-card h3 {
  margin: 0 0 var(--space-2);
  font-size: var(--font-size-sm, 13px);
  font-weight: 600;
}
.ad-rules-type-card__tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1);
}
.ad-rules-type-card__tags span {
  font-size: 12px;
  color: var(--color-text-secondary, #64748b);
}
.ad-rules-type-card__soon {
  display: block;
  margin-top: var(--space-2);
  font-size: 12px;
  color: var(--color-text-secondary, #64748b);
}
.ad-rules-list {
  position: relative;
}
.ad-rules-steps {
  display: flex;
  gap: var(--space-4);
  margin-bottom: var(--space-4);
}
.ad-rules-steps span {
  color: var(--color-text-tertiary);
}
.ad-rules-steps span.is-on {
  color: var(--color-primary, #5687df);
  font-weight: 600;
}
.ad-xfer {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: var(--space-3);
  min-height: 360px;
}
.ad-xfer-pane {
  border: 1px solid var(--color-divider);
  border-radius: var(--radius-md);
  display: flex;
  flex-direction: column;
  min-height: 0;
  overflow: hidden;
}
.ad-xfer-pane-head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2);
  border-bottom: 1px solid var(--color-divider);
  flex: 0 0 auto;
}
.ad-xfer-pane-head .ui-input {
  flex: 1 1 auto;
  min-width: 0;
}
.ad-xfer-count {
  white-space: nowrap;
  color: var(--color-text-tertiary);
  font-size: var(--fs-caption, 12px);
}
.ad-xfer-tree {
  flex: 1 1 auto;
  overflow: auto;
  padding: var(--space-2);
  max-height: 420px;
}
.ad-xfer-arrow {
  display: flex;
  align-items: center;
  color: var(--color-text-tertiary);
  font-size: 20px;
}
.ad-xfer-group-head {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  width: 100%;
  text-align: left;
  background: none;
  border: 0;
  padding: var(--space-2);
  cursor: pointer;
  font: inherit;
}
.ad-xfer-group-head.static {
  cursor: default;
  font-weight: 600;
}
.ad-xfer-item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-1) var(--space-2) var(--space-1) var(--space-4);
  cursor: pointer;
}
.ad-xfer-item span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ad-xfer-empty,
.ad-xfer-error {
  padding: var(--space-3);
  color: var(--color-text-tertiary);
}
.ad-xfer-error {
  color: var(--color-danger, #b91c1c);
}
.ad-auto {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.ad-auto-title,
.ad-auto-label {
  font-weight: 600;
  margin-bottom: var(--space-2);
}
.ad-auto-card {
  border: 1px solid var(--color-divider);
  border-radius: var(--radius-md);
  padding: var(--space-3);
}
.ad-auto-card-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--space-3);
}
.ad-auto-card-acts {
  display: flex;
  gap: var(--space-2);
}
.ad-auto-sec {
  margin-bottom: var(--space-3);
}
.ad-auto-hint {
  margin: 0 0 var(--space-2);
  font-size: var(--fs-caption, 12px);
}
.ad-auto-cond,
.ad-auto-action-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}
.ad-auto-cond .ui-input,
.ad-auto-action-row .ui-input {
  width: auto;
  min-width: 88px;
}
.ad-auto-val {
  width: 72px !important;
  min-width: 72px !important;
}
.ad-auto-logic {
  color: var(--color-text-tertiary);
  font-size: var(--fs-caption, 12px);
  margin: var(--space-1) 0;
}
.ad-auto-logic.or {
  font-weight: 600;
  color: var(--color-primary, #5687df);
}
.ad-auto-or {
  border: 1px dashed var(--color-divider);
  border-radius: var(--radius-md);
  padding: var(--space-2);
  margin-bottom: var(--space-2);
}
.ad-auto-or-tools,
.ad-auto-footer {
  display: flex;
  gap: var(--space-2);
  margin-top: var(--space-2);
}
.ad-auto-affix {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.ad-auto-affix .ui-input {
  width: 88px;
  min-width: 72px;
}
.ad-auto-check {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  white-space: nowrap;
}
.ad-freq {
  margin-top: var(--space-4);
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-divider);
}
