/* =====================================================================
   win98.css — Windows 95/98 老电脑视觉层（2026-09-20）
   在 intake.css 之后加载，与 pixel.css / apple.css 三选一（theme.js 负责换 <link>）。
   只覆盖观感，不动 grid / flex 布局与 DOM：
   · 桌面：经典青绿 #008080 桌面 + 底部灰色任务栏（body::before 是「开始」钮，
     body::after 是任务栏本体；右下角的主题开关被摆进托盘位置）。
   · 窗口：历史栏、对话区、工作区各是一扇窗——银灰 #c0c0c0 窗体、2px 斜面、
     海军蓝→浅蓝渐变标题栏、白色粗体标题、右上角 [×]。
   · 控件：按钮是 2px 斜面凸起、按下翻成凹陷；输入框白底凹陷；列表框白底凹陷、
     选中项海军蓝底白字；选项卡是真正的 Win98 tab 控件（当前页签抬高并与面板相接）；
     进度条是海军蓝分段方块。
   · 字体：英数用 Tahoma（Win98/2000 系统界面字体），中文用宋体 12px（Windows 自带，
     12px 正好命中内嵌点阵），一律关抗锯齿。位图字体 Pixelated MS Sans Serif 只在 11px
     原生尺寸上好看，12px 与系统缩放下比中文小一号、基线不齐，已不再用于界面文字。
     论文正文与 PDF 预览仍用系统黑体保证长文可读。
   出处：斜面阴影、滚动条与选项卡的画法取自 98.css（jdan，MIT），字体同源。
   ===================================================================== */

@font-face {
  font-family: "Pixelated MS Sans Serif";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/ms_sans_serif.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+2000-206F;
}

@font-face {
  font-family: "Pixelated MS Sans Serif";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/ms_sans_serif_bold.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+2000-206F;
}

/* ---------- 1. 变量 ---------- */

:root {
  --w-desktop: #008080;
  --w-face: #c0c0c0;
  --w-light: #dfdfdf;
  --w-lighter: #ffffff;
  --w-shadow: #808080;
  --w-darker: #0a0a0a;
  --w-navy: #000080;
  --w-navy-light: #1084d0;
  --w-text: #000000;
  --w-muted: #444444;
  --w-disabled: #808080;
  --w-field: #ffffff;
  --w-link: #0000ff;
  --w-yellow: #ffffe1;   /* 工具提示黄 */
  --w-green: #008000;
  --w-red: #800000;

  /* 凸起（按钮、窗体） */
  --w-raised: inset -1px -1px var(--w-darker), inset 1px 1px var(--w-lighter), inset -2px -2px var(--w-shadow), inset 2px 2px var(--w-light);
  /* 窗体外框（比按钮多一层浅灰） */
  --w-window: inset -1px -1px var(--w-darker), inset 1px 1px var(--w-light), inset -2px -2px var(--w-shadow), inset 2px 2px var(--w-lighter);
  /* 凹陷（输入框、列表框） */
  --w-sunken: inset -1px -1px var(--w-lighter), inset 1px 1px var(--w-shadow), inset -2px -2px var(--w-light), inset 2px 2px var(--w-darker);
  /* 按下 */
  --w-pressed: inset -1px -1px var(--w-lighter), inset 1px 1px var(--w-darker), inset -2px -2px var(--w-light), inset 2px 2px var(--w-shadow);
  /* 蚀刻线（分组框） */
  --w-etched: inset 1px 1px var(--w-shadow), inset -1px -1px var(--w-lighter), inset 2px 2px var(--w-lighter), inset -2px -2px var(--w-shadow);
  /* 状态栏格子 */
  --w-status: inset -1px -1px var(--w-light), inset 1px 1px var(--w-shadow);
  /* 按下的开关钮：棋盘格底 */
  --w-checker: url("data:image/svg+xml;charset=utf-8,%3Csvg width='2' height='2' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M1 0H0v1h1v1h1V1H1V0z' fill='silver'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M2 0H1v1H0v1h1V1h1V0z' fill='%23fff'/%3E%3C/svg%3E");

  --w-font: "Tahoma", "Verdana", "SimSun", "宋体", "NSimSun", "Microsoft YaHei", sans-serif;
  --w-font-read: "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", system-ui, sans-serif;
  --w-size: 12px;
  --w-size-lg: 14px;
  --w-size-xl: 16px;

  /* 接管 index.html 内联样式与 intake.css 的两套旧变量 */
  --bg: #008080; --surface: #c0c0c0; --panel: #c0c0c0; --field: #ffffff;
  --ink: #000000; --muted: #444444; --soft: #444444;
  --line: #808080; --line-strong: #000000;
  --teal: #000080; --teal-dark: #000080;
  --gold: #ffffe1; --red: #800000; --blue: #000080; --green: #008000;
  --shadow: none;
  --radius: 0; --radius-sm: 0; --radius-lg: 0;
  --canvas: #008080; --paper: #c0c0c0;
  --ink-soft: #444444; --ink-faint: #444444;
  --accent: #000080; --accent-dark: #000080; --accent-wash: #ffffff;
  --danger: #800000; --ok: #008000; --warn: #808000;
  --ring: none;
  color-scheme: light;
}

/* ---------- 2. 全局清洗 ---------- */

*,
*::before,
*::after {
  border-radius: 0 !important;
  text-shadow: none !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
  transition: none !important;
  animation-timing-function: steps(2, end);
}

/* 圆角模糊阴影散落上百处，先全部清掉，再逐个给斜面（本文件的 box-shadow 因此都带 !important）。 */
*,
*::before,
*::after {
  box-shadow: none !important;
}

html {
  -webkit-font-smoothing: none;
  -moz-osx-font-smoothing: unset;
  font-smooth: never;
  text-rendering: optimizeSpeed;
}

/* ---------- 3. 桌面与任务栏 ---------- */

body,
body[data-auth-page="standalone"] {
  background: var(--w-desktop);
  color: var(--w-text);
  font-family: var(--w-font);
  font-size: var(--w-size);
  line-height: 1.5;
  letter-spacing: 0;
  padding-bottom: 0;
}

/* 任务栏本体：底部 28px 银灰，顶边一道白高光。 */
/* 「开始」钮：左下角凸起小按钮，前面四色小旗用渐变拼。 */
/* 主题开关摆进托盘：凹陷的小格子，像时钟那一栏。 */
/* ---------- 4. 基础排版 ---------- */

h1, h2, h3, h4, h5, h6 {
  font-family: var(--w-font);
  font-weight: 700;
  letter-spacing: 0;
  line-height: 1.4;
  color: var(--w-text);
}

h1 { font-size: var(--w-size-xl); }
h2 { font-size: var(--w-size-lg); }
h3 { font-size: var(--w-size); }

p, li, td, th, label, span, small {
  font-family: var(--w-font);
}

::selection {
  color: var(--w-lighter);
  background: var(--w-navy);
}

a {
  color: var(--w-link);
  text-decoration: underline;
}

a:hover { color: var(--w-navy); }
a:focus-visible { outline: 1px dotted var(--w-text); }

.brand,
.brand:hover,
.rail-link,
.rail-link:hover,
.back-home,
.download,
.tab,
.intake-downloads a,
.artifact-links a {
  text-decoration: none;
}

.subtitle,
.hint,
.field-hint,
.intake-hint,
.composer-tip,
.pending-caption,
.chat-empty__hint,
.rail-item__meta,
.plan-outline__note,
.plan-card__hint,
.plan-card__empty,
.brief-settings__name,
.brief-progress,
.run-budget__note,
.intake-cost,
.welcome-delivery p,
.welcome-delivery__note {
  color: var(--w-muted);
  font-family: var(--w-font);
  font-size: var(--w-size);
}

/* 滚动条：Win98 的棋盘格轨道 + 斜面滑块 + 带箭头的端钮（照 98.css）。 */
* {
  scrollbar-width: auto;
  scrollbar-color: var(--w-face) var(--w-light);
}

*::-webkit-scrollbar { width: 16px; height: 16px; }
*::-webkit-scrollbar-corner { background: var(--w-light); }
*::-webkit-scrollbar-track { background-image: var(--w-checker); }
*::-webkit-scrollbar-thumb {
  background-color: var(--w-light);
  box-shadow: var(--w-raised) !important;
}
*::-webkit-scrollbar-button:vertical:start:decrement,
*::-webkit-scrollbar-button:vertical:end:increment,
*::-webkit-scrollbar-button:horizontal:start:decrement,
*::-webkit-scrollbar-button:horizontal:end:increment {
  display: block;
  background-color: var(--w-face);
  background-repeat: no-repeat;
  background-position: center;
  box-shadow: var(--w-raised) !important;
}
*::-webkit-scrollbar-button:vertical:start {
  height: 16px;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='7' height='4' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' d='M3 0h1v1h1v1h1v1h1v1H0V3h1V2h1V1h1z'/%3E%3C/svg%3E");
}
*::-webkit-scrollbar-button:vertical:end {
  height: 16px;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='7' height='4' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' d='M0 0h7v1H6v1H5v1H4v1H3V3H2V2H1V1H0z'/%3E%3C/svg%3E");
}
*::-webkit-scrollbar-button:horizontal:start {
  width: 16px;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='4' height='7' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' d='M4 0v7H3V6H2V5H1V4H0V3h1V2h1V1h1V0z'/%3E%3C/svg%3E");
}
*::-webkit-scrollbar-button:horizontal:end {
  width: 16px;
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='4' height='7' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' d='M0 0v7h1V6h1V5h1V4h1V3H3V2H2V1H1V0z'/%3E%3C/svg%3E");
}

/* ---------- 5. 控件 ---------- */

button,
.download,
.artifact-links a,
.intake-downloads a,
.paper-actions button,
.chip,
.seed {
  min-height: 23px;
  padding: 2px 12px;
  border: 0;
  background: var(--w-face);
  color: var(--w-text);
  font-family: var(--w-font);
  font-size: var(--w-size);
  font-weight: 400;
  line-height: 1.5;
  text-decoration: none;
  cursor: default;
  box-shadow: var(--w-raised) !important;
}

button:hover:not(:disabled),
.download:hover,
.artifact-links a:hover,
.intake-downloads a:hover,
.chip:hover,
.seed:hover {
  background: var(--w-face);
  color: var(--w-text);
  transform: none;
}

button:active:not(:disabled),
.download:active,
.intake-downloads a:active,
.chip:active,
.seed:active {
  box-shadow: var(--w-pressed) !important;
  padding: 3px 11px 1px 13px;   /* 文字随按下挪一格 */
  transform: none;
}

button:focus-visible,
.chip:focus-visible,
.seed:focus-visible {
  outline: 1px dotted var(--w-text);
  outline-offset: -4px;
}

button:disabled,
button[disabled],
.button:disabled {
  color: var(--w-disabled) !important;
  background: var(--w-face) !important;
  opacity: 1 !important;
  cursor: default;
  text-shadow: 1px 1px 0 var(--w-lighter) !important;
  box-shadow: var(--w-raised) !important;
}

/* 主操作 = 默认按钮：外面多一圈黑边，粗体。 */
#generate,
#intake-send,
#intake-confirm,
button.primary,
.auth-primary,
.primary-action,
.button.primary {
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  font-weight: 700;
  box-shadow: 0 0 0 1px var(--w-darker), var(--w-raised) !important;
}

#generate:active:not(:disabled),
#intake-send:active:not(:disabled),
#intake-confirm:active:not(:disabled),
button.primary:active:not(:disabled),
.auth-primary:active:not(:disabled) {
  box-shadow: 0 0 0 1px var(--w-darker), var(--w-pressed) !important;
}

#intake-send:disabled,
#intake-confirm:disabled,
#generate:disabled,
button.primary:disabled,
.auth-primary:disabled {
  color: var(--w-disabled) !important;
  font-weight: 400;
  box-shadow: var(--w-raised) !important;
}

/* 选片（模板、切入角度、设置项、澄清选项）是开关钮：选中 = 按下 + 棋盘格。 */
.chip[aria-pressed="true"],
.chip.is-selected {
  background: var(--w-checker) !important;
  color: var(--w-text) !important;
  box-shadow: var(--w-pressed) !important;
  padding: 3px 11px 1px 13px;
}

.chip--skip {
  font-style: italic;
}

/* 无框的透明按钮（图标钮、文字钮）：平的，悬停才浮起。 */
.rail-item__main,
.rail-item__main:disabled,
.rail-item__more,
.rail-item__more:disabled,
.rail-menu__item,
.text-button,
.text-button:disabled,
.icon-button,
.icon-button:disabled,
.password-toggle,
.password-toggle:disabled,
.plan-toggle,
.plan-outline__remove,
.plan-outline__remove:disabled,
.preview-fullscreen,
.auth-dialog-close {
  background: transparent !important;
  box-shadow: none !important;
  padding: 2px 6px;
  min-height: 0;
}

.icon-button:hover:not(:disabled),
.plan-toggle:hover,
.preview-fullscreen:hover,
.rail-item__more:hover {
  background: var(--w-face) !important;
  box-shadow: inset -1px -1px var(--w-shadow), inset 1px 1px var(--w-lighter) !important;
}

/* 输入框：白底凹陷，光标黑色。 */
input,
select,
textarea,
.rail-search input,
#rail-search {
  border: 0;
  background: var(--w-field);
  color: var(--w-text);
  font-family: var(--w-font);
  font-size: var(--w-size);
  padding: 3px 4px;
  box-shadow: var(--w-sunken) !important;
}

input:focus,
select:focus,
textarea:focus {
  outline: none;
  box-shadow: var(--w-sunken) !important;
}

::placeholder {
  color: var(--w-shadow);
  opacity: 1;
}

/* 输入区整块是一个凹陷白框，里面的 textarea 不再自带框。 */
.composer-box {
  padding: 6px;
  border: 0;
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
}

.composer-box textarea,
.composer-box input {
  border: 0 !important;
  background: transparent;
  box-shadow: none !important;
  padding: 2px;
}

.composer-box:focus-within {
  outline: none;
  box-shadow: var(--w-sunken) !important;
}

.composer-tip {
  color: var(--w-muted);
}

/* 折叠区的三角标 */
details summary {
  font-family: var(--w-font);
  font-size: var(--w-size);
  cursor: default;
}

details summary::marker { content: "▸ "; color: var(--w-text); }
details[open] summary::marker { content: "▾ "; }

/* ---------- 6. 窗口骨架 ---------- */

.shell {
  gap: 8px;
  padding: 8px;
}

/* 三扇窗：历史栏、对话区、工作区。 */
.rail,
.composer,
.workspace {
  padding: 3px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-window) !important;
}

.composer {
  gap: 8px;
  padding: 3px 3px 8px;
}

.composer > *:not(.brand) {
  margin-left: 6px;
  margin-right: 6px;
}

.shell:not(.has-canvas) > .composer {
  max-width: 820px;
  margin: 24px 0;
}

/* 标题栏：海军蓝→浅蓝渐变，白色粗体，右上角 [×]。 */
.composer > .brand,
.rail-head,
.workspace::before {
  position: relative;
  display: flex;
  align-items: center;
  gap: 6px;
  min-height: 18px;
  margin: 0 0 6px;
  padding: 2px 24px 2px 4px;
  border: 0;
  background: linear-gradient(90deg, var(--w-navy), var(--w-navy-light));
  color: var(--w-lighter);
}

.composer > .brand::after,
.rail-head::after,
.workspace::before {
  font-family: var(--w-font);
}

/* 工作区窗口：第一行是 ::before 标题栏，随后才是页签行与视图。 */
.workspace {
  grid-template-rows: auto auto minmax(0, 1fr);
  gap: 6px;
}

.workspace::before {
  content: "AutoPaper AI - 论文工作区";
  font-weight: 700;
  font-size: var(--w-size);
}

/* 对话窗的标题栏：徽记当图标，h1 当标题，两行说明压成一行小字。 */
.composer > .brand > div {
  display: flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
}

.composer > .brand h1 {
  margin: 0;
  color: var(--w-lighter);
  font-size: var(--w-size);
  font-weight: 700;
  line-height: 18px;
}

.composer > .brand p {
  margin: 0;
  color: var(--w-lighter);
  font-size: var(--w-size);
  opacity: 0.85;
  overflow: hidden;
  text-overflow: ellipsis;
}

.composer > .brand p.subtitle {
  display: none;
}

.mark,
.composer > .brand .mark {
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  border: 0;
  background: var(--w-lighter);
  color: var(--w-navy);
  font-family: var(--w-font);
  font-size: 11px;
  font-weight: 700;
  line-height: 16px;
  text-align: center;
  box-shadow: inset -1px -1px var(--w-shadow), 0 0 0 1px var(--w-darker) !important;
}

/* ---------- 7. 历史对话栏：一扇「对话」窗，列表是白色列表框 ---------- */

.rail {
  gap: 6px;
}

.rail-head {
  padding-right: 4px;
}

.rail-head h2 {
  margin: 0;
  color: var(--w-lighter);
  font-size: var(--w-size);
  font-weight: 700;
  line-height: 18px;
}

.rail-head__actions {
  margin-left: auto;
  gap: 2px;
}

/* 「+ 新对话」在标题栏里做成标题栏小钮尺寸。 */
.rail-head button,
.rail-head .ghost {
  min-height: 16px;
  padding: 0 6px;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  font-size: 11px;
  line-height: 16px;
  box-shadow: var(--w-raised) !important;
}

.rail-head .rail-close {
  width: 16px;
  min-width: 16px;
  height: 14px;
  min-height: 14px;
  padding: 0 !important;
  font-size: 0;
  background:
    url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 0h2v1h1v1h2V1h1V0h2v1H7v1H6v1H5v1h1v1h1v1h1v1H6V6H5V5H3v1H2v1H0V6h1V5h1V4h1V3H2V2H1V1H0V0z' fill='%23000'/%3E%3C/svg%3E") 4px 3px no-repeat,
    var(--w-face) !important;
  box-shadow: var(--w-raised) !important;
}

.rail > *:not(.rail-head) {
  margin-left: 4px;
  margin-right: 4px;
}

.rail-search,
#rail-search {
  margin-bottom: 2px;
}

/* 列表框：白底凹陷，条目无框，选中海军蓝。 */
.rail-list {
  gap: 0;
  padding: 2px;
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
}

.rail-item {
  padding: 2px 4px;
  border: 0 !important;
  background: transparent !important;
  color: var(--w-text) !important;
  box-shadow: none !important;
}

.rail-item:hover {
  background: var(--w-face) !important;
}

.rail-item[aria-current="true"],
.rail-item.is-current,
.rail-item.is-active,
.rail-item[aria-current="true"]:hover,
.rail-item.is-current:hover,
.rail-item.is-active:hover {
  background: var(--w-navy) !important;
  color: var(--w-lighter) !important;
}

.rail-item[aria-current="true"] .rail-item__meta,
.rail-item.is-current .rail-item__meta,
.rail-item.is-active .rail-item__meta,
.rail-item[aria-current="true"] .rail-item__title,
.rail-item.is-current .rail-item__title,
.rail-item.is-active .rail-item__title,
.rail-item.is-active .rail-item__main,
.rail-item.is-active .rail-item__main:hover {
  color: var(--w-lighter) !important;
}

.rail-item[aria-current="true"] .rail-item__more,
.rail-item.is-current .rail-item__more {
  color: var(--w-lighter) !important;
}

.rail-item__title {
  font-family: var(--w-font);
  font-size: var(--w-size);
}

.rail-item__meta {
  font-size: 11px;
}

.rail-empty,
.rail-list__label,
.rail .rail-section,
.rail .rail-group__label {
  color: var(--w-muted);
  font-size: 11px;
}

/* 弹出菜单：银灰凸起，项目悬停海军蓝。 */
.rail-menu,
.rail-dialog {
  padding: 2px;
  background: var(--w-face);
  box-shadow: var(--w-raised) !important;
}

.rail-menu__item {
  padding: 3px 18px 3px 8px;
}

.rail-menu__item:hover {
  background: var(--w-navy) !important;
  color: var(--w-lighter) !important;
}

.rail-dialog__error { color: var(--w-red); }

/* ---------- 8. 对话区 ---------- */

/* 欢迎态的大标题：宋体 16px 粗体，下面一条蚀刻线。 */
.shell:not(.has-canvas) .chat-empty__lead,
.chat-empty__lead,
.chat-empty h1 {
  font-family: var(--w-font);
  font-size: var(--w-size-xl);
  font-weight: 700;
  line-height: 1.5;
  color: var(--w-text);
}

.chat-empty__hint {
  line-height: 1.6;
}

/* 消息列表：白色凹陷框里滚动，气泡是文本块。 */
#intake-chat,
.intake-chat {
  padding: 6px;
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
}

.intake-message {
  max-width: 100%;
  margin: 0;
  padding: 4px 6px;
  font-family: var(--w-font);
  font-size: var(--w-size);
  line-height: 1.6;
  border: 0;
  animation: none;
}

/* 用户消息：银灰凸起条，靠右；助手消息：白底，左侧海军蓝细条。 */
.intake-message--user {
  max-width: 82%;
  margin-left: auto !important;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  box-shadow: var(--w-raised) !important;
}

.intake-message--assistant {
  background: var(--w-field) !important;
  color: var(--w-text) !important;
  border-left: 3px solid var(--w-navy);
  box-shadow: none !important;
}

.intake-message--pending {
  opacity: 1;
  color: var(--w-muted);
}

/* 失败消息：Win98 警告色——淡黄底、深红字，像一个提示框。 */
.intake-message--failed {
  background: var(--w-yellow) !important;
  color: var(--w-red) !important;
  border: 1px solid var(--w-text);
  box-shadow: none !important;
}

.intake-message--failed button,
.retry-send {
  color: var(--w-text) !important;
}

/* 等待中的三个方块改成沙漏文字。 */
.typing::before {
  content: "⌛ 请稍候...";
  font-family: var(--w-font);
  color: var(--w-muted);
  animation: w98-blink 1000ms steps(2, end) infinite;
}

.typing > * { display: none; }

@keyframes w98-blink {
  0%, 49% { opacity: 1; }
  50%, 100% { opacity: 0.4; }
}

/* 澄清问题：分组框（蚀刻线 + 标题），选项是开关钮。 */
.intake-questions {
  padding: 10px;
  border: 0 !important;
  background: var(--w-face) !important;
  box-shadow: var(--w-etched) !important;
}

.intake-question {
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

.intake-question__text {
  color: var(--w-text);
  font-weight: 700;
}

.intake-questions .chip {
  white-space: normal;
  text-align: left;
}

/* 欢迎页流程条：状态栏格子。 */
.welcome-steps {
  gap: 2px;
  margin-bottom: 14px;
}

.welcome-steps li {
  flex: 1 1 auto;
  padding: 2px 6px;
  background: var(--w-face);
  color: var(--w-text);
  font-size: var(--w-size);
  box-shadow: var(--w-status) !important;
}

/* 交付说明：一块分组框，三张小卡是凹陷白格。 */
.welcome-delivery,
.refine-box {
  padding: 10px 10px 8px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-etched) !important;
}

.welcome-delivery h2 {
  font-size: var(--w-size);
  font-weight: 700;
  text-align: left;
  margin-bottom: 8px;
}

.welcome-delivery__grid > div {
  padding: 8px 10px;
  border: 0;
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
}

.welcome-delivery h3 {
  font-size: var(--w-size);
  font-weight: 700;
}

.welcome-delivery__grid > div > h3::before {
  content: "■ ";
  color: var(--w-navy);
}

/* 页面级外壳（需求面板、交付面板）不描边。 */
.intake-panel,
.intake-summary-panel,
.intake-delivery-panel,
.brief-expect,
.brief-extras,
.brief-settings,
.generation-details {
  border: 0;
  background: transparent;
  box-shadow: none !important;
}

.intake-panel,
.intake-summary-panel,
.intake-delivery-panel {
  padding: 6px 2px;
}

/* 有画布时对话区顶部那排（折叠钮 / 标题 / 新对话）当工具栏。 */
.intake-heading {
  padding: 2px 0 4px;
  border-bottom: 1px solid var(--w-shadow);
  box-shadow: 0 1px var(--w-lighter) !important;
}

.intake-heading h2 {
  font-size: var(--w-size);
  font-weight: 700;
}

/* ---------- 9. 工作区：Win98 选项卡控件 ---------- */

.canvas-navigation,
.canvas-rail {
  background: transparent;
  margin: 0 4px;
}

.canvas-steps {
  gap: 0;
  margin: 0 0 -2px;
  padding-left: 2px;
  position: relative;
  z-index: 2;
}

.canvas-step {
  flex: 0 1 auto;
  gap: 6px;
  padding: 3px 12px 4px;
  border: 0;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  font-family: var(--w-font);
  font-size: var(--w-size);
  box-shadow: inset -1px 0 var(--w-darker), inset 1px 1px var(--w-light), inset -2px 0 var(--w-shadow), inset 2px 2px var(--w-lighter) !important;
  cursor: default;
}

.canvas-step__no {
  font-family: var(--w-font);
  font-size: var(--w-size);
}

.canvas-step[aria-selected="true"],
.canvas-step.is-current {
  margin-top: -2px;
  margin-left: -2px;
  padding-bottom: 6px;
  position: relative;
  z-index: 3;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  font-weight: 700;
}

.canvas-step.is-done {
  background: var(--w-face) !important;
  color: var(--w-text) !important;
}

.canvas-step.is-done .canvas-step__no::before {
  content: "✓ ";
  color: var(--w-green);
}

.canvas-step[aria-disabled="true"],
.canvas-step:disabled {
  background: var(--w-face) !important;
  color: var(--w-disabled) !important;
  opacity: 1;
  text-shadow: 1px 1px 0 var(--w-lighter) !important;
}

.canvas-step.is-available:hover {
  background: var(--w-face) !important;
  color: var(--w-navy) !important;
}

/* 页签下面的面板：凸起的银灰板，和当前页签连成一片。 */
.canvas-view {
  margin: 0 4px 4px;
  padding: 10px;
  background: var(--w-face);
  box-shadow: var(--w-raised) !important;
}

/* ---------- 10. 写作方案卡片：分组框 ---------- */

.brief-card,
.plan-section,
.plan-taxonomy,
.plan-card {
  padding: 10px 10px 8px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-etched) !important;
}

.brief-head h2,
.plan-section__title,
.brief-card__label,
.plan-card__label {
  font-family: var(--w-font);
  font-size: var(--w-size);
  font-weight: 700;
  color: var(--w-text);
  letter-spacing: 0;
}

.brief-card__value,
.plan-card__domain,
.plan-outline__heading,
.plan-keywords,
.plan-taxonomy__summary {
  font-family: var(--w-font);
  font-size: var(--w-size);
}

.brief-card__req,
.brief-card__req::after {
  color: var(--w-red);
}

/* 章节骨架：白色列表框里的条目。 */
.plan-outline__item {
  padding: 3px 6px;
  border: 0 !important;
  background: var(--w-field) !important;
  box-shadow: none !important;
}

.plan-outline__item::marker {
  font-family: var(--w-font);
}

.plan-taxonomy__count {
  padding: 0 4px;
  background: var(--w-navy);
  color: var(--w-lighter);
  font-size: 11px;
}

.brief-settings__strip,
.brief-settings__group {
  background: transparent;
}

.brief-footer {
  border-top: 1px solid var(--w-shadow);
  box-shadow: inset 0 1px var(--w-lighter) !important;
  background: transparent;
}

/* ---------- 11. 生成中 ---------- */

.run-panel,
.run-outline,
.run-detail {
  padding: 10px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-etched) !important;
}

.run-head h2,
.delivery-head h2 {
  font-size: var(--w-size);
  font-weight: 700;
}

.run-elapsed {
  font-family: var(--w-font);
  font-size: var(--w-size);
  color: var(--w-navy);
  font-weight: 700;
}

/* 阶段行：复选框式——方块 + 文字；进行中闪烁、完成打勾。 */
.run-stage,
.run-chapter {
  padding: 2px 6px;
  border: 0 !important;
  background: transparent !important;
  font-family: var(--w-font);
  font-size: var(--w-size);
  box-shadow: none !important;
}

.run-stage__dot {
  width: 11px;
  height: 11px;
  border: 0;
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
}

.run-stage.is-active .run-stage__dot,
.run-stage[data-state="running"] .run-stage__dot {
  background: var(--w-navy);
  animation: w98-blink 800ms steps(2, end) infinite;
}

.run-stage.is-done .run-stage__dot,
.run-stage[data-state="done"] .run-stage__dot {
  background:
    url("data:image/svg+xml;charset=utf-8,%3Csvg width='7' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M7 0H6v1H5v1H4v1H3v1H2V3H1V2H0v3h1v1h1v1h1V6h1V5h1V4h1V3h1V0z' fill='%23000'/%3E%3C/svg%3E") center no-repeat,
    var(--w-field);
}

.run-stage.is-active,
.run-stage[data-state="running"] {
  color: var(--w-navy) !important;
  font-weight: 700;
}

.run-stage.is-done,
.run-stage[data-state="done"],
.run-chapter.is-done {
  color: var(--w-text) !important;
}

.run-chapter__mark {
  font-family: var(--w-font);
  color: var(--w-green);
}

.run-outline__count {
  font-family: var(--w-font);
  font-size: var(--w-size);
}

/* 进度条：白色凹槽 + 海军蓝分段方块（Win98 复制文件那种）。 */
.run-budget__track,
progress {
  height: 20px;
  padding: 2px;
  border: 0;
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
  appearance: none;
}

.run-budget__fill,
progress::-webkit-progress-value,
progress::-moz-progress-bar {
  height: 100%;
  background: repeating-linear-gradient(90deg, var(--w-navy) 0 10px, transparent 10px 12px);
  transition: none !important;
}

progress::-webkit-progress-bar { background: var(--w-field); }

/* ---------- 12. 论文交付 ---------- */

.preview-frame {
  padding: 0;
  border: 0;
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
}

.preview,
.preview-pages,
.preview-pages__status {
  font-family: var(--w-font-read);
}

.preview-pages__tool {
  font-family: var(--w-font);
  font-size: var(--w-size);
}

/* 质检结果：分组框，标题绿字；未通过黄底提示框。 */
.quality-box {
  padding: 8px 10px;
  border: 0;
  background: var(--w-face) !important;
  color: var(--w-text);
  box-shadow: var(--w-etched) !important;
}

.quality-box[data-status="needs_revision"],
.quality-box.is-warning {
  background: var(--w-yellow) !important;
  border: 1px solid var(--w-text);
  box-shadow: none !important;
}

.intake-downloads a {
  min-height: 23px;
}

.meta,
.notice {
  padding: 6px 8px;
  border: 1px solid var(--w-text);
  background: var(--w-yellow);
  color: var(--w-text);
  box-shadow: none !important;
}

/* ---------- 13. 旧工作台与表单卡片 ---------- */

.badge {
  min-height: 0;
  padding: 0 4px;
  background: var(--w-face);
  font-size: 11px;
  box-shadow: var(--w-status) !important;
}

.skill-card,
.phase-card,
.gate-card,
.paper-card,
.score-card,
.collection-card,
.verification-report,
.artifact-strip {
  padding: 10px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-etched) !important;
}

/* ---------- 14. 登录弹窗 #auth-dialog 与右上角角标 ---------- */

#auth-dialog,
.auth-dialog {
  padding: 3px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-window) !important;
}

#auth-widget {
  font-family: var(--w-font) !important;
  font-size: var(--w-size) !important;
  color: var(--w-text) !important;
}

#auth-widget .auth-btn {
  min-height: 21px !important;
  padding: 1px 8px !important;
  border: 0 !important;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  font-family: var(--w-font) !important;
  font-size: var(--w-size) !important;
  box-shadow: var(--w-raised) !important;
}

#auth-widget .auth-btn:hover {
  background: var(--w-face) !important;
}

#auth-widget .auth-btn:active {
  box-shadow: var(--w-pressed) !important;
}

#auth-widget .auth-avatar {
  width: 14px !important;
  height: 14px !important;
  border-radius: 0 !important;
  background: var(--w-navy) !important;
  color: var(--w-lighter) !important;
  font-size: 10px !important;
}

/* ---------- 15. login.html：一个居中的对话框 ---------- */

body[data-auth-page="standalone"] .card {
  padding: 3px 3px 12px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-window) !important;
}

body[data-auth-page="standalone"] .card > *:not(.brand) {
  margin-left: 10px;
  margin-right: 10px;
}

body[data-auth-page="standalone"] .brand {
  position: relative;
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0 0 12px;
  padding: 2px 4px;
  border: 0;
  background: linear-gradient(90deg, var(--w-navy), var(--w-navy-light));
  color: var(--w-lighter);
}

body[data-auth-page="standalone"] .brand .mark {
  width: 16px;
  height: 16px;
  border: 0;
  background: var(--w-lighter);
  color: var(--w-navy);
  font: 700 11px/16px var(--w-font);
  text-align: center;
  box-shadow: inset -1px -1px var(--w-shadow), 0 0 0 1px var(--w-darker) !important;
}

body[data-auth-page="standalone"] .brand .name {
  color: var(--w-lighter);
  font-family: var(--w-font);
  font-size: var(--w-size);
  font-weight: 700;
}

body[data-auth-page="standalone"] h1 {
  font-size: var(--w-size-lg);
  font-weight: 700;
  margin-top: 4px;
}

body[data-auth-page="standalone"] .sub,
body[data-auth-page="standalone"] .foot,
body[data-auth-page="standalone"] .otp-description {
  color: var(--w-muted);
  font-size: var(--w-size);
}

body[data-auth-page="standalone"] label {
  font-family: var(--w-font);
  font-size: var(--w-size);
  color: var(--w-text);
}

body[data-auth-page="standalone"] .toggle a,
body[data-auth-page="standalone"] .foot a {
  color: var(--w-link);
}

body[data-auth-page="standalone"] .notice {
  padding: 6px 8px;
}

body[data-auth-page="standalone"] .msg.error { color: var(--w-red); }
body[data-auth-page="standalone"] .msg.ok { color: var(--w-green); }

/* ---------- 16. admin.html：左侧一扇导航窗，右侧一扇主窗 ---------- */

.admin-shell {
  gap: 8px;
  padding: 8px;
  background: var(--w-desktop);
}

.admin-shell .rail {
  padding: 3px 3px 8px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-window) !important;
}

.admin-shell .rail > *:not(.brand) {
  margin-left: 6px;
  margin-right: 6px;
}

.admin-shell .brand {
  margin: 0 0 12px;
  padding: 2px 4px;
  background: linear-gradient(90deg, var(--w-navy), var(--w-navy-light));
  color: var(--w-lighter) !important;
  font-family: var(--w-font) !important;
  font-size: var(--w-size) !important;
  font-weight: 700;
  letter-spacing: 0;
}

.admin-shell .brand span {
  color: var(--w-lighter) !important;
  font: 700 12px var(--w-font) !important;
}

.admin-shell main {
  margin: 0;
  padding: 3px 3px 12px;
  background: var(--w-face);
  box-shadow: var(--w-window) !important;
}

/* 主窗的标题栏用 page-head 前面加不了伪元素（page-head 是 flex），改把 page-head 做成标题栏。 */
.admin-shell .page-head {
  margin: 0 0 14px;
  padding: 2px 4px;
  background: linear-gradient(90deg, var(--w-navy), var(--w-navy-light));
  color: var(--w-lighter);
}

.admin-shell .page-head h1,
.admin-shell .page-head p,
.admin-shell .page-head .eyebrow {
  color: var(--w-lighter) !important;
  font-family: var(--w-font) !important;
  font-size: var(--w-size) !important;
  margin: 0;
  letter-spacing: 0;
}

.admin-shell .page-head h1 { font-weight: 700; }

.admin-shell main > *:not(.page-head) {
  margin-left: 10px;
  margin-right: 10px;
}

.admin-shell h1,
.admin-shell h2,
.admin-shell .balance-block strong,
.admin-shell .empty-icon {
  font-family: var(--w-font) !important;
  letter-spacing: 0;
}

.admin-shell h2 { font-size: var(--w-size) !important; font-weight: 700; }
.admin-shell .balance-block strong { font-size: var(--w-size-xl) !important; font-weight: 700; }
.admin-shell .empty-icon { font-size: 32px !important; color: var(--w-shadow); }

.admin-shell .eyebrow,
.admin-shell .rail-note,
.admin-shell .hint,
.admin-shell .muted {
  color: var(--w-muted);
  font-size: var(--w-size);
  letter-spacing: 0;
}

.admin-shell .rail-link {
  padding: 3px 8px;
  border: 0;
  background: var(--w-field);
  color: var(--w-text);
  font-size: var(--w-size);
  box-shadow: none !important;
}

.admin-shell .rail-link.active {
  background: var(--w-navy) !important;
  color: var(--w-lighter) !important;
  font-weight: 400;
}

.admin-shell .panel,
.admin-shell .policy-strip,
.admin-shell .balance-block {
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-etched) !important;
}

.admin-shell .policy-strip {
  background: var(--w-yellow);
  border: 1px solid var(--w-text);
  box-shadow: none !important;
}

.admin-shell .period,
.admin-shell .event,
.admin-shell .history-row {
  border: 0;
  border-bottom: 1px solid var(--w-shadow);
  background: transparent;
  box-shadow: 0 1px var(--w-lighter) !important;
}

.admin-shell .table-wrap {
  background: var(--w-field);
  box-shadow: var(--w-sunken) !important;
}

.admin-shell thead th {
  background: var(--w-face);
  color: var(--w-text);
  font-size: var(--w-size);
  font-weight: 400;
  letter-spacing: 0;
  box-shadow: var(--w-raised) !important;
  border-bottom: 0;
}

.admin-shell td { font-size: var(--w-size); }
.admin-shell tr.selected { background: var(--w-navy); color: var(--w-lighter); }
.admin-shell tr.selected td, .admin-shell tr.selected .user-email { color: var(--w-lighter); }
.admin-shell tr:hover:not(.selected) { background: var(--w-light); }

.admin-shell .badge {
  background: var(--w-face);
  color: var(--w-text);
  box-shadow: var(--w-status) !important;
}

.admin-shell .badge.active { color: var(--w-green) !important; }
.admin-shell .badge.expired,
.admin-shell .badge.cancelled { color: var(--w-red) !important; }

.admin-shell .actions-tabs {
  border: 0;
  gap: 0;
  padding: 0 4px;
  margin-bottom: -2px;
}

.admin-shell .actions-tabs button {
  border: 0;
  padding: 3px 12px;
  background: var(--w-face);
  color: var(--w-text);
  font-size: var(--w-size);
  box-shadow: inset -1px 0 var(--w-darker), inset 1px 1px var(--w-light), inset -2px 0 var(--w-shadow), inset 2px 2px var(--w-lighter) !important;
}

.admin-shell .actions-tabs .selected {
  margin-top: -2px;
  padding-bottom: 5px;
  position: relative;
  z-index: 2;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  font-weight: 700;
}

.admin-shell .tab-panel {
  background: var(--w-face);
  box-shadow: var(--w-raised) !important;
}

.admin-shell .manage {
  min-height: 21px;
  padding: 1px 8px;
  border: 0;
  background: var(--w-face);
  color: var(--w-text);
  font-size: var(--w-size);
  font-weight: 400;
  box-shadow: var(--w-raised) !important;
}

.admin-shell .message:not(:empty) {
  padding: 6px 8px;
  border: 1px solid var(--w-text);
  background: var(--w-yellow);
  color: var(--w-text);
}

.admin-shell .message.error,
.admin-shell .minus,
.admin-shell .cancel-section summary { color: var(--w-red); }
.admin-shell .plus { color: var(--w-green); }

.admin-shell .button.danger,
.admin-shell .danger {
  color: var(--w-red) !important;
}

/* ---------- 17. 论文与长文回归系统黑体 ---------- */

.paper-content,
.paper-content p,
.paper-content li,
.preview,
.preview-pages {
  font-family: var(--w-font-read);
}

/* ---------- 18. 响应式与无障碍 ---------- */

@media (max-width: 720px) {
  .shell { gap: 6px; padding: 6px; }
  .shell:not(.has-canvas) > .composer { margin: 6px 0; }
  .intake-message--user { max-width: 94%; }
}

@media (prefers-reduced-motion: reduce) {
  .typing::before,
  .run-stage__dot { animation: none !important; }
}

/* ---------- 19. 首轮截图复核后的修补 ---------- */

/* 三扇窗的银灰底被 intake.css 里更长的选择器（.shell.has-canvas > .composer 等）压掉了。 */
.shell > .composer,
.shell.has-canvas > .composer,
.shell:not(.has-canvas) > .composer,
.shell > .workspace,
.shell.has-canvas > .workspace,
.shell > .rail,
.shell.rail-open > .rail {
  background: var(--w-face) !important;
}

/* 徽记：index.html 内联的 .mark 尺寸更大，这里压死成 16px 的小图标。 */
.mark,
.brand .mark,
.composer > .brand .mark {
  width: 16px !important;
  height: 16px !important;
  min-width: 0 !important;
  font-size: 11px !important;
  line-height: 16px !important;
}

/* 欢迎态里 .intake-heading 是空壳，不该画工具栏分隔线；有画布时才画。 */
.intake-heading {
  border-bottom: 0;
  box-shadow: none !important;
  padding: 0;
}

.shell.has-canvas .intake-heading {
  padding: 2px 0 4px;
  border-bottom: 1px solid var(--w-shadow);
  box-shadow: 0 1px var(--w-lighter) !important;
}

/* 输入框里的文字与占位符跟界面同一字号。 */
.composer-box textarea,
.composer-box input,
#intake-input {
  font-family: var(--w-font) !important;
  font-size: var(--w-size) !important;
  line-height: 1.6 !important;
}

/* 选片的选中态在 intake.js 里是 .is-on：按下 + 棋盘格；模板选片文字用黑。 */
.chip.is-on,
.chip.is-on:hover {
  background: var(--w-checker) !important;
  color: var(--w-text) !important;
  box-shadow: var(--w-pressed) !important;
  padding: 3px 11px 1px 13px;
  border: 0 !important;
}

.chip--example,
.shell:not(.has-canvas) .chip--example,
.chip--example:hover:not(:disabled) {
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  border: 0 !important;
}

.chip:hover:not(:disabled) {
  border: 0 !important;
  color: var(--w-text);
}

.chip--recommended::before {
  content: "★ ";
  color: var(--w-navy);
}

/* 「还有 N 个问题待答」：黄底黑边的工具提示。 */
.brief-progress {
  padding: 2px 6px;
  background: var(--w-yellow);
  color: var(--w-text);
  border: 1px solid var(--w-text);
}

.brief-progress.is-ready {
  background: var(--w-face);
  border-color: transparent;
}

/* 管理后台的标题栏压成一行：小标隐藏，说明文字缩在标题后面。 */
.admin-shell .page-head { align-items: center; }
.admin-shell .page-head .eyebrow { display: none; }
.admin-shell .page-head > div { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
.admin-shell .page-head p { opacity: 0.85; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.admin-shell .page-head .button { min-height: 18px; padding: 0 8px; font-size: 11px; }

/* 登录页输入框按标准控件高度。 */
body[data-auth-page="standalone"] input:not([data-otp-digit]) {
  min-height: 0;
  height: 23px;
  padding: 1px 4px;
}

body[data-auth-page="standalone"] .password-field input {
  padding-right: 28px;
}

/* 徽记字形：海军蓝小方块白色 P，别用内联的大号衬线。 */
.mark,
.brand .mark,
.composer > .brand .mark,
body[data-auth-page="standalone"] .brand .mark {
  background: var(--w-navy) !important;
  color: var(--w-lighter) !important;
  font: 700 10px/16px var(--w-font) !important;
  box-shadow: 0 0 0 1px var(--w-lighter) !important;
}

#brief-progress,
.brief-progress:not(.is-ready) {
  padding: 2px 6px;
  background: var(--w-yellow) !important;
  color: var(--w-text) !important;
  border: 1px solid var(--w-text);
}
:root {
  --w-cur-arrow: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='11' height='17' shape-rendering='crispEdges'><path fill='%23fff' d='M1 2h1v1h-1zM1 3h1v1h-1zM2 3h1v1h-1zM1 4h1v1h-1zM2 4h1v1h-1zM3 4h1v1h-1zM1 5h1v1h-1zM2 5h1v1h-1zM3 5h1v1h-1zM4 5h1v1h-1zM1 6h1v1h-1zM2 6h1v1h-1zM3 6h1v1h-1zM4 6h1v1h-1zM5 6h1v1h-1zM1 7h1v1h-1zM2 7h1v1h-1zM3 7h1v1h-1zM4 7h1v1h-1zM5 7h1v1h-1zM6 7h1v1h-1zM1 8h1v1h-1zM2 8h1v1h-1zM3 8h1v1h-1zM4 8h1v1h-1zM5 8h1v1h-1zM6 8h1v1h-1zM7 8h1v1h-1zM1 9h1v1h-1zM2 9h1v1h-1zM3 9h1v1h-1zM4 9h1v1h-1zM5 9h1v1h-1zM6 9h1v1h-1zM7 9h1v1h-1zM8 9h1v1h-1zM1 10h1v1h-1zM2 10h1v1h-1zM3 10h1v1h-1zM4 10h1v1h-1zM5 10h1v1h-1zM1 11h1v1h-1zM2 11h1v1h-1zM4 11h1v1h-1zM5 11h1v1h-1zM1 12h1v1h-1zM5 12h1v1h-1zM6 12h1v1h-1zM5 13h1v1h-1zM6 13h1v1h-1zM6 14h1v1h-1zM7 14h1v1h-1zM6 15h1v1h-1zM7 15h1v1h-1z'/><path fill='%23000' d='M0 0h1v1h-1zM0 1h1v1h-1zM1 1h1v1h-1zM0 2h1v1h-1zM2 2h1v1h-1zM0 3h1v1h-1zM3 3h1v1h-1zM0 4h1v1h-1zM4 4h1v1h-1zM0 5h1v1h-1zM5 5h1v1h-1zM0 6h1v1h-1zM6 6h1v1h-1zM0 7h1v1h-1zM7 7h1v1h-1zM0 8h1v1h-1zM8 8h1v1h-1zM0 9h1v1h-1zM9 9h1v1h-1zM0 10h1v1h-1zM6 10h1v1h-1zM7 10h1v1h-1zM8 10h1v1h-1zM9 10h1v1h-1zM10 10h1v1h-1zM0 11h1v1h-1zM3 11h1v1h-1zM6 11h1v1h-1zM0 12h1v1h-1zM2 12h1v1h-1zM4 12h1v1h-1zM7 12h1v1h-1zM0 13h1v1h-1zM1 13h1v1h-1zM4 13h1v1h-1zM7 13h1v1h-1zM0 14h1v1h-1zM5 14h1v1h-1zM8 14h1v1h-1zM5 15h1v1h-1zM8 15h1v1h-1zM6 16h1v1h-1zM7 16h1v1h-1z'/></svg>") 0 0;
  --w-cur-hand: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='17' shape-rendering='crispEdges'><path fill='%23fff' d='M5 1h1v1h-1zM6 1h1v1h-1zM5 2h1v1h-1zM6 2h1v1h-1zM5 3h1v1h-1zM6 3h1v1h-1zM5 4h1v1h-1zM6 4h1v1h-1zM5 5h1v1h-1zM6 5h1v1h-1zM8 5h1v1h-1zM9 5h1v1h-1zM5 6h1v1h-1zM6 6h1v1h-1zM8 6h1v1h-1zM9 6h1v1h-1zM11 6h1v1h-1zM12 6h1v1h-1zM1 7h1v1h-1zM2 7h1v1h-1zM5 7h1v1h-1zM6 7h1v1h-1zM8 7h1v1h-1zM9 7h1v1h-1zM11 7h1v1h-1zM12 7h1v1h-1zM1 8h1v1h-1zM2 8h1v1h-1zM3 8h1v1h-1zM5 8h1v1h-1zM6 8h1v1h-1zM7 8h1v1h-1zM8 8h1v1h-1zM9 8h1v1h-1zM10 8h1v1h-1zM11 8h1v1h-1zM12 8h1v1h-1zM2 9h1v1h-1zM3 9h1v1h-1zM5 9h1v1h-1zM6 9h1v1h-1zM7 9h1v1h-1zM8 9h1v1h-1zM9 9h1v1h-1zM10 9h1v1h-1zM11 9h1v1h-1zM12 9h1v1h-1zM3 10h1v1h-1zM4 10h1v1h-1zM5 10h1v1h-1zM6 10h1v1h-1zM7 10h1v1h-1zM8 10h1v1h-1zM9 10h1v1h-1zM10 10h1v1h-1zM11 10h1v1h-1zM3 11h1v1h-1zM4 11h1v1h-1zM5 11h1v1h-1zM6 11h1v1h-1zM7 11h1v1h-1zM8 11h1v1h-1zM9 11h1v1h-1zM10 11h1v1h-1zM11 11h1v1h-1zM4 12h1v1h-1zM5 12h1v1h-1zM6 12h1v1h-1zM7 12h1v1h-1zM8 12h1v1h-1zM9 12h1v1h-1zM10 12h1v1h-1zM4 13h1v1h-1zM5 13h1v1h-1zM6 13h1v1h-1zM7 13h1v1h-1zM8 13h1v1h-1zM9 13h1v1h-1zM10 13h1v1h-1zM5 14h1v1h-1zM6 14h1v1h-1zM7 14h1v1h-1zM8 14h1v1h-1zM9 14h1v1h-1zM5 15h1v1h-1zM6 15h1v1h-1zM7 15h1v1h-1zM8 15h1v1h-1zM9 15h1v1h-1z'/><path fill='%23000' d='M5 0h1v1h-1zM6 0h1v1h-1zM4 1h1v1h-1zM7 1h1v1h-1zM4 2h1v1h-1zM7 2h1v1h-1zM4 3h1v1h-1zM7 3h1v1h-1zM4 4h1v1h-1zM7 4h1v1h-1zM8 4h1v1h-1zM9 4h1v1h-1zM4 5h1v1h-1zM7 5h1v1h-1zM10 5h1v1h-1zM11 5h1v1h-1zM12 5h1v1h-1zM1 6h1v1h-1zM2 6h1v1h-1zM4 6h1v1h-1zM7 6h1v1h-1zM10 6h1v1h-1zM13 6h1v1h-1zM0 7h1v1h-1zM3 7h1v1h-1zM4 7h1v1h-1zM7 7h1v1h-1zM10 7h1v1h-1zM13 7h1v1h-1zM0 8h1v1h-1zM4 8h1v1h-1zM13 8h1v1h-1zM1 9h1v1h-1zM4 9h1v1h-1zM13 9h1v1h-1zM2 10h1v1h-1zM12 10h1v1h-1zM2 11h1v1h-1zM12 11h1v1h-1zM3 12h1v1h-1zM11 12h1v1h-1zM3 13h1v1h-1zM11 13h1v1h-1zM4 14h1v1h-1zM10 14h1v1h-1zM4 15h1v1h-1zM10 15h1v1h-1zM4 16h1v1h-1zM5 16h1v1h-1zM6 16h1v1h-1zM7 16h1v1h-1zM8 16h1v1h-1zM9 16h1v1h-1zM10 16h1v1h-1z'/></svg>") 5 0;
  --w-cur-text: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='5' height='16' shape-rendering='crispEdges'><path fill='%23fff' d=''/><path fill='%23000' d='M0 0h1v1h-1zM1 0h1v1h-1zM3 0h1v1h-1zM4 0h1v1h-1zM2 1h1v1h-1zM2 2h1v1h-1zM2 3h1v1h-1zM2 4h1v1h-1zM2 5h1v1h-1zM2 6h1v1h-1zM2 7h1v1h-1zM2 8h1v1h-1zM2 9h1v1h-1zM2 10h1v1h-1zM2 11h1v1h-1zM2 12h1v1h-1zM2 13h1v1h-1zM2 14h1v1h-1zM0 15h1v1h-1zM1 15h1v1h-1zM3 15h1v1h-1zM4 15h1v1h-1z'/></svg>") 3 8;
  --w-cur-wait: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='13' height='17' shape-rendering='crispEdges'><path fill='%23fff' d='M2 2h1v1h-1zM3 2h1v1h-1zM4 2h1v1h-1zM5 2h1v1h-1zM6 2h1v1h-1zM7 2h1v1h-1zM8 2h1v1h-1zM9 2h1v1h-1zM10 2h1v1h-1zM2 3h1v1h-1zM3 3h1v1h-1zM4 3h1v1h-1zM5 3h1v1h-1zM6 3h1v1h-1zM7 3h1v1h-1zM8 3h1v1h-1zM9 3h1v1h-1zM10 3h1v1h-1zM2 4h1v1h-1zM3 4h1v1h-1zM4 4h1v1h-1zM5 4h1v1h-1zM6 4h1v1h-1zM7 4h1v1h-1zM8 4h1v1h-1zM9 4h1v1h-1zM10 4h1v1h-1zM3 5h1v1h-1zM4 5h1v1h-1zM5 5h1v1h-1zM6 5h1v1h-1zM7 5h1v1h-1zM8 5h1v1h-1zM9 5h1v1h-1zM4 6h1v1h-1zM5 6h1v1h-1zM6 6h1v1h-1zM7 6h1v1h-1zM8 6h1v1h-1zM5 7h1v1h-1zM6 7h1v1h-1zM7 7h1v1h-1zM6 8h1v1h-1zM5 9h1v1h-1zM7 9h1v1h-1zM4 10h1v1h-1zM5 10h1v1h-1zM7 10h1v1h-1zM8 10h1v1h-1zM3 11h1v1h-1zM4 11h1v1h-1zM5 11h1v1h-1zM7 11h1v1h-1zM8 11h1v1h-1zM9 11h1v1h-1zM2 12h1v1h-1zM3 12h1v1h-1zM4 12h1v1h-1zM5 12h1v1h-1zM7 12h1v1h-1zM8 12h1v1h-1zM9 12h1v1h-1zM10 12h1v1h-1zM2 13h1v1h-1zM10 13h1v1h-1z'/><path fill='%23000' d='M0 0h1v1h-1zM1 0h1v1h-1zM2 0h1v1h-1zM3 0h1v1h-1zM4 0h1v1h-1zM5 0h1v1h-1zM6 0h1v1h-1zM7 0h1v1h-1zM8 0h1v1h-1zM9 0h1v1h-1zM10 0h1v1h-1zM11 0h1v1h-1zM12 0h1v1h-1zM0 1h1v1h-1zM1 1h1v1h-1zM2 1h1v1h-1zM3 1h1v1h-1zM4 1h1v1h-1zM5 1h1v1h-1zM6 1h1v1h-1zM7 1h1v1h-1zM8 1h1v1h-1zM9 1h1v1h-1zM10 1h1v1h-1zM11 1h1v1h-1zM12 1h1v1h-1zM1 2h1v1h-1zM11 2h1v1h-1zM1 3h1v1h-1zM11 3h1v1h-1zM1 4h1v1h-1zM11 4h1v1h-1zM2 5h1v1h-1zM10 5h1v1h-1zM3 6h1v1h-1zM9 6h1v1h-1zM4 7h1v1h-1zM8 7h1v1h-1zM5 8h1v1h-1zM7 8h1v1h-1zM4 9h1v1h-1zM6 9h1v1h-1zM8 9h1v1h-1zM3 10h1v1h-1zM6 10h1v1h-1zM9 10h1v1h-1zM2 11h1v1h-1zM6 11h1v1h-1zM10 11h1v1h-1zM1 12h1v1h-1zM6 12h1v1h-1zM11 12h1v1h-1zM1 13h1v1h-1zM3 13h1v1h-1zM4 13h1v1h-1zM5 13h1v1h-1zM6 13h1v1h-1zM7 13h1v1h-1zM8 13h1v1h-1zM9 13h1v1h-1zM11 13h1v1h-1zM1 14h1v1h-1zM2 14h1v1h-1zM3 14h1v1h-1zM4 14h1v1h-1zM5 14h1v1h-1zM6 14h1v1h-1zM7 14h1v1h-1zM8 14h1v1h-1zM9 14h1v1h-1zM10 14h1v1h-1zM11 14h1v1h-1zM0 15h1v1h-1zM1 15h1v1h-1zM2 15h1v1h-1zM3 15h1v1h-1zM4 15h1v1h-1zM5 15h1v1h-1zM6 15h1v1h-1zM7 15h1v1h-1zM8 15h1v1h-1zM9 15h1v1h-1zM10 15h1v1h-1zM11 15h1v1h-1zM12 15h1v1h-1zM0 16h1v1h-1zM1 16h1v1h-1zM2 16h1v1h-1zM3 16h1v1h-1zM4 16h1v1h-1zM5 16h1v1h-1zM6 16h1v1h-1zM7 16h1v1h-1zM8 16h1v1h-1zM9 16h1v1h-1zM10 16h1v1h-1zM11 16h1v1h-1zM12 16h1v1h-1z'/></svg>") 6 8;
  --w-cur-no: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='15' height='16' shape-rendering='crispEdges'><path fill='%23fff' d='M5 1h1v1h-1zM6 1h1v1h-1zM7 1h1v1h-1zM8 1h1v1h-1zM9 1h1v1h-1zM3 2h1v1h-1zM4 2h1v1h-1zM5 2h1v1h-1zM6 2h1v1h-1zM7 2h1v1h-1zM8 2h1v1h-1zM9 2h1v1h-1zM10 2h1v1h-1zM11 2h1v1h-1zM2 3h1v1h-1zM3 3h1v1h-1zM4 3h1v1h-1zM5 3h1v1h-1zM9 3h1v1h-1zM10 3h1v1h-1zM11 3h1v1h-1zM12 3h1v1h-1zM2 4h1v1h-1zM3 4h1v1h-1zM4 4h1v1h-1zM10 4h1v1h-1zM11 4h1v1h-1zM12 4h1v1h-1zM1 5h1v1h-1zM2 5h1v1h-1zM3 5h1v1h-1zM7 5h1v1h-1zM8 5h1v1h-1zM11 5h1v1h-1zM12 5h1v1h-1zM13 5h1v1h-1zM1 6h1v1h-1zM2 6h1v1h-1zM6 6h1v1h-1zM7 6h1v1h-1zM8 6h1v1h-1zM9 6h1v1h-1zM12 6h1v1h-1zM13 6h1v1h-1zM1 7h1v1h-1zM2 7h1v1h-1zM5 7h1v1h-1zM6 7h1v1h-1zM7 7h1v1h-1zM8 7h1v1h-1zM9 7h1v1h-1zM10 7h1v1h-1zM13 7h1v1h-1zM1 8h1v1h-1zM2 8h1v1h-1zM5 8h1v1h-1zM6 8h1v1h-1zM7 8h1v1h-1zM8 8h1v1h-1zM9 8h1v1h-1zM10 8h1v1h-1zM13 8h1v1h-1zM1 9h1v1h-1zM2 9h1v1h-1zM3 9h1v1h-1zM6 9h1v1h-1zM7 9h1v1h-1zM8 9h1v1h-1zM9 9h1v1h-1zM13 9h1v1h-1zM1 10h1v1h-1zM2 10h1v1h-1zM3 10h1v1h-1zM4 10h1v1h-1zM7 10h1v1h-1zM8 10h1v1h-1zM12 10h1v1h-1zM13 10h1v1h-1zM2 11h1v1h-1zM3 11h1v1h-1zM4 11h1v1h-1zM5 11h1v1h-1zM11 11h1v1h-1zM12 11h1v1h-1zM2 12h1v1h-1zM3 12h1v1h-1zM4 12h1v1h-1zM5 12h1v1h-1zM9 12h1v1h-1zM10 12h1v1h-1zM11 12h1v1h-1zM12 12h1v1h-1zM3 13h1v1h-1zM4 13h1v1h-1zM5 13h1v1h-1zM6 13h1v1h-1zM7 13h1v1h-1zM8 13h1v1h-1zM9 13h1v1h-1zM10 13h1v1h-1zM11 13h1v1h-1zM5 14h1v1h-1zM6 14h1v1h-1zM7 14h1v1h-1zM8 14h1v1h-1zM9 14h1v1h-1z'/><path fill='%23000' d='M5 0h1v1h-1zM6 0h1v1h-1zM7 0h1v1h-1zM8 0h1v1h-1zM9 0h1v1h-1zM3 1h1v1h-1zM4 1h1v1h-1zM10 1h1v1h-1zM11 1h1v1h-1zM2 2h1v1h-1zM12 2h1v1h-1zM1 3h1v1h-1zM6 3h1v1h-1zM7 3h1v1h-1zM8 3h1v1h-1zM13 3h1v1h-1zM1 4h1v1h-1zM5 4h1v1h-1zM6 4h1v1h-1zM7 4h1v1h-1zM8 4h1v1h-1zM9 4h1v1h-1zM13 4h1v1h-1zM0 5h1v1h-1zM4 5h1v1h-1zM5 5h1v1h-1zM6 5h1v1h-1zM9 5h1v1h-1zM10 5h1v1h-1zM14 5h1v1h-1zM0 6h1v1h-1zM3 6h1v1h-1zM4 6h1v1h-1zM5 6h1v1h-1zM10 6h1v1h-1zM11 6h1v1h-1zM14 6h1v1h-1zM0 7h1v1h-1zM3 7h1v1h-1zM4 7h1v1h-1zM11 7h1v1h-1zM12 7h1v1h-1zM14 7h1v1h-1zM0 8h1v1h-1zM3 8h1v1h-1zM4 8h1v1h-1zM11 8h1v1h-1zM12 8h1v1h-1zM14 8h1v1h-1zM0 9h1v1h-1zM4 9h1v1h-1zM5 9h1v1h-1zM10 9h1v1h-1zM11 9h1v1h-1zM12 9h1v1h-1zM14 9h1v1h-1zM0 10h1v1h-1zM5 10h1v1h-1zM6 10h1v1h-1zM9 10h1v1h-1zM10 10h1v1h-1zM11 10h1v1h-1zM14 10h1v1h-1zM1 11h1v1h-1zM6 11h1v1h-1zM7 11h1v1h-1zM8 11h1v1h-1zM9 11h1v1h-1zM10 11h1v1h-1zM13 11h1v1h-1zM1 12h1v1h-1zM6 12h1v1h-1zM7 12h1v1h-1zM8 12h1v1h-1zM13 12h1v1h-1zM2 13h1v1h-1zM12 13h1v1h-1zM3 14h1v1h-1zM4 14h1v1h-1zM10 14h1v1h-1zM11 14h1v1h-1zM5 15h1v1h-1zM6 15h1v1h-1zM7 15h1v1h-1zM8 15h1v1h-1zM9 15h1v1h-1z'/></svg>") 7 7;
}

/* ---------- 鼠标光标：Win95 经典五件套 ---------- */
/* 箭头、手型、工字、沙漏、禁止都是手画的 1:1 点阵 SVG（crispEdges，黑边白芯），
   热点按原版：箭头左上角、手型指尖、工字与沙漏居中、禁止圆心。
   每条都留系统关键字兜底，浏览器不认 data URI 时退回原光标而不是没有光标。
   选择器要和 intake.css / editor.css 里写 cursor: pointer 的那批对上特异性，
   否则继承会被它们打断。 */

*,
*::before,
*::after {
  cursor: var(--w-cur-arrow), default;
}

a,
button,
summary,
select,
label,
[role="button"],
.chip,
.seed,
.rail-item,
.rail-close,
.rail-menu__item,
.canvas-step,
.canvas-step.is-available,
.tab,
.manage,
.plan-toggle,
.plan-outline__remove,
.plan-taxonomy__summary,
.text-button,
.icon-button,
.preview-fullscreen,
.preview-pages__tool,
.quick-action,
.primary-action,
.accept-action,
.reject-action,
.header-action,
.outline-item,
.outline-expand,
.file-import,
.raw-action,
.download,
.intake-downloads a,
.intake-downloads a:hover,
.artifact-links a,
.paper-actions button,
.actions-tabs button,
.rail-link,
#auth-widget .auth-btn,
#auth-widget .auth-menu__item,
.auth-dialog-close,
.password-toggle,
#visual-theme-switch,
details summary {
  cursor: var(--w-cur-hand), pointer;
}

/* Win95 里按钮用的其实还是箭头，手型只给链接；但现在的网页用户已经习惯手型，
   这里按钮也给手型，只有窗口标题栏和纯文字保持箭头。 */
.composer > .brand,
.rail-head,
.workspace::before,
body[data-auth-page="standalone"] .brand {
  cursor: var(--w-cur-arrow), default;
}

input,
textarea,
[contenteditable="true"],
.paper-content,
.paper-content *,
.composer-box,
.composer-box textarea,
.intake-message,
.rail-search input {
  cursor: var(--w-cur-text), text;
}

/* 下拉框、勾选框、文件框不是文本框，别给工字。 */
input[type="checkbox"],
input[type="radio"],
input[type="file"],
input[type="range"],
select {
  cursor: var(--w-cur-hand), pointer;
}

button:disabled,
input:disabled,
textarea:disabled,
select:disabled,
[aria-disabled="true"],
.is-disabled,
.plan-outline__remove:disabled,
.canvas-step[aria-disabled="true"],
.chip:disabled,
#intake-send:disabled,
#intake-confirm:disabled {
  cursor: var(--w-cur-no), not-allowed;
}

/* 正在跑的任务：沙漏。 */
[aria-busy="true"],
[aria-busy="true"] *,
.is-loading,
.is-busy,
.file-import.is-busy,
body.is-generating,
.intake-message--pending,
.typing {
  cursor: var(--w-cur-wait), wait;
}

/* login.html / admin.css 里 button.primary、.button 这类带类名的按钮规则写了 cursor: pointer，
   特异性压过裸 button，这里按同等或更高特异性再点一遍名。 */
button.primary,
button.secondary,
button.ghost,
button.text-button,
button.icon-button,
.button,
.button.primary,
.button.secondary,
.button.danger,
.auth-primary,
.admin-shell .manage,
.admin-shell .rail-link,
.new-document button,
.formatting-toolbar button,
.editor-tools button,
.outline-item button,
.rail-item__main,
.rail-item__more {
  cursor: var(--w-cur-hand), pointer;
}

button.primary:disabled,
.button:disabled,
.auth-primary:disabled,
.new-document button:disabled {
  cursor: var(--w-cur-no), not-allowed;
}

/* ---------- 20. 第二轮优化：系统菜单钮、[_][□]、非活动标题栏、消息框、菜单、状态栏、任务栏 ---------- */

/* ---- 1. ☰ 折叠钮：原来浮在右上角和 × 打架，改成标题栏左端的「系统菜单」小钮 ---- */
.composer {
  position: relative;
}

.composer > .brand .mark {
  display: none;
}

.composer > .brand {
  padding-left: 24px;
}

#rail-toggle,
.shell.has-canvas .intake-heading #rail-toggle,
.shell:not(.has-canvas) .intake-heading #rail-toggle {
  position: absolute !important;
  top: 6px !important;
  left: 6px !important;
  right: auto !important;
  z-index: 5;
  width: 16px !important;
  height: 14px !important;
  min-height: 0 !important;
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  font-size: 0 !important;
  line-height: 0;
  background:
    url("data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='7' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23000' d='M0 0h8v1H0zM0 3h8v1H0zM0 6h8v1H0z'/%3E%3C/svg%3E") 4px 3px no-repeat,
    var(--w-face) !important;
  box-shadow: var(--w-raised) !important;
  opacity: 1 !important;
}

#rail-toggle:active,
#rail-toggle[aria-expanded="true"] {
  box-shadow: var(--w-pressed) !important;
  background-position: 5px 4px, 0 0 !important;
}

.workspace {
  position: relative;
}

.workspace > .canvas-navigation {
  position: static;
}

/* ---- 3. 非活动窗口的标题栏变灰：只有当页面里另一扇窗拿到焦点时才灰，刚打开时三扇都亮 ---- */
.shell:has(:focus-within) > .composer:not(:focus-within) > .brand,
.shell:has(:focus-within) > .rail:not(:focus-within) > .rail-head,
.shell:has(:focus-within) > .workspace:not(:focus-within)::before {
  background: linear-gradient(90deg, var(--w-shadow), #b5b5b5);
}

.shell:has(:focus-within) > .composer:not(:focus-within) > .brand h1,
.shell:has(:focus-within) > .composer:not(:focus-within) > .brand p,
.shell:has(:focus-within) > .rail:not(:focus-within) > .rail-head h2 {
  color: var(--w-face);
}

/* ---- 4. 删除 / 重命名确认框：Win98 消息框 ---- */
.rail-dialog {
  width: min(380px, calc(100vw - 32px));
  padding: 3px 3px 10px;
  border: 0;
  background: var(--w-face);
  color: var(--w-text);
  box-shadow: var(--w-window) !important;
}

.rail-dialog::backdrop {
  background: transparent;
}

.rail-dialog__form {
  gap: 10px;
}

.rail-dialog h2 {
  margin: 0 0 4px;
  padding: 2px 4px;
  background: linear-gradient(90deg, var(--w-navy), var(--w-navy-light));
  color: var(--w-lighter);
  font-family: var(--w-font);
  font-size: var(--w-size);
  font-weight: 700;
  line-height: 18px;
}

.rail-dialog__description,
.rail-dialog__input,
.rail-dialog__error,
.rail-dialog__actions {
  margin-left: 10px;
  margin-right: 10px;
}

/* 说明文字前放一个警告图标：黄三角黑边黑感叹号。 */
.rail-dialog__description {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  min-height: 32px;
  color: var(--w-text);
  font-family: var(--w-font);
  font-size: var(--w-size);
  line-height: 1.6;
}

.rail-dialog__description::before {
  content: "";
  flex: 0 0 auto;
  width: 32px;
  height: 32px;
  background: url("data:image/svg+xml;charset=utf-8,%3Csvg width='32' height='32' xmlns='http://www.w3.org/2000/svg' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M15 2h2v1h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2H2v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1V5h1V3h1z'/%3E%3Cpath fill='%23ff0' d='M15 4h2v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2h1v2H5v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1v-2h1V6h1V4z'/%3E%3Cpath fill='%23000' d='M15 10h2v10h-2zM15 22h2v2h-2z'/%3E%3C/svg%3E") no-repeat;
}

.rail-dialog__input {
  width: calc(100% - 20px);
  padding: 3px 4px;
  font: 12px var(--w-font);
}

.rail-dialog__actions {
  justify-content: center;
  gap: 6px;
  margin-top: 6px;
}

.rail-dialog__actions button {
  min-width: 75px;
  min-height: 23px;
  padding: 2px 12px;
}

/* Win98 的删除确认默认停在「否」上：非危险钮带默认黑圈，危险钮就是普通灰钮，不涂红。 */
.rail-dialog__actions button:not(.is-danger) {
  box-shadow: 0 0 0 1px var(--w-darker), var(--w-raised) !important;
}

.rail-dialog__actions .is-danger {
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  box-shadow: var(--w-raised) !important;
}

.rail-dialog__error {
  color: var(--w-red);
  font-size: var(--w-size);
}

/* ---- 5. 更多菜单：凸起银灰、黑字、悬停海军蓝、危险项上方一条蚀刻分隔线 ---- */
.rail-menu {
  width: 150px;
  padding: 2px;
  border: 0;
  background: var(--w-face);
  box-shadow: var(--w-raised) !important;
}

.rail-menu__item {
  min-height: 0;
  padding: 3px 20px 3px 16px;
  color: var(--w-text) !important;
  font-family: var(--w-font);
  font-size: var(--w-size);
}

.rail-menu__item:hover,
.rail-menu__item:focus-visible {
  background: var(--w-navy) !important;
  color: var(--w-lighter) !important;
  outline: none;
}

.rail-menu__item.is-danger {
  color: var(--w-text) !important;
  margin-top: 3px;
  padding-top: 5px;
  border-top: 1px solid var(--w-shadow);
  box-shadow: inset 0 1px var(--w-lighter) !important;
}

.rail-menu__item.is-danger:hover {
  color: var(--w-lighter) !important;
}

/* ---- 6. 对话窗底部状态栏：「就绪」 ---- */
.composer::after {
  content: "就绪";
  flex: 0 0 auto;
  margin: 0 3px -5px;
  padding: 1px 4px;
  font-family: var(--w-font);
  font-size: 11px;
  line-height: 16px;
  color: var(--w-text);
  box-shadow: var(--w-status) !important;
}

.shell.has-canvas > .composer::after {
  content: "就绪 · 方案编辑中";
}

body.is-generating .composer::after,
.shell.is-generating > .composer::after {
  content: "正在生成…";
}

/* intake.css 给 .shell:not(.has-canvas) > .composer 等长选择器写了 22px 内边距，
   标题栏因此离窗口顶边 20 多像素，系统菜单钮就悬在标题栏上方。窗体内边距统一压回 3px。 */
.shell > .composer,
.shell.has-canvas > .composer,
.shell:not(.has-canvas) > .composer {
  padding: 3px 3px 8px !important;
}

.composer > .brand,
.shell.has-canvas > .composer > .brand,
.shell:not(.has-canvas) > .composer > .brand {
  margin-top: 0 !important;
}

/* No simulated operating-system taskbar. */
body::before, body::after { content: none; display: none; }
#w98-taskbar, #w98-tray, #visual-theme-switch { display: none !important; }

/* ---------- 21. 防干涉：超高内容、被挤压的面板与交付区排版（2026-09-23） ---------- */

/* 欢迎态：面板用 justify-content:center 竖直居中，内容比窗口高（笔记本 125%/150% 缩放后
   视口只有 600~730px）时会同时往上、下两头溢出——标题钻到页签和标题栏底下，底部说明掉出状态栏。
   改为从顶部排（放得下时 .intake-heading 的 margin-bottom:auto 照样把内容推到中间），放不下就在面板里滚动。 */
.shell:not(.has-canvas) .intake-panel {
  flex: 1 1 auto;
  min-height: 0;
  justify-content: flex-start;
  overflow-x: hidden;
  overflow-y: auto;
  padding-bottom: 12px;
}

/* 有画布时对话列只有 30% 宽，输入框原先是 3 行文本 + 独占一行的发送钮，消息列表被挤到一百来像素。
   输入框压成两行，提示与发送钮同排，提示过长时在自己那格里换行。 */
.shell.has-canvas #intake-message {
  min-height: 44px;
  padding: 6px 8px 2px;
}

.shell.has-canvas .composer-actions {
  flex-wrap: nowrap;
  align-items: flex-end;
  padding: 2px 6px 6px 8px;
}

.shell.has-canvas .composer-tip {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 11px;
  line-height: 1.5;
}

.shell.has-canvas #intake-send {
  flex: 0 0 auto;
  min-width: 64px;
  min-height: 23px;
}

/* 消息列表首条贴着凹陷框上沿：留出与左右相同的内边距。 */
.shell.has-canvas #intake-chat > .intake-message:first-child {
  margin-top: 2px;
}

/* 交付区：原来是 flex-wrap 横排，收起的三个折叠框被排成大小不一的方块，展开时又挤在行尾、
   内容压到下面的 PDF 预览上（1024 宽时「继续修改」的输入框被预览工具条盖住）。
   改成竖排：第一行下载与编辑，下面每个折叠区各占整行。 */
.intake-delivery-panel {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  align-items: stretch;
  gap: 6px;
}

.intake-delivery-panel > .delivery-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 6px;
  min-width: 0;
}

.intake-delivery-panel > details,
.intake-delivery-panel > details:not([open]),
.intake-delivery-panel > details[open] {
  flex: none;
  min-width: 0;
  margin: 0;
  padding: 4px 8px;
}

.intake-delivery-panel > details > summary,
.intake-delivery-panel > details[open] > summary {
  display: flex;
  align-items: center;
  gap: 6px;
  min-height: 20px;
  margin: 0;
  padding: 0 2px;
  border: 0 !important;
  background: transparent !important;
}

.intake-delivery-panel > details[open] > summary {
  margin-bottom: 6px;
}

/* 收起时隐藏内容仍占一条 0 高的网格行，行距会把标题顶偏。 */
.intake-delivery-panel > details:not([open]) {
  gap: 0;
}

.intake-delivery-panel > details textarea,
.intake-delivery-panel > details select,
.intake-delivery-panel > details input {
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
}

.intake-delivery-panel > details button {
  max-width: 100%;
}

/* 「开始精修」：intake.css 用 #id 给了强调底色，复古层只改了字色，成了深蓝底黑字。
   与旁边「开始降低 AI 率」一样用标准灰按钮。 */
#refine-start {
  min-height: 23px;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  border: 0 !important;
  box-shadow: var(--w-raised) !important;
}

#refine-start:active:not(:disabled) {
  box-shadow: var(--w-pressed) !important;
}

#refine-start:disabled {
  color: var(--w-disabled) !important;
}

/* 交付页：只留一条工具栏，PDF 占满其余高度。
   打磨、降低 AI 率、完整成稿、在编辑器中精修统一在左侧对话里操作（chat-actions），画布不再放第二套；
   原来两边各一套，画布那套三个折叠块还把 PDF 挤到窗口底部。
   第一行：左边状态（含「查看问题」），右边下载 / 编辑器 / 质检结果；质检结果展开时浮在 PDF 上面，不推开 PDF。 */
#view-paper {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  grid-template-rows: auto minmax(0, 1fr);
  align-items: center;
  column-gap: 8px;
  row-gap: 6px;
}

#view-paper > .meta {
  grid-column: 1;
  grid-row: 1;
  margin: 0;
}

#view-paper > .intake-delivery-panel {
  grid-column: 2;
  grid-row: 1;
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  padding: 0;
}

#view-paper > .preview-frame {
  grid-column: 1 / -1;
  grid-row: 2;
  align-self: stretch;
  min-height: 0;
}

#view-paper > .intake-delivery-panel > .delivery-head {
  flex: none;
  flex-wrap: nowrap;
  justify-content: flex-end;
}

#view-paper > .intake-delivery-panel > #delivery-quality {
  flex: none;
  padding: 2px 6px;
}

#view-paper > .intake-delivery-panel > #delivery-quality[open] > summary {
  margin-bottom: 0;
}

#view-paper > .intake-delivery-panel > #delivery-quality[open] > #quality-notes {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  z-index: 30;
  width: min(560px, 100%);
  max-height: 50vh;
  overflow: auto;
  padding: 8px 10px;
  background: var(--w-face);
  box-shadow: var(--w-raised), 2px 2px 0 rgba(0, 0, 0, .35) !important;
  white-space: pre-wrap;
}

#view-paper > .intake-delivery-panel > #de-ai-report {
  flex: 1 1 100%;
  margin: 0;
  text-align: right;
}

@media (width <= 640px) {
  #view-paper {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto auto minmax(0, 1fr);
  }
  #view-paper > .intake-delivery-panel { grid-column: 1; grid-row: 2; justify-content: flex-start; }
  #view-paper > .intake-delivery-panel > .delivery-head { flex-wrap: wrap; }
  #view-paper > .preview-frame { grid-row: 3; }
}

/* ≤1080px 是整页滚动的单列布局，#view-paper 没有确定高度，1fr 行会塌成 0：
   上面的 min-height: 0 必须在这里改回 intake.css 原先给的 70vh，否则手机上 PDF 预览整个消失。 */
@media (max-width: 1080px) {
  #view-paper > .preview-frame { min-height: 70vh; }
}

/* 交付状态条：intake.css 给的是奶油底、橄榄字、圆点、下划线链接的圆角徽章（上面 .meta 的黄底规则
   被它更长的选择器压掉了），和 Win98 窗体格格不入。改成状态栏式的凹陷格：银灰底黑字，
   前面一个 16px 系统图标（有待核查问题 = 黄色警告三角，否则 = 信息图标），「查看问题」用标准凸起按钮。 */
#view-paper > .meta,
#view-paper > .meta.is-delivered,
#view-paper > .meta.is-delivered.has-issues {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 25px;
  padding: 2px 3px 2px 6px;
  border: 0;
  border-radius: 0;
  background: var(--w-face);
  color: var(--w-text);
  font-family: var(--w-font);
  font-size: var(--w-size);
  line-height: 1.5;
  box-shadow: var(--w-status) !important;
}

#view-paper > .meta::before {
  display: none;
}

#view-paper > .meta.is-delivered::before {
  content: "";
  display: block;
  flex: none;
  width: 16px;
  height: 16px;
  border-radius: 0;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' shape-rendering='crispEdges'%3E%3Ccircle cx='8' cy='8' r='7' fill='%23fff' stroke='%23000080'/%3E%3Crect x='7' y='3' width='2' height='2' fill='%23000080'/%3E%3Crect x='7' y='6' width='2' height='6' fill='%23000080'/%3E%3C/svg%3E") center / 16px 16px no-repeat;
}

#view-paper > .meta.is-delivered.has-issues::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' shape-rendering='crispEdges'%3E%3Cpath d='M8 1.5 L15 14.5 L1 14.5 Z' fill='%23ffff00' stroke='%23000'/%3E%3Crect x='7' y='5' width='2' height='5' fill='%23000'/%3E%3Crect x='7' y='11' width='2' height='2' fill='%23000'/%3E%3C/svg%3E");
}

#view-paper > .meta .delivery-inspect {
  min-height: 21px;
  margin-left: 4px;
  padding: 0 8px;
  border: 0;
  border-radius: 0;
  background: var(--w-face);
  color: var(--w-text);
  font-family: var(--w-font);
  font-size: var(--w-size);
  text-decoration: none;
  box-shadow: var(--w-raised) !important;
}

#view-paper > .meta .delivery-inspect:hover {
  background: var(--w-face);
}

#view-paper > .meta .delivery-inspect:active {
  box-shadow: var(--w-pressed) !important;
}

#view-paper > .meta .delivery-inspect:focus-visible {
  outline: 1px dotted var(--w-text);
  outline-offset: -4px;
}

/* 同一行右边的按钮原来是三种样子：海军蓝实心块、白底框、橄榄色文字。统一成 Win98 标准凸起按钮；
   「下载当前版本」是默认操作，按 Win98 默认按钮的画法多一圈黑框。 */
#view-paper .intake-downloads a:not([hidden]),
#view-paper .edit-entry > button,
#view-paper > .intake-delivery-panel > #delivery-quality > summary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 23px;
  padding: 0 10px;
  border: 0 !important;
  border-radius: 0;
  background: var(--w-face) !important;
  color: var(--w-text) !important;
  font-family: var(--w-font);
  font-size: var(--w-size);
  text-decoration: none;
  box-shadow: var(--w-raised) !important;
}

#view-paper .intake-downloads a#download-current:not([hidden]) {
  box-shadow: 0 0 0 1px var(--w-text), var(--w-raised) !important;
}

#view-paper .intake-downloads a:not([hidden]):active,
#view-paper .edit-entry > button:active,
#view-paper > .intake-delivery-panel > #delivery-quality > summary:active,
#view-paper > .intake-delivery-panel > #delivery-quality[open] > summary {
  box-shadow: var(--w-pressed) !important;
}

#view-paper > .intake-delivery-panel > #delivery-quality,
#view-paper > .intake-delivery-panel > #delivery-quality[open] {
  gap: 0;
  padding: 0;
  border: 0;
  background: transparent;
  box-shadow: none !important;
}

/* 下拉出来的清单：去掉质检框自带的橄榄色左边条，像 Win98 的弹出面板一样只用凸起边。 */
#view-paper > .intake-delivery-panel > #delivery-quality[open] > #quality-notes {
  border: 0;
  border-left: 0;
}

.generation-details > summary {
  color: var(--w-text);
}

/* ---- 第二轮 UI 整理（2026-09-26，按截图逐条） ---- */

/* 质检清单：intake.js 按「未修复 / 待核验 …」分组，先一行总数，再每组一个列表。 */
#quality-notes .quality-overview {
  margin: 0 0 6px;
  font-weight: 700;
}

#quality-notes .quality-group__title {
  margin: 8px 0 2px;
  font-weight: 700;
}

#quality-notes .quality-group__list {
  margin: 0;
  padding-left: 18px;
  white-space: normal;
}

#quality-notes .quality-group__list li {
  margin: 2px 0;
  line-height: 1.6;
}

/* 对话窗底部状态栏按阶段显示；原来一律写死「就绪 · 方案编辑中」，交付后也不变。
   intake.js 在 body 上挂 data-stage=intake|generating|delivered。 */
body[data-stage="delivered"] .shell.has-canvas > .composer::after {
  content: "就绪 · 已交付，可继续修改";
}

body[data-stage="generating"] .shell.has-canvas > .composer::after {
  content: "正在生成…";
}

/* 状态行确认后会清空，空着时不留一行空白。 */
#intake-status:empty {
  display: none;
}

/* 自己发的消息原来是银灰凸起条，和按钮一模一样，容易被当成能点。
   改成浅蓝底、细边框、不带立体斜面的消息块。 */
.intake-message--user {
  background: #dfe6f2 !important;
  border: 1px solid var(--w-shadow) !important;
  box-shadow: none !important;
}

/* 历史栏打开时它自带「＋ 新对话」，对话窗里那颗重复，还白占一整行。历史栏收起时照常显示。 */
.shell.rail-open #intake-new {
  display: none !important;
}

/* 这一行里剩下的只有绝对定位到标题栏上的 ☰ 钮，行本身就成了一条带分隔线的空白，一并收起。 */
.shell.rail-open.has-canvas .intake-heading {
  min-height: 0;
  height: 0;
  margin: 0;
  padding: 0;
  border: 0;
  box-shadow: none !important;
}

/* 搜索框原来比下面的列表宽 8px，右边伸出窗口边框：width:100% 再加左右各 4px 外边距。
   改成 auto，让网格按扣掉外边距后的宽度拉伸。 */
#rail-search {
  box-sizing: border-box;
  width: auto;
  min-width: 0;
  justify-self: stretch;
}

/* 首页：历史栏与对话窗顶边对齐、并排居中（原来对话窗下沉 24px、两窗之间空一大块），
   窗内内容整体垂直居中，而不是被标题行的 margin-bottom:auto 推到底部、上面空一截。 */
@media (min-width: 1081px) {
  .shell.rail-open:not(.has-canvas) {
    grid-template-columns: 248px minmax(0, 820px);
  }

  /* 历史栏收起时对话窗也要居中：原来这一列是整页宽、对话窗 justify-self: stretch 又有
     max-width: 820px，结果贴在左边，右边空一大片（2026-09-28 用户截图）。 */
  .shell:not(.rail-open):not(.has-canvas) {
    grid-template-columns: minmax(0, 820px);
  }
}

.shell:not(.has-canvas) > .composer {
  margin: 0 !important;
  justify-self: stretch;
}

.shell:not(.has-canvas) .intake-panel {
  justify-content: safe center;
}

.shell:not(.has-canvas) .intake-heading {
  margin-bottom: 0 !important;
}

/* 欢迎页的「01 明确需求 / 02 确认方案 / 03 生成与精修」是流程说明，原来画成三个凹陷格子，
   像点不动的页签。改成一行带箭头的文字。 */
.welcome-steps {
  justify-content: center;
  gap: 8px;
}

.welcome-steps li {
  flex: 0 0 auto;
  padding: 0;
  background: transparent;
  box-shadow: none !important;
}

.welcome-steps li + li::before {
  content: "→";
  margin-right: 8px;
  color: var(--w-shadow);
}

/* ---- 第三轮 Win98 统一（2026-09-26） ---- */

/* 对话列表里的模式标签：[综述] [推导] [检索]，选中行（海军蓝底）上也看得清。 */
.rail-item__line {
  display: flex;
  align-items: center;
  min-width: 0;
}

.rail-item__line > .rail-item__title {
  flex: 1 1 auto;
  min-width: 0;
}

.rail-item__tag {
  flex: none;
  display: inline-block;
  margin-right: 4px;
  padding: 0 3px;
  border: 1px solid var(--w-shadow);
  background: var(--w-face);
  color: var(--w-text);
  font-size: 11px;
  font-weight: 400;
  line-height: 14px;
  vertical-align: 1px;
}

/* 研究工具页的对话窗标题栏没有 ☰ 系统菜单钮，左边不用再留 24px 空。 */
.research-shell > .composer > .brand {
  padding-left: 6px;
}

/* 历史栏：「新对话」从标题栏挪到下面的工具行，行号跟着顺延。 */
.rail {
  grid-template-rows: auto auto auto minmax(0, 1fr) auto;
}

.rail > .rail-tools {
  grid-row: 2;
  display: flex;
}

.rail > .rail-search { grid-row: 3; }
.rail > .rail-list { grid-row: 4; }
.rail > .rail-empty { grid-row: 5; }

.rail-tools #rail-new {
  min-height: 23px;
  padding: 0 10px;
  font-size: var(--w-size);
  line-height: normal;
}

/* 聊天记录：去掉现代聊天气泡，改成 Win98 年代聊天软件的记录区——每条前面一行加粗的发言人，
   下面是正文，同一块白色凹陷区里上下排列。 */
#intake-chat .intake-message,
#intake-chat .intake-message--user,
#intake-chat .intake-message--assistant {
  max-width: 100%;
  margin: 0 0 8px !important;
  padding: 0 2px;
  border: 0 !important;
  background: transparent !important;
  color: var(--w-text) !important;
  box-shadow: none !important;
}

#intake-chat .intake-message--user::before,
#intake-chat .intake-message--assistant::before {
  display: block;
  font-weight: 700;
}

#intake-chat .intake-message--user::before {
  content: "你：";
  color: #c00000;
}

#intake-chat .intake-message--assistant::before {
  content: "AutoPaper：";
  color: var(--w-navy);
}

/* 动作区：米色圆角卡片改成 Win98 分组框。 */
.chat-actions {
  border: 0;
  border-radius: 0;
  background: var(--w-face);
  color: var(--w-text);
  font-size: var(--w-size);
  box-shadow: var(--w-etched) !important;
  animation: none;
}

.chat-actions .chat-actions__note {
  color: var(--w-text);
  font-size: var(--w-size);
}

/* PDF 预览顶上那条 5px 粗蓝线是早先皮肤留下的装饰，Win98 里没有。 */
.preview-frame::before {
  border-top: 0 !important;
}

/* 字号统一：对话窗标题和其他标题栏一样用系统字号加粗。 */
.composer > .brand h1,
.shell:not(.has-canvas) .composer > .brand h1 {
  font-size: var(--w-size) !important;
  line-height: 18px;
}

/* 灰色说明字在银灰底上看不清；Win98 正文一律黑字，灰字只用来表示「禁用」。 */
.intake-hint,
.composer-tip,
#intake-status,
.chat-empty p,
.welcome-delivery p,
.welcome-delivery__note,
.brief-expect__note,
.run-elapsed,
.run-budget__note {
  color: var(--w-text) !important;
}

/* 「新对话」这类 .ghost 按钮原来是 #444 深灰字，看着像半禁用；可用的按钮一律黑字。 */
button.ghost:not(:disabled) {
  color: var(--w-text) !important;
}

/* 禁用按钮：灰字加一道白色浮雕阴影，和 Win98 一样。 */
button:disabled,
.chip:disabled {
  color: var(--w-disabled) !important;
  text-shadow: 1px 1px 0 var(--w-lighter) !important;
}

/* 首页三个模板按钮比标准按钮大一圈，收回到标准尺寸。 */
.chip--example,
.shell:not(.has-canvas) .chip--example {
  min-height: 23px !important;
  padding: 0 12px !important;
  font-size: var(--w-size) !important;
}

/* 低对比文字：intake.css 的浅灰小字（#7a878b）、橄榄色标题压在银灰底上对比只有 2:1 左右。 */
.intake-question__reason,
.intake-question__reason strong,
.intake-questions__hint {
  color: var(--w-muted) !important;
}

.quality-box > summary,
.intake-delivery-panel > .quality-box > summary {
  color: #404000 !important;
}

/* 登录后的积分 / 用户角标：auth-ui.js 把它 position:fixed 钉在右上角（高 34px），
   原先压住工作区标题栏的 [_][□][×]、后台的「刷新数据」，1024 宽时还压住正文。
   复古主题里给它在桌面顶端留一条托盘带，窗口整体下移，角标只占这条带。 */
#auth-widget {
  top: 5px !important;
  right: 8px !important;
}

#auth-widget .auth-btn {
  height: 22px !important;
  min-height: 22px !important;
}

#auth-widget .auth-menu {
  top: 26px !important;
}

/* 角标要等 /api/auth-config 与会话两次请求回来才挂上，按「有没有角标」留白会让整页晚一拍下跳 26px；
   宽屏一律预留这条带。 */
@media (width > 640px) {
  .shell,
  .admin-shell,
  body:has(#auth-widget) .shell,
  body:has(#auth-widget) .admin-shell {
    padding-top: 34px;
  }
}

@media (width <= 640px) {
  body:has(#auth-widget) {
    padding-top: 32px;
  }
}

/* intake.css 早先为躲浮动角标留的空：有托盘带后都多余，叠在一起就是大片空白。 */
body:has(#auth-widget) .canvas-steps {
  margin-right: 0;
}

@media (width <= 640px) {
  body:has(#auth-widget) .rail-head {
    padding-right: 4px;
  }
}

@media (width > 1080px) {
  .canvas-rail {
    padding-top: 0;
  }
}

/* 触屏上别把按钮压到 22~23px：intake.css 专门为触屏给了 44px。 */
@media (pointer: coarse) {
  .shell.has-canvas #intake-send,
  #refine-start {
    min-height: 44px;
  }

  #auth-widget .auth-btn {
    height: 32px !important;
    min-height: 32px !important;
  }

  #auth-widget .auth-menu {
    top: 36px !important;
  }
}

/* 窄屏（≤1080）整页滚动：固定定位的角标滚动后会浮在正文上，改为随页面滚动，留在顶部托盘带里。 */
@media (width <= 1080px) {
  #auth-widget {
    position: absolute !important;
  }
}

/* 标题栏不再画 [_][□][×]（2026-09-28 用户要求删除：× 收起后找不回来，其余两个没有意义）。
   宽屏历史栏用左上角 ☰ 开合；窄屏抽屉仍保留就近的收起按钮。 */
@media (min-width: 1081px) {
  .rail-head .rail-close {
    display: none !important;
  }
}

/* 页脚法律信息（原先只写在 index.html 的内联样式里，同步时会被覆盖，挪到这里）。 */
.site-legal-footer {
  max-width: 960px;
  margin: 28px auto;
  padding: 12px 20px;
  text-align: center;
  font-size: 13px;
  line-height: 1.8;
}
.site-legal-footer a { color: inherit; text-decoration: underline; }

/* ---------- 全站巡检修正（2026-09-29） ---------- */
/* 首页欢迎态：intake.css 给空壳标题行留了 -30px 上边距（旧版用来把按钮提进标题栏）。
   ☰ 现在是绝对定位，这 30px 只会在窗口矮、内容滚动时把「从研究主题…」顶到标签栏上。 */
.shell:not(.has-canvas) .intake-heading {
  margin-top: 0;
}

.shell:not(.has-canvas) .intake-panel {
  padding-top: 14px;
}

/* 研究工具页（公式推导 / 文献检索）：
   1. 左窗内容区不撑满，「就绪」状态栏悬在窗口半腰；让内容区吃掉剩余高度，状态栏落到窗底。
   2. 宽屏顶部与首页一样留 34px，切换标签时窗口不再上下跳 26px。 */
.shell.research-shell > .composer > .research-input-body {
  flex: 1 1 auto;
}

@media (width > 640px) {
  main.shell.research-shell {
    padding-top: 34px;
  }
}

/* 管理页：主窗被 admin.css 的 max-width:1540px 限住又靠左，宽屏右边空出一条桌面色。 */
.admin-shell main {
  max-width: none;
}

/* 登录窗：空的提示行仍占 30px，按钮和「返回首页」之间空一大块；没有提示时不占位。 */
body[data-auth-page="standalone"] .msg:empty {
  display: none;
}

body[data-auth-page="standalone"] .msg {
  min-height: 0;
}

/* 工具页左窗标题栏没有 ☰，标题却仍缩进 24px；research-tools.css 后加载，需要更高优先级。 */
main.shell.research-shell > .composer > .brand {
  padding-left: 6px;
}

/* 对话里的选项按钮：长选项折成两行后上下只有 2px 内边距，字贴着边框、末行像被切掉。 */
.chips .chip {
  padding-top: 5px;
  padding-bottom: 5px;
  line-height: 1.5;
  text-align: left;
}

/* 管理页：开会员的「开通方式」单选组、列表的到期列与筛选下拉（2026-09-29）。 */
.admin-shell .mode-picker {
  display: grid;
  gap: 2px;
  margin: 0 0 12px;
  padding: 8px 8px 6px;
  border: 0;
  box-shadow: var(--w-etched) !important;
}

.admin-shell .mode-picker legend {
  padding: 0 4px;
  color: var(--w-text);
  font-size: var(--w-size);
}

.admin-shell .mode-option {
  display: grid;
  grid-template-columns: 16px auto 1fr;
  align-items: center;
  gap: 6px;
  margin: 0;
  padding: 3px 4px;
  color: var(--w-text);
  font-size: var(--w-size);
  cursor: pointer;
}

.admin-shell .mode-option:has(input:checked) {
  background: var(--w-navy);
  color: var(--w-lighter);
}

.admin-shell .mode-option:has(input:checked) .hint {
  color: var(--w-lighter) !important;
}

.admin-shell .mode-option input {
  display: inline-block;
  width: 13px;
  min-height: 0;
  height: 13px;
  margin: 0;
  padding: 0;
  box-shadow: none !important;
}

.admin-shell .mode-option .hint {
  margin: 0;
  font-size: 11px;
}

.admin-shell [hidden] {
  display: none !important;
}

.admin-shell td.expiry {
  white-space: nowrap;
  font-size: 11px;
}

.admin-shell .search select {
  flex: none;
  width: auto;
  min-height: 23px;
}

/* ---------- 管理页：运营视图（2026-09-30） ---------- */
.admin-shell .rail-nav {
  display: grid;
  gap: 4px;
  margin-bottom: 8px;
}

.admin-shell main > .message:empty {
  display: none;
}

.admin-shell .ops-toolbar {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 10px 10px 8px;
  font-size: var(--w-size);
}

.admin-shell .ops-toolbar select,
.admin-shell .ops-toolbar label {
  width: auto;
  margin: 0;
  color: var(--w-text);
}

.admin-shell .ops-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 10px;
  margin: 0 10px 10px;
}

.admin-shell .ops-card {
  padding: 8px 10px 10px;
  background: var(--w-face);
  box-shadow: var(--w-etched) !important;
}

.admin-shell .ops-card h3 {
  margin: 0 0 4px;
  color: var(--w-muted);
  font: 400 11px var(--w-font);
}

.admin-shell .ops-card > strong {
  display: block;
  margin-bottom: 8px;
  color: var(--w-navy);
  font: 700 18px var(--w-font);
}

.admin-shell .ops-line {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin: 0;
  padding: 2px 0;
  border-top: 1px solid var(--w-shadow);
  box-shadow: inset 0 1px var(--w-lighter) !important;
  font-size: var(--w-size);
}

.admin-shell .ops-line span:last-child {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.admin-shell .ops-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin: 0 22px 10px;
}

.admin-shell .ops-filters button.selected {
  box-shadow: var(--w-pressed) !important;
  font-weight: 700;
}

.admin-shell [data-view-panel] > .hint {
  margin: 8px 12px;
}

.admin-shell [data-view-panel] > .panel,
.admin-shell [data-view-panel] > .admin-grid {
  margin: 10px;
}

.admin-shell .ops-dialog {
  max-width: 460px;
}

.admin-shell .ops-actions {
  display: flex;
  gap: 8px;
}

.admin-shell .job-reason {
  margin-top: 2px;
  color: var(--w-red);
  font-size: var(--w-size);
}

.admin-shell td .hint {
  margin: 2px 0 0;
  max-width: 320px;
  white-space: normal;
  font-size: 11px;
}

.admin-shell .badge.job-running,
.admin-shell .badge.order-pending {
  background: var(--w-yellow);
  color: var(--w-text);
}

.admin-shell .badge.job-failed,
.admin-shell .badge.suspended,
.admin-shell .badge.code-revoked,
.admin-shell .badge.order-refunded,
.admin-shell .badge.order-partially_refunded {
  color: var(--w-red);
}

.admin-shell .badge.job-delivered,
.admin-shell .badge.order-paid,
.admin-shell .badge.code-available {
  color: var(--w-green);
}

.admin-shell #code-issued {
  width: 100%;
  margin-bottom: 8px;
  font-family: "Courier New", monospace;
  font-size: 12px;
}

.admin-shell .actions-tabs {
  flex-wrap: wrap;
}

/* 管理页手机宽度：导航横排可换行、当前页也显示；表格保持最小宽度、在框内横向滚动，不把邮箱挤成一字一行。 */
@media (max-width: 640px) {
  .admin-shell .rail {
    flex-wrap: wrap;
  }

  .admin-shell .rail-nav {
    display: flex;
    flex-wrap: wrap;
    flex: 1 1 100%;
    order: 3;
    gap: 4px;
    margin: 4px 6px 0;
  }

  .admin-shell .rail-nav .rail-link,
  .admin-shell .rail-nav .rail-link.active {
    display: inline-block;
    margin: 0;
    padding: 3px 8px;
    font-size: 12px;
  }

  .admin-shell .table-wrap table {
    min-width: 600px;
  }

  .admin-shell .ops-filters {
    margin-inline: 14px;
  }
}
