/* 循证护肤.循证打分系统 · 基础样式（沿用原型的视觉基调，服务端渲染版） */
:root {
  --bg: #f5f7f6;
  --surface: #ffffff;
  --surface2: #f8faf9;
  --ink: #1d2d29;
  --muted: #6f817a;
  --line: #dde7e2;
  --green: #1e6a58;
  --green2: #3f8b75;
  --green-soft: #eaf5f0;
  --blue: #376fa5;
  --blue-soft: #eef5fb;
  --gold: #a7792d;
  --gold-soft: #fbf3e4;
  --red: #b4514b;
  --red-soft: #fff2f0;
  --radius: 16px;
  --shadow: 0 14px 40px rgba(24, 62, 51, .07);
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  min-height: 100%;
  font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
  background: var(--bg);
  color: var(--ink);
  font-size: 14px;
}

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

.btn {
  border: 0;
  border-radius: 10px;
  padding: 9px 14px;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.btn-primary { background: var(--green); color: #fff; }
.btn-primary:hover { background: #154f42; }
.btn-outline { background: #fff; color: var(--ink); border: 1px solid var(--line); }
.btn-outline:hover { background: #f4f8f6; }
.btn-sm { padding: 6px 10px; font-size: 11px; }
.btn.disabled { opacity: .45; pointer-events: none; }
.btn:disabled { opacity: .5; cursor: not-allowed; }

.badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 9px;
  border-radius: 99px;
  border: 1px solid var(--line);
  background: #fff;
  color: var(--muted);
  font-size: 10px;
  font-weight: 800;
}

.badge.green { background: var(--green-soft); color: var(--green); border-color: #cfe2da; }
.badge.blue { background: var(--blue-soft); color: var(--blue); border-color: #d7e6f2; }
.badge.gold { background: var(--gold-soft); color: var(--gold); border-color: #efe0c4; }
.badge.red { background: var(--red-soft); color: var(--red); border-color: #f0d6d3; }

.card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow); }
.pad { padding: 20px; }
.muted { color: var(--muted); }
.small { font-size: 12px; }

/* ==========================================================================
   登录页（视觉依据：审核平台登录页交互原型 v1.1）
   所有选择器都限定在 .login-body 下，避免影响其他页面（.field/.panel/.step 等全局类）
   ========================================================================== */
.login-body {
  --pine: #1d6a57;
  --login-ink: #192d29;
  --login-muted: #70817c;
  --login-border: #d8e5df;
  background: #fff;
  color: var(--login-ink);
}
.login-page { display: grid; grid-template-columns: minmax(0, 68%) minmax(355px, 32%); min-height: 100vh; min-height: 100svh; }

/* ---------- 左侧：品牌故事 ---------- */
.login-story {
  position: relative; isolation: isolate; overflow: hidden; min-width: 0; display: flex; flex-direction: column;
  padding: clamp(30px, 3.1vw, 59px) clamp(30px, 3.35vw, 68px) 38px;
  background:
    radial-gradient(ellipse at 56% 12%, #fff 0%, rgba(255, 255, 255, 0) 56%),
    linear-gradient(125deg, #edf8f3 0%, #f8fcfa 54%, #f1f8f5 100%);
}
.login-story::before, .login-story::after {
  content: ""; position: absolute; pointer-events: none; z-index: -1;
  border: 1px solid rgba(85, 175, 139, .1); border-radius: 50%; transform: rotate(-16deg);
}
.login-story::before { width: 850px; height: 720px; top: -350px; left: -430px; }
.login-story::after { width: 900px; height: 640px; right: -200px; bottom: -460px; }
.login-orbit {
  position: absolute; z-index: -1; right: 6%; top: 27%; width: 29%; aspect-ratio: 1;
  border: 1px solid rgba(79, 163, 132, .13); border-radius: 50%;
  box-shadow: 0 0 0 48px rgba(173, 220, 194, .035), 0 0 0 99px rgba(173, 220, 194, .025);
}
.login-hero-art {
  position: absolute; z-index: 1; right: -8px; bottom: 0; pointer-events: none;
  width: min(45%, 500px); height: min(68vh, 610px); display: flex; align-items: flex-end; opacity: .98;
}
.login-hero-art img {
  width: 100%; height: 100%; object-fit: contain; object-position: bottom right;
  filter: saturate(.95) contrast(1.01);
}
.login-brand { display: flex; align-items: center; gap: 16px; position: relative; z-index: 3; width: fit-content; }
.login-mark {
  width: 58px; height: 58px; border-radius: 17px; display: grid; place-items: center;
  background: linear-gradient(150deg, #287c67, var(--pine)); color: #fff;
  font-size: 28px; font-weight: 800; box-shadow: 0 6px 18px rgba(25, 114, 91, .13);
}
.login-brand-type { display: flex; flex-direction: column; gap: 4px; }
.login-brand-name { font-size: 23px; font-weight: 800; letter-spacing: .015em; }
.login-brand-desc { font-size: 14px; color: #7a9289; letter-spacing: .09em; }

.login-hero { position: relative; z-index: 2; max-width: 720px; margin-top: clamp(94px, 13.8vh, 144px); }
.login-eyebrow { font-size: 13px; color: var(--pine); font-weight: 750; letter-spacing: .15em; margin: 0 0 22px; }
.login-hero h1 {
  font-size: clamp(35px, 3.12vw, 60px); line-height: 1.24; letter-spacing: -.035em;
  font-weight: 800; margin: 0; position: relative; z-index: 2;
}
.login-hero h1 span { color: var(--pine); }
.login-lead {
  position: relative; z-index: 2; line-height: 1.9; font-size: clamp(15px, 1.02vw, 18px);
  color: #58716a; margin: 24px 0 0; max-width: 630px; font-weight: 400;
}
.login-process {
  position: relative; z-index: 2; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 13px; max-width: 650px; width: 100%; margin-top: 42px;
}
.login-step {
  min-width: 0; min-height: 189px; display: flex; flex-direction: column; align-items: flex-start;
  border: 1px solid rgba(210, 230, 222, .95); border-radius: 18px; background: rgba(255, 255, 255, .83);
  backdrop-filter: blur(12px); padding: 22px 20px 20px; box-shadow: 0 8px 30px rgba(63, 112, 96, .05);
}
.login-step-icon {
  width: 48px; height: 48px; display: grid; place-items: center; border-radius: 15px;
  background: #e5f5ed; color: #148164; margin-bottom: 22px;
}
.login-step-icon svg { width: 26px; height: 26px; stroke-width: 1.9; }
.login-step strong { font-size: 17px; font-weight: 750; margin-bottom: 8px; line-height: 1.3; }
.login-step p { margin: 0; color: #7b8c85; font-size: 13px; line-height: 1.7; }
.login-hero-note { position: relative; z-index: 2; max-width: 760px; color: #8b9f97; font-size: 12px; line-height: 1.7; margin-top: 24px; }

/* ---------- 右侧：登录面板 ---------- */
.login-panel {
  display: flex; align-items: center; justify-content: center; min-width: 0;
  border-left: 1px solid #dcebe4; padding: 50px clamp(34px, 3vw, 64px); background: #fff;
}
.login-box { width: 100%; max-width: 480px; margin: 0 auto; transform: translateY(5px); }
.login-box h2 { font-size: clamp(29px, 2vw, 37px); letter-spacing: -.04em; line-height: 1.3; margin: 0 0 10px; font-weight: 800; }
.login-sub { font-size: 15px; color: #83938d; margin: 0 0 25px; line-height: 1.7; }
.login-mode-tabs {
  display: grid; grid-template-columns: 1fr 1fr; gap: 5px; margin-bottom: 28px;
  padding: 4px; border: 1px solid #dbe8e2; border-radius: 13px; background: #f4f8f6;
}
.login-mode-tabs.has-oidc { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.login-mode-tabs button, .login-mode-tabs .login-oidc-tab {
  height: 42px; border: 0; border-radius: 9px; background: transparent; color: #71857d;
  font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; transition: .18s ease;
  display: flex; align-items: center; justify-content: center; text-decoration: none; white-space: nowrap;
}
.login-mode-tabs button.active { background: #fff; color: var(--pine); box-shadow: 0 4px 12px rgba(35, 79, 64, .09); }
.login-mode-tabs .login-oidc-tab:hover { background: #eaf4ef; color: var(--pine); }
#loginSmsPane[hidden] { display: none; }
#loginPasswordPane[hidden] { display: none; }
.login-field { margin-bottom: 24px; }
.login-field-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin-bottom: 11px; }
.login-field-head label { font-size: 15px; font-weight: 700; color: #334942; }
.login-input-wrap { position: relative; }
.login-input-wrap input {
  display: block; width: 100%; height: 58px; background: #fff; border: 1.5px solid #d4e3dc;
  border-radius: 13px; outline: none; color: #28453c; padding: 0 18px 0 49px;
  font: inherit; transition: border-color .2s, box-shadow .2s;
}
.login-input-wrap input::placeholder { color: #a1afa8; }
.login-input-wrap input:focus { border-color: #297c64; box-shadow: 0 0 0 4px rgba(47, 147, 113, .09); }
.login-input-icon { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: #849b90; display: flex; pointer-events: none; }
.login-input-icon svg { width: 20px; height: 20px; }
#loginPass { padding-right: 55px; }
.login-code-row { display: grid; grid-template-columns: minmax(0, 1fr) 122px; gap: 10px; }
.login-code-send { height: 58px; padding: 0 14px; justify-content: center; white-space: nowrap; }
.login-code-send:disabled { opacity: .58; cursor: not-allowed; }
.login-eye {
  position: absolute; right: 11px; top: 50%; transform: translateY(-50%);
  height: 40px; width: 42px; border: 0; background: transparent; display: grid; place-items: center;
  color: #849b90; border-radius: 10px; cursor: pointer;
}
.login-eye:hover { background: #eff7f3; color: #24765d; }
.login-eye svg { width: 20px; height: 20px; }
.login-submit {
  width: 100%; margin-top: 10px; height: 59px; border: 0; border-radius: 13px; justify-content: center;
  background: linear-gradient(120deg, #1b755f, #1d6856); color: #fff;
  font-size: 16px; font-weight: 750; letter-spacing: .02em;
  box-shadow: 0 9px 20px rgba(29, 106, 87, .12);
  transition: filter .2s, transform .2s, box-shadow .2s;
}
.login-submit:hover { filter: brightness(1.08); box-shadow: 0 13px 25px rgba(29, 106, 87, .18); transform: translateY(-1px); }
.login-submit:active { transform: translateY(0); }
.login-privacy {
  display: flex; align-items: center; gap: 7px; justify-content: center;
  color: #83968d; font-size: 12px; line-height: 1.5; margin-top: 21px;
}
.login-privacy svg { width: 15px; height: 15px; flex: none; }

/* 提示区（失败 / 成功）与审批有效期自助延期入口：功能保持与原实现一致 */
.login-error {
  display: none; margin-top: 14px; background: #fff2f0; color: #b4514b;
  border: 1px solid #f0d6d3; border-radius: 10px; padding: 10px 12px; font-size: 12px; line-height: 1.7;
}
.login-error.show { display: block; }
.login-error.ok { background: #eaf5f0; color: #1e6a58; border-color: #cfe2da; }
.login-extend {
  margin-top: 14px; padding: 13px; border: 1px dashed #cfded8; border-radius: 12px;
  background: #fbfdfc; display: flex; flex-direction: column; gap: 8px; align-items: flex-start;
}
.login-extend[hidden] { display: none; }
.login-extend small { font-size: 11px; line-height: 1.6; color: var(--login-muted); }
.login-oidc-hint { margin: -17px 0 18px; color: #9a7a48; font-size: 11px; line-height: 1.6; text-align: center; }

/* ---------- 响应式（与原型一致） ---------- */
@media (max-width: 1500px) {
  .login-story { padding-right: 40px; }
  .login-hero { max-width: 660px; }
  .login-lead { max-width: 570px; }
  .login-process { max-width: 630px; }
  .login-step { padding: 18px 16px; min-height: 184px; }
  .login-step strong { font-size: 15px; }
  .login-hero-art { width: 44%; opacity: .9; }
}
@media (max-width: 1180px) {
  .login-page { grid-template-columns: minmax(0, 60%) minmax(345px, 40%); }
  .login-hero { margin-top: clamp(65px, 9vh, 105px); }
  .login-hero h1 { font-size: clamp(34px, 3.8vw, 46px); }
  .login-process { grid-template-columns: 1fr; max-width: 430px; gap: 9px; margin-top: 28px; }
  .login-step {
    display: grid; grid-template-columns: 43px 1fr; grid-template-rows: auto auto;
    column-gap: 13px; flex-direction: row; min-height: 0; padding: 13px 16px;
  }
  .login-step-icon { grid-column: 1; grid-row: 1 / span 2; width: 40px; height: 40px; border-radius: 12px; margin: 0; }
  .login-step-icon svg { width: 23px; height: 23px; }
  .login-step strong { grid-column: 2; grid-row: 1; margin: 0; }
  .login-step p { grid-column: 2; grid-row: 2; }
  .login-hero-art { width: 46%; opacity: .52; right: -25px; }
  .login-hero-note { max-width: 410px; }
}
@media (min-width: 801px) and (max-width: 1450px) {
  .login-hero-art { top: 120px; bottom: auto; width: min(44%, 365px); height: 335px; right: -9px; opacity: .72; }
}
@media (max-width: 800px) {
  .login-page { display: flex; flex-direction: column; }
  .login-story { min-height: 0; padding: 28px 24px 32px; }
  .login-mark { width: 45px; height: 45px; font-size: 22px; border-radius: 13px; }
  .login-brand-name { font-size: 20px; }
  .login-brand-desc { font-size: 12px; }
  .login-hero { margin-top: 62px; max-width: 600px; }
  .login-hero h1 { font-size: clamp(33px, 7vw, 43px); }
  .login-lead { font-size: 15px; margin-top: 15px; max-width: 570px; }
  .login-eyebrow { margin-bottom: 15px; }
  .login-process { grid-template-columns: repeat(3, minmax(0, 1fr)); max-width: none; gap: 8px; margin-top: 25px; }
  .login-step { display: block; padding: 14px 12px; min-height: 142px; }
  .login-step-icon { margin-bottom: 11px; width: 37px; height: 37px; }
  .login-step strong { font-size: 13px; display: block; margin-bottom: 7px; }
  .login-step p { font-size: 11px; }
  .login-hero-art { display: none; }
  .login-hero-note { max-width: none; margin-top: 18px; }
  .login-panel { border-left: 0; border-top: 1px solid #dcebe4; padding: 48px 26px 55px; }
  .login-box { transform: none; max-width: 540px; }
  .login-sub { margin-bottom: 26px; }
}
@media (max-width: 470px) {
  .login-story { padding: 23px 18px 27px; }
  .login-hero { margin-top: 45px; }
  .login-hero h1 { font-size: 34px; }
  .login-process { grid-template-columns: 1fr; max-width: none; }
  .login-step { display: grid; grid-template-columns: 37px 1fr; grid-template-rows: auto auto; min-height: 0; gap: 3px 10px; }
  .login-step-icon { grid-row: 1 / span 2; margin: 0; }
  .login-step strong { grid-row: 1; grid-column: 2; margin: 0; }
  .login-step p { grid-row: 2; grid-column: 2; }
  .login-panel { padding: 38px 22px 46px; }
  .login-box h2 { font-size: 30px; }
}
@media (prefers-reduced-motion: reduce) {
  .login-body *, .login-body *::before, .login-body *::after { transition: none !important; animation: none !important; }
}

/* 应用框架 */
.topbar {
  height: 64px; background: #fff; border-bottom: 1px solid var(--line);
  display: flex; align-items: center; justify-content: space-between; padding: 0 22px;
}
.top-left { display: flex; align-items: center; gap: 11px; }
/* 顶栏品牌方标：登录页品牌改用 .login-mark 后，这里必须自带完整样式 */
.top-left .logo {
  width: 38px; height: 38px; border-radius: 11px; font-size: 17px;
  background: var(--green); color: #fff; font-weight: 900; letter-spacing: .02em;
  display: grid; place-items: center;
}
.top-title b { font-size: 15px; }
.top-title small { display: block; color: var(--muted); font-size: 11px; }
.top-actions { display: flex; align-items: center; gap: 10px; }

.app-grid { display: grid; grid-template-columns: 232px minmax(0, 1fr); min-height: calc(100vh - 64px); }
.sidebar {
  background: #fff; border-right: 1px solid var(--line); padding: 14px 12px;
  display: flex; flex-direction: column; justify-content: flex-start; gap: 10px;
}
.nav { display: grid; gap: 2px; }
.nav-group { display: grid; gap: 2px; margin-bottom: 3px; }
.nav-group-title {
  display: flex; align-items: center; gap: 6px;
  font-size: 11px; font-weight: 800; letter-spacing: .4px; color: #7d8d87;
  padding: 6px 10px 3px; border: 0; background: transparent; cursor: pointer; width: 100%;
  text-align: left;
}
.nav-group-title:hover { color: var(--green); }
.nav-caret { display: inline-block; width: 10px; transition: transform .15s ease; font-size: 9px; }
.nav-group.collapsed .nav-caret { transform: rotate(-90deg); }
.nav-group.collapsed .nav-group-body { display: none; }
.nav-group-body { display: grid; gap: 2px; }
.nav-group .nav-btn { padding-left: 18px; }
.nav-btn {
  padding: 8px 10px; border-radius: 9px; font-size: 12px; font-weight: 700;
  color: #5e7069; background: transparent;
}
.nav-btn:hover { background: #f5f8f7; }
.nav-btn.active { background: var(--green-soft); color: var(--green); }
.profile {
  display: flex; align-items: center; gap: 10px; margin-top: auto;
  border-top: 1px solid var(--line); padding-top: 14px;
}
.avatar {
  width: 36px; height: 36px; border-radius: 50%; background: var(--green-soft);
  color: var(--green); display: grid; place-items: center; font-weight: 900;
}
.profile small { display: block; color: var(--muted); font-size: 11px; }

.workspace { padding: 22px 24px 80px; overflow-x: auto; }
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; margin-bottom: 16px; }
.page-head h1 { margin: 0; font-size: 23px; }
.page-head p { margin: 6px 0 0; color: var(--muted); font-size: 12px; }

.section-tabs {
  display: flex; align-items: center; gap: 4px; width: fit-content; max-width: 100%;
  margin: -4px 0 14px; padding: 4px; overflow-x: auto;
  border: 1px solid var(--line); border-radius: 11px; background: #f5f9f7;
}
.section-tabs a {
  flex: none; padding: 7px 12px; border-radius: 8px;
  color: #6b7d75; font-size: 12px; font-weight: 750;
}
.section-tabs a:hover { color: var(--green); background: #fff; }
.section-tabs a.active { color: var(--green); background: #fff; box-shadow: 0 1px 4px rgba(28, 72, 57, .1); }

.section-title { display: flex; gap: 9px; align-items: center; margin: 0 0 13px; }
.section-title .mark {
  width: 28px; height: 28px; border-radius: 9px; background: var(--green); color: #fff;
  display: grid; place-items: center; font-size: 12px; font-weight: 900;
}
.section-title h3 { margin: 0; font-size: 16px; }
.section-title small { display: block; color: var(--muted); font-size: 11px; }

.plain-list { margin: 0; padding-left: 18px; line-height: 2; color: #4d6159; font-size: 13px; }
.tag-list { display: flex; flex-wrap: wrap; gap: 6px; }
.tag {
  font-size: 11px; padding: 5px 9px; border-radius: 8px;
  background: var(--green-soft); color: var(--green); border: 1px solid #cfe2da;
}

/* 筛选与表格 */
.filter-bar { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 14px; }
.field { display: block; margin-top: 12px; }
.filter-bar .field { margin-top: 0; min-width: 0; width: 180px; }
.filter-bar .field.wide { width: 216px; }
.filter-bar .field.narrow { width: 152px; }
.filter-bar .filter-actions { margin-left: auto; display: flex; align-items: flex-end; gap: 8px; }
.field label { display: block; font-size: 12px; font-weight: 800; margin-bottom: 7px; color: #42554f; }
.field input, .field select, .field textarea {
  width: 100%; border: 1px solid #d7e3dd; border-radius: 10px; padding: 10px 12px; background: #fff;
  font: inherit; color: var(--ink);
}

/* ---------------------------------------------------------------------------
   顶部搜索/筛选栏：字段定宽 + 控件与按钮等高 + 操作区右对齐
   之前各页字段宽度由内容撑开（提示文案长的字段会明显变宽），按钮又与输入框不等高，
   视觉上参差不齐；这里统一到 40px 控件高度与三档字段宽度（默认 / wide / narrow）。
   --------------------------------------------------------------------------- */
.toolbar .field { margin-top: 0; min-width: 0; width: 180px; }
.toolbar .field.wide { width: 216px; }
.toolbar .field.narrow { width: 152px; }
.toolbar .field label { margin-bottom: 6px; }
.toolbar .field input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]),
.toolbar .field select,
.filter-bar .field input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]),
.filter-bar .field select {
  height: 40px; padding: 0 12px;
}
.toolbar .field .rv-select-trigger, .filter-bar .field .rv-select-trigger { height: 40px; padding: 0 12px; }
.toolbar .field .rv-date .rv-date-input,
.filter-bar .field .rv-date .rv-date-input { height: 40px; padding: 0 40px 0 12px; }
.toolbar .field .rv-date .rv-date-text, .filter-bar .field .rv-date .rv-date-text { left: 12px; right: 40px; }
.toolbar .toolbar-filters > .btn, .toolbar .toolbar-actions > .btn,
.filter-bar > .btn, .filter-bar .filter-actions > .btn { height: 40px; padding: 0 16px; }

.table-card { overflow: hidden; }
.table-head, .table-row {
  display: grid; grid-template-columns: 140px minmax(140px, 1fr) minmax(160px, 1.2fr) 100px 150px 160px;
  gap: 12px; align-items: center; padding: 13px 16px;
}
.table-head { background: #f7faf8; color: #74857f; font-size: 11px; font-weight: 800; }
.table-row { border-top: 1px solid #edf2ef; font-size: 12px; }
.table-row:hover { background: #fbfcfb; }
/* 用户管理：多了"所属机构"列 */
.users-table .table-head, .users-table .table-row {
  grid-template-columns: 120px 100px minmax(120px, 1fr) 130px 130px 70px 130px 220px;
}
/* 数据字典：选项列表多了"操作"列 */
.dict-table .table-head, .dict-table .table-row {
  grid-template-columns: minmax(120px, 1fr) minmax(110px, 1fr) 110px 60px 70px minmax(90px, .8fr) 120px;
}
/* 我的任务 / 我的审核记录：审核员端隐藏「所属批次」列（5 列），管理角色仍为 6 列 */
.table-card.no-batch .table-head, .table-card.no-batch .table-row {
  grid-template-columns: 150px minmax(150px, 1.4fr) 110px 150px 160px;
}
/* 任务管理与分配：多了"勾选"列（支持批量分配） */
.tasks-table .table-head, .tasks-table .table-row {
  grid-template-columns: 34px 150px 90px 110px minmax(140px, 1fr) 140px 260px;
}
.records-table .table-head, .records-table .table-row {
  grid-template-columns: 130px 155px 150px 100px minmax(150px, 1fr) 155px 150px;
}
.tasks-table .table-head input[type=checkbox] { margin: 0; cursor: pointer; }

.empty-state { padding: 28px; text-align: center; color: var(--muted); font-size: 12px; }

/* ---------- 第三方真实顾客搜索结果（新增 Case） ---------- */
.cand-list { display: flex; flex-direction: column; gap: 8px; max-height: 320px; overflow-y: auto; }
.cand-item {
  display: flex; gap: 10px; align-items: center; padding: 10px 12px;
  border: 1px solid var(--line); border-radius: 10px; background: #fff; cursor: pointer;
}
.cand-item:hover { background: var(--surface2); }
.cand-item.is-picked { border-color: var(--green2); background: var(--green-soft); }
.cand-item-main { flex: 1; min-width: 0; }
.cand-item-main b { display: block; font-size: 13px; }
.cand-item-main small { color: var(--muted); font-size: 11px; }

/* 分页 */
.pager {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  margin-top: 14px; flex-wrap: wrap;
}
.pager-info { color: var(--muted); font-size: 12px; }
.pager-actions { display: flex; align-items: center; gap: 8px; }
.pager-size { font-size: 12px; color: var(--muted); display: inline-flex; gap: 6px; align-items: center; }
.pager-size a { padding: 2px 6px; border-radius: 6px; }
.pager-size a.active { background: var(--green-soft); color: var(--green); font-weight: 800; }

/* 提示 */
.toast {
  position: fixed; left: 50%; bottom: 34px; transform: translateX(-50%) translateY(20px);
  background: #1d2d29; color: #fff; padding: 11px 18px; border-radius: 10px; font-size: 12px;
  opacity: 0; pointer-events: none; transition: all .22s ease; z-index: 999;
}
.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }

/* ---------- 通用弹框 ---------- */
.modal {
  position: fixed; inset: 0; background: rgba(16, 28, 24, .48);
  display: none; align-items: center; justify-content: center; padding: 18px; z-index: 100;
}
.modal.show { display: flex; }
.modal-card {
  width: min(680px, 100%); max-height: 88vh; overflow-y: auto; background: #fff;
  border-radius: 16px; padding: 20px; box-shadow: 0 24px 65px rgba(0, 0, 0, .23);
}
.modal-card h3 { margin: 0 0 4px; font-size: 17px; }
.modal-sub { color: var(--muted); font-size: 12px; margin: 0 0 14px; }
.modal-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }

/* ---------- 列表页统一头部 ---------- */
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }

/* 指标卡（与原型一致：小号灰标签 + 大号绿色数值） */
.metric { padding: 17px; }
.metric small { display: block; color: var(--muted); font-size: 10px; }
.metric strong { display: block; font-size: 27px; margin-top: 6px; color: var(--green); }

/* 状态分布小卡 */
.status-tile { border: 1px solid var(--line); border-radius: 10px; padding: 11px 13px; background: #fff; }
.status-tile small { display: block; color: var(--muted); font-size: 10px; }
.status-tile b { display: block; font-size: 19px; margin-top: 5px; color: var(--green); }
/* 统计块/指标卡可点击（跳转"我的任务"并带状态筛选） */
a.metric, a.status-tile { text-decoration: none; color: inherit; display: block; transition: border-color .12s, box-shadow .12s, transform .12s; }
a.metric:hover, a.status-tile:hover { border-color: #9dc4b6; box-shadow: 0 6px 18px rgba(24, 62, 51, .08); transform: translateY(-1px); }
a.status-tile:hover b { color: var(--green2); }

/* 批次进度（原型 batch-list / progress） */
.batch-list { display: grid; gap: 10px; }
.batch { border: 1px solid var(--line); border-radius: 12px; padding: 13px; background: #fff; }
.batch-top { display: flex; justify-content: space-between; gap: 12px; }
.batch h4 { margin: 0; font-size: 13px; }
.batch p { margin: 6px 0 0; font-size: 10px; line-height: 1.6; color: var(--muted); }
.progress { height: 7px; background: #e8efeb; border-radius: 99px; overflow: hidden; margin-top: 10px; }
.progress > div { height: 100%; background: var(--green2); }
.admin-hero { display: grid; grid-template-columns: 1.25fr .75fr; gap: 14px; }

@media (max-width: 1180px) {
  .grid-4 { grid-template-columns: repeat(2, 1fr); }
  .grid-3 { grid-template-columns: repeat(2, 1fr); }
  .grid-2, .admin-hero { grid-template-columns: 1fr; }
  .review-grid { grid-template-columns: 1fr; }
  .sticky-right { position: static; }
  .image-stage { grid-template-columns: 1fr; }
  .thumbs { grid-template-columns: repeat(4, 1fr); max-height: none; }
  .dims { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .result-notice { flex-direction: column; }
}

.toolbar {
  display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end;
  justify-content: space-between; padding: 16px 20px;
}
.toolbar-filters { display: flex; flex-wrap: wrap; gap: 12px 14px; align-items: flex-end; }
/* margin-left:auto 保证窄屏换行时操作区仍靠右，而不是贴在左边 */
.toolbar-actions { display: flex; gap: 8px; align-items: flex-end; flex-wrap: wrap; margin-left: auto; }

/* ---------- 审核工作台 ---------- */
.stack { display: grid; gap: 14px; }
.panel { padding: 18px; }
.card-title { margin: 0 0 10px; font-size: 14px; }

/* 两列工作台（还原原型 review-grid：左=材料，右=作答，右侧吸附） */
.review-grid {
  display: grid; grid-template-columns: minmax(0, 1.03fr) minmax(390px, .97fr);
  gap: 16px; align-items: start;
}
.sticky-right { position: sticky; top: 84px; }
.case-head { display: flex; justify-content: space-between; gap: 12px; align-items: center; margin-bottom: 14px; }
.case-head h2 { margin: 0; font-size: 20px; }
.case-head p { margin: 4px 0 0; color: var(--muted); font-size: 12px; }
.page-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

/* 顶部信息药丸（原型 case-meta / meta） */
.case-meta { display: flex; gap: 7px; flex-wrap: wrap; margin-bottom: 13px; }
.meta {
  font-size: 11px; padding: 6px 9px; border: 1px solid var(--line);
  background: #fff; color: #5d7069; border-radius: 8px;
}

/* 影像舞台（原型 image-stage / main-img / thumbs） */
.image-stage { display: grid; grid-template-columns: minmax(0, 1fr) 190px; gap: 11px; }
.main-img {
  position: relative; min-height: 340px; max-height: 560px; border: 1px solid #d4e0da;
  border-radius: 14px; background: #eef3f1; overflow: hidden; cursor: zoom-in;
  display: flex; align-items: center; justify-content: center;
}
.main-img img { width: 100%; height: 100%; max-height: 560px; object-fit: contain; display: block; }
.image-label {
  position: absolute; top: 9px; left: 9px; z-index: 1; background: rgba(255, 255, 255, .88);
  border: 1px solid rgba(216, 226, 221, .9); padding: 4px 7px; border-radius: 6px;
  font-size: 10px; color: #64756f;
}
.thumbs {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 7px;
  align-content: start; max-height: 560px; overflow-y: auto;
}
.thumb {
  border: 1px solid #dfe8e3; background: #f7faf8; border-radius: 10px; padding: 5px; cursor: pointer;
}
.thumb img { width: 100%; aspect-ratio: 1.2 / 1; display: block; border-radius: 7px; object-fit: cover; background: #e9efec; }
.thumb span { display: block; font-size: 10px; color: #63756e; text-align: center; margin-top: 4px; }
.thumb:hover, .thumb.active { border-color: #87b3a4; background: var(--green-soft); }
.img-hint { font-size: 11px; color: #7a8b85; margin-top: 6px; }
/* 影像类型说明（原型 image-explain：XX 是什么？） */
.image-explain {
  margin-top: 8px; padding: 10px 12px; border: 1px solid #dbe7e2; background: #f7faf9;
  border-radius: 10px; color: #4f635d;
}
.image-explain b { display: block; font-size: 12px; color: #1f4c40; margin-bottom: 3px; }
.image-explain p { margin: 0; font-size: 11px; line-height: 1.7; }
/* 影像查看器：可缩放、可拖动、可上一张/下一张 */
.img-viewer {
  position: fixed; inset: 0; z-index: 140; display: none; flex-direction: column;
  align-items: center; justify-content: center; gap: 10px;
  padding: 16px; background: rgba(9, 18, 15, .88);
}
.img-viewer.show { display: flex; }
.img-viewer-bar {
  display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 8px;
  color: #fff; font-size: 12px;
}
.img-viewer-btn {
  border: 1px solid rgba(255, 255, 255, .22); border-radius: 9px; padding: 7px 11px;
  font-size: 12px; color: #fff; background: rgba(255, 255, 255, .10); cursor: pointer;
}
.img-viewer-btn:hover:not(:disabled) { background: rgba(255, 255, 255, .2); }
.img-viewer-btn:disabled { opacity: .38; cursor: not-allowed; }
.img-viewer-title { min-width: 120px; text-align: center; font-weight: 700; }
.img-viewer-zoom { display: inline-flex; align-items: center; gap: 6px; }
.img-viewer-scale { min-width: 46px; text-align: center; font-variant-numeric: tabular-nums; }
.img-viewer-stage {
  position: relative; flex: 1 1 auto; width: 100%; display: flex; align-items: center; justify-content: center;
  overflow: hidden; cursor: zoom-in;
}
.img-viewer-stage.is-loading::after {
  content: ''; position: absolute; width: 34px; height: 34px; border-radius: 50%;
  border: 3px solid rgba(255,255,255,.25); border-top-color: #fff;
  animation: imgViewerSpin .75s linear infinite;
}
@keyframes imgViewerSpin { to { transform: rotate(360deg); } }
.img-viewer-stage.is-zoomed { cursor: grab; }
.img-viewer-stage.is-grabbing { cursor: grabbing; }
.img-viewer img {
  max-width: 94vw; max-height: 78vh; border-radius: 12px;
  /* 放大由 JS 按倍率重排 width/height 实现（避免 scale 复用低分辨率图层），
     这里不再提升合成层，避免浏览器缓存小尺寸光栅化结果。 */
  user-select: none; transform-origin: center center;
}
.img-viewer img.is-loading { opacity: .18; }
.img-viewer-hint { margin: 0; color: rgba(255, 255, 255, .72); font-size: 11px; text-align: center; }

/* 顾客关注点 / 检测提示（原型 A 面板） */
.roundbox { margin-top: 12px; border: 1px solid var(--line); border-radius: 12px; padding: 13px 15px; background: #f8fbf9; }
.roundbox b { font-size: 12.5px; color: #234b3e; }
.roundbox p { margin: 6px 0 0; font-size: 11.5px; color: #5d746a; line-height: 1.65; }
.roundbox .chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.roundbox .chip {
  padding: 5px 8px; border-radius: 8px; background: #fff; border: 1px solid #dbe8e1;
  font-size: 10.5px; color: #47655a;
}
.roundbox .rinfo { margin-top: 9px; font-size: 10px; color: #84958d; }
.focus-card { margin-top: 12px; border: 1px solid var(--line); border-radius: 12px; padding: 13px 15px; background: #fff; }
.focus-card b { font-size: 12px; color: var(--green); }
.focus-card p { margin: 7px 0 0; font-size: 12px; line-height: 1.7; color: #566a64; }
.signal-card { border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; background: #fff; }
.signal-card small { display: block; color: var(--muted); font-size: 10px; }
.signal-card b { display: block; font-size: 12px; margin-top: 5px; }

/* 循证报告卡（原型 system-card / result-row） */
.system-card { border: 1px solid #d7e6f2; background: #f8fbfe; border-radius: 13px; padding: 13px; }
.system-card + .system-card { margin-top: 10px; }
.system-card h4 { margin: 0 0 9px; color: var(--blue); font-size: 13px; }

/* ---------------------------------------------------------------------------
   市场单轮 B 区（原型「单 Case 页面与 B 区算法结果展示 v1.0」）
   四维状态 / 主要问题 / 推荐成分 / 结果说明 + 计算 Run 追溯
   --------------------------------------------------------------------------- */
.result-notice {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 12px;
  padding: 12px 14px; background: #fff8ed; border: 1px solid #ecd9b8;
  border-radius: 11px; color: #805b2b;
}
.result-notice strong { font-size: 12.5px; }
.result-notice p { font-size: 11.5px; margin: 5px 0 0; line-height: 1.7; }
.resultgroup { border: 1px solid var(--line); border-radius: 13px; overflow: hidden; margin-top: 12px; }
.grouphead {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  background: #f8faf9; border-bottom: 1px solid #e7efeb; padding: 11px 14px;
}
.grouphead b { font-size: 12.5px; }
.grouphead span { font-size: 10.5px; color: #83938b; }
.groupbody { padding: 12px 14px; }
.dims { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 7px; }
.dim { background: #fff; border: 1px solid #dfeae4; border-radius: 10px; padding: 9px 8px; min-width: 0; }
.dim .short { font-size: 17px; font-weight: 900; color: var(--green); }
.dim b { display: block; font-size: 10.5px; margin-top: 4px; line-height: 1.35; }
.rank { display: flex; align-items: flex-start; gap: 10px; padding: 10px 0; border-top: 1px solid #edf1ee; }
.rank:first-child { padding-top: 0; border-top: 0; }
.rankflag {
  flex-shrink: 0; padding: 5px 7px; border-radius: 8px;
  background: #eaf4fa; color: #316d9c; font-size: 10px; font-weight: 850;
}
.rankflag.mech { background: #f0ecfa; color: #5b4a9a; }
.rank b { font-size: 12.5px; }
.rank p { margin: 3px 0 0; font-size: 11px; line-height: 1.5; color: #798b81; }
.ing-inline { font-size: 13px; font-weight: 650; line-height: 1.9; color: #234b3e; word-break: break-word; }
.empty { background: #f7faf8; border: 1px dashed #cdded5; border-radius: 10px; padding: 14px; }
.empty b { display: block; font-size: 12px; color: #556f62; }
.empty span { display: block; margin-top: 4px; font-size: 10.5px; color: #84988a; line-height: 1.6; }
.result-row {
  display: flex; justify-content: space-between; gap: 10px; padding: 7px 0;
  border-top: 1px solid #e7eef5; font-size: 12px;
}
.result-row:first-of-type { border-top: 0; padding-top: 0; }
.result-row small { color: #74899c; }

.section-title.blue .mark { background: var(--blue); }
.section-title.purple .mark { background: #6b4fa8; }

/* ---------- 医生工作台（还原原型 renderDocR1 / renderDocR2） ---------- */
/* 第一轮三步进度 */
.r1-progress { display: flex; align-items: center; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }
.r1-step {
  display: inline-flex; align-items: center; gap: 7px; padding: 7px 10px; border-radius: 999px;
  border: 1px solid var(--line); background: #fff; color: var(--muted); font-size: 11px; font-weight: 800;
}
.r1-step.active { background: var(--green-soft); border-color: #c7e0d6; color: var(--green); }
.r1-step.done { background: #edf6f2; border-color: #bdd9cf; color: var(--green); }
.r1-link { width: 24px; height: 1px; background: #cad8d2; }

/* ① 整体可见皮肤状态评价：程度卡片 + 区间受限评分 */
.severity-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 9px; margin-top: 9px; }
.severity-card {
  border: 1px solid var(--line); background: #fff; border-radius: 13px; padding: 12px 13px; cursor: pointer;
}
.severity-card input { margin-right: 6px; accent-color: var(--green); }
.severity-card strong { font-size: 13px; }
.severity-card .range { margin-left: 8px; font-size: 10px; color: var(--muted); }
.severity-card p { margin: 7px 0 0; font-size: 10px; line-height: 1.7; color: #5b6f68; }
.severity-card:has(input:checked) { border-color: #7fac9c; background: var(--green-soft); }
.score-box { margin-top: 12px; padding: 13px; border: 1px solid #dfe8e4; background: #fafcfb; border-radius: 12px; }
.score-head { display: flex; justify-content: space-between; gap: 10px; align-items: center; }
.score-head b { font-size: 12px; }
.score-value { font-size: 20px; font-weight: 900; color: var(--green); }
.score-slider { width: 100%; accent-color: var(--green); margin: 14px 0 5px; }
.score-anchors { display: flex; justify-content: space-between; font-size: 10px; color: #74847e; }
.score-input-row { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.score-input-row input { width: 90px; border: 1px solid #d7e3dd; border-radius: 9px; padding: 8px 9px; font-weight: 800; }
.score-input-row small { color: var(--muted); font-size: 10px; }
.visual-actions { justify-content: flex-end; }
/* 原型 visual15-actions / visual15-locked 底部按钮区 */
.visual15-actions { display: flex; align-items: center; justify-content: flex-end; gap: 10px; margin-top: 14px; flex-wrap: wrap; }
.visual15-actions .btn:disabled { opacity: .45; cursor: not-allowed; }

/* 锁定摘要 */
.lock-summary { border: 1px solid #cfe1d9; background: #f2f8f5; border-radius: 12px; padding: 13px; }
.lock-summary-top { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.lock-summary strong { font-size: 13px; color: var(--green); }
.lock-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 10px; }
.lock-stat { background: #fff; border: 1px solid #dde9e4; border-radius: 10px; padding: 9px; }
.lock-stat small { display: block; font-size: 10px; color: var(--muted); }
.lock-stat b { display: block; font-size: 13px; margin-top: 4px; }

/* ② 15 项可见皮肤表现（分组表格） */
.visual15-card { margin-top: 14px; }
.visual15-intro {
  padding: 13px 15px; border: 1px solid #d9e7e1; background: #f7fbf9; border-radius: 12px;
  color: #4d635c; font-size: 12px; line-height: 1.8;
}
.visual15-intro b { color: var(--green); font-size: 13px; }
.visual15-progress {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 14px 0 10px;
  padding: 10px 12px; border-radius: 10px; background: #f8fbfa; border: 1px solid #e0eae6;
}
.visual15-progress b { font-size: 12px; }
.visual15-progress span { font-size: 13px; font-weight: 900; color: var(--green); }
.visual15-group { margin-top: 12px; border: 1px solid #dce8e3; border-radius: 13px; overflow: hidden; background: #fff; }
.visual15-group-head { padding: 11px 13px; background: #f4f8f6; border-bottom: 1px solid #e5eeea; }
.visual15-group-head b { font-size: 13px; }
.visual15-group-head small { display: block; margin-top: 3px; color: var(--muted); font-size: 10px; }
.visual15-table { overflow-x: auto; }
.visual15-row {
  min-width: 560px; display: grid; align-items: center;
  grid-template-columns: minmax(160px, 1.4fr) repeat(4, minmax(78px, .65fr));
  border-top: 1px solid #edf2ef;
}
.visual15-row:first-child { border-top: 0; }
.visual15-row.header { background: #fbfdfc; color: #657770; font-size: 10px; font-weight: 800; }
.visual15-row > span, .visual15-row > b { padding: 11px 12px; font-size: 12px; }
.visual15-cell { display: flex; align-items: center; gap: 6px; padding: 11px 12px; font-size: 11px; cursor: pointer; }
.visual15-cell input { accent-color: var(--green); }
.visual15-locked { border: 1px solid #cfe1d9; background: #f2f8f5; border-radius: 13px; padding: 14px; }
.visual15-lock-head { display: flex; justify-content: space-between; gap: 10px; align-items: center; }
.visual15-lock-head b { font-size: 13px; color: var(--green); }
.visual15-lock-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 7px; margin-top: 10px; }
.visual15-lock-item { border: 1px solid #dce8e3; background: #fff; border-radius: 9px; padding: 8px; }
.visual15-lock-item small { display: block; color: #74857f; font-size: 10px; }
.visual15-lock-item b { display: block; margin-top: 4px; font-size: 12px; }

/* 3A 15 项检测数据（面积占比 %） */
.cm-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.cm { border: 1px solid #e2eae6; background: #f9fbfa; border-radius: 10px; padding: 9px; }
.cm code { font-size: 10px; color: var(--green); font-weight: 900; }
.cm strong { display: block; font-size: 18px; margin-top: 6px; color: #1f312c; }
.cm b { display: block; font-size: 12px; margin-top: 4px; color: #244039; }

/* 第二轮：A 证据 + B 报告 + C 评价 */
.doctor-evidence-panel { display: block; }
.doctor-image-zone { display: grid; grid-template-columns: minmax(0, 1fr) 190px; gap: 11px; align-items: start; }
.doctor-main-sticky { position: sticky; top: 10px; align-self: start; background: #fff; border-radius: 14px; }
.doctor-main-sticky .main-img { height: min(58vh, 620px); min-height: 320px; max-height: none; }
.doctor-thumbs-wrap { align-self: start; }
.doctor-cm-zone, .doctor-compare-zone { display: block; width: 100%; }
.doctor-form-column { position: static !important; }
/* 原型 doctor-submit-bar：右下角悬浮提交条（提示文案在原型中隐藏）
   用复合选择器覆写通用 .review-actions（两者同为单类选择器时会被后定义的 .review-actions 覆盖） */
.review-actions.doctor-submit-bar {
  position: fixed; right: 26px; bottom: 20px; z-index: 40;
  width: auto; max-width: calc(100vw - 52px); margin: 0; padding: 6px;
  border-radius: 13px; border: 1px solid rgba(215, 229, 223, .95);
  box-shadow: 0 10px 30px rgba(24, 62, 51, .15);
  justify-content: flex-end; background: rgba(255, 255, 255, .96); backdrop-filter: blur(10px);
}
.review-actions.doctor-submit-bar small { display: none; }
.review-actions.doctor-submit-bar .btn { white-space: nowrap; }
.compare-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; margin-top: 11px; }
.compare { border: 1px solid var(--line); border-top: 3px solid var(--green2); border-radius: 11px; padding: 11px; background: #fff; }
.compare.blue { border-color: #d7e6f2; border-top-color: var(--blue); background: var(--blue-soft); }
.compare b { font-size: 11px; color: #586c65; }
.compare p { font-size: 12px; line-height: 1.7; margin: 6px 0 0; color: #45564f; }
.problem-rank-list { margin-top: 8px; border-top: 1px solid var(--line); }
.problem-rank-row {
  display: grid; grid-template-columns: 46px 1fr; align-items: center; gap: 10px;
  padding: 10px 2px; border-bottom: 1px solid var(--line);
}
.problem-rank-row .rank-no {
  width: 30px; height: 30px; border-radius: 10px; background: var(--green-soft);
  display: grid; place-items: center; color: var(--green); font-size: 14px; font-weight: 900;
}
.problem-rank-row b { font-size: 13px; }
.rank-note { margin: 8px 0 2px; padding: 9px 11px; border-radius: 10px; background: #eef5fb; color: #476985; font-size: 11px; line-height: 1.7; }
.me-list { border-top: 1px solid var(--line); margin-top: 6px; }
.me-row { display: flex; align-items: center; padding: 9px 2px; border-bottom: 1px solid var(--line); font-size: 12px; }
.ingredient-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }
.ingredient { border: 1px solid #d7e6f2; background: #fff; border-radius: 10px; padding: 9px; }
.ingredient b { font-size: 12px; }
.ingredient small { display: block; color: #74889a; font-size: 10px; margin-top: 4px; }
.algo-badge, .sim-badge {
  display: inline-block; margin-left: 6px; padding: 2px 7px; border-radius: 99px; font-size: 10px;
  background: var(--blue-soft); color: var(--blue); font-weight: 700;
}
.r2-source-body { padding: 0 12px 12px; }

@media (max-width: 1180px) {
  .severity-grid, .compare-grid, .lock-grid, .ingredient-grid { grid-template-columns: 1fr; }
  .cm-grid { grid-template-columns: repeat(2, 1fr); }
  .visual15-lock-grid { grid-template-columns: repeat(3, 1fr); }
  .doctor-image-zone { grid-template-columns: 1fr; }
  .doctor-main-sticky { position: static; }
  /* 窄屏：悬浮提交条回落为普通整行条，并显示提示文案（与原型 media 规则一致） */
  .review-actions.doctor-submit-bar { position: static; width: 100%; max-width: none; margin-left: 0; padding: 9px 10px; }
  .review-actions.doctor-submit-bar small { display: block; }
}

/* ---------- 审核前阅读须知（还原原型 renderDocGuide） ---------- */
.guide-hero-main { padding: 22px; }
.guide-hero-main h2 { margin: 10px 0 10px; font-size: 24px; line-height: 1.4; }
.guide-hero-main p { margin: 0; color: #536760; font-size: 13px; line-height: 1.9; }
.guide-review-focus {
  display: block; margin-top: 8px; font-size: 15px; line-height: 1.7;
  font-weight: 900; color: #183f34;
}
.guide-flow {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 14px;
  padding: 12px 14px; border: 1px solid #cfe2da; background: #f8fbfa; border-radius: 13px;
  font-size: 12px; font-weight: 800; color: #1f4c40;
}
.guide-flow i { color: var(--green2); font-style: normal; }
.guide-round-title { margin: 0 0 10px; font-size: 15px; color: var(--green); }
.guide-round-list { display: grid; gap: 7px; font-size: 12px; line-height: 1.8; color: #536760; }
.guide-boundary {
  font-size: 13px; line-height: 1.9; color: #3e5550; margin-top: 14px; padding-top: 12px;
  border-top: 1px solid var(--line);
}
.guide-boundary b { color: var(--green); }
.guide-agree {
  display: flex; align-items: center; gap: 10px; color: #3e5550; font-size: 13px;
}
.guide-agree input { accent-color: var(--green); }
.guide-agree-large { font-size: 15px; font-weight: 800; color: #22352f; }
.guide-agree-large input { width: 18px; height: 18px; }
.guide-enter-row { display: flex; justify-content: flex-end; gap: 10px; margin-top: 14px; flex-wrap: wrap; }
.briefing-notice {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  background: var(--gold-soft); border-color: #efe0c4; color: #8a6516;
}
/* 审核前须知：未确认时的常驻入口 + 首次登录弹框内容 */
.briefing-banner .btn { margin-left: auto; }
.briefing-summary { margin: 0 0 10px; font-size: 13px; line-height: 1.8; color: #3e5550; }
.briefing-summary b { color: var(--green); }
.briefing-points {
  margin: 0 0 14px; padding: 12px 14px 12px 30px; background: #f7faf8;
  border: 1px solid #e2ebe6; border-radius: 12px; color: #44594f; font-size: 12.5px; line-height: 1.9;
}
.briefing-block-title { font-size: 12.5px; font-weight: 800; color: #3e5550; margin: 0 0 6px; }
.briefing-more { margin: 0 0 10px; font-size: 12px; }
.briefing-agree { margin-top: 4px; }
.briefing-notice b { color: #7a5510; }

/* ---------------------------------------------------------------------------
   审核前须知弹框：横向一屏布局
   还原原型「循证护肤系统_医生审核须知_横向一屏布局交互原型_v1.1」：
   头部（eyebrow + 标题 + 右侧确认标识）→ 两轮卡片横向并排 → 重要提醒 → 底部勾选确认。
   --------------------------------------------------------------------------- */
.briefing-overlay { padding: 22px; background: rgba(30, 52, 44, .46); }
.briefing-card {
  width: min(1070px, 100%); max-height: calc(100dvh - 44px); padding: 0; overflow: hidden;
  display: flex; flex-direction: column; border: 1px solid #e8f1ea; border-radius: 20px;
  box-shadow: 0 25px 90px rgba(15, 43, 33, .18);
}
.briefing-head {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between; gap: 24px;
  padding: 22px 30px 16px; border-bottom: 1px solid #edf2ee;
  background: linear-gradient(105deg, #fff 15%, #f0f9f4 100%);
}
.briefing-head-main { min-width: 0; }
.briefing-eyebrow {
  display: flex; align-items: center; gap: 7px; margin-bottom: 5px;
  font-size: 11px; font-weight: 800; letter-spacing: .035em; color: #26755d;
}
.briefing-dot { width: 7px; height: 7px; background: #2b876b; border-radius: 100%; }
.briefing-card .briefing-head h2 { margin: 0; font-size: 24px; line-height: 1.38; font-weight: 800; color: #173e33; }
.briefing-head p { margin: 5px 0 0; font-size: 12px; line-height: 1.5; color: #6f877b; }
.briefing-aside {
  flex: 0 0 auto; display: flex; align-items: center; gap: 8px; white-space: nowrap;
  padding: 8px 14px; border: 1px solid #d0e7da; border-radius: 100px;
  background: #e8f5ed; color: #37725c; font-size: 12px; font-weight: 700;
}
.briefing-aside svg { width: 16px; height: 16px; }
.briefing-body { flex: 0 0 auto; min-height: 0; padding: 20px 30px 15px; }
.briefing-rounds {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 15px;
}
.briefing-round {
  display: flex; flex-direction: column; gap: 12px; min-width: 0;
  padding: 18px 20px 16px; background: #fff; border: 1px solid #dcebe3; border-radius: 14px;
}
.briefing-round.is-first { background: linear-gradient(160deg, #f3faf5 0%, #fff 75%); border-color: #add4c0; }
.briefing-round-hd { display: flex; align-items: center; gap: 10px; min-height: 45px; }
.briefing-round-no {
  flex: 0 0 38px; width: 38px; height: 38px; display: grid; place-items: center;
  background: var(--green); color: #fff; border-radius: 12px; font-size: 13px; font-weight: 800;
}
.briefing-round:not(.is-first) .briefing-round-no { background: #658a7c; }
.briefing-round-heading { flex: 1; min-width: 0; }
.briefing-round-label { font-size: 11px; font-weight: 750; letter-spacing: .05em; color: #44816c; }
.briefing-card .briefing-round h3 { margin: 2px 0 0; font-size: 17px; line-height: 1.35; color: #163d32; }
.briefing-round-tag {
  flex: 0 0 auto; padding: 4px 9px; border: 1px solid #d7e8dd; border-radius: 99px;
  background: #fff; color: #43806b; font-size: 11px; white-space: nowrap;
}
.briefing-steps { display: grid; gap: 9px; flex: 1; }
.briefing-step {
  display: grid; grid-template-columns: 22px 1fr; align-items: start; gap: 8px;
  font-size: 13px; line-height: 1.5; color: #405e51;
}
.briefing-step-no {
  width: 20px; height: 20px; display: grid; place-items: center; border-radius: 50%;
  background: #e0f0e6; color: #266d58; font-size: 11px; font-weight: 800;
}
.briefing-round:not(.is-first) .briefing-step-no { background: #ecf4ee; color: #50796a; }
.briefing-step strong { color: #1f5f4c; }
.briefing-note {
  display: flex; gap: 9px; align-items: flex-start; min-height: 55px; padding: 10px 12px;
  background: #e5f2e9; border-radius: 9px; color: #245d4c; font-size: 12px; line-height: 1.5;
}
.briefing-round:not(.is-first) .briefing-note { background: #edf5f1; color: #456e5e; }
.briefing-note svg { flex: 0 0 18px; width: 18px; height: 18px; margin-top: 1px; }
.briefing-guardrails {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 13px;
  padding: 11px 13px; background: #f8faf8; border: 1px solid #e6eee8; border-radius: 10px;
}
.briefing-guard-title {
  display: flex; align-items: center; gap: 6px; margin-right: 6px; white-space: nowrap;
  font-size: 12px; font-weight: 800; color: #2a5846;
}
.briefing-guard-title svg { width: 16px; height: 16px; }
.briefing-guard-item {
  padding: 6px 10px; background: #fff; border: 1px solid #e5eee7; border-radius: 8px;
  color: #567062; font-size: 11.5px; line-height: 1.35; white-space: nowrap;
}
.briefing-detail { margin-top: 11px; color: #4d846e; font-size: 11.5px; }
.briefing-detail a { color: var(--green); font-weight: 650; text-decoration: underline; text-underline-offset: 3px; }
.briefing-foot {
  flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between; gap: 15px;
  padding: 14px 30px 16px; border-top: 1px solid #e5eee8; background: #fff;
}
.briefing-agree {
  display: flex; align-items: center; gap: 10px; margin: 0; cursor: pointer;
  font-size: 13px; font-weight: 650; line-height: 1.5; color: #294b3d;
}
.briefing-agree input { flex: 0 0 18px; width: 18px; height: 18px; accent-color: #26705b; }
.briefing-actions { flex: 0 0 auto; display: flex; align-items: center; gap: 9px; }
.briefing-actions .btn { white-space: nowrap; }
.briefing-card .btn-primary { min-width: 164px; }
.briefing-card .btn-primary:disabled { background: #bdd5ca; border-color: #bdd5ca; color: #f8fffb; cursor: not-allowed; }

@media (max-width: 1100px) {
  .briefing-head { padding: 18px 22px 14px; }
  .briefing-body { padding: 17px 22px 13px; }
  .briefing-round { padding: 14px; }
  .briefing-card .briefing-round h3 { font-size: 15px; }
  .briefing-round-tag { font-size: 10px; }
  .briefing-step { font-size: 12px; }
  .briefing-foot { padding: 12px 22px; }
}

@media (max-height: 740px) and (min-width: 821px) {
  .briefing-head { padding-top: 15px; padding-bottom: 12px; }
  .briefing-card .briefing-head h2 { font-size: 21px; }
  .briefing-body { padding-top: 12px; padding-bottom: 10px; }
  .briefing-round { gap: 8px; padding-top: 12px; padding-bottom: 12px; }
  .briefing-steps { gap: 6px; }
  .briefing-step { font-size: 12px; line-height: 1.4; }
  .briefing-note { min-height: 44px; padding: 8px 10px; font-size: 11px; }
  .briefing-guardrails { margin-top: 9px; padding: 8px; }
  .briefing-detail { margin-top: 6px; }
  .briefing-foot { padding-top: 10px; padding-bottom: 11px; }
}

@media (max-width: 820px) {
  .briefing-overlay { padding: 12px; }
  .briefing-card { max-height: calc(100dvh - 24px); }
  .briefing-head { padding: 17px 18px; }
  .briefing-body { flex: 1 1 auto; overflow-y: auto; padding: 14px 18px; }
  .briefing-rounds { grid-template-columns: 1fr; gap: 11px; }
  .briefing-guardrails { align-items: flex-start; }
  .briefing-guard-item { white-space: normal; }
  .briefing-foot { flex-wrap: wrap; padding: 13px 18px; }
  .briefing-agree { width: 100%; }
  .briefing-actions { width: 100%; justify-content: flex-end; }
  .briefing-card .btn-primary { flex: 1; }
}

/* 角色提示（原型 ROLES[role].name + 本角色怎么做） */
.role-brief {
  display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; margin-bottom: 12px;
  padding: 11px 13px; border: 1px solid #dbe8e2; background: #f8fbfa; border-radius: 11px;
  font-size: 12px; line-height: 1.75; color: #536760;
}
.role-brief b { color: var(--green); font-size: 13px; white-space: nowrap; }

/* 侧边栏常驻角色提示（原型 roleNote） */
.role-note { border: 1px solid var(--line); background: #f8faf9; border-radius: 13px; padding: 12px; margin-top: 12px; }
.role-note b { font-size: 12px; }
.role-note p { font-size: 11px; line-height: 1.65; color: #64756f; margin: 7px 0 0; }

/* 「无法判断」说明框（选中后展开、必填） */
.unknown-note { border-style: dashed; }
.unknown-note.show { border-color: #d9c39a; background: #fdfaf3; }
/* 第一轮说明在第二轮的只读展示 */
.first-round-notes { margin-top: 10px; border-top: 1px dashed #cfe1d9; padding-top: 8px; }
.first-round-notes .note-line { margin-top: 6px; }
.first-round-notes .note-line b { display: block; font-size: 11px; color: #1f4c40; }
.first-round-notes .note-line p { margin: 3px 0 0; font-size: 11px; line-height: 1.7; color: #4f635d; }

.notice {
  background: var(--blue-soft); border: 1px solid #d7e6f2; color: #2f5f8a;
  border-radius: 12px; padding: 12px 14px; font-size: 12px; line-height: 1.7; margin-bottom: 14px;
}
.locked-zone {
  border: 1px dashed var(--line); background: #f7faf8; border-radius: 14px;
  padding: 18px; color: #4d6159; font-size: 12px;
}
.locked-zone b { display: block; margin-bottom: 6px; font-size: 13px; color: #3b4d47; }

.question { padding: 13px 0; border-top: 1px solid #edf2ef; }
.question:first-of-type { border-top: 0; padding-top: 0; }
.qtitle { font-size: 13px; font-weight: 800; line-height: 1.6; }
.qdesc { font-size: 11px; color: var(--muted); margin: 5px 0 9px; }
.req { color: #b4514b; margin-left: 4px; }
.optional { color: var(--muted); font-weight: 500; font-size: 12px; margin-left: 4px; }
.options { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.option {
  border: 1px solid #dce5e0; background: #fff; border-radius: 9px; padding: 8px 10px;
  font-size: 12px; display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
}
.option:hover { border-color: #bfd8d2; }
.field input.score-input { max-width: 160px; }

.reason { display: none; margin-top: 10px; }
.reason.show { display: block; }
.reason label { display: block; font-size: 12px; font-weight: 700; margin-bottom: 6px; }
.reason textarea, .question textarea {
  width: 100%; min-height: 76px; border: 1px solid #d7e3dd; border-radius: 10px;
  padding: 10px 12px; font: inherit; font-size: 12px; background: #fff;
}
.review-actions {
  position: sticky; bottom: 0; z-index: 2; margin-top: 14px; padding: 11px 12px;
  display: flex; gap: 10px; justify-content: space-between; align-items: center; flex-wrap: wrap;
  background: rgba(255, 255, 255, .96); backdrop-filter: blur(8px);
  border: 1px solid var(--line); border-radius: 12px;
}
.review-actions small { font-size: 11px; color: var(--muted); line-height: 1.6; }
.invalid { border-left: 3px solid #b4514b; padding-left: 10px; }
.field-error { color: #b4514b; font-size: 11px; margin-top: 6px; }

/* 批次暂停/结束：作答区冻结（只读） */
.is-frozen .review-actions { display: none; }
.is-frozen input, .is-frozen textarea, .is-frozen select {
  background: #f6f8f7; color: #6b7c75; cursor: not-allowed;
}
.is-frozen .option, .is-frozen .score-choice { cursor: not-allowed; opacity: .72; }

.meta-row { display: flex; gap: 14px; flex-wrap: wrap; font-size: 12px; color: #4d6159; margin-bottom: 8px; }
.node-grid { display: grid; grid-template-columns: 1fr 42px 1fr; gap: 10px; align-items: center; }
.node { border: 1px solid #d8e7f4; border-radius: 12px; padding: 12px; background: #fafcfb; }
.node.blue { background: #f8fbff; }
.node small { display: block; color: var(--muted); font-size: 10px; }
.node b { display: block; margin-top: 5px; font-size: 14px; }
.node p { margin: 8px 0 0; font-size: 11px; line-height: 1.65; color: #5b6f68; }
.arrow { text-align: center; color: var(--muted); }

.asset-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
.asset { border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: #eef3f1; }
.asset img { width: 100%; height: 130px; object-fit: cover; display: block; }
.asset small { display: block; padding: 6px 8px; font-size: 10px; color: var(--muted); background: #fff; }

.metric-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 8px; }

/* 真实顾客资料 / 报告模块 */
.field-label { font-size: 11px; font-weight: 800; color: #7d8d87; margin: 12px 0 6px; }
.focus-text {
  margin: 0; font-size: 12px; line-height: 1.8; color: #4d6159;
  background: var(--green-soft); border: 1px solid #cfe2da; border-radius: 10px; padding: 10px 12px;
}
.plain-list.ordered { padding-left: 20px; line-height: 2; }
.report-block { border-top: 1px dashed #e2eae6; padding-top: 10px; margin-top: 10px; }
.report-block:first-child { border-top: 0; margin-top: 0; padding-top: 0; }
.report-block h5 { margin: 0 0 8px; font-size: 12px; color: var(--blue); }
.algo-badge {
  font-size: 9px; font-weight: 800; color: var(--blue); background: var(--blue-soft);
  border: 1px solid #d7e6f2; border-radius: 99px; padding: 2px 6px; margin-left: 6px;
}
.plan-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 8px; }
.plan-item {
  border: 1px solid var(--line); border-radius: 10px; padding: 9px 11px; background: #f9fbfa;
  font-size: 12px; line-height: 1.6;
}
.plan-item small { display: block; color: var(--muted); font-size: 10px; margin-bottom: 3px; }
.plan-item b { font-weight: 700; }
.r2-source-details { margin-top: 12px; }
.r2-source-details summary { cursor: pointer; font-size: 11px; color: var(--muted); }
.metric-cell { border: 1px solid #e2eae6; border-radius: 10px; padding: 9px; background: #f9fbfa; }
.metric-cell small { display: block; font-size: 10px; color: var(--muted); }
.metric-cell b { display: block; font-size: 14px; margin-top: 4px; }
.metric-cell span { font-size: 10px; color: var(--green); }
.snapshot {
  background: #f7faf8; border: 1px solid var(--line); border-radius: 10px; padding: 12px;
  font-size: 11px; line-height: 1.6; white-space: pre-wrap; word-break: break-all; margin: 0;
}
.evidence { border-bottom: 1px solid #edf2ef; padding: 8px 0; }
.evidence:last-child { border-bottom: 0; }
.evidence small { display: block; color: var(--muted); font-size: 11px; margin-top: 3px; }

/* ---------- 管理端 ---------- */
.form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; }
.row-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.audit-list { display: grid; gap: 8px; }
.audit-item {
  display: grid; grid-template-columns: 160px 90px 90px 1fr; gap: 10px;
  border-bottom: 1px solid #edf2ef; padding: 9px 0; font-size: 12px; align-items: center;
}
.audit-item:last-child { border-bottom: 0; }
.hash { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }

/* 菜单授权树 */
.menu-tree { max-height: 420px; overflow-y: auto; border: 1px solid var(--line); border-radius: 12px; padding: 12px; background: #fbfcfb; }
.menu-tree .option { width: 100%; }

/* 菜单管理树 */
.admin-tree-wrap { max-height: 560px; overflow-y: auto; }
.admin-tree { list-style: none; margin: 0; padding-left: 0; }
.admin-tree .admin-tree { padding-left: 20px; margin-left: 10px; border-left: 1px dashed #e2eae6; }
.admin-tree-node.is-hidden > .admin-tree-row .menu-name { color: #9aa8a3; text-decoration: line-through; }
.admin-tree-row {
  display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 8px;
  font-size: 12px; flex-wrap: wrap;
}
.admin-tree-row:hover { background: #f4f8f6; }
.admin-tree-row .menu-name { font-weight: 700; min-width: 120px; }
.admin-tree-row .row-actions { margin-left: auto; }
.admin-tree-children.collapsed { display: none; }
.perm-tree { list-style: none; margin: 0; padding-left: 0; }
.perm-tree .perm-tree { padding-left: 18px; border-left: 1px dashed #e2eae6; margin-left: 8px; }
.perm-node { margin: 2px 0; }
.perm-row { display: flex; align-items: center; gap: 6px; padding: 3px 4px; border-radius: 8px; }
.perm-row:hover { background: #f2f7f5; }
.tree-toggle { border: 0; background: transparent; cursor: pointer; width: 18px; color: var(--muted); font-size: 11px; }
.tree-toggle.placeholder { display: inline-block; cursor: default; }
.perm-label { display: flex; align-items: center; gap: 7px; font-size: 12px; cursor: pointer; }
.perm-name { font-weight: 700; }
.perm-meta { color: var(--muted); font-size: 10px; }

/* ==========================================================================
   统一表单控件（jQuery 封装）：下拉框 rv-select / 日期时间 rv-date
   原生 select、input 仍在 DOM 中做数据载体，这里只负责外观与交互。
   ========================================================================== */
.rv-select { position: relative; width: 100%; }
.rv-select .rv-select-native {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0;
  clip: rect(0 0 0 0); overflow: hidden; opacity: 0; pointer-events: none; appearance: none;
}
.rv-select-trigger {
  width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 8px;
  border: 1px solid #d7e3dd; border-radius: 10px; background: #fff;
  padding: 10px 12px; font: inherit; color: var(--ink); cursor: pointer; text-align: left;
  transition: border-color .14s ease, box-shadow .14s ease, background .14s ease;
}
.rv-select-trigger:hover { border-color: #b7d0c6; background: #fdfefd; }
.rv-select.open .rv-select-trigger { border-color: var(--green2); box-shadow: 0 0 0 3px rgba(63, 139, 117, .15); }
.rv-select.is-disabled .rv-select-trigger { background: #f4f7f6; color: var(--muted); cursor: not-allowed; }
.rv-select-text {
  flex: 1 1 auto; min-width: 0; display: block;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rv-select-text.is-placeholder { color: #9aada6; }
.rv-select-arrow { flex: 0 0 auto; width: 12px; height: 12px; color: var(--muted); transition: transform .16s ease; }
.rv-select-arrow::before {
  content: ''; display: block; width: 6px; height: 6px; margin: 1px auto 0;
  border-right: 1.7px solid currentColor; border-bottom: 1.7px solid currentColor;
  transform: rotate(45deg); transform-origin: 60% 60%;
}
.rv-select.open .rv-select-arrow { transform: rotate(180deg); }

.rv-select-panel {
  position: fixed; z-index: 1200; display: none; min-width: 160px; max-width: 420px;
  background: #fff; border: 1px solid var(--line); border-radius: 12px; padding: 6px;
  box-shadow: 0 18px 42px rgba(24, 62, 51, .16);
}
.rv-select-panel.show { display: block; }
.rv-select-search { padding: 3px 3px 6px; }
.rv-select-search input {
  width: 100%; border: 1px solid var(--line); border-radius: 8px;
  padding: 7px 9px; font: inherit; font-size: 12px; color: var(--ink);
}
.rv-select-search input:focus { outline: none; border-color: var(--green2); box-shadow: 0 0 0 3px rgba(63, 139, 117, .13); }
.rv-select-options { max-height: 252px; overflow-y: auto; }
.rv-select-group { padding: 7px 9px 3px; font-size: 10px; font-weight: 800; color: var(--muted); }
.rv-select-option {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 8px 10px; border-radius: 8px; font-size: 12px; cursor: pointer;
}
.rv-select-option:hover, .rv-select-option.is-active { background: var(--surface2); }
.rv-select-option.selected { background: var(--green-soft); color: var(--green); font-weight: 800; }
.rv-select-option.disabled { color: #b6c4bf; cursor: not-allowed; background: transparent; }
.rv-select-check { color: var(--green); font-size: 11px; }
.rv-select-empty { padding: 14px; text-align: center; color: var(--muted); font-size: 12px; }

/* 用户选择器（搜索 + 下拉）：显示「姓名（账号名 · 角色）」，避免重名无法区分 */
.rv-user-panel { min-width: 240px; }
.rv-user-panel .rv-select-options { max-height: 320px; }
.rv-user-option {
  display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
  padding: 8px 10px; border-radius: 8px; cursor: pointer;
}
.rv-user-option:hover, .rv-user-option.active { background: var(--surface2); }
.rv-user-option b { font-size: 12.5px; color: var(--ink); }
.rv-user-option span { font-size: 11.5px; color: var(--muted); white-space: nowrap; }
.rv-user-option.is-clear { border-bottom: 1px dashed var(--line); border-radius: 8px 8px 0 0; }
.rv-user-option.is-clear b { color: var(--green); }
.rv-user-empty { padding: 14px; text-align: center; color: var(--muted); font-size: 12px; }

/* 日期面板内的时间下拉：行内展开，不脱离日历卡片 */
.rv-select-inline .rv-select-panel {
  position: absolute; top: calc(100% + 6px); left: 0; right: 0;
  max-height: 172px; overflow-y: auto; min-width: 0;
}

.rv-date { position: relative; display: block; width: 100%; }
.rv-date .rv-date-input {
  width: 100%; border: 1px solid #d7e3dd; border-radius: 10px;
  padding: 10px 40px 10px 12px; background: #fff; font: inherit; color: var(--ink);
  transition: border-color .14s ease, box-shadow .14s ease;
}
.rv-date .rv-date-input:hover { border-color: #b7d0c6; }
.rv-date .rv-date-input:focus { outline: none; border-color: var(--green2); box-shadow: 0 0 0 3px rgba(63, 139, 117, .15); }
.rv-date-toggle {
  position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  width: 27px; height: 27px; display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: 8px; background: transparent; color: var(--muted); cursor: pointer;
}
.rv-date-toggle:hover { background: var(--green-soft); color: var(--green); }
.rv-date.open .rv-date-toggle { background: var(--green-soft); color: var(--green); }
/* 未聚焦时用更易读的文案覆盖机器格式（输入框仍保存 YYYY-MM-DD[THH:mm]） */
.rv-date-text {
  position: absolute; left: 12px; right: 40px; top: 50%; transform: translateY(-50%);
  display: none; pointer-events: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font: inherit; color: var(--ink);
}
.rv-date.has-value:not(.editing) .rv-date-text { display: block; }
.rv-date.has-value:not(.editing) .rv-date-input { color: transparent; }
.rv-date.has-value:not(.editing) .rv-date-input::placeholder { color: transparent; }

.rv-date-panel {
  position: fixed; z-index: 1200; display: none; width: 272px;
  background: #fff; border: 1px solid var(--line); border-radius: 14px; padding: 12px;
  box-shadow: 0 20px 46px rgba(24, 62, 51, .18);
}
.rv-date-panel.show { display: block; }
.rv-date-head { display: flex; align-items: center; gap: 2px; margin-bottom: 8px; }
.rv-date-title { flex: 1 1 auto; text-align: center; font-size: 12px; font-weight: 800; color: var(--ink); }
.rv-nav {
  width: 24px; height: 24px; border: 0; border-radius: 7px; background: transparent;
  color: var(--muted); cursor: pointer; font-size: 13px; line-height: 1; padding: 0;
}
.rv-nav:hover { background: var(--green-soft); color: var(--green); }
.rv-date-week, .rv-date-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.rv-date-week span { text-align: center; font-size: 10px; color: var(--muted); font-weight: 800; padding-bottom: 4px; }
.rv-date-day {
  height: 30px; border: 0; border-radius: 8px; background: transparent;
  font: inherit; font-size: 12px; color: var(--ink); cursor: pointer; padding: 0;
}
.rv-date-day:hover { background: var(--surface2); }
.rv-date-day.is-out { color: #c3d0cb; cursor: default; }
.rv-date-day.is-today { box-shadow: inset 0 0 0 1px #cfe2da; color: var(--green); font-weight: 800; }
.rv-date-day.selected, .rv-date-day.selected:hover { background: var(--green); color: #fff; font-weight: 800; }
.rv-date-day:disabled { background: transparent; }
.rv-date-time {
  display: flex; align-items: center; gap: 6px; margin-top: 10px;
  padding-top: 10px; border-top: 1px solid var(--line);
}
.rv-date-time-label { font-size: 11px; font-weight: 800; color: var(--muted); }
.rv-date-time .rv-select { width: 78px; }
.rv-date-time .rv-select-trigger { padding: 6px 8px; font-size: 12px; }
.rv-time-sep { color: var(--muted); }
.rv-date-foot {
  display: flex; align-items: center; gap: 6px; margin-top: 10px;
  padding-top: 10px; border-top: 1px solid var(--line);
}
.rv-link {
  border: 0; background: transparent; color: var(--green); font: inherit; font-size: 12px;
  font-weight: 800; cursor: pointer; padding: 5px 7px; border-radius: 7px;
}
.rv-link:hover { background: var(--green-soft); }
.rv-date-foot .btn { margin-left: auto; }

/* ==========================================================================
   项目管理员：审核进度与结果看板
   ========================================================================== */
.analytics-page { padding-bottom: 48px; }
.analytics-page-head { align-items: center; }
.analytics-filters {
  display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px;
  margin-bottom: 14px;
}
.analytics-filter {
  display: grid; gap: 7px; min-width: 0; padding: 13px 14px;
  border: 1px solid var(--line); border-radius: 14px; background: #fff;
  box-shadow: 0 8px 20px rgba(26, 62, 46, .04);
}
.analytics-filter > span { color: var(--muted); font-size: 11px; font-weight: 800; }
.analytics-filter select, .analytics-filter input {
  width: 100%; height: 38px; border: 1px solid #d7e3dd; border-radius: 10px;
  padding: 0 10px; background: #fff; color: var(--ink); font: inherit; font-size: 12px;
}
.analytics-usage-note {
  margin: -2px 0 14px; padding: 10px 13px; border: 1px dashed #cfe1d9;
  border-radius: 11px; background: #f8fbf9; color: #60736b; font-size: 11px; line-height: 1.65;
}
.analytics-metrics {
  display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px;
  margin-bottom: 14px;
}
.analytics-metric {
  min-width: 0; padding: 17px 18px; border: 1px solid var(--line); border-radius: 16px;
  background: #fff; box-shadow: 0 10px 24px rgba(26, 62, 46, .05);
}
.analytics-metric small { display: block; color: var(--muted); font-size: 11px; font-weight: 800; }
.analytics-metric strong {
  display: block; margin: 9px 0 6px; color: var(--green); font-size: 34px; line-height: 1;
}
.analytics-metric span { color: var(--muted); font-size: 11px; }
.analytics-progress-grid, .analytics-result-grid {
  display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(320px, .85fr);
  gap: 14px; margin-bottom: 14px;
}
.analytics-card { min-width: 0; }
.analytics-card-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 12px;
  margin-bottom: 13px;
}
.analytics-tabs {
  display: inline-flex; gap: 3px; padding: 3px; border: 1px solid var(--line);
  border-radius: 11px; background: #f6faf8;
}
.analytics-tabs button {
  border: 0; border-radius: 8px; padding: 6px 10px; background: transparent;
  color: var(--muted); font: inherit; font-size: 11px; font-weight: 800; cursor: pointer;
}
.analytics-tabs button.active { background: #fff; color: var(--green); box-shadow: 0 1px 4px rgba(27, 65, 51, .1); }
.analytics-stage-grid {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px;
}
.analytics-stage {
  min-width: 0; padding: 12px; border: 1px solid var(--line); border-radius: 12px; background: #f9fbfa;
}
.analytics-stage span { display: block; color: var(--muted); font-size: 10px; line-height: 1.45; }
.analytics-stage strong { display: block; margin-top: 7px; font-size: 24px; color: var(--ink); }
.analytics-footnote { margin: 12px 0 0; color: var(--muted); font-size: 10.5px; line-height: 1.65; }
.analytics-bars { display: grid; gap: 11px; }
.analytics-bar-row, .analytics-option-row {
  display: grid; grid-template-columns: minmax(96px, 150px) minmax(70px, 1fr) 46px;
  align-items: center; gap: 9px; font-size: 11px;
}
.analytics-bar-row strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.analytics-bar-row span { text-align: right; color: var(--muted); font-weight: 800; }
.analytics-bar-track {
  height: 8px; overflow: hidden; border-radius: 99px; background: #edf2ef;
}
.analytics-bar-fill { height: 100%; border-radius: inherit; background: var(--green2); }
.analytics-bar-fill.orange { background: #c28a31; }
.analytics-bar-fill.blue { background: #5d8fc4; }
.analytics-bar-fill.red { background: #c65757; }
.analytics-table-card { margin-bottom: 14px; }
.analytics-table-wrap { width: 100%; overflow-x: auto; }
.analytics-table { width: 100%; border-collapse: collapse; min-width: 980px; }
.analytics-table th {
  padding: 10px 11px; border-bottom: 1px solid var(--line); background: #f8faf9;
  color: var(--muted); text-align: left; font-size: 10.5px; font-weight: 800; white-space: nowrap;
}
.analytics-table td {
  padding: 11px; border-bottom: 1px solid #edf2ef; color: #40564e;
  font-size: 11.5px; vertical-align: middle;
}
.analytics-table tbody tr:hover { background: #fbfcfb; }
.analytics-table td small { display: block; margin-top: 2px; color: var(--muted); font-size: 10px; }
.analytics-table .right { text-align: right; }
.analytics-pill {
  display: inline-flex; align-items: center; padding: 4px 8px; border-radius: 99px;
  color: #60716a; background: #f2f5f3; font-size: 10px; font-weight: 800; white-space: nowrap;
}
.analytics-pill.green { color: var(--green); background: var(--green-soft); }
.analytics-pill.blue { color: var(--blue); background: var(--blue-soft); }
.analytics-pill.orange { color: var(--gold); background: var(--gold-soft); }
.analytics-pill.red { color: var(--red); background: var(--red-soft); }
.analytics-pill.gray { color: #74837d; background: #f2f5f3; }
.analytics-question-list { display: grid; gap: 12px; max-height: 560px; overflow-y: auto; padding-right: 3px; }
.analytics-question {
  border: 1px solid var(--line); border-radius: 13px; padding: 12px 13px; background: #fbfcfb;
}
.analytics-question h4 {
  display: flex; justify-content: space-between; gap: 10px; margin: 0 0 10px;
  color: var(--ink); font-size: 12px; line-height: 1.5;
}
.analytics-question h4 small { color: var(--muted); font-size: 10px; font-weight: 600; white-space: nowrap; }
.analytics-options { display: grid; gap: 7px; }
.analytics-option-row { grid-template-columns: minmax(86px, 125px) minmax(50px, 1fr) 34px; }
.analytics-option-row span { color: #52675f; }
.analytics-option-row strong { text-align: right; color: var(--ink); font-size: 11px; }
.analytics-comments { display: grid; gap: 8px; max-height: 560px; overflow-y: auto; }
.analytics-comment { padding: 11px 12px; border: 1px solid var(--line); border-radius: 12px; background: #fbfcfb; }
.analytics-comment strong { display: block; color: var(--green); font-size: 11px; }
.analytics-comment p { margin: 6px 0; color: #52655e; font-size: 11px; line-height: 1.65; }
.analytics-comment small { color: var(--muted); font-size: 9.5px; }
.analytics-drawer-overlay {
  position: fixed; inset: 0; z-index: 90; display: none;
  background: rgba(20, 36, 31, .28);
}
.analytics-drawer-overlay.show { display: block; }
.analytics-drawer {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: 91; display: flex;
  flex-direction: column; width: min(620px, 92vw); background: #fff;
  border-left: 1px solid var(--line); box-shadow: -18px 0 50px rgba(20, 47, 36, .13);
  transform: translateX(102%); transition: transform .2s ease;
}
.analytics-drawer.open { transform: translateX(0); }
.analytics-drawer-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 14px;
  padding: 18px 20px; border-bottom: 1px solid var(--line);
}
.analytics-drawer-head h3 { margin: 0; font-size: 18px; }
.analytics-drawer-head p { margin: 5px 0 0; color: var(--muted); font-size: 11px; }
.analytics-drawer-body { flex: 1; overflow-y: auto; padding: 18px 20px 40px; }
.analytics-drawer-section { margin-bottom: 18px; }
.analytics-drawer-section h4 { margin: 0 0 9px; font-size: 13px; }
.analytics-drawer-meta { margin: 0 0 9px; color: var(--muted); font-size: 10.5px; }
.analytics-kv { display: grid; grid-template-columns: 90px 1fr; gap: 8px 10px; font-size: 11px; }
.analytics-kv span { color: var(--muted); }
.analytics-kv b { color: var(--ink); font-weight: 650; word-break: break-word; }
.analytics-answer-list { display: grid; gap: 7px; }
.analytics-answer-row { padding: 10px 11px; border: 1px solid var(--line); border-radius: 10px; background: #fbfcfb; }
.analytics-answer-row strong { display: block; font-size: 11px; line-height: 1.55; }
.analytics-answer-row p { margin: 5px 0 0; color: #5b6e67; font-size: 10.5px; line-height: 1.65; }

@media (max-width: 1440px) {
  .analytics-filters { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .analytics-progress-grid, .analytics-result-grid { grid-template-columns: 1fr; }
}
@media (max-width: 1100px) {
  .analytics-metrics { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .analytics-page-head, .analytics-card-head { flex-direction: column; align-items: stretch; }
  .analytics-filters, .analytics-metrics { grid-template-columns: 1fr; }
  .analytics-stage-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .analytics-tabs { width: fit-content; }
}
