/* ============================================================================
 * admin.css —— 后台极简内部样式
 *
 * 设计令牌来自 RCL：_content/Chip100.Rendering/tokens.css（主站同一套变量）。
 * 内部工具原则：数据优先、密度靠留白、零装饰（禁止渐变/阴影堆砌）。
 * ========================================================================== */

/* ---- 骨架 ---- */

.admin-shell {
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
  background: var(--color-neutral-50);
  color: var(--color-neutral-800);
  font-family: system-ui, "PingFang SC", "Microsoft YaHei", sans-serif;
  font-size: 15px;
  line-height: 1.6;
}

.admin-topbar {
  display: flex;
  align-items: center;
  gap: var(--space-5);
  padding-block: var(--space-3);
  padding-inline: var(--space-5);
  background: var(--color-neutral-900);
  color: var(--color-neutral-0);
}

.admin-brand {
  font-weight: 700;
  letter-spacing: 0.04em;
}

.admin-nav {
  display: flex;
  gap: var(--space-4);
}

.admin-nav__link {
  color: var(--color-neutral-300);
  text-decoration: none;
}

.admin-nav__link:hover {
  color: var(--color-neutral-0);
  text-decoration: underline;
}

/* NavLink active 态 —— 文字加亮即可（内部工具不需要胶囊高亮） */
.admin-nav__link.active {
  color: var(--color-neutral-0);
  font-weight: 600;
}

.admin-nav__link--muted {
  margin-inline-start: auto;
}

.admin-main {
  flex: 1;
  min-width: 0;
  width: 100%;
  padding-block: var(--space-6);
  padding-inline: var(--space-5);
}

/* ---- 主体布局：侧边栏 + 内容（2026-09-13 主导航改版） ---- */

.admin-body {
  flex: 1;
  display: flex;
  align-items: stretch;
  width: 100%;
}

.admin-sidebar {
  flex: 0 0 200px;
  padding: var(--space-5) var(--space-3);
  background: var(--color-neutral-0);
  border-inline-end: 1px solid var(--color-neutral-200);
}

.admin-sidenav {
  display: flex;
  flex-direction: column;
  gap: 2px;
  position: sticky;
  top: var(--space-4);
}

.admin-sidenav__link {
  padding: 7px 12px;
  border-radius: 6px;
  color: var(--color-neutral-700);
  font-size: 14px;
  text-decoration: none;
}

.admin-sidenav__link:hover {
  background: var(--color-neutral-100);
  color: var(--color-neutral-900);
}

/* NavLink active 态 —— 主色浅底 + 加亮文字（内部工具不需要胶囊高亮） */
.admin-sidenav__link.active {
  background: var(--color-brand-primary-50);
  color: var(--color-brand-primary-700);
  font-weight: 600;
}

.admin-sidenav__link--external {
  margin-block-start: var(--space-3);
  border-block-start: 1px solid var(--color-neutral-100);
  padding-block-start: var(--space-3);
  border-radius: 0;
  color: var(--color-neutral-500);
}

.admin-sidenav__link--external:hover {
  background: transparent;
  color: var(--color-neutral-800);
}

/* 移动端导航折展（纯 <details>，桌面隐藏） */
.admin-sidenav-fold {
  display: none;
}

@media (max-width: 860px) {
  .admin-sidebar {
    display: none;
  }

  .admin-sidenav-fold {
    display: block;
    align-self: flex-start;
    position: sticky;
    top: 0;
    z-index: 1;
    margin: var(--space-3) var(--space-4) 0;
    background: var(--color-neutral-0);
    border: 1px solid var(--color-neutral-200);
    border-radius: 8px;
  }

  .admin-sidenav-fold summary {
    padding: 10px 14px;
    cursor: pointer;
    font-size: 14px;
    font-weight: 600;
    color: var(--color-neutral-700);
  }

  .admin-sidenav-fold[open] summary {
    border-block-end: 1px solid var(--color-neutral-100);
  }

  .admin-sidenav-fold .admin-sidenav {
    position: static;
    padding: var(--space-2);
  }

  .admin-main {
    padding-inline: var(--space-4);
  }
}

.admin-footer {
  padding-block: var(--space-3);
  padding-inline: var(--space-5);
  color: var(--color-neutral-500);
  font-size: 13px;
  border-top: 1px solid var(--color-neutral-200);
}

/* ---- 页面头 ---- */

.admin-page__head {
  display: flex;
  align-items: baseline;
  gap: var(--space-4);
  flex-wrap: wrap;
  margin-block-end: var(--space-4);
}

.admin-page__title {
  margin: 0;
  font-size: 22px;
  font-weight: 700;
  color: var(--color-neutral-900);
}

.admin-page__meta {
  margin: 0;
  color: var(--color-neutral-500);
  font-size: 14px;
}

.admin-backlink {
  margin: 0 0 var(--space-2);
  font-size: 14px;
}

.admin-backlink a {
  color: var(--color-brand-primary-600);
  text-decoration: none;
}

.admin-backlink a:hover {
  text-decoration: underline;
}

/* ---- 筛选 ---- */

.admin-filter {
  display: flex;
  align-items: end;
  gap: var(--space-3);
  flex-wrap: wrap;
  padding-block: var(--space-3);
  padding-inline: var(--space-3);
  margin-block-end: var(--space-4);
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-200);
  border-radius: 8px;
}

.admin-filter__field {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-size: 13px;
  color: var(--color-neutral-500);
}

.admin-filter__field select {
  min-width: 140px;
  padding: 6px 8px;
  font: inherit;
  color: var(--color-neutral-800);
  border: 1px solid var(--color-neutral-300);
  border-radius: 6px;
  background: var(--color-neutral-0);
}

/* ---- 按钮 ---- */

.admin-button {
  padding: 7px 16px;
  font: inherit;
  font-weight: 600;
  border: 1px solid var(--color-brand-primary-600);
  border-radius: 6px;
  background: var(--color-brand-primary-500);
  color: var(--color-neutral-0);
  cursor: pointer;
}

.admin-button:hover {
  background: var(--color-brand-primary-600);
}

.admin-button--secondary {
  background: var(--color-neutral-0);
  color: var(--color-neutral-700);
  border-color: var(--color-neutral-300);
}

.admin-button--secondary:hover {
  background: var(--color-neutral-100);
}

/* ---- 表格 ---- */

.admin-table {
  width: 100%;
  border-collapse: collapse;
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-200);
  border-radius: 8px;
  font-size: 14px;
}

.admin-table th,
.admin-table td {
  padding: 10px 12px;
  text-align: left;
  border-block-end: 1px solid var(--color-neutral-100);
  vertical-align: top;
}

.admin-table thead th {
  color: var(--color-neutral-500);
  font-size: 13px;
  font-weight: 600;
  background: var(--color-neutral-50);
  white-space: nowrap;
}

.admin-table tbody tr:last-child td {
  border-block-end: none;
}

.admin-table__link {
  color: var(--color-brand-primary-600);
  font-weight: 600;
  text-decoration: none;
  font-variant-numeric: tabular-nums;
}

.admin-table__link:hover {
  text-decoration: underline;
}

.admin-table__context {
  display: block;
  color: var(--color-neutral-500);
  font-size: 12px;
}

/* 次要文字与等宽值（URL / 路径 / 品牌名原文）—— 表格里的第二信息层，
   与主列（品牌名）拉开层级，避免整行等重让人找不到重点。 */
.admin-table__muted {
  color: var(--color-neutral-500);
  font-size: 13px;
}

.admin-table__mono {
  font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
  font-size: 12px;
  color: var(--color-neutral-600);
  word-break: break-all;
}

/* 品牌 Logo 缩略图：白底 + 细边 + 内距。
   ★ 品牌 Logo 多为透明底 PNG，直接贴表格背景会糊成一片；
     固定尺寸盒子让各品牌视觉重量一致（这是品牌墙，对齐本身就是信息）。 */
.admin-logo-thumb {
  display: block;
  box-sizing: content-box;
  width: 72px;
  height: 24px;
  padding: 4px 6px;
  object-fit: contain;
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-200);
  border-radius: 4px;
}

/* 编辑页预览用大号（看清 Logo 细节再保存 —— 列表里的 72px 只够认个形状） */
.admin-logo-thumb--lg {
  width: 160px;
  height: 56px;
  padding: 8px 10px;
}

/* Logo 预览条：图/徽章 + 说明文字横向排列，窄屏折行 */
.admin-logo-preview {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
}

.admin-code {
  font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
  font-size: 13px;
  background: var(--color-neutral-100);
  padding: 1px 5px;
  border-radius: 4px;
  word-break: break-all;
}

.admin-code--wrap {
  display: inline-block;
  max-width: 100%;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* ---- 状态徽章：色 + 图标 + 文字三重编码（主站同一纪律） ---- */

.badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 1px 8px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}

.badge--pending {
  color: var(--color-semantic-warning);
  background: var(--color-semantic-stock-future-bg);
  border: 1px solid var(--color-semantic-warning);
}

.badge--done {
  color: var(--color-semantic-success);
  background: var(--color-semantic-stock-in-bg);
  border: 1px solid var(--color-semantic-success);
}

/* 中性 / 停用态（已隐藏、不上线）——「不是异常，只是没开」。
   刻意与 badge--fail 区分：停用是运营的常规状态，套红色会让人以为出事了。 */
.badge--muted {
  color: var(--color-neutral-600);
  background: var(--color-neutral-100);
  border: 1px solid var(--color-neutral-300);
}

/* ---- 详情页 ---- */

.admin-detail {
  margin: 0 0 var(--space-5);
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-200);
  border-radius: 8px;
  overflow: hidden;
}

.admin-detail__row {
  display: grid;
  grid-template-columns: 140px 1fr;
  gap: var(--space-3);
  padding: 10px 14px;
  border-block-end: 1px solid var(--color-neutral-100);
}

.admin-detail__row:last-child {
  border-block-end: none;
}

.admin-detail dt {
  color: var(--color-neutral-500);
  font-size: 13px;
  font-weight: 600;
}

.admin-detail dd {
  margin: 0;
  min-width: 0;
  overflow-wrap: anywhere;
}

.admin-detail__pre {
  margin: 0;
  padding: var(--space-2) var(--space-3);
  background: var(--color-neutral-50);
  border: 1px solid var(--color-neutral-200);
  border-radius: 6px;
  font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
  font-size: 13px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.admin-actions {
  display: flex;
  gap: var(--space-3);
}

/* ---- 空态 / 分页 ---- */

.admin-empty {
  padding: var(--space-6) var(--space-4);
  text-align: center;
  color: var(--color-neutral-500);
  background: var(--color-neutral-0);
  border: 1px dashed var(--color-neutral-300);
  border-radius: 8px;
}

.admin-pager {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-4);
  margin-block-start: var(--space-4);
  font-size: 14px;
}

.admin-pager__link {
  color: var(--color-brand-primary-600);
  text-decoration: none;
  font-weight: 600;
}

.admin-pager__link:hover {
  text-decoration: underline;
}

.admin-pager__status {
  color: var(--color-neutral-500);
  font-variant-numeric: tabular-nums;
}

/* ---- 顶栏用户区（认证后显示） ---- */

.admin-user {
  margin-inline-start: auto;
  display: flex;
  align-items: center;
  gap: var(--space-3);
}

.admin-user__name {
  color: var(--color-neutral-300);
  font-size: 13px;
}

.admin-user__form {
  display: inline;
}

.admin-user__logout {
  border: 1px solid var(--color-neutral-600);
  background: transparent;
  color: var(--color-neutral-200);
  padding: var(--space-1) var(--space-3);
  border-radius: var(--radius-sm);
  font-size: 13px;
  cursor: pointer;
}

.admin-user__logout:hover {
  border-color: var(--color-neutral-300);
  color: var(--color-neutral-0);
}

/* ---- 登录页 ---- */

.login-shell {
  min-height: 100dvh;
  display: grid;
  place-items: center;
  background: var(--color-neutral-50);
  color: var(--color-neutral-800);
  font-family: system-ui, "PingFang SC", "Microsoft YaHei", sans-serif;
}

.login-card {
  width: min(360px, 90vw);
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-200);
  border-radius: var(--radius-md);
  padding: var(--space-6);
}

.login-title {
  margin: 0;
  font-size: 20px;
  font-weight: 600;
}

.login-sub {
  margin: var(--space-1) 0 var(--space-5);
  font-size: 13px;
  color: var(--color-neutral-500);
}

.login-field {
  margin-block-end: var(--space-4);
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.login-field label {
  font-size: 13px;
  color: var(--color-neutral-600);
}

.login-field input {
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--color-neutral-300);
  border-radius: var(--radius-sm);
  font: inherit;
}

.login-field input:focus {
  outline: 2px solid var(--color-brand-primary-600);
  outline-offset: -1px;
}

.login-error {
  margin: 0 0 var(--space-4);
  padding: var(--space-2) var(--space-3);
  background: var(--color-danger-50, #fef2f2);
  border: 1px solid var(--color-danger-300, #fca5a5);
  border-radius: var(--radius-sm);
  color: var(--color-danger-700, #b91c1c);
  font-size: 13px;
}

.login-submit {
  width: 100%;
  padding: var(--space-2) var(--space-4);
  background: var(--color-brand-primary-600);
  color: var(--color-neutral-0);
  border: 0;
  border-radius: var(--radius-sm);
  font: inherit;
  font-weight: 600;
  cursor: pointer;
}

.login-submit:hover {
  filter: brightness(1.08);
}

/* ---- 总览看板（2026-09-13） ---- */

.stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--space-3);
  margin-block-end: var(--space-5);
}

.stat {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--space-4);
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-200);
  border-radius: 8px;
}

.stat__label {
  color: var(--color-neutral-500);
  font-size: 13px;
  font-weight: 600;
}

.stat__value {
  font-size: 28px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--color-neutral-900);
  font-variant-numeric: tabular-nums;
}

/* 待办 > 0 = 运维信号：警示色（色 + 数字 + 标签三重编码里的色位） */
.stat__value--alert {
  color: var(--color-semantic-warning);
}

.stat__meta {
  color: var(--color-neutral-500);
  font-size: 12px;
}

.admin-quicklinks {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-block-end: var(--space-5);
}

.admin-quicklink {
  padding: 8px 14px;
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-300);
  border-radius: 6px;
  color: var(--color-neutral-700);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
}

.admin-quicklink:hover {
  border-color: var(--color-brand-primary-500);
  color: var(--color-brand-primary-700);
}

.admin-section {
  margin-block-end: var(--space-5);
}

.admin-section__head {
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
  margin-block-end: var(--space-2);
}

.admin-section__head h2 {
  margin: 0;
  font-size: 16px;
  font-weight: 700;
  color: var(--color-neutral-900);
}

.admin-section__more {
  margin-inline-start: auto;
  color: var(--color-brand-primary-600);
  font-size: 13px;
  text-decoration: none;
}

.admin-section__more:hover {
  text-decoration: underline;
}

/* ---- 危险徽章（失败尝试 / 已锁定）与危险按钮 ---- */

.badge--fail {
  color: var(--color-semantic-danger);
  background: var(--color-semantic-stock-out-bg);
  border: 1px solid var(--color-semantic-danger);
}

.admin-button--danger {
  background: var(--color-neutral-0);
  border-color: var(--color-semantic-danger);
  color: var(--color-semantic-danger);
}

.admin-button--danger:hover {
  background: var(--color-semantic-stock-out-bg);
}

/* ---- 筛选文本框（GET form）---- */

.admin-filter__field input {
  min-width: 160px;
  padding: 6px 8px;
  font: inherit;
  color: var(--color-neutral-800);
  border: 1px solid var(--color-neutral-300);
  border-radius: 6px;
  background: var(--color-neutral-0);
}

/* ---- 行内操作区（账号页）：锁定表单 + 重置折展 ---- */

.admin-rowactions {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  min-width: 150px;
}

.admin-rowactions form {
  display: inline;
}

.admin-fold {
  background: var(--color-neutral-50);
  border: 1px solid var(--color-neutral-200);
  border-radius: 6px;
}

.admin-fold summary {
  padding: 6px 10px;
  cursor: pointer;
  font-size: 13px;
  color: var(--color-neutral-600);
}

.admin-fold__body {
  padding: var(--space-3);
  border-block-start: 1px solid var(--color-neutral-200);
}

.admin-field {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-size: 13px;
  color: var(--color-neutral-600);
}

.admin-field input {
  padding: 6px 8px;
  font: inherit;
  border: 1px solid var(--color-neutral-300);
  border-radius: 6px;
}

.admin-field input:focus {
  outline: 2px solid var(--color-brand-primary-600);
  outline-offset: -1px;
}

.admin-field .validation-message {
  color: var(--color-semantic-danger);
  font-size: 12px;
}

.validation-errors {
  margin: 0;
  padding-inline-start: 1.2em;
  color: var(--color-semantic-danger);
  font-size: 12px;
}

/* ---- 产品编辑表单栅格（.admin-formset 作用域 —— Accounts/PartImport 的旧
   .admin-field 包裹式结构不受影响；基类 .admin-form 无人使用已移除，2026-09-14） ---- */

.admin-formset {
  display: grid;
  gap: var(--space-5);
  /* 编辑域最大行宽：超宽屏下控件宽度可预期（精密仪表 = 可预期的仪表盘） */
  max-width: 960px;
}

/* 分组节：fieldset 语义 + 零框装饰，legend 只做小标题 */
.admin-formset__group {
  margin: 0;
  padding: 0;
  border: 0;
  min-width: 0;
}

.admin-formset__legend {
  padding: 0;
  margin-block-end: var(--space-3);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--color-neutral-500);
}

/* 分组内两列字段栅格；窄视口塌单列 */
.admin-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-4) var(--space-6);
}

@media (max-width: 719px) {
  .admin-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* 栅格内字段 = 固定宽标签列（起线一致）+ 自适应控件列 */
.admin-grid .admin-field {
  display: grid;
  grid-template-columns: 8em minmax(0, 1fr);
  column-gap: var(--space-3);
  align-items: start;
  gap: 0;
  font-size: 13px;
  color: var(--color-neutral-600);
}

.admin-grid .admin-field > label,
.admin-grid .admin-field > .admin-field__label {
  line-height: 1.4;
  /* 与 6px padding + 1px border 的单行控件光学基线对齐 */
  padding-block-start: 7px;
}

/* 宽字段跨全行（富文本 / 上传组合件 / textarea / 备注等） */
.admin-field--wide {
  grid-column: 1 / -1;
}

/* 校验消息钉在控件列正下方（auto-placement 会误落标签列） */
.admin-grid .admin-field .validation-message {
  grid-column: 2;
}

/* 控件三件套统一规格（原本只有 input 有样式；栅格下 select/textarea 同款） */
.admin-grid .admin-field :is(input, select, textarea) {
  width: 100%;
  padding: 6px 8px;
  font: inherit;
  border: 1px solid var(--color-neutral-300);
  border-radius: 6px;
  background: var(--color-neutral-0);
  color: var(--color-neutral-800);
}

.admin-grid .admin-field :is(input, select, textarea):focus {
  outline: 2px solid var(--color-brand-primary-600);
  outline-offset: -1px;
}

/* 保存按钮与首列控件起线对齐 */
.admin-formset .admin-actions {
  margin-inline-start: calc(8em + var(--space-3));
}

@media (max-width: 719px) {
  .admin-formset .admin-actions {
    margin-inline-start: 0;
  }
}

/* ---- 系统设置页：大模型连通测试条（2026-09-15） ----
   ★ 裸 form 必须与 EditForm 平级（勿嵌套）：浏览器 parser 会忽略嵌套的
   <form> 开始标签，但其 </form> 闭合标签会把外层 form 提前关闭 ——
   保存按钮掉出 form 外，点击零反应（真机实证 closest("form")=null）。 */
.admin-settings-testai {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-3);
  margin: 0 0 var(--space-4);
  padding: var(--space-2) var(--space-3);
  background: var(--color-surface-sunken);
  border: 1px solid var(--color-border);
  border-radius: 6px;
}

.admin-settings-testai__hint {
  margin: 0;
  color: var(--color-text-muted);
  font-size: 13px;
}

/* 组合件（上传 / 富文本工具栏与编辑器）钉在控件列 —— auto-placement 会把
   label 后的第二个块级子元素掉进标签列（row2 col1），必须显式钉 col2 */
.admin-grid .admin-field > .admin-upload,
.admin-grid .admin-field > .rich-toolbar,
.admin-grid .admin-field > .rich-editor {
  grid-column: 2;
}

/* 上传组合件内的 URL 输入框弹性占余（覆盖栅格控件的 width:100%，
   让按钮与状态提示同行；窄屏 flex-wrap 自然换行） */
.admin-grid .admin-field .admin-upload input[type="text"] {
  width: auto;
  flex: 1 1 240px;
  min-width: 0;
}

/* 复选框字段（ArticleEdit 置顶等）：栅格控件三件套的「全宽+边框+内边距」
   规格只适用于文本类控件 —— checkbox 恢复原生尺寸，与说明文字同行，
   基线对齐方式与标签列一致（2026-09-14 随文章编辑页引入） */
.admin-grid .admin-field .admin-check {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding-block-start: 7px;
}

.admin-grid .admin-field .admin-check input[type="checkbox"] {
  width: auto;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  accent-color: var(--color-brand-primary-600);
}

/* ---- 成功横幅（PRG 回显） ---- */

.admin-banner {
  margin: 0 0 var(--space-4);
  padding: var(--space-2) var(--space-3);
  background: var(--color-semantic-stock-in-bg);
  border: 1px solid var(--color-semantic-success);
  border-radius: 6px;
  color: var(--color-semantic-success);
  font-size: 13px;
}

/* ---- 建设中占位 ---- */

.admin-comingsoon {
  padding: var(--space-6) var(--space-4);
  background: var(--color-neutral-0);
  border: 1px dashed var(--color-neutral-300);
  border-radius: 8px;
  color: var(--color-neutral-700);
}

.admin-comingsoon__lead {
  margin: 0 0 var(--space-2);
}

.admin-comingsoon__hint {
  margin: 0;
  color: var(--color-neutral-500);
  font-size: 13px;
}

/* ---- 产品库：富文本编辑器（零依赖 contenteditable + execCommand，2026-09-13） ---- */

.rich-toolbar {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
  padding: var(--space-2);
  background: var(--color-neutral-50);
  border: 1px solid var(--color-neutral-300);
  border-block-end: none;
  border-radius: 6px 6px 0 0;
}

.rich-toolbar button {
  min-width: 30px;
  padding: 4px 8px;
  font: inherit;
  font-size: 13px;
  border: 1px solid var(--color-neutral-300);
  border-radius: 4px;
  background: var(--color-neutral-0);
  color: var(--color-neutral-700);
  cursor: pointer;
}

.rich-toolbar button:hover {
  border-color: var(--color-brand-primary-500);
  color: var(--color-brand-primary-700);
}

.rich-toolbar .rich-status {
  margin-inline-start: auto;
  font-size: 12px;
  color: var(--color-semantic-success);
  overflow-wrap: anywhere;
}

.rich-toolbar .rich-status.is-error {
  color: var(--color-semantic-danger);
}

.rich-toolbar input[type="file"] {
  display: none;
}

.rich-editor {
  min-height: 220px;
  max-height: 480px;
  overflow-y: auto;
  padding: var(--space-3);
  background: var(--color-neutral-0);
  border: 1px solid var(--color-neutral-300);
  border-radius: 0 0 6px 6px;
  font: inherit;
  line-height: 1.7;
  overflow-wrap: anywhere;
}

.rich-editor:focus {
  outline: 2px solid var(--color-brand-primary-600);
  outline-offset: -1px;
}

/* 用户 HTML 可视化呈现：压一下块级间距与插图尺寸（站外拷贝常带入裸样式） */
.rich-editor p {
  margin: 0 0 0.5em;
}

.rich-editor img {
  max-width: 100%;
  height: auto;
}

/* ---- 产品库：字段级上传（ImgUrl / FileUrl 直传） ---- */

.admin-upload {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.admin-upload input[type="file"] {
  display: none;
}

.admin-upload__status {
  font-size: 12px;
  color: var(--color-semantic-success);
  overflow-wrap: anywhere;
}

.admin-upload__status.is-error {
  color: var(--color-semantic-danger);
}

/* ---- 产品库列表：行内库存更新 / 批量选择（2026-09-13） ---- */

.stock-form {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.stock-form input[type="number"] {
  width: 84px;
  padding: 4px 6px;
  font: inherit;
  font-variant-numeric: tabular-nums;
  border: 1px solid var(--color-neutral-300);
  border-radius: 4px;
}

.stock-form button {
  padding: 4px 10px;
  font: inherit;
  font-size: 12px;
  border: 1px solid var(--color-neutral-300);
  border-radius: 4px;
  background: var(--color-neutral-0);
  color: var(--color-neutral-700);
  cursor: pointer;
}

.stock-form button:hover {
  border-color: var(--color-brand-primary-500);
  color: var(--color-brand-primary-700);
}

.admin-bulkbar {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-block-start: var(--space-3);
}

.admin-headactions {
  display: flex;
  gap: var(--space-2);
  margin-inline-start: auto;
}

/* ---- 危险横幅（编辑页校验失败 / 导入异常回显） ---- */

.admin-banner--danger {
  background: var(--color-semantic-stock-out-bg);
  border-color: var(--color-semantic-danger);
  color: var(--color-semantic-danger);
}

/* ---- 产品编辑 / 新增页（2026-09-13） ---- */

.admin-partform {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  max-width: 760px;
}

.admin-partform .admin-field input[type="text"],
.admin-partform .admin-field input[type="number"],
.admin-partform .admin-field select,
.admin-partform .admin-field textarea {
  width: 100%;
  max-width: 480px;
  box-sizing: border-box;
  padding: 6px 8px;
  font: inherit;
  border: 1px solid var(--color-neutral-300);
  border-radius: 6px;
  background: var(--color-neutral-0);
  color: var(--color-neutral-800);
}

.admin-partform .admin-field textarea {
  resize: vertical;
}

.admin-partform .admin-field select {
  max-width: 320px;
}

/* ---- 产品批量导入页 ---- */

.admin-importform {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  align-items: flex-start;
  margin-block-start: var(--space-4);
}

.admin-importform input[type="file"] {
  font: inherit;
}

/* =============================================================================
   订单编辑页（2026-09-14）—— 头字段栅格 + 明细行内表格
   ============================================================================= */

/* 订单号字段：等宽字体（PO260817540 这类单号需要逐字符对照，比例字体易看错） */
.admin-orderid {
  font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
  letter-spacing: 0.02em;
}

/* 明细行内表格：可横向滚动（10 列在窄视口必然溢出，横向滚动优于压缩到不可读） */
.admin-itemtable {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  display: block;
  overflow-x: auto;
}

.admin-itemtable thead {
  display: table-header-group;
}

.admin-itemtable th {
  text-align: left;
  font-weight: 600;
  color: var(--color-neutral-500);
  letter-spacing: 0.04em;
  padding: 6px 4px;
  border-block-end: 1px solid var(--color-neutral-200);
  white-space: nowrap;
}

.admin-itemtable td {
  padding: 2px 4px;
  vertical-align: middle;
}

/* 单元格输入控件：填满单元格、等宽数字列 */
.admin-itemtable :is(input[type="text"], input[type="number"]) {
  width: 100%;
  min-width: 64px;
  box-sizing: border-box;
  padding: 4px 6px;
  font: inherit;
  font-variant-numeric: tabular-nums;
  border: 1px solid transparent;
  border-radius: 4px;
  background: transparent;
  color: var(--color-neutral-800);
}

/* 单元格常态无边框（表格本身即网格），聚焦时才显形 —— 表格不变成一堆方框 */
.admin-itemtable :is(input[type="text"], input[type="number"]):hover {
  border-color: var(--color-neutral-200);
  background: var(--color-neutral-0);
}

.admin-itemtable :is(input[type="text"], input[type="number"]):focus {
  border-color: var(--color-neutral-300);
  background: var(--color-neutral-0);
  outline: 2px solid var(--color-neutral-300);
  outline-offset: -1px;
}

/* 型号 / 供应商列放宽 */
.admin-itemtable .item-xinghao {
  min-width: 180px;
}

.admin-itemtable .item-provider {
  min-width: 130px;
}

.admin-itemtable .item-num {
  min-width: 72px;
  text-align: right;
}

/* 行内小计（只读，服务端不再回填 —— 提交后由详情页聚合展示） */
.admin-itemtable tfoot th,
.admin-itemtable tfoot td {
  padding-block-start: var(--space-2);
  border-block-start: 1px solid var(--color-neutral-200);
  font-weight: 600;
}

/* 每行行尾的删除按钮：低调，hover 才提示危险 */
.admin-itemrow__remove {
  border: 0;
  background: transparent;
  color: var(--color-neutral-500);
  cursor: pointer;
  font: inherit;
  font-size: 16px;
  line-height: 1;
  padding: 4px 6px;
  border-radius: 4px;
}

.admin-itemrow__remove:hover {
  color: var(--color-semantic-danger);
  background: var(--color-semantic-stock-out-bg);
}

/* 编号列（只读序号） */
.admin-itemtable .item-index {
  color: var(--color-neutral-500);
  font-variant-numeric: tabular-nums;
  text-align: right;
  min-width: 32px;
}

/* 「+ 添加一行」按钮靠左（与表格左缘对齐，不与保存按钮争视觉重心） */
.admin-itemadd {
  margin-block-start: var(--space-2);
}

/* 明细为空时的提示行 */
.admin-itemtable__empty td {
  padding: var(--space-3) 4px;
  color: var(--color-neutral-500);
  text-align: center;
}

/* =============================================================================
   订单打印视图（2026-09-14）—— 纸张优先：A4 版心 + 打印时隐藏交互元素
   ============================================================================= */

.print-shell {
  min-height: 100vh;
  background: var(--color-neutral-100);
  padding: var(--space-5) var(--space-4);
}

.print-sheet {
  max-width: 210mm;                /* A4 宽度 */
  margin-inline: auto;
  background: var(--color-neutral-0);
  color: var(--color-neutral-800);
  padding: 16mm 14mm;
  box-shadow: 0 1px 3px rgb(0 0 0 / 8%);
  font-size: 13px;
  line-height: 1.5;
}

/* 屏幕上的操作条（打印时整块隐藏） */
.print-actions {
  display: flex;
  gap: var(--space-2);
  margin-block-end: var(--space-5);
  padding-block-end: var(--space-4);
  border-block-end: 1px dashed var(--color-neutral-200);
}

.print-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--space-5);
  padding-block-end: var(--space-4);
  border-block-end: 2px solid var(--color-neutral-800);
}

.print-head__brand {
  margin: 0;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: 0.08em;
}

.print-head__sub {
  margin: 2px 0 0;
  font-size: 12px;
  color: var(--color-neutral-500);
}

.print-head__meta {
  text-align: right;
}

.print-head__title {
  margin: 0 0 4px;
  font-size: 18px;
  font-weight: 700;
  font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
}

.print-head__meta p {
  margin: 1px 0;
  font-size: 12px;
  color: var(--color-neutral-600);
}

.print-block {
  margin-block-start: var(--space-5);
}

.print-block__title {
  margin: 0 0 var(--space-3);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--color-neutral-500);
}

/* 键值对：两列并排（窄屏塌单列），标签固定宽 */
.print-pairs {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-2) var(--space-5);
  margin: 0;
}

.print-pairs > div {
  display: grid;
  grid-template-columns: 5.5em minmax(0, 1fr);
  gap: var(--space-2);
}

.print-pairs dt {
  color: var(--color-neutral-500);
  font-size: 12px;
}

.print-pairs dd {
  margin: 0;
  word-break: break-word;
}

/* 地址 / 备注跨整行（内容长，两列并排会折成难读的窄条） */
.print-pairs--wide {
  grid-column: 1 / -1;
}

.print-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
}

.print-table th,
.print-table td {
  border: 1px solid var(--color-neutral-200);
  padding: 5px 6px;
  text-align: left;
  vertical-align: top;
}

.print-table thead th {
  background: var(--color-neutral-50);
  font-weight: 600;
  white-space: nowrap;
}

.print-table__num {
  text-align: right;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.print-table tfoot th {
  background: var(--color-neutral-50);
}

.print-summary {
  margin-block-start: var(--space-3);
  text-align: right;
  font-size: 13px;
}

.print-foot {
  margin-block-start: var(--space-6);
  padding-block-start: var(--space-3);
  border-block-start: 1px solid var(--color-neutral-200);
  font-size: 11px;
  color: var(--color-neutral-500);
  text-align: center;
}

@media (max-width: 719px) {
  .print-pairs {
    grid-template-columns: minmax(0, 1fr);
  }

  .print-sheet {
    padding: var(--space-4);
  }
}

/* ---- 打印媒体：去掉一切屏幕辅助（操作条 / 底色 / 阴影），只留单据本体 ---- */

@media print {
  @page {
    size: A4;
    margin: 12mm;
  }

  .print-shell {
    min-height: auto;
    background: none;
    padding: 0;
  }

  .print-sheet {
    max-width: none;
    padding: 0;
    box-shadow: none;
    font-size: 11pt;
  }

  /* 交互元素在纸面上无意义 —— 整块移除，别留空档 */
  .print-actions,
  .admin-topbar,
  .admin-sidebar,
  .admin-sidenav-fold,
  .admin-footer {
    display: none !important;
  }

  /* 表头在跨页时重复（明细行多于一页时必备） */
  .print-table thead {
    display: table-header-group;
  }

  .print-table tr {
    break-inside: avoid;
  }

  /* 打印用黑白更耐看，也让不同打印机一致 */
  .print-table thead th,
  .print-table tfoot th {
    background: #F2F2F2 !important;
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
}

/* ---- 通用小工具（订单编辑页起用；同类需求出现时复用这两个，不要再各写一份） ---- */

/* 表单内联提示文案（跟在按钮旁，比 tooltip 可发现性高、也不依赖 hover） */
.admin-hint {
  margin-inline-start: var(--space-3);
  font-size: 12px;
  color: var(--color-neutral-500);
}

/* 视觉隐藏但保留给读屏（表头「操作」列需要列名却不需要显示文字） */
.admin-visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* ============================================================================
   发布中心（/publishing）—— 破坏性动作的二次确认区。
   ★ 用纯 <details> 折展（与骨架的语言切换器/移动端菜单同一约定）：静态导出无 JS 也能用，
     且「默认收起」本身就是一道防误触闸 —— 回滚按钮不在首屏可见区。
   用浅色底 + 左侧警示条表达「危险区」，而不是大红块 —— 数据优先、零装饰。
   ============================================================================ */
.admin-danger {
  margin: 0 0 var(--space-5);
  padding: var(--space-3) var(--space-4);
  background: var(--color-surface-sunken);
  border: 1px solid var(--color-border);
  border-inline-start: 3px solid var(--color-feedback-danger, #C0392B);
  border-radius: 6px;
}

.admin-danger > summary {
  cursor: pointer;
  font-weight: 600;
  color: var(--color-feedback-danger, #C0392B);
}

.admin-danger p {
  margin: var(--space-3) 0;
  font-size: 13px;
  color: var(--color-text-muted);
}
