/* ============================================================
   aimianshi 设计系统 —— 「纸墨·编辑感」
   近白纸面 + 近黑暖墨 + 单一压深绛红强调；层级靠字重与留白；
   发丝线分隔取代圆角卡片堆叠；mono 仅承载技术读数（题号/计时/匹配度）；
   极性翻转 ink 暗带用于「专注面」(实时面试/品牌区)。
   令牌驱动：换 :root 这组变量即整站换肤，一处定义、全站换色。
   所有页面 <head> 引入：
     <link rel="stylesheet" href="/static/theme.css">
   ============================================================ */

/* 注意：web 字体不在此处 @import（国内 fonts.googleapis.com 会卡/被墙，
   带 @import 的样式表在解析完前会阻塞渲染 → 页面/浮层发涩）。
   改由 icons.js 以非阻塞 <link media=print onload> 注入，被墙时立即回退系统字体。 */

:root {
  /* —— 画布 / 表面（近白纸面，近零彩度，杀掉奶油 sand）—— */
  --canvas:        #FCFCFB;   /* 近白纸（最克制的暖，读作纸不读作奶油）*/
  --surface:       #FFFFFF;   /* 纯白内容面 */
  --inset:         #F5F4F1;   /* 次级表面 / 内嵌（淡纸灰）*/
  --ink-panel:     #1C1916;   /* 极性翻转暗带底（近黑暖墨）*/
  --ink-panel-2:   #272320;   /* 暗带内嵌 / code 卡内层 */

  /* —— 文字（暖墨，已校对在 --canvas 上的对比度）—— */
  --ink:           #1A1714;   /* 暖墨标题/主文（近黑，对 canvas ≈ 16:1）*/
  --body:          #44403A;   /* 正文（暖深灰，对 canvas ≈ 9:1）*/
  --mute:          #6E6860;   /* 次要/helper/placeholder（对 canvas ≈ 5.3:1，达 AA）*/
  --on-ink:        #F3F0EB;   /* 暗带上的纸色文字 */
  --on-ink-mute:   #B4ABA0;   /* 暗带上的次要文字（对 ink-panel ≈ 6:1）*/

  /* —— 发丝线（暖纸灰）—— */
  --hairline:        #EBE8E2;
  --hairline-strong: #DAD5CC;
  --hairline-ink:    #3A352F; /* 暗带内的分隔线 */

  /* —— 品牌（压深的绛红：比朱砂更沉、更耐看，去消费餐饮的甜亮）—— */
  --brand:        #A8281C;   /* 绛红（主操作 / 当前选中 / 状态）white 文字 ≈ 6.3:1 */
  --brand-hover:  #8C2016;
  --brand-soft:   #F6E3DF;   /* 红软底（仅 badge/callout）*/
  --brand-on-soft:#8E2418;   /* 红软底上的文字（≈ 6:1）*/

  /* —— 语义软标签家族（仅 badge / callout / chip，绝不上 chrome）—— */
  --info-bg:    #E7EDF1;  --info-fg:    #355B7C;
  --success-bg: #E2EAD7;  --success-fg: #466E26;
  --warn-bg:    #F6E7C9;  --warn-fg:    #7C4E10;
  --danger-bg:  #F7E0D9;  --danger-fg:  #9E2C1A;
  --danger:     #A52516;  /* 破坏性操作描边/文字 */

  /* —— 圆角三档（收紧：编辑感更精准，去消费向的软糯）—— */
  --r-control: 8px;    /* 按钮 / 输入 / chip(非 pill) */
  --r-card:    10px;   /* 内容卡 */
  --r-overlay: 14px;   /* dialog / auth / loading / toast */

  /* —— 阴影三档（极轻，暖墨调；纸面靠发丝线分层而非投影）—— */
  --shadow-card:    0 1px 2px rgb(28 25 22 / .04), 0 4px 12px rgb(28 25 22 / .05);
  --shadow-pop:     0 4px 16px rgb(28 25 22 / .10);
  --shadow-overlay: 0 16px 44px rgb(20 16 12 / .20);
  --ring-inset:     inset 0 0 0 1px var(--hairline);

  /* —— 运动（150–250ms，承载状态而非表演）—— */
  --t: 180ms cubic-bezier(.4, 0, .2, 1);
}

/* ============ 基础 ============ */
html {
  max-width: 100%;
  overflow-x: hidden;
}

body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  background-color: var(--canvas);
  color: var(--body);
  max-width: 100%;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
h1, h2, h3, h4 { color: var(--ink); text-wrap: balance; }
h1, h2 { font-weight: 800; letter-spacing: -0.018em; }  /* 大标题靠字重立层级 */
h3 { font-weight: 700; letter-spacing: -0.01em; }
p { text-wrap: pretty; }

/* mono 技术层：题号 / 计时 / 百分比 / 阶段 m/n / 评级 */
.mono {
  font-family: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
  font-feature-settings: 'tnum' 1, 'cv01' 1;
}

/* eyebrow：mono 小字做 system-readout（STEP 02 · Q3/12 · 匹配度82%）。
   仅用于真实技术读数与有序步骤，不做装饰性 section 头。 */
.eyebrow {
  font-family: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--mute);
}

/* 章节标题：纸墨里用「短发丝线 + 字标」立小节，取代满屏 eyebrow */
.section-label {
  display: flex; align-items: center; gap: 8px;
  font-size: 13px; font-weight: 700; color: var(--ink);
}

/* 发丝线分隔（取代卡片堆叠）*/
.rule { border: 0; border-top: 1px solid var(--hairline); margin: 0; }
.divide-rule > * + * { border-top: 1px solid var(--hairline); }

/* ============ 按钮（矩形非 pill，统一系统）============ */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 44px; padding: 0 16px;
  border-radius: var(--r-control);
  font-size: 14px; font-weight: 600; line-height: 1;
  border: 1px solid transparent;
  cursor: pointer; white-space: nowrap; user-select: none;
  transition: color var(--t), background-color var(--t), border-color var(--t), box-shadow var(--t), transform var(--t);
}
.btn:active { transform: translateY(.5px); }
.btn:disabled, .btn[disabled] { opacity: .45; cursor: not-allowed; transform: none; }
.btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--brand); }
.btn-sm { height: 36px; padding: 0 12px; font-size: 13px; }
.btn-lg { height: 48px; padding: 0 22px; font-size: 15px; }

.btn-primary { background: var(--brand); color: #fff; }
.btn-primary:hover:not(:disabled) { background: var(--brand-hover); }

.btn-secondary { background: var(--surface); color: var(--ink); border-color: var(--hairline-strong); }
.btn-secondary:hover:not(:disabled) { background: var(--inset); border-color: var(--mute); }

.btn-ghost { background: transparent; color: var(--body); }
.btn-ghost:hover:not(:disabled) { background: var(--inset); color: var(--ink); }

.btn-danger { background: transparent; color: var(--danger); border-color: var(--danger); }
.btn-danger:hover:not(:disabled) { background: var(--danger-bg); }

/* 极性翻转「推荐/精选」按钮 */
.btn-ink { background: var(--ink-panel); color: var(--on-ink); }
.btn-ink:hover:not(:disabled) { background: #000; }

/* ============ 输入 ============ */
.input, .select, .textarea {
  width: 100%; height: 44px; padding: 0 12px;
  background: var(--surface); color: var(--ink);
  border: 1px solid var(--hairline-strong); border-radius: var(--r-control);
  font-size: 14px;
  transition: border-color var(--t), box-shadow var(--t);
}
.textarea { height: auto; padding: 10px 12px; min-height: 96px; line-height: 1.6; }
.input:focus, .select:focus, .textarea:focus {
  outline: none; border-color: var(--brand);
  box-shadow: 0 0 0 3px rgb(168 40 28 / .14);   /* 与品牌一致的红色 focus 环（原为蓝色，不一致）*/
}
.input::placeholder, .textarea::placeholder { color: var(--mute); }

/* ============ chip（四簇统一一套）============ */
.chip {
  display: inline-flex; align-items: center; gap: 6px;
  height: 34px; padding: 0 14px;
  background: var(--surface); color: var(--body);
  border: 1px solid var(--hairline-strong); border-radius: 9999px;
  font-size: 13px; font-weight: 500; cursor: pointer;
  transition: color var(--t), background-color var(--t), border-color var(--t);
}
@media (hover: hover) {
  .chip:hover { border-color: var(--brand); color: var(--ink); }
}
.chip.is-selected,
.chip[aria-pressed="true"] {
  background: var(--brand); color: #fff; border-color: var(--brand);
}
.chip:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--brand); }

@media (max-width: 760px), (pointer: coarse) {
  .btn-sm {
    min-height: 44px;
  }

  .chip {
    min-height: 42px;
  }
}

/* ============ 卡片（纸墨里克制：发丝线描边 + 静息无投影，靠留白分组）============ */
.card {
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: var(--r-card);
  transition: box-shadow var(--t), border-color var(--t);
}
@media (hover: hover) {
  .card-hover:hover { box-shadow: var(--shadow-card); border-color: var(--hairline-strong); }
}
/* 堆叠 + inset 发丝线环 */
.card-inset { box-shadow: var(--ring-inset); }

/* ============ 徽章 / 软标签 ============ */
.badge {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px; border-radius: 9999px;
  font-size: 12px; font-weight: 600; line-height: 1.4;
  white-space: nowrap;
}
.badge-neutral { background: var(--inset); color: var(--body); }
.badge-info    { background: var(--info-bg);    color: var(--info-fg); }
.badge-success { background: var(--success-bg); color: var(--success-fg); }
.badge-warn    { background: var(--warn-bg);    color: var(--warn-fg); }
.badge-danger  { background: var(--danger-bg);  color: var(--danger-fg); }
.badge-brand   { background: var(--brand-soft); color: var(--brand-on-soft); }

/* 经历锚点：题目锚定的简历项目/技术。淡绿小字、可自然换行——长项目名也 hold 得住，
   不再塞进 nowrap 的药丸 badge（塞进去会崩成抢戏的大绿块）。 */
.exp-anchor {
  display: flex; align-items: flex-start; gap: 5px;
  font-size: 12px; line-height: 1.5; font-weight: 500;
  color: var(--success-fg);
}
.exp-anchor > .ai-icon { flex: 0 0 auto; margin-top: 2px; }

/* ============ 极性翻转暗带（登录品牌区 / 报告推荐 / live 当前在问）============ */
.panel-ink {
  background: var(--ink-panel); color: var(--on-ink);
  border-radius: var(--r-card);
}
.panel-ink .eyebrow { color: var(--on-ink-mute); }

/* ============ 品牌红实底面板（突出核心入口，如「进入实时面试」）============
   编辑感取向：用单一压深绛红实底，不用装饰渐变（去 AI 味）。*/
.panel-brand {
  background: var(--brand);
  color: #fff;
  border-radius: var(--r-card);
}
.panel-brand .eyebrow { color: rgb(255 255 255 / .82); }

/* ============ 暗墨 code 卡（承载 AI 生成：出题流 / JD / 报告 JSON）============ */
.code-card {
  background: var(--ink-panel); color: var(--on-ink);
  border-radius: var(--r-card); overflow: hidden;
  font-family: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
}
.code-card__bar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 8px 14px; border-bottom: 1px solid var(--hairline-ink);
  color: var(--on-ink-mute); font-size: 12px;
}
.code-card__body { padding: 16px; font-size: 13px; line-height: 1.7; white-space: pre-wrap; }

/* 打字机闪烁 caret（替 ▍ 块字符） */
.caret::after {
  content: ''; display: inline-block;
  width: 2px; height: 1.05em; margin-left: 1px;
  background: currentColor; vertical-align: text-bottom;
  animation: aimianshi-blink 1s steps(2, start) infinite;
}
@keyframes aimianshi-blink { 50% { opacity: 0; } }

/* ============ 进度条（品牌细条走中性轨道）============ */
.progress { height: 4px; border-radius: 9999px; background: var(--hairline); overflow: hidden; }
.progress__fill { height: 100%; background: var(--brand); border-radius: 9999px; }

/* ============ 顶部状态指示灯（ws 连接等）============ */
.dot { width: 8px; height: 8px; border-radius: 9999px; display: inline-block; }
.dot-on  { background: var(--success-fg); box-shadow: 0 0 0 3px var(--success-bg); }
.dot-off { background: var(--mute); }

/* ============ 骨架（colorimetric，替 emoji 轮播）============ */
.skeleton-line { height: 12px; border-radius: 6px; background: var(--inset); animation: aimianshi-pulse 1.4s ease-in-out infinite; }
@keyframes aimianshi-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .5; } }

/* ============ 评估报告 Markdown 排版（作用域 #report）============
   Tailwind CDN 不带 typography 插件，.prose 是空类 → 这里手写一套纸墨编辑感的层级：
   标题靠字重 + 短绛红夹标 + 发丝线立小节；结论做高亮判读条；维度评分清爽表格；
   引用收成 mono 灰底小角标。内容（后端 Markdown）一字不改，纯样式。 */
#report {
  color: var(--body);
  font-size: 14px;
  line-height: 1.78;
  text-wrap: pretty;
}
#report > :first-child { margin-top: 0; }
#report > :last-child { margin-bottom: 0; }

/* 报告主标题：面试评估报告 — 候选人 */
#report h1 {
  font-size: 1.3rem;
  font-weight: 800;
  letter-spacing: -0.02em;
  margin: 0 0 .25em;
  padding-bottom: .55em;
  border-bottom: 2px solid var(--ink);
}
/* 应聘岗位副标题（_..._ → h1 紧邻的 em 段）：mono 小灰字做读数 */
#report h1 + p { margin-top: .55em; }
#report h1 + p em {
  font-style: normal;
  font-family: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
  font-size: 12px;
  letter-spacing: .02em;
  color: var(--mute);
}

/* 综合评价 = 判读条：浅底 + 细边框，一眼看到结论 / 评分 / 职级 */
#report h2 {
  font-size: 1rem;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--ink);
  line-height: 1.55;
  margin: 1.5em 0 1.1em;
  padding: 13px 16px;
  background: var(--inset);
  border: 1px solid var(--hairline-strong);
  border-radius: var(--r-card);
  box-shadow: inset 0 2px 0 var(--brand);
}

/* 各小节标题：短绛红夹标 + 顶部发丝线 + 充足上间距，块块分明 */
#report h3 {
  display: flex;
  align-items: center;
  gap: .55em;
  font-size: .95rem;
  font-weight: 700;
  color: var(--ink);
  margin: 1.95em 0 .7em;
  padding-top: 1.2em;
  border-top: 1px solid var(--hairline);
}
#report h3::before {
  content: "";
  flex: none;
  width: 14px; height: 2px;
  border-radius: 1px;
  background: var(--brand);
}
/* 判读条后的首个小节：判读条已分隔，去掉顶线避免双重分隔 */
#report h2 + h3 { border-top: 0; padding-top: 0; margin-top: 1.1em; }

#report p { margin: .65em 0; }
#report strong { color: var(--ink); font-weight: 700; }
#report a { color: var(--brand-on-soft); text-decoration: underline; text-underline-offset: 2px; }
#report hr { border: 0; border-top: 1px solid var(--hairline); margin: 1.5em 0; }
#report code {
  font-family: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
  font-size: .9em; background: var(--inset); color: var(--ink);
  padding: 1px 5px; border-radius: 4px;
}

/* 列表：去原点，自定义短杠 bullet（考察范围等）*/
#report ul { margin: .65em 0; padding-left: 0; list-style: none; }
#report ul li { position: relative; padding-left: 1.2em; margin: .42em 0; }
#report ul li::before {
  content: "";
  position: absolute; left: 0; top: .76em;
  width: 7px; height: 2px; border-radius: 1px;
  background: var(--hairline-strong);
}
#report ol { margin: .65em 0; padding-left: 1.4em; }
#report ol li { margin: .42em 0; }

/* 维度评分表：表头浅底、行分隔、斑马纹、首列加粗收窄 */
#report table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  margin: 1.1em 0;
  font-size: 13px;
  border: 1px solid var(--hairline-strong);
  border-radius: var(--r-card);
  overflow: hidden;
}
#report th, #report td { text-align: left; padding: 10px 12px; }
#report thead th {
  background: var(--inset); color: var(--ink); font-weight: 700;
  border-bottom: 1px solid var(--hairline-strong);
  white-space: nowrap;
}
#report tbody td {
  border-top: 1px solid var(--hairline);
  vertical-align: top; color: var(--body); line-height: 1.68;
}
#report tbody tr:first-child td { border-top: 0; }
#report tbody td:first-child {
  font-weight: 600; color: var(--ink);
  white-space: nowrap; width: 1%;
}
#report tbody tr:nth-child(even) td { background: var(--canvas); }

/* 引用角标：数字 [n] → mono 灰底小圆角上标（保留 JS 悬停浮层）*/
#report sup.cite {
  font-family: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
  font-size: .66em; font-weight: 600;
  vertical-align: super; line-height: 0;
  margin-left: 2px; padding: 1px 4px;
  border-radius: 4px;
  background: var(--inset); color: var(--mute);
  cursor: help; user-select: none;
  transition: color var(--t), background-color var(--t);
}
#report sup.cite:hover { background: var(--brand-soft); color: var(--brand-on-soft); }

/* ============ 经验沉淀（作用域 #distill-section）============
   分组标题加绛红点立小节；每条卡加左色条，hover 转绛红，呼应判读条的强调语言。 */
#distill-section h3 {
  display: flex; align-items: center; gap: .5em;
  font-size: 13px; font-weight: 700; color: var(--ink);
}
#distill-section h3::before {
  content: ""; flex: none;
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--brand);
}
#distill-section .card { transition: border-color var(--t), box-shadow var(--t); }
#distill-section .card:hover { border-color: var(--brand); box-shadow: var(--shadow-card); }

/* ============ 短评卡（详情页·按《面试评价填写规范》生成，可直接复制为正式面评）============
   定位为"可交付件"：白面 + 顶部细强调线 + 保留换行的纯文本，所见即所复制。 */
#brief-eval {
  border: 1px solid var(--hairline-strong);
  border-radius: var(--r-card);
  background: var(--surface);
  box-shadow: inset 0 2px 0 var(--brand);
  padding: 16px 18px;
  margin-bottom: 18px;
}
#brief-eval .brief-eval__head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; margin-bottom: 12px;
}
#brief-eval .brief-eval__label {
  font-size: 12px; font-weight: 700; letter-spacing: .02em;
  color: var(--brand-on-soft);
}
#brief-eval .brief-eval__body {
  white-space: pre-line;            /* 保留 LLM 输出的换行；所见即所复制 */
  font-size: 14px; line-height: 1.85; color: var(--ink);
  text-wrap: pretty;
}
/* 分隔条已移到合体卡之后（不在 #brief-eval 内），用裸类选择器 */
.brief-eval__divider {
  margin-top: 16px; padding-top: 12px;
  border-top: 1px dashed var(--hairline-strong);
  font-size: 12px; color: var(--mute);
}

/* ============ 准备阶段步骤条 ============ */
.step-tab {
  display: flex; align-items: center; gap: 8px;
  background: none; border: 0; padding: 2px 4px; cursor: pointer; text-align: left;
}
.step-text .block { display: block; }
.step-dot {
  flex: none; width: 24px; height: 24px; border-radius: 999px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 12px; font-weight: 700;
  border: 1.5px solid var(--hairline-strong); color: var(--mute); background: var(--surface);
}
.step-dot--current { background: var(--brand); border-color: var(--brand); color: #fff; }
.step-dot--done { background: var(--success-fg); border-color: var(--success-fg); color: #fff; }
.step-line { flex: 1; height: 1.5px; background: var(--hairline-strong); margin: 0 10px; min-width: 16px; }
.step-line--done { background: var(--success-fg); }

/* ============ 终态只读：编辑控件统一「置灰 + 不可点」（body.iv-readonly）============
   只锁交互控件，不动文字/标签/JD 预览（仍要能读）；收藏 / 入库 / 复制 / 查看 / 已完成的生成报告不锁。 */
body.iv-readonly #setup-panel button,
body.iv-readonly #setup-panel input,
body.iv-readonly #setup-panel textarea,
body.iv-readonly #setup-panel .chip,
body.iv-readonly #setup-panel [data-round],
body.iv-readonly #setup-panel [data-goal],
body.iv-readonly #setup-panel [data-star],
body.iv-readonly #quick-append-grid button,
body.iv-readonly #quick-append-grid .chip,
body.iv-readonly #quick-append-count,
body.iv-readonly #btn-replace-unselected,
body.iv-readonly #transcript-md,
body.iv-readonly #btn-save-transcript,
body.iv-readonly #btn-reupload,
body.iv-readonly #btn-save-setup,
body.iv-readonly #btn-gen-questions,
body.iv-readonly [data-qid] [data-action="toggle"],
body.iv-readonly [data-qid] [data-action="delete"],
.iv-locked {
  opacity: .45;
  pointer-events: none;
  filter: grayscale(40%);
}

/* ============ a11y ============ */
:focus-visible { outline-color: var(--brand); }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
  .caret::after { animation: none; }
}
