/* 苏曼审片台 · 样式（全部本地，无外网字体/CDN）
   目标：手机单手能点（按钮 ≥44px）、横竖屏都不出横向滚动条；
   电脑（≥768px）一件一行：左媒体、右题，右栏相对左栏垂直居中，一件不用上下翻。
   CB142：去掉 html/body 的 overflow-x:hidden（它让 body 变成滚动容器，顶栏 sticky 就失效），
   改由各块自己 max-width/min-width:0 防横向溢出。 */

:root {
  --底: #0f1115;
  --卡: #171a21;
  --卡2: #1e232c;
  --线: #2b313c;
  --字: #e9edf3;
  --字弱: #9aa4b2;
  --主: #e6b45c;
  --有: #2e7d5b;
  --有边: #46b98a;
  --没有: #7d3b3b;
  --没有边: #d4736b;
  --不准: #6b5a2b;
  --不准边: #e6b45c;
  --好: #46b98a;
  --坏: #e0675e;
  /* CB162：装成 App（全屏）时，顶部状态栏和底部横条占掉的安全区 */
  --安全顶: env(safe-area-inset-top, 0px);
  --安全底: env(safe-area-inset-bottom, 0px);
  --底栏高: 0px;
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }

html, body {
  margin: 0;
  padding: 0;
  width: 100%;
  background: var(--底);
  color: var(--字);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
               "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  font-size: 16px;
  line-height: 1.55;
  -webkit-text-size-adjust: 100%;
}
/* CB162：整个页面让开刘海/状态栏；顶栏吸顶的位置也一起算（见下） */
body { padding-top: var(--安全顶); }

a { color: var(--主); text-decoration: none; }

.窄 { width: 100%; max-width: 1320px; margin: 0 auto; padding: 12px 14px 40px; }

/* 顶栏（CB142：body 不再是滚动容器，这里才真的吸顶）
   CB162：固定一条，左边返回、中间标题、右边巡检灯。高度 ≥56，返回钮 44×44。 */
.顶栏 {
  position: sticky; top: calc(var(--安全顶) + var(--顶提示高, 0px)); z-index: 20;
  display: flex; align-items: center; gap: 8px;
  min-height: 56px; padding: 6px 10px;
  background: rgba(15,17,21,.96);
  border-bottom: 1px solid var(--线);
  backdrop-filter: blur(8px);
  padding-top: 6px;
}
.返回钮 {
  flex: 0 0 auto; width: 44px; height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 12px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字);
  font-size: 22px; font-weight: 700; line-height: 1; cursor: pointer;
}
.返回钮:active { background: rgba(230,180,92,.16); }
.顶标 {
  flex: 0 0 auto; width: 34px; height: 34px; margin: 0 2px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 10px; background: var(--主); color: #1a1305;
  font-size: 17px; font-weight: 800;
}
.顶题 { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; justify-content: center; }
.顶题 b {
  font-size: 16px; font-weight: 700; line-height: 1.25;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.顶题 #顶副 {
  font-family: ui-monospace, Consolas, monospace;
  font-size: 11px; color: var(--字弱); line-height: 1.3;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.顶右 { margin-left: auto; flex: 0 0 auto; display: flex; align-items: center; gap: 6px; }
.巡检钮 {
  display: inline-flex; align-items: center; gap: 5px;
  min-height: 44px; padding: 0 9px;
  border-radius: 11px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字弱);
  font-family: ui-monospace, Consolas, monospace; font-size: 12px; cursor: pointer;
}
.巡检钮 .灯 {
  width: 10px; height: 10px; border-radius: 999px; background: #5b6472;
  box-shadow: 0 0 0 3px rgba(91,100,114,.18);
}
.巡检钮.绿 .灯 { background: var(--好); box-shadow: 0 0 0 3px rgba(70,185,138,.22); }
.巡检钮.黄 .灯 { background: var(--主); box-shadow: 0 0 0 3px rgba(230,180,92,.24); }
.巡检钮.红 .灯 { background: var(--坏); box-shadow: 0 0 0 3px rgba(224,103,94,.24); }
.巡检弹 {
  position: fixed; inset: 0; z-index: 90; display: none;
  align-items: flex-end; justify-content: center;
  background: rgba(0,0,0,.55); padding: 14px;
}
.巡检框 {
  width: min(460px, 100%); max-height: 80vh; overflow: auto;
  background: var(--卡); border: 1px solid var(--线); border-radius: 16px; padding: 14px;
  margin-bottom: var(--安全底);
}
.巡检头 { display: flex; align-items: center; margin-bottom: 8px; }
.巡检头 b { font-size: 17px; }
.巡检头 .侧栏关 { margin-left: auto; }
.巡检大 { font-size: 22px; font-weight: 800; margin: 4px 0 10px; }
.巡检大.绿 { color: var(--好); } .巡检大.黄 { color: var(--主); }
.巡检大.红 { color: var(--坏); } .巡检大.灰 { color: var(--字弱); }
.巡检行 {
  display: flex; gap: 10px; padding: 8px 0; border-top: 1px solid var(--线);
  font-size: 14px; align-items: baseline;
}
.巡检名 { flex: 0 0 74px; color: var(--字弱); }
.巡检值 { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
@media (min-width: 768px) { .巡检弹 { align-items: center; } }
/* 顶部提示条（CB139）：固定在最上面，页面滚了也不跑 */
.顶提示 { position: sticky; top: var(--安全顶); z-index: 40; }
.https条 {
  padding: 10px 14px;
  background: rgba(230,180,92,.16); color: var(--主);
  border-bottom: 1px solid var(--主);
  font-size: 14px;
}
.https条 a { color: var(--主); text-decoration: underline; font-weight: 700; white-space: nowrap; }
.配对码条 {
  padding: 10px 14px 12px;
  background: #22190b;
  border-bottom: 2px solid var(--主);
}
.码块 + .码块 { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--线); }
.码题 { font-size: 14px; }
.码数 {
  font-family: ui-monospace, Consolas, monospace;
  font-size: 40px; letter-spacing: 10px; font-weight: 800;
  color: var(--主); line-height: 1.2;
  padding-left: 2px;
}
.码注 { font-size: 13px; color: var(--字弱); }
.顶栏 .标 { font-weight: 600; letter-spacing: .5px; }
.顶栏 .右 { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.角标 {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 26px; height: 26px; padding: 0 8px;
  border-radius: 999px; background: var(--主); color: #1a1305;
  font-size: 14px; font-weight: 700;
}
.角标.零 { background: #2b313c; color: var(--字弱); }
.小字 { font-size: 13px; color: var(--字弱); }
/* CB225：密码规则五条（服务端下发、逐条列出）。手机上要读得清，行距比正文松一点。 */
.规则表 { margin: 4px 0 10px; padding-left: 20px; line-height: 1.55; }
.规则表 li { margin-top: 2px; }

/* 试用提示条 */
.试用条 {
  margin: 12px 0 0;
  padding: 10px 14px;
  border: 1px dashed var(--主);
  border-radius: 12px;
  color: var(--主);
  background: rgba(230,180,92,.08);
  font-size: 14px;
}
.提示 { padding: 10px 14px; border-radius: 12px; background: var(--卡); color: var(--字弱); font-size: 14px; }

/* 正式批次提示条（CB138：提交会写进认可库） */
.正式条 {
  margin: 12px 0 0;
  padding: 10px 14px;
  border: 1px solid var(--好);
  border-radius: 12px;
  color: var(--好);
  background: rgba(70,185,138,.08);
  font-size: 14px;
}

/* 卡片 */
.卡 {
  margin-top: 12px;
  background: var(--卡);
  border: 1px solid var(--线);
  border-radius: 16px;
  padding: 14px;
}
.卡 h2 { margin: 0 0 4px; font-size: 17px; font-weight: 600; }
.卡 h3 { margin: 0 0 8px; font-size: 15px; color: var(--字弱); font-weight: 500; }

/* 首页批次行 */
.批次行 { display: flex; align-items: center; gap: 12px; padding: 14px; }
.批次行 .主 { flex: 1; min-width: 0; }
.批次行 .名 { font-size: 16px; font-weight: 600; }
.批次行 .副 { font-size: 13px; color: var(--字弱); margin-top: 2px; }
.批次行 .去 { flex: 0 0 auto; padding: 10px 16px; min-height: 44px; display: inline-flex; align-items: center;
  border: 1px solid var(--主); border-radius: 10px; color: var(--主); font-size: 15px; }
.章 { display: inline-block; padding: 2px 8px; border-radius: 6px; font-size: 12px; margin-left: 6px; }
.章.试 { background: rgba(230,180,92,.15); color: var(--主); }
.章.完 { background: rgba(70,185,138,.15); color: var(--好); }
.章.欠 { background: rgba(224,103,94,.15); color: var(--坏); }
.章.件状态:empty { display: none; }

/* 批次页：手机单列 / 宽屏媒体左题右（CB142：一屏内看全媒体 + 题，右栏垂直居中） */
.文件块 { margin-top: 0; min-width: 0; }
.文件头 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.文件头 h2 { margin: 0 0 6px; overflow-wrap: anywhere; }
.章.类 { background: rgba(154,164,178,.14); color: var(--字弱); margin-left: 0; }
.小钮 {
  flex: 0 0 auto; min-height: 30px; padding: 0 10px;
  border-radius: 8px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字弱);
  font-size: 13px; cursor: pointer;
}
.小钮:hover { border-color: var(--主); color: var(--主); }

/* 媒体列：视频/图片/音频 + 秒条 */
.媒体列 { width: 100%; max-width: 100%; display: flex; flex-direction: column; gap: 6px; min-width: 0; }
/* 视频外框：把视频按原比例塞进可用高度里（不裁、不变形） */
.视频框 {
  position: relative;
  display: flex; align-items: center; justify-content: center;
  background: #000; border-radius: 12px; overflow: hidden; max-width: 100%;
}
.看大 {
  position: absolute; top: 8px; right: 8px; z-index: 2;
  min-height: 44px; padding: 0 12px;
  border-radius: 10px; border: 1px solid rgba(255,255,255,.28);
  background: rgba(0,0,0,.55); color: #fff; font-size: 14px; font-weight: 700; cursor: pointer;
}
.看大:active { background: rgba(230,180,92,.3); }
video {
  display: block; width: auto; height: auto; max-width: 100%;
  max-height: 60vh;                      /* 手机：不超过屏高 60% */
  background: #000; border-radius: 12px;
}
/* 当前播放秒数（CB140）：大字，0.1 秒。CB144：这一行右边放「记下秒数」 */
.秒条 { display: flex; align-items: center; gap: 6px; padding: 2px 2px 0; flex-wrap: nowrap; }
.秒条 .秒题 { font-size: 13px; color: var(--字弱); flex: 0 0 auto; }
.秒条 b {
  font-family: ui-monospace, Consolas, monospace;
  font-size: 30px; font-weight: 800; line-height: 1.05; color: var(--主);
  min-width: 3.4em; font-variant-numeric: tabular-nums;
}
/* 音频（CB138）：原生 audio 控件，iPhone 一样能拖进度条 */
.音频框 { background: var(--卡2); border: 1px solid var(--线); border-radius: 12px; padding: 16px 12px; }
.音频框 audio { display: block; width: 100%; }
/* 图片（CB138）：缩略显示，点开新窗口看原尺寸 */
.图片框 {
  background: #0a0c10; border: 1px solid var(--线);
  border-radius: 12px; padding: 8px;
  display: flex; align-items: center; justify-content: center; min-height: 0; max-width: 100%;
}
.图片框 a { display: flex; align-items: center; justify-content: center; width: 100%; }
.图片框 img {
  display: block; width: auto; height: auto;
  max-width: 100%; max-height: 60vh;      /* 手机：不超过屏高 60% */
  margin: 0 auto; border-radius: 8px;
}
/* 没有文件的文本条目：只显示文字 */
.文字条 {
  white-space: pre-wrap; word-break: break-word; overflow-wrap: anywhere;
  background: var(--卡2); border: 1px solid var(--线);
  border-radius: 12px; padding: 14px;
  font-size: 15px; line-height: 1.7;
}
.题区 { margin-top: 12px; min-width: 0; }

/* 白话（CB142）：这条是什么、生产里管什么、为什么判、凭什么判 */
.白话 {
  background: var(--卡2); border: 1px solid var(--线); border-left: 3px solid var(--主);
  border-radius: 10px; padding: 9px 11px; margin: 0 0 10px;
  font-size: 13px; line-height: 1.6; color: var(--字);
  overflow-wrap: anywhere;
}
.白话 b { color: var(--主); font-weight: 600; }

.题 { margin: 10px 0 0; }
.题 .问 { font-size: 15px; margin-bottom: 6px; }
.问行 { display: flex; align-items: flex-start; gap: 10px; }
.问行 .问 { flex: 1 1 auto; min-width: 0; }
/* 「记下秒数」（CB144）：从题目右上角挪到秒数行最右边。
   金色描边 + ⏱ + 字号 15px（＝题目字号）；和「算/拿不准/不算」之间隔着说明和题区，至少一整行。 */
.记秒钮 {
  flex: 0 0 auto; margin-left: auto; min-height: 44px; padding: 0 12px;
  display: inline-flex; align-items: center; justify-content: center; gap: 4px;
  border-radius: 10px; border: 2px solid var(--主);
  background: rgba(230,180,92,.10); color: var(--主);
  font-size: 15px; font-weight: 700; line-height: 1.2; white-space: nowrap;
  cursor: pointer; user-select: none;
}
.记秒钮:hover { background: rgba(230,180,92,.2); }
.记秒钮:active { transform: scale(.97); }
@media (max-width: 400px) {
  .秒条 b { font-size: 26px; min-width: 3em; }
  .记秒钮 { padding: 0 10px; }
}

/* 按钮行：两个或三个（CB142 起）。CB149 改成 grid：
   ① 不管几条按钮、屏幕多宽，都是一行等分（flex 的 flex-basis:0 在部分机型的
      <button> 上会被表单控件的固有宽度盖掉；grid 没有这个问题）；
   ② 就算外层规则丢了（旧 CSS 缓存），.钮 自己有 width:100%，也不会缩成“只有字那么宽”。 */
.三钮 {
  display: grid;
  grid-template-columns: repeat(var(--钮数, 3), minmax(0, 1fr));
  gap: 8px;
  width: 100%;
}
.钮 {
  width: 100%; min-width: 0;
  min-height: 52px;                /* 手指点得准 */
  display: flex; align-items: center; justify-content: center;
  padding: 0 6px;
  border-radius: 12px; border: 1px solid var(--线);
  background: #1a1e26; color: var(--字弱);   /* 未选＝暗灰 */
  font-size: 17px; font-weight: 600; line-height: 1.15;
  cursor: pointer; user-select: none;
  transition: background .12s, border-color .12s, transform .06s, color .12s;
}
.三钮.三 .钮 { font-size: 16px; }
.钮:active { transform: scale(.985); }
/* 选中（CB149）：算＝绿底白字、拿不准＝黄底深字、不算＝红底白字，都带 ✓ */
.钮.选中 { font-weight: 800; }
.钮.选中::before { content: "✓"; margin-right: 5px; font-weight: 900; }
.钮.选有 { background: #1f7a52; border-color: #46b98a; color: #fff;
  box-shadow: inset 0 0 0 1px rgba(70,185,138,.55); }
.钮.选不准 { background: #e6b45c; border-color: #f3cf8c; color: #241a06;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.28); }
.钮.选没 { background: #a83a35; border-color: #e0675e; color: #fff;
  box-shadow: inset 0 0 0 1px rgba(224,103,94,.5); }

.意见 textarea {
  width: 100%; min-height: 76px; resize: vertical;
  padding: 10px 12px; border-radius: 12px;
  border: 1px solid var(--线); background: var(--卡2); color: var(--字);
  font: inherit;
}

/* 每一件自己的提交按钮（CB142） */
.件条 { margin-top: 10px; }
.件交 { min-height: 46px; font-size: 16px; }
.件话 {
  border-radius: 10px; padding: 8px 10px; margin-top: 10px;
  font-size: 13px; overflow-wrap: anywhere;
}
.件话.好 { border: 1px solid var(--好); background: rgba(70,185,138,.10); color: var(--好); }
.件话.不准 { border: 1px solid var(--主); background: rgba(230,180,92,.10); color: var(--主); }
.件错 { margin-top: 10px; font-size: 13px; }

/* 已提交的卡当场收起成一条彩色结论，1.6 秒后整张移出主列表（CB149） */
.件卡.交完 { padding: 0; border: 0; background: none; }
.已交条 {
  display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap;
  padding: 10px 14px; border-radius: 12px; font-size: 14px;
}
.已交条.绿 { border: 1px solid var(--好); background: rgba(70,185,138,.12); color: var(--好); }
.已交条.黄 { border: 1px solid var(--主); background: rgba(230,180,92,.12); color: var(--主); }
.已交条.红 { border: 1px solid var(--坏); background: rgba(224,103,94,.12); color: var(--坏); }

.提交条 {
  position: sticky; bottom: 0; z-index: 15;
  margin-top: 16px; padding: 10px 0 calc(10px + env(safe-area-inset-bottom));
  background: linear-gradient(to top, var(--底) 78%, rgba(15,17,21,0));
}
.提交条 .小字 { margin-bottom: 6px; }
.大钮 {
  width: 100%; min-height: 54px; border: 0; border-radius: 14px;
  background: var(--主); color: #1a1305; font-size: 18px; font-weight: 700;
  cursor: pointer;
}
.大钮:disabled { opacity: .45; cursor: not-allowed; }
.大钮.次 { background: var(--卡2); color: var(--字); border: 1px solid var(--线); }

/* 发参考给 Claude（CB144）：选文件 + 说明必填 + 进度条 */
.参块 { margin-top: 12px; }
.参块 label { display: block; margin-bottom: 6px; }
#参考文件 {
  width: 100%; padding: 12px; border-radius: 12px;
  border: 1px dashed var(--主); background: var(--卡2); color: var(--字);
  font: inherit; font-size: 14px;
}
#参考说明 {
  width: 100%; min-height: 76px; resize: vertical;
  padding: 10px 12px; border-radius: 12px;
  border: 1px solid var(--线); background: var(--卡2); color: var(--字);
  font: inherit;
}
.进度 {
  height: 12px; margin: 12px 0 6px; border-radius: 999px;
  background: var(--卡2); border: 1px solid var(--线); overflow: hidden;
}
.进度条 { height: 100%; width: 0; background: var(--主); transition: width .15s; }

.已成 {
  border: 1px solid var(--好); background: rgba(70,185,138,.10);
  border-radius: 12px; padding: 12px 14px; margin-top: 12px;
}
.已成 b { color: var(--好); }
.叉 { border: 1px solid var(--坏); background: rgba(224,103,94,.1); padding: 10px 14px; border-radius: 12px; margin-top: 12px; }

/* 管理页 */
table { width: 100%; border-collapse: collapse; font-size: 14px; }
th, td { text-align: left; padding: 8px 6px; border-bottom: 1px solid var(--线); vertical-align: top; }
th { color: var(--字弱); font-weight: 500; font-size: 13px; }
.码 { font-family: ui-monospace, Consolas, monospace; font-size: 22px; letter-spacing: 4px; color: var(--主); }
input[type=text], input[type=email], select {
  width: 100%; min-height: 46px; padding: 10px 12px;
  border-radius: 10px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字); font: inherit;
}
行 { display: block; }

/* ≥768px：一件一行，左媒体、右题；右栏相对左栏垂直居中（CB142 第 8 条），
   两栏各自不超过 --可用高（窗口高 − 顶栏 − 80px），一件不用上下翻。 */
@media (min-width: 768px) {
  .窄 { padding: 14px 24px 40px; }
  .文件块 {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(340px, 420px);
    column-gap: 28px; row-gap: 4px;   /* 28px：秒数行的记秒钮与三按钮之间隔开一整行（CB144） */
    align-items: center;          /* 右栏相对左栏垂直居中 */
  }
  /* 文件名横跨两列，媒体和题从同一行开始 */
  .文件头 { grid-column: 1 / -1; }
  .媒体列 { grid-column: 1; }
  .题区 { grid-column: 2; margin-top: 0; }

  /* 媒体按原比例缩进可用高度；秒条 + 说明跟在下面。
     高度直接用 calc 给死（父级 auto 时 max-height:100% 算不出来）。
     CB144：秒条那一行多了一颗 44px 高的「记下秒数」，余量从 78px 加到 100px，
     否则整块会超出屏底十几像素（自测量到 912 > 900）。 */
  .媒体列.类视频 video { max-height: calc(var(--可用高, 640px) - 100px); }
  .媒体列.类图片 img { max-height: calc(var(--可用高, 640px) - 62px); }
  .媒体列.类视频 .视频框, .媒体列.类图片 .图片框 { flex: 0 0 auto; }
  .秒条 b { font-size: 34px; }

  /* 题区兜底：真的比一屏还多时自己滚，不把媒体挤出屏 */
  .题区 { max-height: var(--可用高, 640px); overflow-y: auto; overscroll-behavior: contain; padding-right: 4px; }
  .文字条 { max-height: var(--可用高, 640px); overflow-y: auto; }
  .钮 { min-height: 48px; }
  video { border-radius: 14px; }
}
@media (min-width: 1100px) {
  .文件块 { grid-template-columns: minmax(0, 1fr) 460px; }
}

/* ================================================================ CB149
   ① 三个按钮一行等分（见上面 .三钮）
   ② 选中色 + ✓（见 .钮.选中）
   ③ 页顶「本批已交 N / 共 M 件」、交完的空状态
   ④ 左侧「我的点评记录」（≥1180px 常驻；更窄/手机收进左上角「记录」抽屉）
   ⑤ 记录详情弹窗 + 改判
   ⑥ 同一件再次送审：上次你怎么说 / 这次请看
   ================================================================ */

.进度行 {
  margin: 10px 0 0; padding: 8px 12px;
  border: 1px solid var(--线); border-radius: 10px;
  background: var(--卡); font-size: 14px; color: var(--字);
}

.空态 {
  margin-top: 12px; padding: 20px 14px; text-align: center;
  border: 1px dashed var(--线); border-radius: 14px; background: var(--卡);
}
.空大 { font-size: 17px; font-weight: 700; color: var(--好); margin-bottom: 6px; }

/* 判定颜色章（记录里 / 上次你怎么说） */
.章.只看 { background: rgba(154,164,178,.14); color: var(--字弱); }
.章.绿 { background: rgba(70,185,138,.18); color: #6fe0b0; }
.章.黄 { background: rgba(230,180,92,.20); color: var(--主); }
.章.红 { background: rgba(224,103,94,.18); color: #f08a82; }

/* 上次你怎么说 / 这次请看 */
.关注块 { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 8px; margin: 8px 0 10px; }
.关注盒 { min-width: 0; border: 1px solid var(--线); border-radius: 12px; padding: 9px 11px; background: var(--卡2); }
.关注盒.上次 { border-left: 3px solid var(--字弱); }
.关注盒.这次 { border-left: 3px solid var(--主); background: rgba(230,180,92,.07); }
.关注题 { font-size: 13px; font-weight: 700; color: var(--主); margin-bottom: 4px; }
.关注盒.上次 .关注题 { color: var(--字弱); }
.历史上行 { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; font-size: 13px; margin-top: 3px; }
.历史话 { color: var(--字); overflow-wrap: anywhere; }
.关注话 { font-size: 13px; line-height: 1.6; overflow-wrap: anywhere; color: var(--字); }

/* CB167：再问交代（灰框）——以前判过、按新标准再问，卡片最上面写清三件事：
   ①你上次什么时候、在哪判过 ②当时原话 ③这次只请你判哪里、为什么再问 */
.再问块 {
  margin: 8px 0 10px; padding: 9px 11px;
  border: 1px solid var(--线); border-left: 3px solid var(--主);
  border-radius: 12px; background: var(--卡2);
}
.再问头 { font-size: 12px; color: var(--字弱); margin-bottom: 5px; }
.再问行 { font-size: 13px; line-height: 1.65; color: var(--字); overflow-wrap: anywhere; }
.再问行 + .再问行 { margin-top: 3px; }
.再问行 b { color: var(--字); font-weight: 700; }
.再问哪, .再问多 { color: var(--字弱); font-size: 12px; }
.再问多 { margin-top: 5px; }
.再问这次 b { color: var(--主); }
.再问因 { color: var(--字弱); }

/* CB167：「这个我已经定过」——次级按钮，题目下方靠右，不跟答题三钮并排 */
.已定过行 {
  display: flex; justify-content: flex-end; align-items: center; gap: 8px;
  margin-top: 10px; padding-top: 8px; border-top: 1px dashed var(--线);
}
.已定过注 { font-size: 12px; color: var(--字弱); }
.已定过钮 {
  min-height: 44px; padding: 0 14px; border-radius: 10px;
  border: 1px solid var(--线); background: transparent; color: var(--字弱);
  font-size: 13px; cursor: pointer;
}
.已定过钮:hover { color: var(--字); border-color: var(--字弱); }
.已定过钮:disabled { opacity: .55; cursor: default; }
.已交条.灰 { border: 1px solid var(--线); background: var(--卡2); color: var(--字弱); }

/* 冲突提示（同一维度这次和上次相反） */
.冲突条 {
  margin-top: 10px; padding: 10px;
  border: 1px solid var(--主); border-radius: 12px;
  background: rgba(230,180,92,.10); font-size: 13px; line-height: 1.6;
}
.冲突钮 { display: flex; gap: 8px; margin-top: 8px; }
.冲突确定, .冲突取消 {
  flex: 1 1 0; min-height: 42px; border-radius: 10px;
  font-size: 14px; font-weight: 700; cursor: pointer;
}
.冲突确定 { border: 0; background: var(--主); color: #1a1305; }
.冲突取消 { border: 1px solid var(--线); background: var(--卡2); color: var(--字); }

/* 旧样式的自检条 */
.旧样式条 {
  margin: 10px 0; padding: 10px 12px; border-radius: 10px;
  border: 1px solid var(--主); background: rgba(230,180,92,.12);
  color: var(--主); font-size: 13px;
}
.旧样式条 a { text-decoration: underline; font-weight: 700; margin-left: 4px; }

/* 左侧栏 / 抽屉 */
.记录钮 {
  display: inline-flex; align-items: center; gap: 6px; flex: 0 0 auto;
  min-height: 44px; min-width: 44px; padding: 0 12px; justify-content: center;
  border-radius: 10px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字);
  font-size: 15px; font-weight: 600; cursor: pointer; white-space: nowrap;
}
/* 窄屏顶栏一行放得下：邮箱隐掉（顶栏挤成两行会把卡片顶下去，媒体+三按钮就出屏了） */
@media (max-width: 520px) {
  .顶栏 { flex-wrap: nowrap; gap: 8px; }
  .顶栏 .标 { white-space: nowrap; flex: 0 0 auto; }
  .顶栏 #谁 { display: none; }
}
.遮罩 { position: fixed; inset: 0; z-index: 55; background: rgba(0,0,0,.55); display: none; }
.遮罩.开 { display: block; }
.侧栏 {
  position: fixed; top: 0; bottom: 0; left: 0; z-index: 60;
  width: min(88vw, 340px);
  background: var(--卡); border-right: 1px solid var(--线);
  padding: 12px 12px 40px; overflow: auto; overscroll-behavior: contain;
  transform: translateX(-102%); visibility: hidden; transition: transform .18s;
}
.侧栏.开 { transform: none; visibility: visible; }
.侧栏头 { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.侧栏头 b { font-size: 16px; }
.侧栏关 {
  margin-left: auto; width: 36px; height: 36px; flex: 0 0 auto;
  border-radius: 10px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字弱); font-size: 20px; line-height: 1; cursor: pointer;
}

/* 记录：按天折叠 */
.天 {
  margin-top: 8px; border: 1px solid var(--线); border-radius: 12px;
  background: var(--卡2); overflow: hidden;
}
.天头 {
  list-style: none; cursor: pointer; padding: 9px 10px;
  display: flex; align-items: center; gap: 4px; font-size: 14px;
}
.天头::-webkit-details-marker { display: none; }
.天头::before { content: "▸"; color: var(--字弱); margin-right: 2px; }
.天[open] > .天头::before { content: "▾"; }
.天名 { font-weight: 700; }
.天件数 { color: var(--字弱); font-size: 13px; }
.天块 { border-top: 1px solid var(--线); }
.天小字 { padding: 6px 10px 0; font-size: 13px; color: var(--字弱); }
.记录件 {
  display: flex; gap: 8px; align-items: flex-start;
  padding: 8px 10px; border-top: 1px solid var(--线); color: var(--字);
}
.记录件:hover { background: rgba(230,180,92,.08); }
.缩略 {
  flex: 0 0 auto; width: 44px; height: 44px; border-radius: 8px; overflow: hidden;
  background: #0b0e13; border: 1px solid var(--线);
  display: flex; align-items: center; justify-content: center;
}
.缩略 img { width: 100%; height: 100%; object-fit: cover; display: block; }
.类字 { font-size: 12px; color: var(--字弱); }
.记录文 { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.记录名 { font-size: 13px; overflow-wrap: anywhere; }
.记录副 { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.摘 { font-size: 12px; color: var(--字弱); overflow-wrap: anywhere; }
.筛选 {
  display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
  padding: 8px 10px; border-top: 1px solid var(--线);
}
.筛选 input {
  min-height: 36px; padding: 0 8px; font: inherit; font-size: 13px;
  background: var(--卡); color: var(--字); border: 1px solid var(--线); border-radius: 8px;
}
.筛选 input[type=search] { flex: 1 1 120px; min-width: 0; }
.筛选 label { flex: 0 0 auto; }

/* 记录详情弹窗 + 改判 */
.弹 {
  position: fixed; inset: 0; z-index: 80; display: none;
  align-items: center; justify-content: center; padding: 16px;
  background: rgba(0,0,0,.62);
}
.弹框 {
  width: min(560px, 100%); max-height: 86vh; overflow: auto;
  background: var(--卡); border: 1px solid var(--线); border-radius: 16px; padding: 14px;
}
.弹头 { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 8px; }
.弹头 b { flex: 1 1 auto; min-width: 0; font-size: 16px; overflow-wrap: anywhere; }
.弹身 { min-width: 0; }
.弹章行 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.弹块 { background: var(--卡2); border: 1px solid var(--线); border-radius: 12px; padding: 10px; margin-bottom: 8px; }
.弹话 { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 14px; }
.弹改 { margin-top: 10px; border-top: 1px solid var(--线); padding-top: 10px; }
.弹改 textarea {
  width: 100%; min-height: 76px; margin-top: 8px; padding: 10px 12px;
  border-radius: 12px; border: 1px solid var(--线); background: var(--卡2); color: var(--字); font: inherit;
}
.弹改 .大钮 { margin-top: 8px; }
.小字链接 {
  margin-top: 10px; padding: 0; border: 0; background: none;
  color: var(--主); font-size: 13px; text-decoration: underline; cursor: pointer;
  display: inline-flex; align-items: center; min-height: 44px;
}

@media (max-width: 767px) {
  .关注块 { grid-template-columns: 1fr; }
}
@media (min-width: 768px) {
  /* 电脑两栏时，「上次你怎么说 / 这次请看」横跨整张卡（媒体和题都从下一行开始） */
  .关注块 { grid-column: 1 / -1; }
}

/* ≥1180px：左侧栏常驻（更窄的窗口和手机一样用抽屉，免得把题挤成一列字） */
@media (min-width: 1180px) {
  .壳 {
    display: grid; grid-template-columns: 300px minmax(0, 1fr);
    gap: 16px; max-width: 1680px; margin: 0 auto; padding: 0 14px;
    align-items: start;
  }
  .壳 .窄 { max-width: none; margin: 0; padding-left: 0; padding-right: 0; }
  .侧栏 {
    position: sticky; top: calc(var(--顶栏底, 64px) + 10px);
    left: auto; bottom: auto; width: auto;
    height: calc(100vh - var(--顶栏底, 64px) - 24px);
    margin-top: 12px; padding: 12px;
    border: 1px solid var(--线); border-radius: 14px;
    transform: none; visibility: visible;
  }
  .记录钮, .遮罩 { display: none !important; }
  .侧栏关 { display: none; }
}

/* ================================================================ CB155
   ① 每页顶部的搜索行（吸顶，跟顶栏一起）
   ② 人话名（大字）+ 编号（灰字）
   ③ 搜索页 / 系统在变好页 / 标准变更记录页
   ================================================================ */

/* ① 搜索行：接在顶栏下面，一起吸顶。手机上不显示（底栏有「搜索」，省一条高度）。 */
.搜索行 {
  position: sticky; top: calc(var(--安全顶) + var(--顶提示高, 0px) + var(--顶栏高, 0px)); z-index: 19;
  display: flex; align-items: center; gap: 8px;
  padding: 8px 14px;
  background: rgba(15,17,21,.96);
  border-bottom: 1px solid var(--线);
  backdrop-filter: blur(8px);
}
.搜索行 input[type=search] {
  flex: 1 1 auto; min-width: 0; min-height: 44px;
  padding: 0 12px; border-radius: 10px;
  border: 1px solid var(--线); background: var(--卡2); color: var(--字);
  font: inherit; font-size: 14px;
}
.搜索行 input[type=search]::placeholder { color: var(--字弱); }
.搜索行 input[type=search]:focus { outline: 2px solid var(--主); outline-offset: 1px; }
.搜索去 {
  flex: 0 0 auto; min-width: 52px; min-height: 44px;
  border-radius: 10px; border: 2px solid var(--主);
  background: rgba(230,180,92,.10); color: var(--主);
  font-size: 15px; font-weight: 700; cursor: pointer;
}
.搜索链 {
  flex: 0 0 auto; min-height: 44px; padding: 0 10px;
  display: inline-flex; align-items: center;
  border-radius: 10px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字弱); font-size: 13px; white-space: nowrap;
}
.搜索链:hover { border-color: var(--主); color: var(--主); }
@media (max-width: 430px) {
  .搜索行 { gap: 6px; padding: 6px 10px; }
  .搜索行 input[type=search] { font-size: 13px; min-height: 38px; padding: 0 9px; }
  .搜索去 { min-width: 44px; min-height: 38px; font-size: 14px; }
  .搜索链 { padding: 0 7px; font-size: 12px; min-height: 38px; }
}

/* ② 人话名 + 编号灰字 */
.人话名 { font-size: 18px; font-weight: 700; line-height: 1.35; overflow-wrap: anywhere; }
.灰字 {
  display: block; margin-top: 2px;
  font-family: ui-monospace, Consolas, monospace;
  font-size: 12px; font-weight: 400; color: var(--字弱);
  overflow-wrap: anywhere;
}
.文件头 .人话名 { margin: 0; }
.记录名 .人话名, .记录名 .灰字 { font-size: 13px; }

/* ③ 公共：结果行 / 分组标题 / 数字块 */
.页题 { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin: 14px 0 2px; }
.页题 h1 { margin: 0; font-size: 20px; }
.组 { margin-top: 14px; }
.组头 {
  display: flex; align-items: center; gap: 8px;
  font-size: 14px; font-weight: 700; color: var(--主);
  padding: 4px 2px 6px;
}
.组头 .数 {
  background: rgba(230,180,92,.16); color: var(--主);
  border-radius: 999px; padding: 0 8px; font-size: 12px; font-weight: 700;
}
.行卡 {
  display: block; padding: 10px 12px; margin-top: 6px;
  border: 1px solid var(--线); border-radius: 12px; background: var(--卡);
  color: var(--字);
}
a.行卡:hover { border-color: var(--主); background: rgba(230,180,92,.06); }
.行名 { font-size: 15px; font-weight: 600; overflow-wrap: anywhere; }
.行副 { font-size: 12px; color: var(--字弱); margin-top: 2px; overflow-wrap: anywhere; }
.行片 { font-size: 13px; color: var(--字); margin-top: 6px; line-height: 1.55; overflow-wrap: anywhere; }
.行片 mark { background: rgba(230,180,92,.28); color: var(--字); border-radius: 3px; padding: 0 2px; }

/* 系统在变好 */
.数排 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-top: 12px; }
.数块 { border: 1px solid var(--线); border-radius: 14px; background: var(--卡); padding: 12px; min-width: 0; }
.数块 .小字 { margin-bottom: 4px; }
.数大 { font-family: ui-monospace, Consolas, monospace; font-size: 30px; font-weight: 800; line-height: 1.1; color: var(--主); }
.数注 { font-size: 12px; color: var(--字弱); margin-top: 4px; line-height: 1.5; }
.图盒 { border: 1px solid var(--线); border-radius: 14px; background: var(--卡); padding: 12px; margin-top: 10px; }
.图盒 svg { display: block; width: 100%; height: auto; }
.图空 { padding: 18px 6px; text-align: center; color: var(--字弱); font-size: 13px; }
.表 { width: 100%; border-collapse: collapse; font-size: 13px; margin-top: 8px; }
.表 th, .表 td { padding: 6px 4px; border-bottom: 1px solid var(--线); text-align: right; }
.表 th:first-child, .表 td:first-child { text-align: left; }
.表 td.率 { font-family: ui-monospace, Consolas, monospace; }

.改动条 { border: 1px solid var(--线); border-radius: 14px; background: var(--卡); padding: 12px; margin-top: 10px; }
.改动头 { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.改动日 { font-family: ui-monospace, Consolas, monospace; font-size: 12px; color: var(--字弱); }
.改动话 { font-size: 15px; font-weight: 600; margin-top: 4px; overflow-wrap: anywhere; }
.改动块 { margin-top: 8px; border-left: 3px solid var(--字弱); padding: 2px 0 2px 10px; }
.改动块.效果 { border-left-color: var(--好); }
.改动题 { font-size: 12px; color: var(--主); font-weight: 700; margin-bottom: 2px; }
.改动文 { font-size: 13px; line-height: 1.6; overflow-wrap: anywhere; }
.改动文 .从 { color: var(--字弱); font-family: ui-monospace, Consolas, monospace; font-size: 12px; }
.效果改 { display: flex; gap: 8px; flex-wrap: wrap; align-items: baseline; font-size: 13px; }
.改前 { color: var(--坏); }
.改后 { color: var(--好); font-weight: 700; }
.箭头 { color: var(--字弱); }

/* 标准变更记录 */
.版卡 { border: 1px solid var(--线); border-radius: 14px; background: var(--卡); padding: 14px; margin-top: 10px; }
.版卡.待补 { border-color: var(--主); }
.版头 { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.版名 { font-size: 17px; font-weight: 800; color: var(--主); }
.版时 { font-size: 12px; color: var(--字弱); font-family: ui-monospace, Consolas, monospace; }
.版改 { margin: 8px 0 0; padding-left: 18px; font-size: 14px; line-height: 1.7; }
.版改 li { margin-top: 2px; }
.版数 { margin-top: 8px; font-size: 13px; color: var(--字弱); }
.认可行 { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; padding: 7px 0; border-top: 1px solid var(--线); font-size: 13px; }
.标准章 { background: rgba(70,185,138,.16); color: #6fe0b0; border-radius: 6px; padding: 1px 7px; font-size: 12px; }
.标准章.旧 { background: rgba(154,164,178,.14); color: var(--字弱); }

@media (max-width: 560px) {
  .数排 { grid-template-columns: 1fr; }
  .数大 { font-size: 26px; }
}

/* 首页两个入口（系统在变好 / 标准变更记录） */
.两页行 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 10px; }
.两页 {
  display: flex; flex-direction: column; gap: 4px; min-height: 88px;
  padding: 12px; border: 1px solid var(--线); border-radius: 12px;
  background: var(--卡2); color: var(--字);
}
.两页:hover { border-color: var(--主); background: rgba(230,180,92,.07); }
.两页 b { font-size: 15px; color: var(--主); }
@media (max-width: 560px) { .两页行 { grid-template-columns: 1fr; } }

/* ================================================================ CB162
   手机 App 体验重做：
   ① 底部五个入口（待审/点评记录/搜索/系统稳定性/我），拇指够得到；
   ② 批次页一次一件：媒体满宽、左右滑换件、答题按钮固定在底栏之上；
   ③ 图片点一下全屏（可双指放大）；视频下面是秒数刻度；
   ④ 新页：点评记录 / 系统稳定性 / 我。
   电脑（≥1200）一律不动：左边栏 + 左右对照照旧。
   ================================================================ */

/* ① 底栏 */
body.有底栏 { padding-bottom: calc(var(--底栏高) + var(--安全底) + 8px); }
.底栏 {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 50;
  display: flex; align-items: stretch;
  height: calc(56px + var(--安全底));
  padding-bottom: var(--安全底);
  background: rgba(15,17,21,.985);
  border-top: 1px solid var(--线);
  backdrop-filter: blur(10px);
}
.底钮 {
  position: relative; flex: 1 1 0; min-width: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  min-height: 56px; color: var(--字弱); font-size: 11px; line-height: 1.2;
  border: 0; background: none; text-decoration: none;
}
.底钮.选 { color: var(--主); }
.底图 { font-size: 20px; line-height: 1; }
.底钮.选 .底图 { transform: translateY(-1px); }
.底点 {
  position: absolute; top: 5px; left: 50%; margin-left: 6px;
  min-width: 18px; height: 18px; padding: 0 5px;
  border-radius: 999px; background: var(--坏); color: #fff;
  font-style: normal; font-size: 11px; font-weight: 700; line-height: 18px; text-align: center;
}
@media (min-width: 1200px) { .底栏 { display: none; } }

/* 手机/平板：顶栏收紧，正文 16px 起，正文里的链接也给够手指面积 */
@media (max-width: 767px), (orientation: landscape) and (max-height: 620px) and (max-width: 1100px) {
  #搜索行 { display: none !important; }
  .顶栏 { gap: 6px; padding: 5px 8px; }
  .顶题 b { font-size: 15px; }
  .窄 { padding: 10px 12px 28px; }
  .卡 { padding: 12px; border-radius: 14px; }
  .小字 { font-size: 13px; }
  .白话 { font-size: 14px; }
  .题 .问 { font-size: 16px; }
  /* 正文里的链接（不是整张卡）也做到 44 高，不让人点偏 */
  .窄 a[href]:not(.行卡):not(.两页):not(.记录件):not(.去):not(.底钮):not(.搜索链):not(.大钮) {
    display: inline-flex; align-items: center; min-height: 44px;
  }
  .搜索行 input[type=search], #按周, #按天 { font-size: 16px; }
}

/* ② 批次页 · 手机一次一件 */
.翻条 { display: none; }
.答题台 { display: none; }
@media (max-width: 767px), (orientation: landscape) and (max-height: 620px) and (max-width: 1100px) {
  body.单件 .件卡 { display: none; }
  body.单件 .件卡.当前 { display: block; }
  body.单件 .提交条 { display: none !important; }
  /* CB166：底部让位改成「答题台实测高 + 底栏实测高 + 安全区 + 16px」，
     由 batch.html 量完写进 --答台占位；body 原来的底栏让位在这里撤掉，免得叠两层空太多。 */
  body.单件 { padding-bottom: 0; }
  body.单件 .窄 { padding-bottom: var(--答台占位, calc(300px + 56px + var(--安全底) + 16px)); }
  .翻条 {
    display: flex; align-items: center; gap: 8px;
    margin: 8px 0 0; padding: 4px 0;
  }
  .翻条 .翻前, .翻条 .翻后 {
    flex: 0 0 auto; min-width: 64px; min-height: 44px;
    border-radius: 11px; border: 1px solid var(--线); background: var(--卡2);
    color: var(--字); font-size: 15px; font-weight: 600; cursor: pointer;
  }
  .翻条 .翻前:disabled, .翻条 .翻后:disabled { opacity: .35; }
  .翻条 .翻计 { flex: 1 1 auto; text-align: center; font-size: 13px; color: var(--字弱);
    font-variant-numeric: tabular-nums; }
  .答题台 {
    display: block; position: fixed; left: 0; right: 0;
    bottom: calc(56px + var(--安全底)); z-index: 40;
    max-height: 58vh; overflow-y: auto; overscroll-behavior: contain;
    padding: 10px 12px 12px;
    /* CB166：底色与页面同色、完全不透明。原来 rgba(...,.985) 还漏 1.5%，
       后面的视频色块和正文都会隐约透出来（iPhone 上看得很明显）。 */
    background: var(--底);
    border-top: 1px solid var(--主);
    box-shadow: 0 -12px 30px rgba(0,0,0,.5);
  }
  .答题台 .题 { margin: 0 0 4px; }
  /* CB180：意见框必须真的露出来。CB176 把答题台改成三档以后，「展开意见」这个类
     没有任何地方再加了，可这两条隐藏规则只认它 —— 结果手机竖屏不管哪一档，
     意见框都是 display:none，想给整件写一句根本没地方写（11:51 丢意见就是这一段）。 */
  .答题台 .意见 { display: none; }
  .答题台.展开意见 .意见,
  .答题台.档半开 .意见,
  .答题台.档全开 .意见 { display: block; }
  .答题台 .意见 textarea { min-height: 64px; }
  .答题台 .件条 { margin-top: 8px; }
  .答题台 .件交 { min-height: 50px; font-size: 17px; }
  /* CB167：定过按钮在手机上也要点得着（≥40），但仍是次级样子，不跟答题钮抢眼 */
  .答题台 .已定过行 { margin-top: 8px; }
  .答题台 .已定过钮 { min-height: 44px; padding: 0 14px; }
  .答题台 .题 + .题 { margin-top: 10px; }
  .答题台 .白话 { display: none; }
  .答头 { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
  .答头 .答计 { font-size: 12px; color: var(--字弱); flex: 1 1 auto; }
  .答头 .意见钮 {
    min-height: 44px; padding: 0 10px; border-radius: 9px;
    border: 1px solid var(--线); background: var(--卡2); color: var(--字);
    font-size: 13px; cursor: pointer;
  }
  .答头 .意见钮.开 { border-color: var(--主); color: var(--主); }
  .件卡.当前 .媒体列 { margin-bottom: 2px; }
  /* 顶栏已经写着这一件的名字和编号，卡头在手机上不重复占高度 */
  .件卡.当前 .文件头 { display: none; }
  .件卡.当前 .媒体列 > p { display: none; }
  .件卡.当前 .视频框 { width: 100%; height: var(--媒体高, 46vh); }
  .件卡.当前 video { width: 100%; height: 100%; max-height: none; object-fit: contain; }
  .件卡.当前 .图片框 { width: 100%; height: var(--媒体高, 46vh); min-height: 120px; padding: 4px; overflow: hidden; }
  .件卡.当前 .图片框 a { width: 100%; height: 100%; min-height: 0; }
  /* CB179：跟视频同一套写法（宽高都 100% + contain），不再依赖百分比 max-height——
     WebKit 在「a 高 100% + img 只给 max-height:100%」这种组合下会把图算成 0 高，整块看着是黑的。 */
  .件卡.当前 .图片框 img { width: 100%; height: 100%; max-width: 100%; max-height: none; object-fit: contain; }
  /* 只看/不能判的参考卡不受答题台影响 */
  body.单件 .件卡.参考卡 { display: none; }
  /* 手机上媒体放到最上面：先看片，再看向导；答题台固定在底部 */
  body.单件 .件卡.当前 .文件块 { display: flex; flex-direction: column; }
  body.单件 .件卡.当前 .文件头 { order: 0; }
  body.单件 .件卡.当前 .媒体列 { order: 1; }
  body.单件 .件卡.当前 .关注块 { order: 2; margin: 6px 0 0; }
  body.单件 .件卡.当前 .题区 { order: 3; margin-top: 6px; }
  body.单件 #进度行 { display: none !important; }
  /* 顶栏已经写了批次名和编号；这几块在手机上省掉，把高度让给视频 */
  body.单件 #标题, body.单件 #说明, body.单件 .试用条, body.单件 .正式条 { display: none !important; }
  body.单件 .答题台 .翻条 { margin: 0 0 6px; }
  /* 第一次判的件没有“上次”，别占一块高度 */
  .关注盒.上次.空 { display: none; }
  .关注块 { gap: 6px; }
  .关注盒 { padding: 7px 9px; }
  .答题台 .题.意见题 { display: none; }
  .答题台.展开意见 .题.意见题,
  .答题台.档半开 .题.意见题,
  .答题台.档全开 .题.意见题 { display: block; }
}

/* ③ 视频/图片全屏 */
.看片 {
  position: fixed; inset: 0; z-index: 96; display: none;
  flex-direction: column; background: #000;
  padding-top: var(--安全顶); padding-bottom: var(--安全底);
}
.看片.开 { display: flex; }
.看片头 {
  display: flex; align-items: center; gap: 8px; padding: 6px 10px;
  background: rgba(0,0,0,.7); color: var(--字); font-size: 13px;
}
.看片头 .看图名 { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.看片头 button {
  flex: 0 0 auto; min-height: 44px; min-width: 44px; padding: 0 10px;
  border-radius: 10px; border: 1px solid var(--线); background: var(--卡2);
  color: var(--字); font-size: 18px; cursor: pointer;
}
.看片身 { flex: 1 1 auto; min-height: 0; display: flex; align-items: center; justify-content: center; }
.看片身 video { width: 100%; height: 100%; max-height: 100%; object-fit: contain; background: #000; }
.看图 {
  position: fixed; inset: 0; z-index: 95; display: none;
  flex-direction: column; background: #000;
  padding-top: var(--安全顶); padding-bottom: var(--安全底);
}
.看图.开 { display: flex; }
.看图头 {
  display: flex; align-items: center; gap: 8px; padding: 6px 10px;
  background: rgba(0,0,0,.7); color: var(--字); font-size: 13px;
}
.看图头 .看图名 { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.看图头 a, .看图头 button {
  flex: 0 0 auto; min-height: 44px; min-width: 44px; padding: 0 10px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 10px; border: 1px solid var(--线); background: var(--卡2);
  color: var(--字); font-size: 14px; cursor: pointer;
}
/* CB181：全屏看图 —— 双指放大交给浏览器（配合 img 的 touch-action: pinch-zoom），
   底部一条状态字（加载中/进度/失败原因），失败时下面出一颗「重试」。 */
.看图身 { position: relative; flex: 1 1 auto; overflow: auto; display: flex; align-items: center; justify-content: center; touch-action: pinch-zoom; }
.看图身 img {
  display: block; margin: auto; max-width: 100%; max-height: 100%;
  touch-action: pinch-zoom; user-select: none;
  background: #14161c;   /* 图还没解出来时是深灰底，不是纯黑 */
}
.看图身 img.放大 { max-width: none; max-height: none; width: 200%; }
#看图态 {
  position: absolute; left: 50%; bottom: 16px; transform: translateX(-50%);
  max-width: calc(100% - 24px);
  background: rgba(0,0,0,.78); color: #e8c66a;
  font-size: 15px; line-height: 1.35; padding: 8px 14px; border-radius: 10px;
  pointer-events: none; white-space: normal; text-align: center;
}
#看图态.错 { color: #ff9c8a; }
.看图重 { flex: 0 0 auto; display: flex; justify-content: center; padding: 0 12px 12px; background: #000; }
.看图重 .大钮 { min-height: 46px; min-width: 140px; }
/* 卡片里的图片：没到之前盖一层字，不留黑框 */
.图片框 { position: relative; }
.图占 {
  position: absolute; inset: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 8px;
  background: rgba(16,18,24,.92); color: var(--字弱); font-size: 14px;
  border-radius: 10px; padding: 12px; text-align: center;
}
.图占.错 { color: #ff9c8a; }
.图重 {
  min-height: 44px; min-width: 96px; padding: 0 14px;
  border-radius: 10px; border: 1px solid var(--线); background: var(--卡2);
  color: var(--字); font-size: 15px; cursor: pointer;
}

/* 秒数刻度：单独一排，不挨着答案按钮 */
.秒刻度 {
  display: flex; gap: 6px; overflow-x: auto; padding: 6px 2px 2px;
  min-height: 50px;
  scrollbar-width: none;
}
.秒刻度::-webkit-scrollbar { display: none; }
.秒刻度 button {
  flex: 0 0 auto; min-width: 48px; min-height: 44px;
  border-radius: 999px; border: 1px solid var(--线); background: var(--卡2);
  color: var(--字弱); font-size: 13px; font-family: ui-monospace, Consolas, monospace;
  cursor: pointer; font-variant-numeric: tabular-nums;
}
.秒刻度 button:active { border-color: var(--主); color: var(--主); }

/* 待发送 / 离线提示 */
.待发条 {
  position: fixed; left: 12px; right: 12px; z-index: 46;
  bottom: calc(56px + var(--安全底) + 10px);
  border: 1px solid var(--主); background: #2a2110; color: var(--主);
  border-radius: 12px; padding: 9px 12px; font-size: 13px;
  box-shadow: 0 8px 24px rgba(0,0,0,.4);
}
.待发条 b { color: #ffd58a; }
.已交标记 { color: var(--好); font-weight: 700; }

/* 下拉刷新 */
.下拉刷新 {
  position: fixed; top: 0; left: 0; right: 0; height: 0; overflow: hidden;
  padding-top: var(--安全顶);
  display: flex; align-items: flex-end; justify-content: center;
  background: rgba(15,17,21,.9); color: var(--字弱); font-size: 12px;
  transition: height .12s; z-index: 70;
}

/* ④ 新页公共：整块可点的行、记录页、我、系统稳定性 */
.页卡 { background: var(--卡); border: 1px solid var(--线); border-radius: 14px; padding: 14px; margin-top: 10px; }
.页卡 h2 { margin: 0 0 6px; font-size: 16px; }
.记录大 {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 11px 12px; margin-top: 6px;
  border: 1px solid var(--线); border-radius: 12px; background: var(--卡); color: var(--字);
}
.记录大:active { border-color: var(--主); }
.记录大 .缩略 { width: 56px; height: 56px; }
.记录大 .记录文 { gap: 4px; }
.记录大 .记录名 { font-size: 15px; font-weight: 600; }
.记录大 .记录话 { font-size: 13px; color: var(--字); overflow-wrap: anywhere; }
.记录大 .记录时 { font-size: 12px; color: var(--字弱); }
.筛选行 { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.筛选行 input {
  flex: 1 1 120px; min-width: 0; min-height: 44px; padding: 0 10px;
  border-radius: 10px; border: 1px solid var(--线); background: var(--卡2); color: var(--字);
  font: inherit; font-size: 16px;
}
.我行 { display: flex; align-items: baseline; gap: 10px; padding: 9px 0; border-top: 1px solid var(--线); font-size: 14px; }
.我名 { flex: 0 0 76px; color: var(--字弱); }
.我值 { flex: 1 1 auto; min-width: 0; overflow-wrap: anywhere; }
.装法 { margin: 6px 0 0 18px; padding: 0; font-size: 14px; line-height: 1.75; }
.装法 li { margin-top: 4px; }
.数灯 { display: inline-block; width: 12px; height: 12px; border-radius: 999px; vertical-align: -1px; }
.数灯.绿 { background: var(--好); } .数灯.黄 { background: var(--主); }
.数灯.红 { background: var(--坏); } .数灯.灰 { background: #5b6472; }
.图例 { display: flex; gap: 14px; flex-wrap: wrap; font-size: 13px; color: var(--字弱); margin-top: 8px; }
.图例 span { display: inline-flex; align-items: center; gap: 6px; }

/* 空状态的两个大按钮（交完一批） */
.空态 .空钮行 { display: grid; grid-template-columns: 1fr; gap: 10px; margin-top: 14px; }
.空态 .空钮行 .大钮 { font-size: 17px; }
@media (min-width: 560px) { .空态 .空钮行 { grid-template-columns: 1fr 1fr; } }

/* 手机上所有主要控件不小于 44 */
@media (max-width: 767px) {
  .大钮, .钮, .搜索去, .搜索链, .记录钮, .侧栏关, .件交 { min-height: 44px; }
  .钮 { font-size: 16px; }
  .三钮.三 .钮 { font-size: 16px; }
  /* 手机顶栏只留 返回 · 标题 · 巡检灯；记录和待审计数在底栏 */
  #记录钮, #角标 { display: none !important; }
  .顶右 { gap: 0; }
}

/* 首页「还有几批没审」 */
.待审卡 { padding: 16px 14px; }
.待审大 { font-size: 21px; font-weight: 800; line-height: 1.3; color: var(--主); }
.待审大.清 { color: var(--好); }
.待审卡 .大钮 { margin-top: 10px; text-decoration: none; }
.记录钮字 { font-size: 14px; margin-left: 4px; }
@media (max-width: 900px) { .记录钮字 { display: none; } }



/* ================================================================ CB176
   Gary 11:25（手机审片页）：“上面的文字一翻，播放器就没了；下边的答题卡片翻不上去，
   某一段有问题标不到秒。”
   ① 播放器吸顶：当前件的「翻件条 + 播放器 + 秒数 + 刻度」钉在顶栏下面，页面怎么滚都在；
   ② 答题台三档抽屉：收起（三钮 + 一行动作，约屏高 1/6）／半开（加意见与时间点）／全开，可上下拖；
   ③ 记下的时间点：每处一行（秒 + 小输入框 + 删），点秒跳回那一秒；提交时一起交，服务端按秒存；
   ④ 说明 / 再问灰框默认两行，点一下展开；
   ⑤ 音频加带秒刻度的进度条（点哪跳哪）。
   ================================================================ */

/* ⑤ 音频进度条：44 高，手指点得准；刻度只是标尺（不是按钮，不抢 44×44 的名额） */
.音频进度 { position: relative; height: 44px; margin-top: 2px; cursor: pointer; touch-action: manipulation; }
.音频进度 .轨 {
  position: absolute; left: 0; right: 0; top: 14px; height: 10px;
  border-radius: 999px; background: var(--卡2); border: 1px solid var(--线); overflow: hidden;
}
.音频进度 .填 {
  position: absolute; left: 1px; top: 15px; height: 8px; width: 0;
  border-radius: 999px; background: var(--主);
}
.音频进度 .刻们 { position: absolute; inset: 0; pointer-events: none; }
.音频进度 .刻们 i { position: absolute; top: 9px; width: 1px; height: 18px; background: #39404d; }
.音频进度 .刻们 span {
  position: absolute; top: 27px; transform: translateX(-50%);
  font-family: ui-monospace, Consolas, monospace; font-size: 10px; color: var(--字弱);
}

/* 时间点（CB177）：每条整宽、多行、全文不截断；点一条打开大编辑层。
   列表区自己滚（overscroll-behavior: contain），第一条上沿留 2px，滚到头也不被裁。 */
.时间点块 { margin-top: 10px; border-top: 1px dashed var(--线); padding-top: 8px; min-width: 0; }
.时间点头 { display: flex; align-items: baseline; gap: 8px; font-size: 13px; }
.时间点头 b { color: var(--主); font-weight: 700; }
.点计 { font-size: 12px; color: var(--字弱); }
.点空 { margin-top: 4px; }
.点行们 {
  margin-top: 6px; padding: 2px 2px 4px;
  max-height: 38vh; overflow-y: auto; overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch; scroll-padding-top: 2px; scroll-padding-bottom: 4px;
}
.点行们:empty { display: none; }
.点条 {
  display: block; width: 100%; margin-top: 6px; padding: 8px 10px;
  text-align: left; border-radius: 12px; border: 1px solid var(--线);
  background: var(--卡2); color: var(--字); font: inherit; cursor: pointer;
}
.点条:first-child { margin-top: 0; }
.点条:active { border-color: var(--主); background: rgba(230,180,92,.10); }
.点条 .点秒 {
  display: block; margin-bottom: 2px;
  color: var(--主); font-family: ui-monospace, Consolas, monospace;
  font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums;
}
.点条 .点文 {
  display: block; white-space: pre-wrap; overflow-wrap: anywhere;
  font-size: 16px; line-height: 1.5; min-height: 3em;
}
.点条 .点文.空 { color: var(--字弱); }

/* 大编辑层（CB177）：Gary 11:58「那么小的框，翻和改体验极差」→ 点一条就把整块摊开写 */
.点层 {
  position: fixed; inset: 0; z-index: 60; display: none;
  background: rgba(0,0,0,.62);
}
.点层.开 { display: flex; align-items: flex-end; }
.点层框 {
  width: 100%; height: 70dvh; max-height: calc(100dvh - var(--安全顶)); display: flex; flex-direction: column;
  background: var(--底); border-top: 2px solid var(--主);
  border-radius: 16px 16px 0 0; padding: 10px 12px calc(12px + var(--安全底));
  box-shadow: 0 -18px 40px rgba(0,0,0,.6);
}
.点层头 { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; }
.点层头 b { flex: 1 1 auto; font-size: 18px; color: var(--主); font-variant-numeric: tabular-nums; }
.点层文 {
  flex: 1 1 auto; min-height: 0; width: 100%; margin-top: 8px; padding: 10px;
  border-radius: 12px; border: 1px solid var(--线); background: var(--卡2); color: var(--字);
  font: inherit; font-size: 17px; line-height: 1.6; resize: none;
}
.点层钮 { flex: 0 0 auto; display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.点层钮 button {
  flex: 1 1 30%; min-height: 48px; padding: 0 8px; border-radius: 12px;
  border: 1px solid var(--线); background: var(--卡2); color: var(--字);
  font-size: 14px; font-weight: 600; cursor: pointer; white-space: nowrap;
}
.点层钮 .点层跳 { flex: 1.5 1 42%; }
.点层钮 .点层删 { flex: 1 1 26%; }
.点层钮 .点层存 { flex: 2 1 46%; background: var(--主); border-color: var(--主); color: #1a1408; font-weight: 800; }
.点层钮 .点层跳 { border-color: var(--主); color: var(--主); }
.点层钮 .点层删 { color: var(--坏); border-color: var(--坏); }
@media (min-width: 768px) {
  .点层 { align-items: center; justify-content: center; }
  .点层框 { width: min(760px, 92vw); height: auto; max-height: 84dvh; border-radius: 16px; padding: 14px 16px; }
  .点层文 { min-height: 40vh; }
}

/* 一行动作：写意见 / 提交 / 已定过（手机收起态也靠这一行省高度；电脑上照样一排） */
.件动 { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.件动 .件交 { flex: 1 1 auto; min-width: 0; margin: 0; }
.件动 .意见钮 {
  flex: 0 0 auto; min-height: 44px; padding: 0 12px;
  border-radius: 10px; border: 1px solid var(--主); background: rgba(230,180,92,.10);
  color: var(--主); font-size: 13px; font-weight: 700; cursor: pointer;
}
.件动 .已定过钮 { flex: 0 0 auto; }

/* ④ 可折的灰框（手机上只露两行） */
.可折 { cursor: pointer; }
.折身 { display: block; }
.折钮 {
  display: inline-block; margin-top: 4px; padding: 6px 2px;
  font-size: 12px; color: var(--主); text-decoration: underline;
}
@media (min-width: 768px) { .折钮 { display: none; } }

/* ---------------- 手机 ---------------- */
@media (max-width: 767px), (orientation: landscape) and (max-height: 620px) and (max-width: 1100px) {
  /* ① 播放器吸顶 */
  body.单件 .件卡.当前 .媒体列 {
    position: sticky; top: var(--顶栏底, 100px); z-index: 14;
    background: var(--底);
    padding-bottom: 4px;
    box-shadow: 0 10px 16px -10px rgba(0,0,0,.9);
  }
  body.单件 .翻条 { margin: 0 0 4px; }
  body.单件 .翻条 .翻计 { font-size: 12px; }

  /* ② 三档抽屉（CB177）：高度是固定 px（--台收起高/半开/全开，由页面在换件、切档、转屏时算一次），
     不跟内容长、也不跟地址栏伸缩变。正文 #答身 自己滚。 */
  body.单件 .答题台 {
    display: flex; flex-direction: column;
    height: var(--台收起高, 132px); max-height: none; overflow: hidden;
    padding: 0 12px;
  }
  /* 顶部 8px 留空（CB166 会拿抽屉最上面那条和页面底色逐像素比，把手压在那儿会被判“底色不对”） */
  body.单件 .答题台 .答把 {
    flex: 0 0 auto; display: grid; grid-template-columns: 1fr auto 1fr;
    align-items: end; gap: 8px;
    height: 16px; margin-top: 6px;
    touch-action: none; cursor: grab;
  }
  .答把 .答计 { grid-column: 1; justify-self: start; font-size: 11px; color: var(--字弱); }
  .答把 .把条 { grid-column: 2; width: 42px; height: 4px; border-radius: 999px; background: #4a5260; }
  .答把 .档提 { grid-column: 3; justify-self: end; font-size: 11px; color: var(--主); }

  /* 收起：只留 三钮 + 一行动作。题问、意见框、时间点、已定过注都先藏起来 */
  body.单件 .答题台.档收起 { height: var(--台收起高, 132px); }
  body.单件 .答题台.档收起 .问行,
  body.单件 .答题台.档收起 .题.意见题,
  body.单件 .答题台.档收起 .时间点块 { display: none; }
  body.单件 .答题台.档收起 .题 { margin: 0; }
  body.单件 .答题台.档收起 .钮 { min-height: 46px; }
  body.单件 .答题台.档收起 .题 + .题 { margin-top: 0; }

  /* 半开 / 全开：问题、意见、时间点都出来；高度固定，播放器留够 --播最小 */
  body.单件 .答题台.档半开 { height: var(--台半开高, 330px); }
  body.单件 .答题台.档全开 { height: var(--台全开高, 430px); }
  .答题台.档半开 .题.意见题,
  .答题台.档全开 .题.意见题 { display: block; }
  .答题台.档半开 .意见,
  .答题台.档全开 .意见 { display: block; }
  /* 半开/全开时把播放器下面这两条让出来（时间点列表已经能跳秒） */
  body.单件.档半开 .件卡.当前 .秒刻度,
  body.单件.档全开 .件卡.当前 .秒刻度,
  body.单件.档半开 .件卡.当前 .音频进度,
  body.单件.档全开 .件卡.当前 .音频进度 { display: none; }

  /* 提交那一排钉在抽屉底：半开/全开内容再长，也不用先滑到底才能交 */
  body.单件 .答题台 .件动 {
    position: sticky; bottom: 0; z-index: 2;
    margin-top: 6px; padding: 6px 0 12px;
    background: var(--底);
  }
  body.单件 .答题台.档收起 .件动 { margin-top: 2px; padding-top: 2px; }
  .答题台.档收起 .件动 .件交,
  .答题台.档收起 .件动 .意见钮,
  .答题台.档收起 .件动 .已定过钮 { min-height: 44px; height: 44px; font-size: 14px; }
  .答题台.档收起 .件动 .意见钮 { padding: 0 8px; }
  .答题台.档收起 .件动 .已定过钮 { padding: 0 10px; }
  .答题台 .时间点块 { margin-top: 8px; }
  /* CB177：总的意见框多行、随内容长高（高度由页面 input 时写 inline） */
  body.单件 .答题台 .意见 textarea { min-height: 72px; font-size: 16px; line-height: 1.5; }
  body.单件 .答题台.档半开 .点行们 { max-height: 32vh; }

  /* CB177：点开全文以后，灰框最高只到「顶栏下 → 抽屉上」这一段，再长就框里自己滚：
     这样长说明在小屏上也能从第一行读到最后一行，播放器不被挤走、页面也不弹。 */
  .可折:not(.折叠) {
    max-height: calc(100dvh - var(--顶栏底, 100px) - var(--底栏高, 56px) - var(--答台高, 132px) - 24px);
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
  }
  /* ④ 手机默认只露两行 */
  .可折.折叠 .折身 {
    max-height: 3.3em; overflow: hidden;
    -webkit-mask-image: linear-gradient(to bottom, #000 52%, rgba(0,0,0,.15));
    mask-image: linear-gradient(to bottom, #000 52%, rgba(0,0,0,.15));
  }
}

/* ================================================================ CB177
   Gary 11:58（手机审片页）：“每条意见只有一个很小的横条输入框，翻找、修改体验极差”；
   “横屏其实更乱”——横过来要两栏，不叠。
   ① 时间点改成「整宽多行的清单」，点一条开大编辑层（见上面 .点条 / .点层）；
   ② 三档固定高度（--台收起高/半开/全开），页面用 100dvh，不再按实测高度反复改让位；
   ③ 横屏：左栏播放，右栏答题，两栏各自滚。
   ================================================================ */

/* 页面高度用 dvh（地址栏伸缩时不再靠 JS 反复量） */
body { min-height: 100dvh; }
body.单件 { min-height: 100dvh; }

/* ③ 横屏两栏：iPhone 15（852×393）/ SE（667×375）/ Pixel 7（915×412）横过来都走这里 */
@media (orientation: landscape) and (max-height: 620px) and (max-width: 1100px) {
  /* 这一段宽度可能 >767（852/915），上面「手机一次一件」的规则不生效，所以在这里补齐 */
  body.单件 .件卡 { display: none; }
  body.单件 .件卡.当前 { display: block; }
  body.单件 .件卡.参考卡 { display: none; }
  body.单件 .提交条 { display: none !important; }
  body.单件 #标题, body.单件 #说明, body.单件 .试用条, body.单件 .正式条 { display: none !important; }
  /* 横屏高度只有 370–410，五个入口的底栏要占 90（含安全区）：横屏先收起底栏，
     回竖屏就回来；要换页用左上角返回。这样左右两栏才都放得下要用的东西。 */
  body.单件 .底栏 { display: none; }
  body.单件 .窄 { padding: 8px 10px; padding-right: calc(50% + 8px); padding-bottom: 8px; }
  /* 左栏自己滚：不再吸顶，也不跟整页一起滚 */
  /* 左栏钉在「顶栏下 → 底栏上」，高度不靠 .窄 的内边距推（否则会被顶出底栏） */
  body.单件 .件卡.当前 {
    position: fixed; left: 8px; right: calc(50% + 8px);
    top: var(--顶栏底, 100px); bottom: var(--安全底);
    height: auto; margin: 0; padding: 8px;
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
  }
  body.单件 .件卡.当前 .文件块 { display: flex; flex-direction: column; margin: 0; }
  body.单件 .件卡.当前 .文件头 { display: none; }
  body.单件 .件卡.当前 .媒体列 {
    position: static; box-shadow: none; padding-bottom: 0; order: 1;
  }
  /* 左栏第一眼必须是播放器：再问灰框、本次关注、说明都排到它下面 */
  body.单件 .件卡.当前 .再问块 { order: 2; }
  body.单件 .件卡.当前 .关注块 { order: 3; }
  body.单件 .件卡.当前 .题区 { order: 4; }
  body.单件 .件卡.当前 .媒体列 > p { display: none; }
  /* 左栏一屏放得下：翻件条 + 播放器 + 大秒数/记秒（刻度在横屏藏掉，跳秒用播放器自己的进度条） */
  body.单件 .件卡.当前 .视频框 {
    height: calc(100dvh - var(--顶栏底, 100px) - var(--安全底) - 126px);
    max-height: 62dvh;
  }
  body.单件 .件卡.当前 .翻条 { padding: 0; margin: 0 0 4px; }
  body.单件 .件卡.当前 .秒刻度 { display: none; }
  /* 右栏：答题台改成常驻的右半屏，题目 / 按钮 / 时间点都在里面，自己滚 */
  body.单件 .答题台 {
    position: fixed; display: flex; flex-direction: column;
    left: 50%; right: 0; width: 50%;
    top: var(--顶栏底, 100px); bottom: var(--安全底);
    height: auto !important; max-height: none;
    border-top: 0; border-left: 1px solid var(--主);
    padding: 8px 10px 8px;
    box-shadow: -14px 0 26px -18px rgba(0,0,0,.9);
  }
  body.单件 .答题台 .答把 { display: none; }
  /* 横屏不按档藏东西：题目、意见框、时间点清单全摊开（选择器要压过上面的 .档收起 规则） */
  body.单件 .答题台 .问行,
  body.单件 .答题台 .题.意见题,
  body.单件 .答题台 .时间点块,
  body.单件 .答题台 .意见,
  body.单件 .答题台.档收起 .问行,
  body.单件 .答题台.档收起 .题.意见题,
  body.单件 .答题台.档收起 .时间点块,
  body.单件 .答题台.档收起 .意见 { display: block; }
  /* 横屏右栏顺序：题目 → 三钮 → 时间点清单 → 意见 → 提交（Gary 要看的是“题、按钮、清单”） */
  #答身 { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
          padding-top: 0; display: flex; flex-direction: column; }
  #答身 .时间点块 { order: 1; }
  #答身 .题.意见题 { order: 2; }
  #答身 .件动 { order: 3; }
  /* 提交条仍是「吸在右栏底」的一条（滚动时内容从它后面过，滚到底不遮最后一条） */
  body.单件 .答题台 .件动 { margin-top: 6px; padding: 6px 0 4px; }
  body.单件 .答题台 .件动 { padding-bottom: 8px; }
  /* 横屏高度够：秒刻度 / 音频进度不藏 */
  body.单件.档半开 .件卡.当前 .秒刻度,
  body.单件.档全开 .件卡.当前 .秒刻度,
  body.单件.档半开 .件卡.当前 .音频进度,
  body.单件.档全开 .件卡.当前 .音频进度 { display: flex; }
  .点行们 { max-height: 28dvh; }
  body.单件 .答题台 .题 { margin-bottom: 6px; }
}

/* ================================================================ CB181b：下载原件到本机
   一件一行：⤓ 下载原件到手机（6.8 MB）→ 进度/速度/剩余 → 已在本机 ✓ + 存到相册。
   按钮 ≥44px（手机单手点得到）。 */
.原件行 {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  margin: 8px 0 2px; min-width: 0;
}
.原件钮 {
  min-height: 44px; padding: 0 14px; border-radius: 12px; cursor: pointer;
  border: 1px solid var(--主); background: rgba(230,180,92,.12); color: var(--主);
  font-size: 15px; font-weight: 700; line-height: 1.2;
}
.原件钮:disabled { opacity: .5; cursor: not-allowed; }
.原件钮:active { background: rgba(230,180,92,.26); }
.原件小 {
  min-height: 44px; padding: 0 12px; border-radius: 12px; cursor: pointer;
  border: 1px solid var(--线); background: var(--卡2); color: var(--字);
  font-size: 14px; line-height: 1.2;
}
.原件小:active { border-color: var(--主); }
/* CB234（规格 v1.33 3.4f）：真·存到手机（文件）是一个直链 <a>，长得跟按钮一样 */
.原件钮.真下载 {
  display: inline-flex; align-items: center; justify-content: center;
  text-decoration: none; box-sizing: border-box; text-align: center;
}
/* 「网页缓存」和「真存进手机」的区别，写在这行下面（Gary 01:31「不知道存在哪了」） */
.本机说明 { flex: 1 1 100%; margin: 2px 0 0; line-height: 1.5; color: var(--字弱); }
.本机标 {
  display: inline-flex; align-items: center; min-height: 32px; padding: 0 10px;
  border-radius: 999px; font-size: 13px; font-weight: 700;
  background: rgba(70,185,138,.16); color: var(--有边); border: 1px solid var(--有边);
}
/* 卡片角标：图片/视频右上角 */
.本机角 {
  /* CB234：右上角原来是「放大看」按钮，角标压在上面看不清 —— 挪到左上 */
  position: absolute; top: 8px; left: 8px; z-index: 3;
  padding: 3px 9px; border-radius: 999px; font-size: 12px; font-weight: 700;
  background: rgba(46,125,91,.92); color: #eafff6; border: 1px solid var(--有边);
  pointer-events: none;
}
.原件进 { flex: 1 1 100%; min-width: 0; }
.原件字 {
  font-size: 13px; color: var(--字弱); line-height: 1.5;
  font-variant-numeric: tabular-nums; word-break: break-word;
}
.原件槽 {
  height: 8px; margin-top: 4px; border-radius: 999px; overflow: hidden;
  background: #23272f; border: 1px solid var(--线);
}
.原件填 {
  height: 100%; width: 0%; border-radius: 999px;
  background: linear-gradient(90deg, #46b98a, #6fe0b4);
  transition: width .18s linear;
}
/* 本机存储超 300MB 的提示条 */
.存条 {
  margin: 8px 0; padding: 10px 12px; border-radius: 12px;
  background: rgba(230,180,92,.10); border: 1px solid rgba(230,180,92,.5);
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
}
.存条 .小字 { flex: 1 1 100%; margin: 0; }
/* 本批全部下载 */
.批下条 {
  margin: 8px 0 2px; padding: 8px 10px; border-radius: 12px;
  background: var(--卡); border: 1px solid var(--线);
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
}
.批下条 .原件钮 { flex: 1 1 auto; }
.批下条 .原件进 { flex: 1 1 100%; }

/* ---------------------------------------------------------------- CB188
   ① 请判尺子并进批次页：每处一张卡，播放器下面写清秒 / 量到 / 门槛 + 「跳到该秒」。
   ② 写了哪个按钮要看得见（已选：不是）。
   ③ 写意见的大编辑层：顶部「正在写：Q3 · 39.2 秒 · 嘴型跳变」，上一题/下一题在这一层里。
   ④ 一次提交的总览屏：已答 3/9、总意见 1 段。 */
.尺子块 {
  margin: 6px 0 2px; padding: 8px 10px; border-radius: 12px;
  background: var(--卡2); border: 1px solid var(--线);
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
}
.尺子块 .尺头 { display: flex; align-items: center; gap: 8px; flex: 1 1 100%; min-width: 0; }
.尺子块 .尺号 {
  flex: 0 0 auto; font-weight: 800; font-size: 13px; color: #1a1408;
  background: var(--主); border-radius: 999px; padding: 1px 9px;
}
.尺子块 .尺大秒 { font-size: 19px; color: var(--主); font-variant-numeric: tabular-nums; }
.尺子块 .尺检 { font-size: 13px; color: var(--字弱); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.尺子块 .尺数 { flex: 1 1 auto; display: flex; gap: 14px; font-size: 13px; color: var(--字弱); font-variant-numeric: tabular-nums; }
.尺子块 .尺数 b { color: var(--字); }
.尺子块 .尺已选 { margin-left: auto; color: var(--字弱); white-space: nowrap; }
.尺子块 .尺已选.有 { color: var(--好); font-weight: 700; }
.尺子块 .尺跳 {
  flex: 0 0 auto; min-height: 40px; padding: 0 14px; border-radius: 10px;
  border: 1px solid var(--主); background: rgba(230,180,92,.12); color: var(--主);
  font-size: 15px; font-weight: 700; cursor: pointer;
}
.已选文 { font-size: 13px; color: var(--字弱); margin-left: 8px; }
.已选文.有 { color: var(--好); font-weight: 700; }

/* 写意见的大编辑层（复用 .点层 的壳，只有里面三段是新加的） */
.写层数 {
  flex: 0 0 auto; font-size: 12px; color: var(--字弱); line-height: 1.5;
  margin: -4px 0 6px; word-break: break-word;
}
.写层钮 { flex: 0 0 auto; display: flex; gap: 8px; margin-top: 8px; }
.写层钮 button {
  flex: 1 1 0; min-height: 50px; border-radius: 11px; font-size: 16px; font-weight: 700;
  border: 1px solid var(--线); background: var(--卡2); color: var(--字); cursor: pointer;
}
.写层钮 button:disabled { opacity: .35; }
.写层钮 .点层存 { flex: 1.4 1 0; background: var(--主); border-color: var(--主); color: #1a1408; }
.写层钮 .点层跳 { border-color: var(--主); color: var(--主); }

/* 一次提交：总览 + 总意见 */
.交层框 { max-height: 88dvh; }
.交总 {
  font-size: 19px; font-weight: 800; color: var(--字); margin: 2px 0 6px;
  font-variant-numeric: tabular-nums;
}
.交未答 { margin: 0 0 8px; }
.交未答 .小字 { margin: 2px 0; }
.交文 { min-height: 26vh; }
.交钮 { display: flex; gap: 8px; margin-top: 8px; }
.交钮 button {
  flex: 1 1 0; min-height: 50px; border-radius: 11px; font-size: 16px; font-weight: 700;
  border: 1px solid var(--线); background: var(--卡2); color: var(--字); cursor: pointer;
}
.交钮 .点层存 { flex: 1.6 1 0; background: var(--主); border-color: var(--主); color: #1a1408; }
.交钮 .点层跳 { border-color: var(--主); color: var(--主); }

/* ================================================================ CB193（规格 v1.1 · 2.8 / 4.5）
   ① 2.8 不留大空档：Gary 17:57「中间那个空档那么大，下面的字我真的不好划着去看」。
      根因是「秒刻度」这一排在还没拿到时长（建不出刻度）时仍占 min-height:50px —— 空控件占位。
   ② 4.5 写意见时视频缩成顶部小窗：Gary「弹窗占了将近一半还多的面积，我上面的视频就被盖住了」。*/
.秒刻度:empty { display: none; }        /* 2.8：还没建出刻度就不占位（建出来后自己回来） */

@media (max-width: 767px), (orientation: landscape) and (max-height: 620px) and (max-width: 1100px) {
  /* 编辑层只占下面 --写层高（≤45% 屏高，由页面按屏高/键盘算），视频在上一半 */
  body.写层开 #写层 { align-items: flex-end; }
  body.写层开 #写层 .点层框 {
    height: var(--写层高, 45dvh); max-height: none;
    margin-bottom: var(--写层底, 0px);
  }
  body.写层开 #写层 .点层文 { min-height: 0; }

  /* 小窗：卡片里的视频框被钉到上半屏（不动 DOM、不重载，播到哪还在哪） */
  body.写层开 .件卡.在写 .视频框 {
    position: fixed; left: 8px; right: 8px;
    top: var(--写窗顶, 6px); height: var(--写窗高, 30dvh); max-height: none;
    z-index: 61; border: 1px solid #2a2f38; border-radius: 12px;
    box-shadow: 0 12px 26px rgba(0,0,0,.75);
  }
  body.写层开 .件卡.在写 .视频框 video {
    width: 100%; height: 100%; max-height: none; object-fit: contain; border-radius: 12px;
  }
  body.写层开 .件卡.在写 .视频框 .看大 { display: none; }   /* 小窗要把画面留给 Gary */

  /* 小窗下面那排按钮：播放/暂停、±1 秒、记秒（在编辑层上面，点得到） */
  .写窗 { display: none; }
  body.写层开 .写窗 {
    display: block; position: fixed; left: 0; right: 0;
    top: var(--写窗控顶, 40dvh); z-index: 62; pointer-events: none;
  }
  .写窗控 { display: flex; gap: 6px; align-items: center; justify-content: center; pointer-events: auto; }
  .写窗控 button {
    flex: 0 0 auto; min-height: 44px; padding: 0 10px; border-radius: 10px;
    border: 1px solid var(--线); background: rgba(20,24,30,.94); color: var(--字);
    font-size: 14px; font-weight: 700; cursor: pointer;
  }
  .写窗控 button:active { border-color: var(--主); color: var(--主); }
  .写窗控 b {
    flex: 0 0 auto; min-width: 4.8em; text-align: center;
    font-size: 16px; color: var(--主); font-variant-numeric: tabular-nums;
  }
}

/* CB193 补：写意见时，卡片里原来那些行（下载行/秒数条/秒刻度/已在本机角标）在小窗下面露出来会花，
   先藏掉；小窗自己那排按钮负责播放/暂停/±1 秒/记秒。 */
@media (max-width: 767px), (orientation: landscape) and (max-height: 620px) and (max-width: 1100px) {
  body.写层开 .件卡.在写 .原件行,
  body.写层开 .件卡.在写 .秒条,
  body.写层开 .件卡.在写 .秒刻度,
  body.写层开 .件卡.在写 .媒体列 > p,
  body.写层开 .件卡.在写 .视频框 .本机角 { visibility: hidden; }
  body.写层开 #写层 { background: rgba(0, 0, 0, .86); }
}

/* ---------------- CB229（规格 v1.30 · 4.11b/4.11c） ---------------- */
/* ① 秒条：横排放不下就换行 —— 「▶ 跳到 N 秒」与「⏱ 记下秒数」并列在同一行控制区，
   点了只换画面、不滚动页面，视频留在原处（4.11c①）。 */
.秒条 { flex-wrap: wrap; row-gap: 6px; }
.秒条 .记秒钮 { flex: 0 0 auto; }
@media (max-width: 430px) {
  .秒条 b { font-size: 26px; min-width: 2.9em; }
  .秒条 .记秒钮 { padding: 0 10px; font-size: 14px; }
}
/* ② 「给校尺的人看」：量到/门槛/原文都在里面，默认收起（4.11c②） */
.尺子块 .校尺 { flex: 1 1 100%; margin-top: 2px; }
.尺子块 .校尺 > summary {
  min-height: 32px; line-height: 32px; cursor: pointer;
  font-size: 12px; color: var(--字弱); list-style: none;
}
.尺子块 .校尺 > summary::-webkit-details-marker { display: none; }
.尺子块 .校尺 > summary::before { content: "▸ "; }
.尺子块 .校尺[open] > summary::before { content: "▾ "; }
.尺子块 .校原文 { margin-top: 4px; line-height: 1.55; }
/* ③ 已交区：每条自带处号标题 + 改这一处（4.11b①②） */
.已交条 + .改这一处, .件卡.交完 .改这一处 {
  flex: 0 0 auto; align-self: flex-start;
  min-height: 44px; margin: 8px 0 2px; padding: 0 16px; border-radius: 10px;
  border: 1px solid var(--主); background: rgba(230,180,92,.12); color: var(--主);
  font-size: 15px; font-weight: 700; cursor: pointer;
}
.件卡.交完 .改过注 { color: var(--主); }
.件卡.改答中 { border: 1px solid var(--主); }
.件卡.改答中 .改答卷 { width: 100%; min-height: 88px; font-size: 16px; line-height: 1.55; }
/* ④ 找一处（首页 / 批次页） */
.搜处行, .处找 { display: flex; align-items: center; gap: 8px; }
.搜处行 input, .处找 input {
  flex: 1 1 auto; min-width: 0; min-height: 48px; padding: 0 12px; font-size: 16px;
  border-radius: 10px; border: 1px solid var(--线); background: var(--卡2); color: var(--字);
}
.处找 { margin: 8px 0 4px; }
.处找 button {
  flex: 0 0 auto; min-height: 44px; padding: 0 16px; border-radius: 10px;
  border: 1px solid var(--主); background: rgba(230,180,92,.12); color: var(--主);
  font-size: 15px; font-weight: 700; cursor: pointer;
}
.搜处行 .大钮 { flex: 0 0 auto; min-width: 84px; }
/* CB229 修：手机「一次一件」原本把所有 .件卡 藏起来、只留 .当前 —— 已交的卡折进 #已交盒 后
   也被藏了（Gary 23:59「找不到 Q3 去改」的其中一层原因）。已交盒里的卡要一直显示。 */
body.单件 #已交盒 .件卡 { display: block; }
body.单件 #已交盒 .件卡 .文件头 { display: flex; }
/* CB229：跳秒钮与记秒钮同一行并列（窄屏也并排，不各占一行） */
.秒条 .秒钮行 { flex: 1 1 100%; display: flex; gap: 8px; }
.秒条 .秒钮行 .记秒钮 { flex: 1 1 0; min-width: 0; }
