/* 见山 v2 · 原型样式系统完整移植（源：见山重设计-交互原型.html 8-919行 v6.6）
   纪律：类名/结构与原型 1:1 对齐，禁止自创近似样式

   ── L7 审计声明（2026-08-29）──────────────────────────────
   本文件是运行时【唯一样式源】（index.html 静态引入，绕过 uni 编译期重写）；
   :root 即运行时 token 定义处（夜山在其后覆写，季节色由 useThemeStore 动态注入）。
   src/styles/tokens.scss + base.scss 为未接线的草案，勿混淆两处定义来源。
   单位约定：一律 px（满视口单列容器，宽屏以 max-width 居中限宽），勿新增 rpx。
   三端纪律：本文件同时服务 H5 / 微信小程序 / 移动 App，禁用平台专属能力，
   硬约束清单见 .qoder/rules/cross-platform.mdc（守卫测试 tests/unit/cross-platform.spec.mjs）。 */

:root,page{
  /* P0-2 对比度达标：ink-3 提升至 5.1:1（原 #8a8678 降为 ink-4，仅限 ≥19px 装饰字与禁用底） */
  --ink-1:#26292b;--ink-2:#57544a;--ink-3:#6f6b5e;--ink-4:#8a8678;
  --paper:#f6f4ee;--surface:#fdfcf8;--pure:#fff;
  --line:#e5e0d2;--line-strong:#c9c2ae;
  --qing-d:#2a3d31;--qing-m:#5e7c59;--qing-t:#e7ebe3;
  --dai-d:#2c3e50;--dai-m:#4a6fa5;--dai-t:#e2e9f2;
  --jin-d:#8a6519;--jin-m:#c88b3a;--jin-t:#f5ecdb;
  --zhu-d:#8c3529;--zhu-m:#b23a2e;--zhu-t:#f6e6e2;
  --xue-d:#5d4a73;--xue-m:#8672a6;--xue-t:#ece7f2;
  --xiang-d:#7d5c1a;--xiang-m:#d9a441;--xiang-t:#f9f0dd;
  --season-a:#b07a26;--season-b:#c88b3a;--season-t:#f5ecdb;--season-deep:#8a6519;
  --kai:"LXGW WenKai Screen","Kaiti SC","STKaiti",serif;
  --serif:"Noto Serif SC","Songti SC",SimSun,serif;
  --sans:-apple-system,"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;
  --mono:ui-monospace,"SF Mono","Cascadia Mono",Consolas,monospace; /* L7 审计补定义：.qdim-val 等宽数字此前引用了未定义变量 */
  --sh-rest:0 1px 3px rgba(38,41,43,.05);
  /* 心情条左右内距单源（2026-09-15）：记录页/复盘页(.bd.compose)、收尾页(.mood-strip.mini)
     与标题行(.mood-cap-row/.mood-cap) 三处此前各写 14/3/3px —— 收尾页明显更松、跨页切换时边界
     跳动。收成一处令牌，改档只改这里。 */
  --mood-inset:14px;
  /* ── 投影（elevation）· 2026-09-11 审计补齐 ──
     此前只有 --sh-rest 有人用、--sh-float **定义了从未被引用**（死令牌），而夜山的投影全是内联字面量
     → 既不随主题、也无法被断言。现收成一组带夜山配对的令牌。 */
  --sh-float:0 -8px 40px rgba(38,41,43,.18);                                    /* 底部抽屉浮起（原内联在 .sheet.show） */
  --sh-card:0 4px 12px rgba(45,43,38,.06),inset 0 1px 0 rgba(255,255,255,.9);   /* 纸笺卡（AI 气泡） */
  --sh-topline:inset 0 1px 0 rgba(255,255,255,.55);                             /* 卡片顶部高光 */
  --sh-bubble-user:0 4px 12px rgba(51,71,58,.10),inset 0 1px 0 rgba(255,255,255,.7);
  /* ── 深色面（跨主题恒定 · 见 THEME_CONSTANT 豁免清单）──
     ⚠ 2026-09-11 审计实测：.delbox / .dgr-btn / .toast 曾用 `background:var(--ink-1)` 当深色底，
     而夜山把 --ink-1 翻成浅色 #e8e4d8 → 夜山里这三处是「浅字压浅底」，正文与提示**直接看不见**。
     深色面本就不该随主题翻转，故独立成组、两主题同值；禁止再借 --ink-* 当面色。 */
  --shade:#26292b;--shade-btn:#2b2e2a;--shade-line:#4a4e47;
  --shade-ink:#e8e4d8;--shade-ink-strong:#f6f4ee;--shade-ink-dim:#b5b1a4;
  /* ── 彩色面上的前景（on-accent）──
     此前 #fff / #fbfaf5 / #fdfcf8 / #f6f4ee 四种近白混用于同一职责 → 收敛为一个令牌。 */
  --on-accent:#fff;
  /* ── 遮罩（scrim）── */
  --scrim:rgba(38,41,43,.42);
  /* ── 朱印（AI 落款）：渐变两端与其上文字此前在两处各写一遍裸值 ── */
  --seal-from:#a93b30;--seal-to:#7e2a20;--seal-ink:#fbfaf5;--seal-ink-soft:#fbf3ea;
  /* ── 纸笺卡底色/正文：把夜山 .bubble--ai 的整条覆盖收成令牌值（日间纸白 / 夜山墨笺）── */
  --card-ai-bg:#fff;
  --card-ai-ink:#26292b;
  /* ── 动效时长（motion）：此前全为内联字面量、无档位可言。本档只收编「值恰好等于档位」的地方 ── */
  --mo-1:.12s;--mo-2:.2s;--mo-3:.28s;
  /* 顶部安全区高度（去壳后由 .phone 统一避让）：
     --status-bar-height 为 uni-app 内置变量（H5=0 / 微信小程序=25px / App=真实状态栏高），
     env(safe-area-inset-top) 覆盖刘海屏；取 max() 兜住三端。首行为老引擎降级。 */
  --sb-h:env(safe-area-inset-top,0px);
  --sb-h:max(env(safe-area-inset-top,0px),var(--status-bar-height,0px));
  /* 单列容器最大宽度：宽屏（平板/桌面/横屏）留白限宽，替代原 375×812 模拟机身 */
  --col-max:480px;
  /* ── 选项「一笺」容器底（v7 · 2026-09-11）──
     中性墨/纸叠加，不与品牌色相相关，故日/夜各给一档；
     **不要**写成 var(--ink-*) 派生——夜山会把 --ink-* 反转，派生出来的底会跟着翻，
     选项区就会在夜里变成"浅块"、日间变成"深块"，都不是"一笺"。
     2026-09-11 二次调档：.06/.09 → **.05/.085**。用户"更精致一些"——原值在浅色纸面上
     已经读成"一块灰底"，再淡一档才回到"纸上有张笺"的量感（配合容器上的 --sh-topline 高光）。 */
  --opt-panel:rgba(118,110,90,.05);--opt-panel-hot:rgba(118,110,90,.085);
}

/* ── 四季色板（2026-09-11：从 JS 内联迁入样式表）──────────────────────────
   原先 applySeason() 把 --season-* 以**内联样式**写在 #phone 的 style 上。内联声明优先级高于
   任何样式表规则，于是本文件「夜山」段里的 --season-t **永远被压死**：夜山里拿到的仍是季节的
   **日间**值（如秋 #f5ecdb 近白），落在夜山的浅字上就是"浅压浅"——今日卡片选中行
   （.rowitem.sel 取 var(--season-t)）、输入框聚焦环都受此影响。
   迁到这里之后，夜山那段在同文件更靠后、同优先级 → 后者胜，夜山值第一次真正生效。
   ⚠ data-season 与 data-ptheme 是**两个**属性：夜山时 data-ptheme='night'，季节信息不能因此丢失，
     否则夜间无从按季节取色。色板只此一份，改色请改这里，不要再退回 JS 内联。
   ⚠ 四色一律引用品牌层（季节色本来就取自六色语义系），不写裸色值——
     本仓库有一条断言专门拦"裸色值与某令牌等值"（design-tokens.spec.mjs）。
   ⚠ **秋不另立规则**：:root 里 --season-* 的初值就是秋色板（默认即秋），再写一遍等于抄一遍，
     且会被那条断言判为裸色值。若将来改 :root 初值，秋会跟着变——这正是有意的。 */
.phone.season-spring{--season-a:var(--qing-m);--season-b:var(--jin-m);--season-t:var(--qing-t);--season-deep:var(--qing-d)}
.phone.season-summer{--season-a:var(--dai-m);--season-b:var(--jin-m);--season-t:var(--dai-t);--season-deep:var(--dai-d)}
.phone.season-winter{--season-a:#a34d3f;--season-b:var(--jin-m);--season-t:var(--zhu-t);--season-deep:var(--zhu-d)}
*{margin:0;padding:0;box-sizing:border-box}
html{background:var(--paper);font-family:var(--sans)}
body{font-family:var(--sans);color:var(--ink-1);background:transparent}

/* ── 舞台 ── */
.stage-note{color:var(--ink-4);font-size:12px;letter-spacing:.15em;font-family:var(--serif)}
.controls{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.cbtn{font-size:12px;padding:6px 15px;border-radius:999px;border:1px solid var(--shade-line);background:var(--shade-btn);color:var(--shade-ink-dim);cursor:pointer;transition:.25s}
.cbtn.on{background:var(--season-b);border-color:var(--season-b);color:var(--on-accent)}

/* ── 应用根容器 ──（2026-08-29 去壳，约束 C-3 见 doc/见山-v2-ADR决策记录.md：375×812 模拟手机壳 / 假刘海 .notch / 假状态栏 .statusbar 的样式已删除）
   .phone 只承担四件事：flex 列根容器、纸色与纸纹挂载点、绝对定位 containing block、顶部安全区避让。
   id="phone" 被 useThemeStore 用于注入季节色 —— 元素与 id 不得删除。 */
.phone{width:100%;max-width:var(--col-max);margin:0 auto;height:100vh;height:100dvh;background:var(--paper);overflow:hidden;position:relative;display:flex;flex-direction:column;padding-top:var(--sb-h);transition:background .5s}
.screen{flex:1;overflow:hidden;position:relative;display:flex;flex-direction:column}

/* ── 页面容器（P2-18 页切连续性：新页自右 12px 淡入，前页 -8px 视差淡出，同一时序曲线） ── */
.pages{flex:1;position:relative;overflow:hidden}
.page{position:absolute;inset:0;overflow-y:auto;overflow-x:hidden;display:none;flex-direction:column;scrollbar-width:none}
.page::-webkit-scrollbar{display:none}
.page.act{display:flex;animation:pageIn .32s cubic-bezier(.32,.72,.28,1);z-index:2}
/* 书影残留修复（2026-09-06 · E2E 实景）：leaving 页基础不可见兜底——此前依赖 animation ... both 淡出，
   动画被禁用/打断（低电量·reduced-motion·快速切换/返回）时 leaving 页以 display:flex 整页残留盖顶
   （如「山志·年度导出」书影页），opacity:0 兜底使该态始终不可见，动画开启时 both 语义不受影响 */
.page.leaving{display:flex;animation:pageOut .28s cubic-bezier(.32,.72,.28,1) both;opacity:0;pointer-events:none;z-index:1}
@keyframes pageIn{from{opacity:0;transform:translateX(12px)}to{opacity:1;transform:none}}
@keyframes pageOut{to{opacity:0;transform:translateX(-8px)}}
.page-inner{flex:1;padding:0 20px 24px}

/* ── 眉批带 ── */
.masthead{padding:10px 20px 14px;display:flex;align-items:flex-start;gap:12px;background:linear-gradient(180deg,var(--season-t),transparent);transition:background .5s;flex:none}
.seal-term{width:38px;height:38px;flex:none;margin-top:1px;border-radius:50%;border:1.5px solid var(--season-a);display:grid;place-items:center;font-family:var(--kai);font-size:12px;color:var(--season-a);writing-mode:vertical-rl;text-orientation:upright;white-space:nowrap;letter-spacing:.1em;background:var(--surface)}
/* 2026-09-13 改名 term→seal-term：原裸 .term 与回顾页月历格子类名 .cal-d term 撞车，
   竖排印章样式（writing-mode:vertical-rl）整格命中 9/23 秋分格——数字竖堆、节气名竖排、格子被钉成 38×38（#9 真根因）。
   月历格子侧自带 .cal-d 前缀从不用裸 term，污染源只在印章；改名后 .cal-d.term 回归纯节气语义。 */
.mh-txt{flex:1;min-width:0}
.mh-date{font-size:12px;color:var(--ink-3);letter-spacing:.05em;display:flex;align-items:center;gap:8px}
.mh-title{display:none} /* 用户要求：菜单/主页面 masthead 去掉大标题（见山/复盘/…），保留 日期 + 引语 */
.mh-quote{font-size:12px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;transition:opacity .25s}
/* 记录页引语（仅 #quote，其他页 .mh-quote 为原样式）：楷体 + 「」装饰引号 + 山形小装饰 + **出处独占第二行**。
   2026-09-17 改为「正文 + 出处」两行结构（用户要求「出处放在第二行」）：
   此前出处 display:inline 紧跟正文，长句时被挤到第二行、短句时贴在句尾，位置随句子长短跳动。
   2026-09-18 再按**字数分三档**（q-s ≤14 / q-m ≤24 / q-l >24，档位由 useDayQuote 侧的 qClass 给）：
   一套字号吃不下全部句子——「我思故我在。」只有 6 字，用 13px 会在两行的框里飘着留半行空白；
   32 字的长句又挤得慌。故短句放大到 15px 当题词排、长句收到 12px 密排，
   而**正文区高度恒定 3.4em 且垂直居中**——字多字少都好看，眉批高度也不随句子跳动。
   引语源为精选名句库（见 quotesCurated.js）——每句都带出处，所以出处行恒有内容。 */
/* 2026-09-18 版式修正（二轮：用户报「没改过来 / 很丑 / 压缩下面的卡片框」）
   一轮只把长句的 nowrap 与 em 高度修对了，但**保留了「两行固定留白」**——短句（池内 29/67 是 ≤14 字）
   只占一行却仍撑着 42px，白白把下面的卡片往下顶。这一轮的根因就是这块留白，不是文字本身。
   改法：正文区由「固定两行」改为**内容定高**（min-height 只兜一行 = 19px），一句就一行、两句就两行，
   不再为没出现的第二行预留空间；同时 -webkit-box 钳制整个退场（见下），让「」回到正常内联流里随文走。

   为什么不再用 -webkit-line-clamp：
   · .qtx 是 display:-webkit-box 时，::before/::after（「」）是它的**盒子子项**，在 -webkit-box-orient:vertical
     下会被当成独立行纵向排——「、正文、」各占一行，这是「丑」的一大来源；
   · 钳制靠的是"裁掉"，超长就是硬截断；而本池最长 32 字，375px 屏可用宽约 285px 时天然就是两行，
     根本用不着裁。改为自然换行：宁可窄屏多占一行，也不做半行裁切（用户明确不接受截断）。
   · em 单位在 .qtx 上取的是它**自己的档位字号**，与父级解耦（一轮踩过的坑不再复现）。

   #pg-home .seal-term 补 aspect-ratio:1/1 + overflow:hidden（竖排节气名不会顶破圆）。

   紧凑：#quote margin-top 3px；正文 q-s 14 / q-m 12 / q-l 11（行高 1.5/1.55/1.6）；出处 11px 行高 1.45；
   眉批 padding 8/20/10 → 7/20/8（横向仍 20px，要与 .page-inner 对齐）；印章 38→34（窄屏）。
   实测整块高度：短句 41px（原 64px）、长句 55px（原 64px）——短句省下的 23px 直接还给下面的卡片。

   三轮（同日 21:30）：① 删掉引语后面的山形装饰（.mhq-orn，模板与样式一并移除）；
   ② 出处右对齐（当时是独占第二行）；③ 池子加「两行正文 + 一行出处」闸门（quotesCurated.quoteFits）。

   四轮（同日 22:10，用户两条）：① **字号一律回到分档原值 15 / 13 / 12**（三轮为紧凑降过一档，
   用户不认；连窄屏的降级字号也一并撤掉）；② **出处改到与引语同一行、右对齐**（见上 .mhq-src 注释）。
   闸门随之改算式：正文容量由「2×可用宽」改为「2×可用宽 − 出处宽 − 8px 间距」——因为首行被出处占了。
   实测 320px 窄屏 54/67 句仍放得下，被滤掉的都是"长句 + 长出处"的组合。

   五轮（同日 22:33，用户「为什么字的大小不一样 / 为什么超过三行」）：①②的答复——
   ① **三档字号整个撤掉，全池统一 12px**（= #quote 基础字号）。分档本意是"短句当题词、长句密排"，
   但只要字号会变，读者就会觉得"大小不一"；统一后字号恒定，长句靠换行吸收、不再靠缩小。
   ② **超三行的真因是估宽余量太薄**：旧 margin 1.05（5%）挡不住楷体实宽，32 字那句实测要 474px
   （两行上限 468px）却被判为合格。margin 提到 1.15，且正文与出处**分别**判（出处的长作者名
   也会单独撑爆一行——旧式把两者相加，判不出来）。落选 4 句直接不进池。 */
#quote{position:relative;font-family:var(--kai);font-size:12px;color:var(--ink-1);line-height:1.6;letter-spacing:.02em;margin-top:3px;white-space:normal;transition:opacity .2s ease,height .22s ease} /* ★十轮（2026-09-21 21:00）撤固定高 55px、撤九轮的 grid+align-content:center，改**内容定高 + 换句滑动**。
   口径链（每轮都是用户拍板，勿拿单轮结论回改）：七轮定死 55px（用户：卡片别跳）→
   八轮单行句在出处下方悬一行白 27.88px（用户：为什么空一行）→ 九轮对半劈成 12.94/17.94
   （用户仍说"不好"——上下各悬一块，比一处空更显乱）→ 十轮认账：固定高世界里那 19.2px 空白
   **守恒**（A/B/D 三种落点全被否，实测见 F:/.zz-gap/quote-lab.html 原型），唯一没有空白的世界
   就是块高跟内容走——把"跳"降级为 0.22s 缓动"滑"：RecordPage.onQuoteClick 量旧高 →
   nextQuote+nextTick → quoteSlide.slideQuoteHeight 从旧高滑到新高，下方卡片跟着平滑滑动。
   opacity+height 双过渡必须**都**写在这里：换句的内联 :style 只切 opacity，而内联 transition
   会整体覆盖此处的 transition——漏写 height 就把滑动静默掐死（这是十轮埋过又排掉的坑）。 */
@media (prefers-reduced-motion:reduce){#quote{transition:none}} /* 减弱动态偏好：不滑不淡，直接变 */
#quote .mhq-t{display:block} /* 正文框只裹住自己（八轮起，流间距归 0 的关键）。★十轮撤掉 max-height:38.4+overflow:hidden 兜底：
   内容定高世界里第 3 行不会"顶穿"只会"长高滑动"，留着裁切反而会把字剪掉；行数由池子闸门（quoteFits）保证 ≤1 行（十一轮 2026-09-22 池子已删两行句，67→32）。 */
#quote .qtx{display:inline} /* 普通内联流：「」随文走、随文换行；不再进 -webkit-box 当独立行盒 */
#quote .qtx::before{content:"「";color:var(--season-a);opacity:.6;margin-right:1px;pointer-events:none}
#quote .qtx::after{content:"」";color:var(--season-a);opacity:.6;margin-left:1px;pointer-events:none}
/* 出处：**独占第二行、右对齐**（2026-09-18 五轮，用户：「出处放第二行，右对齐」）。
   不再 float:right 同行，改为 block + text-align:right 独占一行。
   nowrap + ellipsis 防超长出处溢出。总行数 ≤2（正文 ≤1 行 + 出处 1 行），超出的由闸门 quoteFits 删掉（十一轮 2026-09-22：池子已删两行句，正文恒单行；历史口径 ≤3 见 quotesCurated 注释）。
   margin-top **八轮由 1px 归零**（用户：「调小引语和出处之间行距」）：这 1px 是加在
   「引语墨迹底 → 出处墨迹顶」上的净空隙，去掉后流间距归 0，只剩两侧半行距 6.07px。 */
#quote .mhq-src{display:block;text-align:right;margin-top:0;margin-left:0;max-width:100%;font-family:var(--kai);font-size:11px;line-height:1.45;color:var(--ink-3);letter-spacing:.04em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
/* margin-left:0 是必需的：基类 .mhq-src 有 margin-left:8px（为"同行紧跟正文"留的间距），
   出处改独占一行后若不显式归零，整块会被左缩 8px（375px 下实测 src.x=78 vs 正文列 x=70）。 */
#pg-home .masthead{padding:7px 20px 8px}
#pg-home .seal-term{aspect-ratio:1/1;overflow:hidden;line-height:1.15}
@media (max-width:360px){
  #pg-home .masthead{padding:6px 20px 7px}
  #pg-home .seal-term{width:34px;height:34px}
} /* 四轮起窄屏不再降字号（用户：不要改变字的大小）——省下的横向空间由印章缩到 34px 提供 */
.mhq-src{display:inline;margin-left:8px;font-family:var(--kai);font-size:12px;color:var(--ink-3);letter-spacing:.05em;}
.mhq-orn{display:inline-block;width:22px;height:11px;margin-left:6px;vertical-align:-1px;opacity:.5}
.mh-quote:active{opacity:.5}
.streak-pill{display:inline-flex;align-items:center;gap:4px;font-size:12px;padding:2px 9px;border-radius:999px;background:var(--season-t);color:var(--season-a);font-weight:500;white-space:nowrap;transition:background .5s}
.streak-pill svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
/* ── 回顾页眉批升级（2026-09-13 · 用户拍板：引语固定、不接每日轮换，只换文案）──
   仅 #pg-review 作用域：节气章空心圆 → 实底方印（呼应印章语汇）+ 楷体引语（呼应记录页 #quote 语汇）
   + 底部山脊线（复用共享 RidgeFoot，压扁为 16px 远山剪影填充留白）。
   其余四页（记录/反思/知行/我的）眉批维持原空心圆章，不受影响。 */
#pg-review .masthead{position:relative;overflow:hidden;padding-bottom:22px}
#pg-review .masthead .ridgefoot-svg{position:absolute;left:0;bottom:0;width:100%;height:16px;opacity:.6;pointer-events:none}
#pg-review .seal-term{width:40px;height:40px;margin-top:2px;border-radius:8px;border:none;background:var(--season-a);color:var(--on-accent);position:relative;z-index:1;transition:background .5s,color .5s}
#pg-review .mh-txt{position:relative;z-index:1}
#pg-review .mh-quote{font-family:var(--kai);font-size:13px;color:var(--ink-1);letter-spacing:.04em;margin-top:6px;cursor:default}
#pg-review .mh-quote::before{content:"「";color:var(--season-a);opacity:.65;margin-right:2px}
#pg-review .mh-quote::after{content:"」";color:var(--season-a);opacity:.65;margin-left:2px}
#pg-review .mh-quote:active{opacity:1}

/* ── 笺卡 · 域洗染制（无侧色条） ── */
.card{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--sh-rest),var(--sh-topline);position:relative;overflow:hidden;margin-bottom:16px}
.card::before{content:"";position:absolute;top:0;left:0;right:0;height:26px;background:linear-gradient(180deg,var(--season-t),transparent);opacity:.7;pointer-events:none;transition:background .5s}
.card.qing::before{background:linear-gradient(180deg,var(--qing-t),transparent);opacity:.95}
.card.dai::before{background:linear-gradient(180deg,var(--dai-t),transparent);opacity:.95}
.card.jin::before{background:linear-gradient(180deg,var(--jin-t),transparent);opacity:.95}
.card.xue::before{background:linear-gradient(180deg,var(--xue-t),transparent);opacity:.95}
.card.xiang::before{background:linear-gradient(180deg,var(--xiang-t),transparent);opacity:.95}
.card .bd{padding:16px 16px 15px;position:relative}

/* ── 对话式 · 方法色域（按方法绑定：qing/dai/xiang） ── */
#pg-chat{--mc-a:var(--qing-m);--mc-t:var(--qing-t)}
#pg-chat.mt-qing{--mc-a:var(--qing-m);--mc-t:var(--qing-t)}
#pg-chat.mt-dai{--mc-a:var(--dai-m);--mc-t:var(--dai-t)}
#pg-chat.mt-xiang{--mc-a:var(--xiang-m);--mc-t:var(--xiang-t)}
/* ABCD 选项条固定青系，不随方法色域变化（2026-09-03 用户裁决：选项框颜色不再跟随方法切换）。
   ⚠ 2026-09-11 删除了这里原有的三条 `#pg-chat .option-chip{...}` / `#pg-chat .option-chip__key{...}`
   / `#pg-chat .option-chip:active{...}` 覆盖：它们的值与基础规则**逐字相同**（纯冗余，只为"钉住青系"），
   但 id 选择器权重（1,1,0）高于类型修饰 `.option-chip--confirm`（0,1,0）与禁用态 `.option-chip--off`，
   于是把后加的"确认/说不清"两类观感**整个压死**——线上三类选项长得一模一样，
   且 `.option-chip--off` 的禁用底色也被盖掉（看着可点、实际不可点），全程没有任何报错。
   现"钉住青系"改由基础规则的 --opt-* 默认值承担（见 .option-chip 段），
   不再用 id 兜保险——用权重兜保险，等于给后来的特例判了死刑。 */
#pg-chat .stagebar i.done{background:var(--mc-a)}
/* ── 收尾 · 方法阶段进度 / 对话形象 ── */
#pg-closing{--mc-a:var(--qing-m);--mc-t:var(--qing-t)}
#pg-closing.mt-qing{--mc-a:var(--qing-m);--mc-t:var(--qing-t)}
#pg-closing.mt-dai{--mc-a:var(--dai-m);--mc-t:var(--dai-t)}
#pg-closing.mt-xiang{--mc-a:var(--xiang-m);--mc-t:var(--xiang-t)}
.stage-card{margin-bottom:14px}
.stage-card .stage-cap{font-family:var(--serif);font-size:12px;letter-spacing:.12em;color:var(--ink-2);text-align:center;margin-bottom:14px}
.stage-card .stage-cap b{color:var(--mc-a)}
.stage-hint{text-align:center}
.stage-hint__steps{display:flex;align-items:flex-start;justify-content:center;gap:10px;flex-wrap:wrap}
.stage-step{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:52px}
.stage-step__dot{width:22px;height:22px;border-radius:50%;border:1px solid var(--line);background:var(--surface);display:flex;align-items:center;justify-content:center;transition:border-color .2s,background .2s,color .2s}
.stage-step__check,.stage-step__idx{font-size:12px;line-height:1;color:var(--ink-3)}
.stage-step--done .stage-step__dot{background:var(--mc-t);border-color:var(--mc-a)}
.stage-step--done .stage-step__check{color:var(--mc-a)}
.stage-step--on .stage-step__dot{background:var(--mc-a);border-color:var(--mc-a);box-shadow:0 2px 6px rgba(38,41,43,.16)}
.stage-step--on .stage-step__check,.stage-step--on .stage-step__idx{color:var(--on-accent)}
.stage-step__label{font-size:12px;letter-spacing:.04em;color:var(--ink-3);white-space:nowrap}
.stage-step--on .stage-step__label{color:var(--mc-a);font-weight:500}
.stage-hint__text{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:10px;font-size:12px;letter-spacing:.05em;color:var(--ink-2)}
.stage-hint__text .sh-tag{color:var(--mc-a);font-weight:500}
.stage-hint__text .sh-desc{color:var(--ink-2)}
.stage-hint--bar{text-align:left}
.stage-hint--bar .stage-hint__steps{justify-content:flex-start;gap:14px}
.stage-hint--bar .stage-hint__text{justify-content:flex-start;margin-top:8px}
.ava-mini{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-family:var(--kai);font-size:15px;color:var(--qing-d);background:var(--qing-t);border:1px solid var(--qing-m);cursor:pointer;flex:none}
.ava-mini img,.avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.ava-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:4px 0 8px}
.ava-cell{display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer}
.ava-img{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:var(--qing-t);border:1px solid var(--qing-m);font-family:var(--kai);font-size:20px;color:var(--qing-d);overflow:hidden}
.ava-cell--up .ava-img{background:var(--surface);border-style:dashed;border-color:var(--line);color:var(--ink-3)}
.ava-cell--up .ava-img svg{width:22px;height:22px;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ava-nm{font-size:12px;color:var(--ink-3)}
.ava-mini--ai{color:var(--zhu-t);background:linear-gradient(145deg,var(--seal-from),var(--seal-to));border:none}

/* ── 章节眉 ──（十四轮：方块引子染季节色 + hairline 渐变隐没，章节起笔更像"章"） */
.sect{display:flex;align-items:center;gap:9px;margin:20px 0 12px}
.sect-link{margin-left:auto;cursor:pointer;color:var(--dai-m);font-size:12px;letter-spacing:.02em}
.sect .ft{color:var(--season-a);font-size:15px;line-height:1;opacity:.9}
.sect .t{font-family:var(--serif);font-weight:600;font-size:17px;letter-spacing:.08em;color:var(--ink-1)}
.sect::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line-strong),var(--line) 55%,transparent)}
.sect .cnt{font-size:12px;color:var(--ink-3)}

/* ── 按钮 ── */
.btn{font-family:var(--sans);font-size:15px;font-weight:500;letter-spacing:.14em;border:none;border-radius:999px;height:48px;padding:0 30px;cursor:pointer;transition:transform .12s,background .4s,opacity .3s;background:var(--season-a);color:var(--on-accent);display:inline-flex;align-items:center;justify-content:center;gap:7px}
.btn:active{transform:scale(.98)}
/* P1-7 禁用态：底色+文字同步降饱和（非 opacity），任何主题下 ≥3:1；夜山 ink-4 对暗纸 4.55:1 */
.btn[disabled]{background:var(--ink-4);color:var(--surface);cursor:not-allowed}
.btn.blk{width:100%}
.btn.ghost{background:transparent;color:var(--season-a);border:1.5px solid var(--season-a)}
.btn.ghost[disabled]{background:transparent;border-color:var(--ink-4);color:var(--ink-4)}

/* ── P1-5 圆角四档收口（8 芯片/小件 · 12 笺卡 · 18 抽屉顶 · 999 胶囊；50% 正圆）──
   例外：.heatmap .cell / .hm-legend i 保持 2px（数据格子，非 UI 组件） */
.chip{font-size:12px;font-weight:500;padding:3px 11px;border-radius:8px;white-space:nowrap;display:inline-block}
.chip.qing{background:var(--qing-t);color:var(--qing-d)}
.chip.dai{background:var(--dai-t);color:var(--dai-d)}
.chip.jin{background:var(--jin-t);color:var(--jin-d)}
.chip.zhu{background:var(--zhu-t);color:var(--zhu-d)}
.chip.xue{background:var(--xue-t);color:var(--xue-d)}
.chip.xiang{background:var(--xiang-t);color:var(--xiang-d)}
.chip.sel{background:var(--season-a);color:var(--on-accent)}

/* ── 情绪打卡（emoji 图像制 · 嵌入聊天框） ── */
.mp{position:relative}
.mood-strip{display:flex;justify-content:space-between;padding:0 2px 6px}
.mood{display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer}
.mood .mc{width:30px;height:30px;border-radius:50%;border:1.5px solid var(--line-strong);display:grid;place-items:center;font-size:15px;line-height:1;background:var(--pure);transition:.22s;opacity:.78}
.mood .ml{font-size:12px;color:var(--ink-3);transition:.22s;letter-spacing:.02em}
.mood.on .mc{transform:scale(1.14);opacity:1;border-width:2px;box-shadow:0 2px 8px rgba(38,41,43,.14)}
/* OPT-8：分档配色改 class 制（属性选择器 WXSS 不支持，三端纪律）；原 data-m 写法随 4 处硬编码心情条一并退役 */
.mood.on.m-zhu .mc{border-color:var(--zhu-m);background:var(--zhu-t)}
.mood.on.m-dai .mc{border-color:var(--dai-m);background:var(--dai-t)}
.mood.on.m-qing .mc{border-color:var(--qing-m);background:var(--qing-t)}
.mood.on.m-jin .mc{border-color:var(--jin-m);background:var(--jin-t)}
.mood.on.m-xue .mc{border-color:var(--xue-m);background:var(--xue-t)}
.mood.on .ml{color:var(--ink-1);font-weight:600}
/* OPT-8 · 两级心情：细分词行（MoodPicker 组件；opt-in 展开，单选，不强制） */
.mp-toggle{position:absolute;top:100%;left:0;right:0;display:flex;justify-content:flex-end;padding:6px calc(var(--mood-inset) + 4px) 0;z-index:5}
.mp-t{font-size:12px;color:var(--ink-3);letter-spacing:.04em;padding:2px 8px;transition:.2s}
.mp-toggle:active .mp-t{color:var(--season-a)}
/* 细分词行与主心情条左右对齐（2026-09-15）：原来靠负 margin -3px 抵消父级 3px 内距，现在
   内距统一成 --mood-inset，负 margin 会把它推出去 → 改为直接铺 var(--mood-inset)。
   注意作用域与非收窄页一致：只有 .bd.compose（记录/复盘页）用新内距，EditSheet 的裸 .compose
   仍是基础 2px，细分行不能跟着变宽——故这里用 :where(.bd.compose) 限定。 */
.mood-detail{display:block;margin:6px 0 0}
/* C 方案 · 细分词改多行分列（flex-wrap + 芯片自动收缩），替代旧横向 scroll-x 挤压场景（三端） */
.mood-detail-row{display:flex;gap:8px;flex-wrap:wrap;padding:2px 3px 6px}
.bd.compose .mood-detail-row{padding:2px var(--mood-inset) 6px}
.mp-chip{font-size:12px;color:var(--ink-2);background:var(--pure);border:1px solid var(--line);border-radius:999px;padding:5px 12px;line-height:1.6;transition:.18s;font-family:var(--kai);letter-spacing:.04em;white-space:nowrap}
.mp-chip .mp-emo{font-size:13px;margin-right:3px;font-family:var(--sans)}
/* 「细化一下」入口：主心情条内最后一位「细」小图标格（不新增行、不挤压输入框） */
.mood.detail-cap{cursor:pointer}
.mood.detail-cap .mc.dc{width:26px;height:26px;font-size:12px;border-style:dashed;color:var(--season-a);border-color:var(--season-a);background:var(--season-t);opacity:.8;border-width:1.5px}
.mood.detail-cap .ml{font-size:12px}
.mp-chip:active{transform:scale(.96)}
.mp-chip.on{color:var(--on-accent);background:var(--season-a);border-color:var(--season-a);font-weight:600;box-shadow:0 2px 8px rgba(176,122,38,.26)}
/* C 方案 · 细分心情底部抽屉 */
.detail-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:2px 0}
.detail-chip{display:flex;align-items:center;justify-content:center;gap:3px;width:100%;text-align:center}
.detail-none{margin-top:12px;padding-top:12px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3);text-align:center;cursor:pointer}
.mfreq{font-size:12px;color:var(--ink-3);padding:0 13px 10px;letter-spacing:.02em}
/* OPT-9 · 每日一问（记录页空态起笔引导） */
.dq{display:flex;align-items:baseline;gap:8px;padding:2px 3px 8px}
.dq .dqt{font-family:var(--kai);font-size:12px;color:var(--season-a);letter-spacing:.12em;flex:none}
.dq .dqq{font-size:13px;color:var(--ink-2);line-height:1.6}
.dqt{flex:none;font-family:var(--serif);font-size:12px;letter-spacing:.12em;color:var(--season-a);opacity:.85}
.dqq{font-family:var(--kai);font-size:13px;color:var(--ink-2);line-height:1.6}
/* OPT-10 · 落笔页「摘要已生成」入口条（结果独立页的回入口） */
.sum-go{display:flex;align-items:center;gap:10px;margin-top:12px;padding:10px 12px;border:1px solid var(--season-a);border-radius:12px;background:var(--season-t);cursor:pointer;transition:.2s}
.sum-go .sg-i{flex:none;width:26px;height:26px;border:1.5px solid var(--season-a);border-radius:8px;display:grid;place-items:center;font-family:var(--kai);font-size:12px;color:var(--season-a);transform:rotate(-3deg);background:var(--pure)}
.sum-go .sg-t{flex:1;min-width:0}
.sum-go .sg-n{font-family:var(--serif);font-size:13px;font-weight:600;color:var(--ink-1)}
.sum-go .sg-s{font-size:12px;color:var(--ink-3);margin-top:1px}
.sum-go .sg-arr{flex:none;width:16px;height:16px;stroke:var(--ink-3);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sum-go:active{transform:translateY(1px)}
/* OPT-16 · 月历（回顾页）：公历大字 + 农历小字(10px) + 节气章；节气日挂季节色印章点，含记录为朱砂足迹点 */
.calbox{padding-top:2px}
.cal-head{display:flex;align-items:center;justify-content:space-between;padding:0 2px 6px}
.cal-m{font-family:var(--serif);font-size:13px;font-weight:600;color:var(--season-a);letter-spacing:.08em}
.cal-nav{width:26px;height:26px;border:1px solid var(--line);border-radius:8px;display:grid;place-items:center;color:var(--ink-2);font-size:13px;cursor:pointer;background:var(--pure)}
.cal-nav:active{background:var(--season-t)}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal-w{text-align:center;font-size:12px;color:var(--ink-3);padding:2px 0;letter-spacing:.05em;font-family:var(--kai)}
.cal-d{position:relative;min-height:30px;border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;background:transparent}
.cal-d .cdn{font-family:var(--serif);font-size:13px;color:var(--ink-1);font-feature-settings:"tnum";line-height:1.1;font-weight:600;white-space:nowrap}
.cal-d .cln{font-family:var(--kai);font-size:10px;color:var(--ink-3);line-height:1;letter-spacing:.02em}
.cal-d .cterm{font-family:var(--kai);font-size:10px;color:var(--season-a);line-height:1;letter-spacing:.03em;white-space:nowrap}
.cal-d.term::after{content:"";position:absolute;top:3px;right:3px;width:4px;height:4px;border-radius:50%;background:var(--season-a)}
/* 月历 23 号修复（2026-09-13）：节气格不再渲染底部 .cdot（模板已去掉）——「有记录」语义合并进右上角章点：
   有记录 → 章点转朱砂足迹并放大一档（原双点并存且三层内容撑破 30px 格高，9/23 秋分实测整行错位） */
.cal-d.term.has::after{background:var(--zhu-m);width:5px;height:5px;top:2.5px;right:2.5px}
.cal-d.blank{min-height:30px}
.cal-d.has{background:var(--season-t);box-shadow:inset 0 0 0 1px var(--season-t)}
.cal-d.has .cdn{color:var(--season-deep);font-weight:600}
.cal-d.today{border:1.5px solid var(--season-a)}
/* 任务 3+4 笔 1（2026-09-13）：月历情绪底色档——.has 的底色交给伪元素承载（本体透明，
 * today 边框与 term 角标仍叠其上）；主导情绪换 var(--×-t)，记录量 lv1/lv2/lv3 三阶透明度只作用于伪元素。
 * 全部挂 #pg-review 前缀：月历 DOM 在回顾页容器内，interaction.css 是全站样式源（防误伤他页 .cal-d）。 */
#pg-review .cal-d.has{background:transparent;box-shadow:none}
#pg-review .cal-d.has::before{content:"";position:absolute;inset:0;border-radius:8px;background:var(--season-t);opacity:.78;pointer-events:none}
#pg-review .cal-d.has.m-zhu::before{background:var(--zhu-t)}
#pg-review .cal-d.has.m-dai::before{background:var(--dai-t)}
#pg-review .cal-d.has.m-qing::before{background:var(--qing-t)}
#pg-review .cal-d.has.m-jin::before{background:var(--jin-t)}
#pg-review .cal-d.has.m-xue::before{background:var(--xue-t)}
#pg-review .cal-d.has.lv1::before{opacity:.55}
#pg-review .cal-d.has.lv2::before{opacity:.78}
#pg-review .cal-d.has.lv3::before{opacity:1}
#pg-review .cal-d.has>*{position:relative;z-index:1}
/* 任务 3+4 笔 1 收尾（2026-09-13）：7→4 模块整合遗留两笔视觉修复（展示规范 §十一「迁移遗留」→ §十二已修）。
 * ① .toolbar 原为页级吸顶条（:1360 sticky+paper），入问山卡后 overflow:hidden 内无滚动容器可吸附、paper 底色显形
 *   → 改随卡流动、透明底（ID 前缀特异性恒压后文 .toolbar，顺序无关）；
 * ② thatday 小节迁入月历卡后首组顶距缺失（原由 .sect 提供）→ cap 补 10px 上边距
 *   （组间与组容器 margin-bottom:10px 相邻折叠，组间距不变；首组与 cal-grid 间生效）。 */
#pg-review .toolbar{position:static;background:transparent}
#pg-review .thatday-cap{margin-top:10px}
.cdot{width:5px;height:5px;border-radius:50%;background:var(--zhu-m)}
.mood-cap{font-family:var(--serif);font-size:12px;letter-spacing:.12em;color:var(--ink-3);padding:0 0 8px}
/* 记录页 · 标题行含「再细化一下」入口（同一行、不新增高度、不遮正文）
   2026-09-15 精致化：内距改用 --mood-inset，与下方 .mood-strip 左右对齐（此前 3px vs 14px，
   「此刻心情」四个字比它下面的心情圆更靠左，视觉上是错位的）。 */
.mood-cap-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 var(--mood-inset) 2px}
.mood-cap-row .mood-cap{padding:0}
.cap-toggle{flex:none;display:inline-flex;align-items:center;cursor:pointer}
.cap-toggle .ct-t{font-size:12px;color:var(--ink-3);letter-spacing:.04em;padding:2px 8px;transition:.2s}
.cap-toggle.on .ct-t{color:var(--season-a)}
.cap-toggle:active .ct-t{color:var(--season-a)}
.compose .mood-cap{padding:0 0 2px}
.compose .mood-strip{border-bottom:1px dashed var(--line)}
/* 心情栏收窄（2026-09-14 UI 去重 · 2026-09-15 三页统一）：页面 compose 容器（.bd.compose，
   RecordPage/ReflectPage 两页）左右各收 12px，去掉 space-between 拉满整卡的松散感。注意作用域用
   .bd.compose 而非 .compose——EditSheet.vue 用的是裸 .compose（无 .bd），收窄会误伤其编辑心情条。
   五档各 30px 圆 + 细字格，14px 收窄后仍不贴。
   ── 2026-09-15 精致化（用户「三个页面心情条不够精致」）─────────────────────────
   三页此前三套内距：compose 14px / mini 3px / cap 3px——收尾页明显最松，三页切换时心情条左右
   边界跳动。统一抽 --mood-inset 单源变量（14px，落在下方 token 处），三页共用一套；收窄的同时
   补上「选中态圆点略提亮 + 字重」的既有视觉，不再各写各的。 */
.bd.compose .mood-strip{padding:0 var(--mood-inset) 6px}
/* ── 收尾页 · 迷你心情条（复盘后点选） ── */
.mood-strip.mini{padding:10px var(--mood-inset) 6px;border-top:1px dashed var(--line);margin-top:12px}
.mood-strip.mini .mood .mc{width:30px;height:30px;font-size:15px}
.mood-strip.mini .mood .ml{font-size:12px}
.shift-lg .sc .e.unset{border-style:dashed;border-color:var(--line-strong);color:var(--ink-3);font-size:15px;font-family:var(--serif)}
/* ── 期限抽屉 · 自定义区 ── */
.duecustom{padding:12px 2px 14px;border-top:1px solid var(--line);margin-top:2px;display:flex;flex-direction:column;gap:10px}
.duecustom .dc-cap{font-size:12px;color:var(--ink-2);display:flex;align-items:center;gap:6px}
.duecustom .dc-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.duecustom input[type=date]{flex:1;min-width:140px;border:1px solid var(--line-strong);border-radius:8px;padding:8px 11px;font-size:13px;background:var(--pure);color:var(--ink-1);font-family:inherit;color-scheme:light}
.tmchips{display:flex;gap:7px;flex-wrap:wrap}
.tc{font-size:12px;color:var(--ink-2);border:1px solid var(--line-strong);border-radius:999px;padding:5px 13px;cursor:pointer;transition:.2s;display:inline-block}
.tc.on{border-color:var(--season-a);color:var(--season-a);background:var(--season-t);font-weight:600}
.sh-clear{font-size:12px;color:var(--zhu-d);cursor:pointer;padding:4px 8px;border-radius:8px}

/* 完成期限 · 简洁版（日期+时间直接选择） */
.due-simple{display:flex;gap:12px;flex-wrap:wrap;padding:2px 0 4px}
.ds-field{flex:1;min-width:140px;display:flex;flex-direction:column;gap:6px}
.ds-cap{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:5px;font-family:var(--sans)}
.ds-field uni-input input,.ds-field input{border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:15px;background:var(--surface);color:var(--ink-1);font-family:inherit;color-scheme:light;width:100%;box-sizing:border-box;transition:.18s}
.ds-field uni-input input:focus,.ds-field input:focus{border-color:var(--season-a);box-shadow:0 0 0 3px var(--season-t);background:var(--pure)}
.due-none{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:16px;padding-top:14px;font-size:12px;color:var(--ink-3);cursor:pointer;border-top:1px solid var(--line);font-family:var(--sans)}
.ds-cap svg{stroke:var(--ink-3)}

/* ── 完成期限 · 预设快捷 + uni picker 滚轮（行动类 App 惯例，替代内嵌月历） ── */
.due-cap{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);margin:2px 0 8px;padding-left:2px}
.due-cap svg{width:14px;height:14px;stroke:var(--ink-2);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
/* 字段卡：点一下弹该端原生滚轮（H5=uni 弹层，小程序/App=系统 picker） */
.due-fld{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:12px;background:var(--pure);padding:0 14px;height:46px;box-sizing:border-box;width:100%;transition:.18s}
.due-fld:active{border-color:var(--season-a);background:var(--season-t)}
.due-fld>svg{width:15px;height:15px;stroke:var(--ink-3);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.due-fld .due-fld-txt{flex:1;min-width:0;font-family:var(--kai);font-size:17px;color:var(--ink-1);line-height:1}
.due-fld.ph .due-fld-txt{color:var(--ink-3);font-size:15px}
.due-fld .due-fld-chev{flex:none;width:13px;height:13px;stroke:var(--line-strong)}
/* picker 仅做「点区」：内部文字/高度继承字段卡，三端各自渲染弹层 */
picker{display:block;width:100%}
picker .uni-picker,uni-picker .uni-picker{height:46px}
.due-timerow{display:flex;flex-direction:column;align-items:stretch;gap:9px;padding:2px 0 0}
.due-timechips{display:grid;grid-template-columns:repeat(5,1fr);gap:7px}
.due-timechips .tc{display:flex;flex-direction:column;align-items:center;gap:1px;padding:6px 2px;white-space:nowrap}
.due-timechips .tc em{font-style:normal;font-family:var(--kai);font-size:12px;opacity:.7;font-feature-settings:"tnum"}
.due-picked{font-size:12px;color:var(--ink-2);margin:10px 2px 0;text-align:center}
.due-none svg{stroke:var(--ink-3)}

/* 头象抽屉 · 拍照/相册（去字符头像） */
.ava-new-box{display:flex;flex-direction:column;align-items:center;gap:18px;padding:18px 0 6px}
.ava-preview{width:96px;height:96px;border-radius:50%;overflow:hidden;border:2px solid var(--line-strong);background:var(--surface);display:grid;place-items:center;font-size:30px;color:var(--ink-2);font-family:var(--serif)}
.ava-preview-img{width:100%;height:100%}
.ava-preview-img img{width:100%;height:100%;object-fit:cover;display:block}
.ava-actions{display:flex;gap:12px;width:100%}
.ava-act{flex:1;display:flex;flex-direction:column;align-items:center;gap:7px;padding:13px 0;border:1px solid var(--line);border-radius:12px;cursor:pointer;font-size:12px;color:var(--ink-1);background:var(--pure);transition:.18s}
.ava-act:active{background:var(--season-t);border-color:var(--season-a)}
.ava-act-ico{width:26px;height:26px;display:block}
.ava-act-ico svg{width:100%;height:100%;stroke:var(--season-a);fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.sh-clear:active{background:var(--zhu-t)}
.emo{font-size:13px;line-height:1}

/* ── 收尾页 ── */
.close-hero{text-align:center;padding:24px 0 18px}
.close-hero .ju{font-family:var(--kai);font-size:13px;color:var(--season-a);letter-spacing:.5em;text-indent:.5em;margin-bottom:10px}
.close-hero h2{font-family:var(--kai);font-size:24px;font-weight:500;letter-spacing:.14em;text-indent:.14em;color:var(--ink-1)}
.close-hero .rng{font-size:12px;color:var(--ink-2);margin-top:8px;font-feature-settings:"tnum"}
.close-hero .rule{width:56px;height:2px;background:var(--season-a);margin:15px auto 0}
.shift-lg{display:flex;align-items:center;justify-content:center;gap:16px;padding:4px 0 2px}
.shift-lg .sc{display:flex;flex-direction:column;align-items:center;gap:5px}
.shift-lg .sc .e{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;font-size:24px;background:var(--pure);border:1.5px solid var(--line-strong)}
.shift-lg .sc .lb{font-size:12px;color:var(--ink-2)}
.shift-lg .mid{display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--qing-m)}
.shift-lg .mid svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.shift-lg .mid span{font-size:12px;letter-spacing:.1em;color:var(--qing-d)}
.sum-band{display:flex;align-items:center;gap:10px}
.sum-band .seal-sm{width:32px;height:32px;border:1.5px solid var(--dai-m);border-radius:8px;display:grid;place-items:center;font-family:var(--serif);font-size:15px;color:var(--dai-d);transform:rotate(-3deg);flex:none}
.sum-band .ttw{flex:1;min-width:0}
.sum-band .st{font-family:var(--kai);font-size:15px;color:var(--ink-1);line-height:1.3}
.sum-band .ss{font-size:12px;color:var(--ink-3);margin-top:2px}
.ai-chip{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-3);flex:none}
.ai-chip.local{opacity:.8}
.ai-chip.local .mini-seal{border-color:var(--line-strong);color:var(--ink-3);transform:none}
.sum-rule{height:1px;background:var(--line);margin:13px 0}
.sum-insight{font-size:13px;color:var(--dai-d);line-height:1.8}
.zxcard{border:1px solid var(--line);border-radius:12px;background:var(--pure);margin-top:11px;overflow:hidden}
.zxcard .zh{display:flex;align-items:center;gap:9px;padding:11px 13px 8px}
.zxcard .seal-mini{width:26px;height:26px;border:1.5px solid currentColor;border-radius:8px;display:grid;place-items:center;font-family:var(--serif);font-size:13px;transform:rotate(-3deg);flex:none}
.zxcard.zhi .seal-mini{color:var(--xue-d)}
.zxcard.xing .seal-mini{color:var(--jin-d)}
.zxcard .tl{flex:1;min-width:0}
.zxcard .t1{font-family:var(--serif);font-size:13px;font-weight:600;color:var(--ink-1)}
.zxcard .t2{font-size:12px;color:var(--ink-3);margin-top:2px}
.zxcard .tag{font-size:12px;padding:2px 8px;border-radius:8px;flex:none;cursor:pointer}
.zxcard.zhi .tag{background:var(--xue-t);color:var(--xue-d)}
.zxcard.xing .tag{background:var(--jin-t);color:var(--jin-d)}
.zxcard .zt2{padding:0 13px 12px;font-size:13px;color:var(--ink-1);line-height:1.7}
.zxcard .zinput{padding:2px 13px 12px}
.zxcard .zinput textarea{width:100%;min-height:72px;resize:none;border:none;outline:none;background:transparent;font-size:15px;font-family:var(--sans);color:var(--ink-1);line-height:1.7;padding:0}
.zxcard .zinput textarea::placeholder{color:var(--ink-3)}
/* 知/行输入框：覆盖全局 uni-placeholder(15px/1.75/padding 12 14 8) 对齐本框 14px/1.7/padding0，消除「占位文字与光标错位、占位下沉」 */
.zxcard .zinput uni-textarea{display:block}
.zxcard .zinput uni-textarea textarea{padding:0!important;line-height:1.7!important}
.zxcard .zinput uni-textarea .uni-textarea-placeholder{font-size:15px!important;line-height:1.7!important;padding:0!important;top:0!important}
.zxcard .zcnt{display:block;text-align:right;font-size:12px;color:var(--ink-3);font-feature-settings:"tnum";margin-top:4px}
.zxcard .append{border-top:1px dashed var(--line);text-align:center;padding:9px;font-size:12px;color:var(--ink-2);cursor:pointer;transition:.2s}
.zxcard .append:active{color:var(--season-a)}
.zxcard .actrow{display:flex;align-items:center;gap:10px;padding:4px 13px 8px}
.zxcard .actrow .ftx{flex:1;font-size:13px;color:var(--ink-1);line-height:1.6}
.zxcard .actnote{font-size:12px;color:var(--ink-3);padding:0 13px 10px}
.zxcard .zx-extra{display:block;padding:4px 13px 8px}
.zxcard .zx-extra .actrow{margin:0}
.zxcard .zx-extra uni-textarea{flex:1;min-width:0;height:66px}
.zxcard .zx-extra textarea{width:100%;height:100%;min-height:44px;resize:none;border:1px solid var(--line);border-radius:8px;background:var(--pure);font-size:15px;font-family:var(--sans);color:var(--ink-1);line-height:1.7;padding:8px 11px;outline:none;box-sizing:border-box;transition:.18s}
.zxcard .zx-extra textarea:focus{border-color:var(--season-a)}
.zxcard .zx-rm{flex:none;width:24px;height:24px;margin-top:8px;display:grid;place-items:center;border-radius:50%;color:var(--ink-3);cursor:pointer;font-size:12px;transition:.15s}
.zxcard .zx-rm:hover{color:var(--zhu-d);background:var(--zhu-t)}
/* A3/Q3：见山建议的行动（收尾页勾选） */
.aisuggest{margin-top:10px;border:1px dashed var(--xiang-d);border-radius:8px;padding:10px 12px;cursor:pointer;transition:.2s;background:var(--xiang-t)}
.aisuggest:active{transform:scale(.98)}
.aisuggest .ai-chip{margin-bottom:6px}
.aisuggest .as-txt{font-size:13px;color:var(--ink-1);line-height:1.6;margin:4px 0 3px}
.aisuggest .as-mini{font-size:12px;color:var(--ink-3)}
.quality{margin-top:13px;border-top:1px dashed var(--line);padding-top:12px}
.quality .qrow2{display:flex;align-items:baseline;justify-content:space-between}
.quality .qleft{display:inline-flex;align-items:center;gap:8px;min-width:0}
.quality .q-src{font-size:12px;padding:1px 8px;border-radius:8px;background:var(--surface);border:1px solid var(--line);color:var(--ink-3);white-space:nowrap}
.quality .q-src.ai{background:var(--qing-t);border-color:var(--qing-m);color:var(--qing-d)}
.quality .q-retry{color:var(--season-a);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.quality .ql{font-family:var(--serif);font-size:12px;letter-spacing:.15em;color:var(--ink-3)}
.quality .qv{font-family:var(--kai);font-size:24px;color:var(--qing-d);line-height:1}
.quality .qv .qmax{font-size:12px;color:var(--ink-3);margin-left:2px}
.quality .qfeed{font-size:12px;color:var(--ink-2);line-height:1.65;margin-top:5px}
/* E1：三维质量维度横条（追问深度/表达具体/行动可落） */
.qdim{display:flex;align-items:center;gap:9px;margin-top:8px}
.qdim .qdim-lb{flex:none;font-size:12px;color:var(--ink-3);width:56px}
.qdim .qdim-bar{flex:1;height:6px;border-radius:999px;background:var(--line);position:relative;overflow:hidden}
.qdim .qdim-bar::after{content:'';position:absolute;left:0;top:0;bottom:0;width:var(--w,0);background:var(--qing-d);border-radius:999px;transition:width .4s}
.qdim .qdim-val{flex:none;width:26px;text-align:right;font-size:12px;font-family:var(--mono);color:var(--ink-1)}
.qhint{font-size:12px;color:var(--ink-2);margin-top:10px}
.recs{margin-top:13px;border-top:1px dashed var(--line);padding-top:12px}
.recs .rec-cap{font-family:var(--serif);font-size:12px;letter-spacing:.15em;color:var(--ink-3);margin-bottom:2px}
.rec-item{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--line);cursor:pointer}
.rec-item:last-child{border:none}
.rec-item .rtype{font-size:12px;padding:2px 8px;border-radius:8px;background:var(--xiang-t);color:var(--xiang-d);flex:none}
.rec-item .rbody{flex:1;min-width:0}
.rec-item .rt{font-family:var(--serif);font-size:13px;font-weight:600;color:var(--ink-1)}
.rec-item p{font-size:12px;color:var(--ink-3);margin-top:2px;line-height:1.55}
.rec-item .rarr{width:15px;height:15px;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}
.sum-foot{display:flex;justify-content:center;align-items:center;margin-top:12px;border-top:1px solid var(--line)}
.sum-foot span{flex:0 1 auto;min-width:0;text-align:center;padding:11px 16px;font-size:12px;color:var(--ink-2);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;line-height:1;white-space:nowrap}
.sum-foot span:first-child{border-right:1px solid var(--line)}
.sum-foot span:active{color:var(--season-a)}
.sum-foot svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.sealzone{display:flex;flex-direction:column;align-items:center;gap:8px;padding:6px 0 2px}
.sealzone .hint{font-size:12px;color:var(--ink-3);letter-spacing:.1em}
.close-acts{display:flex;flex-direction:column;gap:10px;margin-top:4px}

/* 状态胶囊与主题区分（2026-09-06 用户裁决）：复盘状态 .stchip 用语义色（done 青绿/doing 赭金/todo 灰），不随季节；.chip.plain 保持中性 */
.chip.plain{background:transparent;border:1px solid var(--line-strong);color:var(--ink-2)}
/* 复盘状态语义色（2026-09-06 · 用户裁决：状态用语义色而非主题色——已复盘=青绿成功、复盘中=赭金进行、待复盘=灰）
   不随季节主题变化；todo 虚线弱化、doing 脉动强调、done 实底收束 */
.stchip{font-size:12px;padding:2.5px 9px;border-radius:8px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:.2s;font-weight:500}
.stchip:active{transform:scale(.94)}
.stchip.todo{background:transparent;border:1px dashed var(--ink-4);color:var(--ink-3)}
.stchip.done{background:var(--qing-t);border:1px solid var(--qing-m);color:var(--qing-d)}
.stchip.doing{background:var(--jin-t);border:1px solid var(--jin-m);color:var(--jin-d)}
.stchip .dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}
.stchip.doing .dot{animation:pulseDot 1.6s infinite}
@keyframes pulseDot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(1.5)}}
.rowitem .tx{transition:.2s}
.rowitem:active{background:var(--paper)}
.rowitem:active .tx{color:var(--season-a)}

/* ── @ 关联芯片 ── */
.mention{display:flex;align-items:center;gap:8px;background:var(--dai-t);border:1px solid var(--dai-m);border-radius:8px;padding:8px 11px}
.mention .at{font-family:var(--serif);font-size:13px;color:var(--dai-d);flex:none}
.mention .mtxt{flex:1;min-width:0;font-size:12px;color:var(--dai-d);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mention .mx{width:20px;height:20px;border-radius:50%;display:grid;place-items:center;flex:none;cursor:pointer;color:var(--dai-d);opacity:.7}
.mention .mx:active{opacity:1}
.mention .mx svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}

/* ── 方式分段 + 方法行 ── */
.segrow{display:flex;gap:7px}
.segrow .sg{flex:1;text-align:center;font-size:12px;padding:8px 0;border:1px solid var(--line);border-radius:8px;cursor:pointer;color:var(--ink-2);transition:.2s;background:var(--pure);position:relative}
.segrow .sg.on{border-color:var(--dai-m);color:var(--dai-d);background:var(--dai-t);font-weight:600}
/* 批 1（2026-09-14）止损：该方法无专属结构式模板时置灰（点击由 setMode 拦下并提示）。
   不是禁用态样式炫技——是让"这条路暂时走不通"在点之前就可见，而不是进去看到错的格子。 */
.segrow .sg.off{opacity:.45;cursor:not-allowed}
.segdesc{font-size:12px;color:var(--ink-3);line-height:1.6;padding-left:2px}
.mtdrow{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:8px;padding:10px 13px;cursor:pointer;background:var(--pure);transition:.2s}
.mtdrow:active{border-color:var(--dai-m)}
.mtdrow .mi{width:26px;height:26px;border:1.5px solid var(--dai-m);border-radius:8px;display:grid;place-items:center;font-family:var(--serif);font-size:12px;color:var(--dai-d);transform:rotate(-3deg);flex:none}
.mtdrow .mt{flex:1;min-width:0}
.mtdrow .mn{font-size:13px;color:var(--ink-1);font-weight:600}
.mtdrow .md{font-size:12px;color:var(--ink-3);margin-top:1px}
.mtdrow .marr{width:15px;height:15px;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}
.compose-cap{font-family:var(--serif);font-size:12px;letter-spacing:.12em;color:var(--ink-3);padding:2px 0 7px}

/* ── 底部抽屉 ── */
.mask{position:absolute;inset:0;background:var(--scrim);opacity:0;pointer-events:none;transition:var(--mo-3);z-index:60;backdrop-filter:blur(2px)}
.mask.show{opacity:1;pointer-events:auto}
/* P0-3 抽屉原生滚动条隐藏（与 .page 同法，Windows 不再露出系统滚动条）
   K6（2026-09-06·线上实测）：抽屉/遮罩的 absolute 包含块已由 DOM 侧上移至 .phone（pages/index/index.vue），
   无需 position:fixed 即可在全视口限宽列内正确锚定底部、覆盖 TabBar（三端存量债务棘轮：fixed ≤ 0 保持）。 */
.sheet{position:absolute;left:0;right:0;bottom:0;background:var(--paper);border-radius:18px 18px 0 0;z-index:65;transform:translateY(calc(100% + 24px));transition:transform .32s cubic-bezier(.32,.72,.28,1),visibility 0s .34s;max-height:78%;display:flex;flex-direction:column;box-shadow:none;scrollbar-width:none;visibility:hidden}
/* P0-灰带修复：抽屉收起位只下移自身高度 4%，向上 40px 的阴影会越过屏幕底边压在 TabBar（z-index 65 > 40）上，
   19 个常驻抽屉叠加即成灰带。绘制类效果一律只在 .show 可见态声明，收起态不绘制。
   （2026-09-06·E2E 补充）：收起位改 calc(100%+24px) 且 visibility:hidden——小内容抽屉（书影预览）此前
   收起后仍露底边在视口内、transform 失效环境整屏泄漏，双保险归零。 */

/* ── 全局 ActionSheet（替代原生 confirm / 行内浮层菜单） ── */
/* 三端/宽屏守恒：.as-mask 是 .screen 的直接子元素，用 absolute 跟 .mask/.sheet 同层，
   约束在限宽列内（原 position:fixed 在全局确认时会越出 --col-max、铺满整个浏览器窗口）。 */
.as-mask{position:absolute;inset:0;z-index:80;background:rgba(38,41,43,.42);opacity:0;pointer-events:none;transition:opacity .25s;display:flex;align-items:flex-end}
.as-mask.show{opacity:1;pointer-events:auto}
.asheet{width:100%;background:var(--paper);border-radius:18px 18px 0 0;padding-bottom:calc(10px + env(safe-area-inset-bottom,0px));transform:translateY(102%);transition:transform .3s cubic-bezier(.32,.72,.28,1);box-shadow:var(--sh-float)}
.as-mask.show .asheet{transform:none}
/* 十二轮（2026-09-22）抽屉美化：顶部拖拽指示条 + 标题区撤分隔线（列表自成分区）；阴影收编 --sh-float 令牌（裸 rgba 只减不增） */
.as-grip{display:block;width:36px;height:4px;margin:10px auto 0;border-radius:999px;background:var(--line-strong)}
.as-h{padding:6px 20px 12px;text-align:center}
.as-t{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink-1);line-height:1.5;word-break:break-all}
.as-d{font-size:12px;color:var(--ink-3);margin-top:4px;line-height:1.6}
.as-list{padding:4px 12px 2px}
.as-row{display:flex;align-items:center;gap:14px;height:52px;padding:0 14px;border-radius:12px;font-size:15px;color:var(--ink-1);cursor:pointer;transition:background .15s}
.as-row:active{background:var(--season-t)}
.as-ic{font-style:normal;width:32px;height:32px;border-radius:999px;background:var(--surface);color:var(--ink-2);font-size:14px;flex:none;display:grid;place-items:center}
.as-ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.as-row.danger{color:var(--zhu-d)}
.as-row.danger .as-ic{color:var(--zhu-m);background:var(--zhu-t)}
.as-row.danger:active{background:var(--zhu-t)}
.as-cancel{margin:8px 12px 0;height:50px;display:flex;align-items:center;justify-content:center;font-size:15px;color:var(--ink-2);cursor:pointer;background:var(--surface);border-radius:12px;font-weight:500}
.as-cancel:active{color:var(--ink-1);background:var(--paper)}
.sheet::-webkit-scrollbar,.sheet .sh-b::-webkit-scrollbar{display:none}
.sheet.show{transform:translateY(0);box-shadow:var(--sh-float);visibility:visible;transition:transform .32s cubic-bezier(.32,.72,.28,1),visibility 0s}
.sheet .grab{width:36px;height:4px;border-radius:999px;background:var(--line-strong);margin:9px auto 0;flex:none}
.sheet .sh-h{display:flex;align-items:baseline;gap:9px;padding:12px 18px 4px;flex:none}
.sheet .sh-t{font-family:var(--serif);font-weight:700;font-size:15px;color:var(--ink-1)}
.sheet .sh-s{font-size:12px;color:var(--ink-3)}
.sheet .sh-x{margin-left:auto;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:var(--ink-3);align-self:center}
.sheet .sh-x svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}
.sheet .sh-b{overflow-y:auto;padding:4px 18px 14px;flex:1;scrollbar-width:none}

/* 方法抽屉 · 推荐带 + 紧凑行 */
.rec-band{display:flex;align-items:center;gap:10px;background:var(--dai-t);border:1px solid var(--dai-m);border-radius:12px;padding:10px 12px;margin-top:6px}
.rec-band .rb-i{width:30px;height:30px;border:1.5px solid var(--dai-m);border-radius:8px;display:grid;place-items:center;font-family:var(--serif);font-size:15px;color:var(--dai-d);transform:rotate(-3deg);flex:none}
.rec-band .rb-t{flex:1;min-width:0}
.rec-band .rb-n{font-size:12px;color:var(--ink-1);font-weight:600}
.rec-band .rb-r{font-size:12px;color:var(--dai-d);margin-top:2px;line-height:1.5}
.rec-band .rb-go{font-size:12px;padding:5px 12px;border-radius:8px;background:var(--dai-d);color:var(--on-accent);cursor:pointer;flex:none;font-weight:500}
.rec-band .rb-go:active{opacity:.85}
.mrow{display:flex;align-items:center;gap:11px;padding:13px 2px;border-bottom:1px solid var(--line);cursor:pointer}
.mrow:last-child{border:none}
.mrow .mr-b{flex:1;min-width:0}
.mrow .mr-n{font-size:13px;color:var(--ink-1);font-weight:600;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.mrow .mr-d{font-size:12px;color:var(--ink-3);margin-top:3px;line-height:1.55}
.mrow .mr-kw{font-size:12px;color:var(--ink-2);background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:1px 7px;margin-top:5px;display:inline-block}
.mrow .radio{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--line-strong);flex:none;display:grid;place-items:center;transition:.2s}
.mrow.sel .radio{border-color:var(--qing-m);background:var(--qing-m)}
.mrow .radio svg{width:11px;height:11px;stroke:var(--on-accent);fill:none;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.4);transition:.2s}
.mrow.sel .radio svg{opacity:1;transform:scale(1)}
.mrow .lock{width:20px;height:20px;display:grid;place-items:center;flex:none;color:var(--ink-3)}
.mrow .lock svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.mrow .free{font-size:12px;color:var(--qing-d);background:var(--qing-t);border-radius:8px;padding:1px 6px;font-weight:500}
.mrow .mr-p{font-size:12px;color:var(--ink-3);background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:1px 6px;font-weight:500}
.sheet .sh-f{flex:none;padding:10px 18px 16px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3);text-align:center}

/* 任务 3+4 笔 1（2026-09-13）：月历当日下钻抽屉内容（.dd-*）。
 * ⚠ 不得挂 #pg-review 前缀——抽屉 DOM 挂载在 AppShell 全局壳层下、不在回顾页容器内，
 * 挂了前缀选择器永不命中（静默失效），spec 风险 2。 */
.dd-row{display:flex;align-items:flex-start;gap:9px;padding:11px 2px;border-bottom:1px solid var(--line)}
.dd-row:last-child{border-bottom:none}
.dd-emo{flex:none;width:22px;text-align:center;font-size:15px;line-height:1.3}
.dd-main{flex:1;min-width:0}
.dd-txt{display:block;font-size:13px;color:var(--ink-1);line-height:1.5;word-break:break-word}
.dd-meta{display:block;font-size:11px;color:var(--ink-3);margin-top:2px}
.dd-tm{flex:none;font-size:11px;color:var(--ink-3);font-feature-settings:"tnum";margin-top:2px}
.dd-empty{padding:22px 0;text-align:center;font-size:12px;color:var(--ink-3)}
/* F2（2026-09-14 · 批 5 收尾 · 极值日关怀）：当日含低落记录时抽屉首行的关怀句。
   放 interaction.css 而非行内 style——行内样式棘轮（cross-platform.spec）只减不增，新增即红。 */
.dd-care{font-size:12px;color:var(--ink-2);line-height:1.7;margin:2px 0 8px}
/* F2：周志情绪曲线低落日的透明命中圆——命中区(r=7)比视觉点(r=1.7)大才可点，指针形态随可点变化 */
.pt-hit{cursor:pointer}

/* + 号抽屉 · 附加项 */
.plus-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:8px 0 6px}
.plus{display:flex;flex-direction:column;align-items:center;gap:8px;padding:15px 4px 13px;border:1px solid var(--line);border-radius:12px;background:var(--pure);cursor:pointer;transition:.2s}
.plus svg{width:21px;height:21px;stroke:var(--ink-2);fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.plus span{font-size:12px;color:var(--ink-2)}
.plus:active{border-color:var(--season-a)}
.plus:active svg{stroke:var(--season-a)}

/* ── 行动期限 ── */
.due-row{display:flex;align-items:center;gap:7px;margin-top:9px;font-size:12px;color:var(--jin-d);background:var(--jin-t);border-radius:8px;padding:8px 11px;cursor:pointer;transition:.2s}
.due-row svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}
.due-row .dt{flex:1}
.due-row .da{font-size:12px;color:var(--ink-3)}
.due-row:active{transform:scale(.98)}
.dueopt{display:flex;align-items:center;gap:12px;padding:12px 16px 12px 46px;margin-bottom:8px;border:1px solid var(--line);border-radius:12px;cursor:pointer;transition:border-color .2s,background .2s,box-shadow .2s,transform .12s;position:relative}
.dueopt:hover{border-color:var(--line-strong);background:var(--surface)}
.dueopt:active{transform:scale(.995)}
.dueopt::before{content:"";position:absolute;left:14px;top:50%;transform:translateY(-50%);width:18px;height:18px;border-radius:50%;box-sizing:border-box}
.dueopt .do-n{font-family:var(--serif);font-size:15px;font-weight:600;color:var(--ink-1);letter-spacing:.02em}
.dueopt .do-d{font-size:12px;color:var(--ink-3);margin-left:auto;letter-spacing:.04em}
.dueopt.sel{border-color:var(--season-a);background:linear-gradient(180deg,var(--season-t),var(--pure));box-shadow:0 1px 6px rgba(176,122,38,.10)}
.dueopt.sel .do-n{color:var(--season-a)}
/* 单选圆点：外圈 + 中心实心点（非复选 chk；chk 的复选框样式在下方覆盖） */
.dueopt:not(.chk)::before{border:1.5px solid var(--line-strong);background:var(--pure);transition:border-color .2s,box-shadow .2s}
.dueopt:not(.chk)::after{content:"";position:absolute;left:14px;top:50%;transform:translateY(-50%) scale(.3);width:18px;height:18px;border-radius:50%;background:radial-gradient(circle,var(--season-a) 0 4px,transparent 4.6px);opacity:0;transition:opacity .2s,transform .2s;pointer-events:none}
.dueopt:not(.chk).sel::before{border-color:var(--season-a);box-shadow:0 0 0 3px var(--season-t)}
.dueopt:not(.chk).sel::after{opacity:1;transform:translateY(-50%) scale(1)}
.duechip{font-size:12px;color:var(--jin-d);background:var(--jin-t);border-radius:8px;padding:2px 8px;flex:none;max-width:46%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4}
.rop-wrap{position:relative;margin-left:auto;padding-left:8px;align-self:flex-start;flex:none}
.rop-more{font-size:17px;line-height:1;color:var(--ink-3);cursor:pointer;user-select:none;transition:.15s;display:block}
.rop-more:active{color:var(--season-a)}
.rop-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:6;min-width:138px;padding:6px;background:var(--pure);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.08);display:flex;flex-direction:column;gap:2px}
.rop-menu span{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:8px;font-size:12px;color:var(--ink-2);cursor:pointer;white-space:nowrap;transition:.15s;font-family:var(--sans)}
.rop-menu span:hover{background:var(--surface)}
.rop-menu span:active{background:var(--season-t)}
.rop-menu .rm-pic{flex:none;min-width:14px;text-align:center;color:var(--ink-3);font-weight:400}
.rop-menu .rm-del{color:var(--zhu-d)}
.rop-menu .rm-del:active{background:var(--zhu-t)}

/* ── 回顾报告入口 ── */
.reprow{display:flex;align-items:center;gap:11px;padding:12px 2px;border-bottom:1px solid var(--line);cursor:pointer;transition:.15s}
.reprow:last-child{border-bottom:none;padding-bottom:6px}
.reprow:first-child{padding-top:6px}
.reprow:active{background:var(--paper)}
.reprow .ic{width:36px;height:36px;border-radius:8px;display:grid;place-items:center;flex:none}
.reprow .ic svg{width:18px;height:18px;stroke-width:1.6;fill:none;stroke-linecap:round;stroke-linejoin:round}
.reprow .tt{flex:1;min-width:0}
.reprow .h{font-size:15px;font-weight:600;color:var(--ink-1)}
.reprow .p{font-size:12px;color:var(--ink-3);margin-top:2px}
.reprow .arr{flex:none;color:var(--ink-3)}
.reprow .lockic{flex:none;color:var(--line-strong)}

/* ── 回山·那年今日（§六-1）：旧记录回流卡 ── */
.thatday-cap{font-family:var(--serif);font-size:12px;letter-spacing:.12em;color:var(--ink-2);margin-bottom:6px}
.thatday-item{padding:10px 2px;border-bottom:1px dashed var(--line);font-size:13px;color:var(--ink-1);line-height:1.7}
.thatday-item:last-of-type{border-bottom:none}
.thatday-more{font-size:12px;color:var(--ink-3);padding-top:8px}

/* ── 月令 · 情绪分布与完成率 ── */
.mbrow{display:flex;align-items:center;gap:9px;padding:6px 0}
/* 标签宽改 min-width：月令短标签（低落/迷惘）仍是 32px 对齐；年鉴「春 · 平静」长标签可自然伸展，不再挤成多行 */
.mbrow .l{min-width:32px;font-size:12px;color:var(--ink-2);flex:none;white-space:nowrap}
.mbrow .bar{flex:1;height:8px;background:var(--paper);border-radius:8px;overflow:hidden}
.mbrow .bar i{display:block;height:100%;border-radius:8px;transition:width .6s cubic-bezier(.22,.61,.36,1)}
.mbrow .n{font-size:12px;color:var(--ink-3);font-feature-settings:"tnum";flex:none;white-space:nowrap}
.progrow{display:flex;align-items:center;gap:10px;margin-top:8px}
.progrow .pl{font-size:12px;color:var(--ink-2);flex:none}
.progrow .bar{flex:1;height:9px;background:var(--paper);border-radius:8px;overflow:hidden}
.progrow .bar i{display:block;height:100%;background:var(--jin-m);border-radius:8px;transition:width .6s cubic-bezier(.22,.61,.36,1)}
.progrow .pv{font-size:12px;color:var(--jin-d);font-feature-settings:"tnum";flex:none}

/* 关联卡片抽屉 · 行 */
.crow{display:flex;gap:11px;padding:12px 2px;border-bottom:1px solid var(--line);cursor:pointer;align-items:flex-start}
.crow:last-child{border:none}
.crow:active .cr-t{color:var(--dai-d)}
.crow .cr-tm{font-family:var(--kai);font-size:12px;color:var(--ink-3);width:38px;flex:none;padding-top:2px}
.crow .cr-t{font-size:13px;color:var(--ink-1);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.crow .cr-m{display:flex;gap:5px;margin-top:4px;align-items:center;font-size:12px;color:var(--ink-3)}

.chip.tgl{cursor:pointer;border:1px solid var(--line);background:var(--pure);color:var(--ink-2);transition:.2s}
.chip.tgl.add{border-style:dashed;color:var(--ink-3)}
.chip.tgl.on{background:var(--qing-t);color:var(--qing-d);border-color:var(--qing-m)}
.mrow .adv{font-size:12px;color:var(--xiang-d);background:var(--xiang-t);border-radius:8px;padding:1px 6px;font-weight:500}
.compose{display:flex;flex-direction:column;gap:11px}
.compose uni-textarea{display:block;width:100%;min-width:0}
.compose textarea{width:100%;min-height:140px;resize:none;border:1.5px solid var(--line);border-radius:8px;background:var(--pure);padding:13px 15px;font-size:15px;font-family:var(--sans);color:var(--ink-1);outline:none;line-height:1.75;transition:.25s;box-sizing:border-box}
.compose textarea:focus{border-color:var(--season-a);box-shadow:0 0 0 4px var(--season-t)}
.compose textarea::placeholder{color:var(--ink-3)}
.compose .foot{display:flex;align-items:center;gap:8px}

/* ── 输入壳 · 按钮内嵌 ── */
.page.modal{z-index:45}
.inshell{border:1.5px solid var(--line);border-radius:8px;background:var(--pure);transition:.25s}
.inshell:focus-within{border-color:var(--season-a);box-shadow:0 0 0 4px var(--season-t)}
.compose .inshell textarea{border:none;box-shadow:none;background:transparent;border-radius:0;padding:12px 14px 8px}
.compose .inshell textarea:focus{border:none;box-shadow:none}
/* uni-app 编译后的 <uni-textarea>：内部占位/行容器与 textarea 内容区同字号、行高与 padding，
   避免「占位文字贴顶、字号偏大、光标下沉」造成的错位 */
uni-textarea .uni-textarea-placeholder,
uni-textarea .uni-textarea-line{font-size:15px;line-height:1.75;padding:12px 15px 8px}
/* 占位色统一为 --ink-3，与原生 textarea::placeholder 一致（uni 默认灰需 !important 覆盖） */
uni-textarea .uni-textarea-placeholder{color:var(--ink-3)!important}
.inshell .foot{padding:0 8px 8px}
.inshell .mention{margin:10px 10px 0;border-radius:8px}
.linkpill{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--dai-d);border:1.5px solid var(--dai-m);background:var(--dai-t);border-radius:999px;padding:0 13px;height:34px;cursor:pointer;transition:.2s;flex:none}
.linkpill svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.linkpill:active{transform:scale(.95)}

/* ── 对话式 · 聊天 ── */
.chatwrap{display:flex;flex-direction:column;padding:2px 6px 150px}
/* 气泡宽度：2026-09-11 用户"聊天气泡宽一点可以嘛" → 82% → **88%**。
   原先 82% 在长句下会把一句中文切成很窄的一列（见复核页），留白偏多；
   88% 仍保留"气泡不顶满、一眼能看出是对话"的形，但每行能多放两三个字。 */
.bubble{position:relative;max-width:88%;padding:11px 14px;font-size:15px;line-height:1.75;border-radius:12px}
.bubble-row{display:flex;margin-bottom:12px;animation:bIn .32s ease}
@keyframes bIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.bubble-row--ai{justify-content:flex-start}
.bubble-row--user{justify-content:flex-end}
.bubble-col{display:flex;flex-direction:column;flex:1;min-width:0}
.bubble-col--user{align-items:flex-end}
.bubble-line{display:flex;align-items:flex-start;gap:8px;flex:1;min-width:0;width:100%}
.bubble-line--user{align-items:flex-end;justify-content:flex-end}
/* 说话人印章：AI 朱砂「山」，用户浅青「我」——同基线，微倾如真实印面 */
.bubble__seal{flex-shrink:0;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:8px;font-family:var(--kai);font-size:15px;color:var(--seal-ink);transform:rotate(-6deg);box-shadow:inset 0 0 0 1.5px rgba(251,250,245,.24),0 3px 8px rgba(51,71,58,.20)}
.bubble__seal img{width:100%;height:100%;object-fit:cover;border-radius:8px;display:block}
.bubble__seal--ai{background:linear-gradient(145deg,var(--seal-from),var(--seal-to))}
.bubble__seal--user{background:var(--qing-t);color:var(--qing-d);border:1px solid var(--qing-m);transform:none;box-shadow:none}
/* 气泡：AI 纸笺卡（细描边+顶部高光，左上小尾指向印章）；用户松绿渐变（右下小尾） */
.bubble--ai{background:var(--card-ai-bg);border:1px solid var(--line);color:var(--ink-1);border-radius:12px;box-shadow:var(--sh-card)}
.bubble--user{background:var(--mc-t);color:var(--ink-1);border-radius:12px;box-shadow:var(--sh-bubble-user)}
.bubble__text{display:block;white-space:pre-wrap;word-break:break-word}
/* AI 气泡正文（**选项上方那句话**）：2026-09-11 用户"选项上面的字可以小一点" → 15px → 14px → **13.5px**
   （第二次"用户字体和AI聊天字体变小"）。只改 AI 这一侧，不动 .bubble 的 15px 基线。
   ⚠ 13.5px 是这一档的**地板**：再往下（13px）就与选项正文同号，层级会被压平——
     两者从此更多靠**字族**（无衬线 vs 楷体）与行首标记区分，而不再靠字号。 */
.bubble--ai .bubble__text{font-family:var(--sans);font-weight:400;font-size:13.5px;line-height:1.7;color:var(--card-ai-ink)}
/* 用户气泡正文：2026-09-11 用户"用户字体和AI聊天字体变小" → 与 AI 侧同号（13.5px）。
   两侧同号是刻意的：**区分两个人的是字族与位置**（无衬线与左右），不是字号差。 */
.bubble--user .bubble__text{font-size:13.5px;font-weight:500;letter-spacing:.02em;color:var(--ink-1)}
/* AI 追问选项条：与上面的问句之间**不做任何分隔线**。
   视觉史（三轮，都留痕）：整条 border-top（把气泡切成上下两栏，像表单分区）→ 22px 短墨线
   → **用户看复核页后指出"不要选项上面的 -"**：短墨线在观感上就是一条孤零零的破折号，
   分隔的意图没读出来，只读出了"多余的一道线"。
   结论：分隔交给**间距**与**一笺的容器底**，不交给线
   （v7 · 2026-09-11 起：选项整组坐进一个极淡底容器，见下）。 */
/* AI 追问选项区：整组放进「一笺」——用一个容器换掉 N 个框。
   2026-09-11 两轮修正（都留痕）：
   ① 一度让容器底取季节色 var(--season-t)（想跟「今日卡片」选中行同源）→ **用户否掉："选项跟随主题不好，退回"**。
      退回的理由成立：季节色是"这行被选中了"的语义（.rowitem.sel 用的就是它），
      拿它当选项容器的常态底，等于每次都在暗示"这些已经被选中"；而且秋/春的季节色与纸色太近，
      还要再叠一层才看得见，属于为了一致性绕远路。现退回中性的 --opt-panel（近墨/近纸叠加，日夜各一档）。
      ⚠ 注意区分：**--season-* 内联压死夜山**那个 bug 是真缺陷、已修（色板迁入样式表 + data-season），
      修的是今日卡片选中行与输入框聚焦环的"浅压浅"，与本容器取什么色是两件事，那次修复保留。
   ② 用户："需要更精致一些，紧凑一点优雅一点" → 本轮把行内边距与行高各收一档、
      图标 16→14px、描边 1.7→1.6，并把**左右内边距从容器下放到行**：
      行若占满容器宽度、而容器自己带圆角，hover 的方块底会在四角顶着容器弧线戳出去；
      下放之后行自己缩进 10px、自带圆角底，hover 就是一块干净的圆角淡底。 */
.bubble__options{
  display:flex;flex-direction:column;margin-top:10px;
  background:var(--opt-panel);
  border-radius:10px;padding:4px 6px;
  /* 复用设计系统里既有的"顶部高光"（--sh-topline：日间近白、夜山极弱）——
     纸面受光的微量立体感。加这一笔是为了让容器读成"一张笺"而不是"一块填充色"：
     平涂的灰底是这次"不够精致"里最明显的一处。 */
  box-shadow:var(--sh-topline);
}
/* ── 台阶（option chip）：一笺里的无框行 ──────────────────────────
   视觉史（2026-09-11 · 用户第四轮裁定"都不好"后重做）：
     v1 实心序号块 → v2 衬线路标 + 左侧刻度 → v3 取消全部前置字形、类型靠"框的形态"表达
     → v4/v5 手绘图标（被否："语义不明""太丑了"）→ v6 Lucide 图标 + 描边框+浅底（被否）
     → **v7 一笺**：不给每项画框。
   为什么：N 个描边框+浅底叠成一列，观感就是**表单控件**；"一个容器换 N 个框"之后，
   选项读起来是"一笺上写着的几句话"，而可点性仍由容器本身给出。
   排版：**行首图标必须对齐第一行**。为什么：用户 2026-09-11 指出"需要考虑字数很多的情况"。
   实测 31 字的选项折三行时，align-items:center 会把图标**垂直居中到整块文字的中线**，
   落到第二行旁边——选项"找不到头"。故用 flex-start + margin-top。
   算式：13px × line-height 1.6 = 20.8px 行盒；(20.8 − 16) ÷ 2 = 2.4px。
   长句：正文 `word-break:break-word`，中文长句才能折行而不溢出。
   类型：框没有了，类型改由 --opt-ink（正文墨）与 --opt-mark-ink（行首图标色）共同表达；
   "五类必须可证伪地两两不同"的断言相应改为比较这两个令牌（见 tests/unit/design-tokens.spec.mjs）。
   令牌分层：--opt-* 一律引用品牌层，且引用发生在使用处的元素上（夜山重定义品牌层即可自动跟随）。
   注：类型修饰不得使用后代选择器（会被既有断言判为"外层越权"）。 */
/* 底色：2026-09-11 曾按用户所选做成"纯白纸条 + 极轻投影"（`--pure` + `--sh-rest`）。
   同日晚些时候用户问"选项背景色是否需要去掉" —— **去掉更好**，理由不是"更干净"这种套话：
   ① 「一笺」容器本身已经给出"这几条是一组"的边界与面；再给每项一个白面 = **一个容器里套 N 个面**，
      正是 v6 被否掉的"表单控件感"的翻版（只是把描边换成了极轻投影）；
   ② 白条完全依赖一笺底色来衬（AI 气泡本身就是纯白）——一笺底一旦调淡，白条先消失，
      那时"层级"只剩投影在撑，比现在更脆；
   ③ 用户这几轮的取向始终是"更少、更小、更静"。
   故退回透明行。hover 仍给一块极淡的墨 —— 那是**反馈**，不是装饰，故保留。 */
.option-chip{
  display:flex;align-items:flex-start;gap:8px;
  padding:6px 10px;border:0;border-radius:8px;
  background:transparent;
  color:var(--opt-ink);cursor:pointer;
  transition:background var(--mo-2);
  --opt-ink:var(--ink-1);
  --opt-mark-ink:var(--qing-m);
  --opt-ring:var(--qing-m);
}
/* 正文：行高 1.6→1.5（配合上面收窄的内边距做"紧凑"，仍是中文正文的安全行距）；
   加 0.01em 字距——楷体在小字号下略紧，松一丝更耐看（"精致"的一半在字距上）。 */
.option-chip__text{flex:1;font-family:var(--kai);font-size:13px;line-height:1.5;letter-spacing:.01em;color:var(--opt-ink);word-break:break-word}
/* 行首图标：14px 线框、stroke 1.6。
   为什么从 16px/1.7 收到 14px/1.6：这是"精致"这一档的杠杆——14px 的右尖角在 13px 正文旁
   才是"标记"的体量，16px 已经接近"按钮"；描边同步减细，避免缩小后显得发糊发黑。
   颜色取 --opt-mark-ink，但仍以 currentColor 落地——"图标颜色"与"图标形状"解耦。
   算式：13px × 1.5 = 19.5px 行盒；(19.5 − 14) ÷ 2 = 2.75px。 */
.option-chip__icon{flex-shrink:0;width:14px;height:14px;margin-top:2.75px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;color:var(--opt-mark-ink)}
/* hover：一块极淡的墨（反馈，不是装饰）。底色已回到透明，故直接铺这一层即可。 */
.option-chip:hover{background:var(--opt-panel-hot)}
.option-chip:focus-visible{outline:2px solid var(--opt-ring);outline-offset:2px}
.option-chip--confirm{--opt-mark-ink:var(--dai-m);--opt-ring:var(--dai-m)}
.option-chip--unclear{--opt-ink:var(--ink-3);--opt-mark-ink:var(--ink-4);--opt-ring:var(--ink-2)}
.option-chip--other{--opt-ink:var(--ink-2);--opt-mark-ink:var(--ink-3);--opt-ring:var(--ink-2)}
.option-chip--close{--opt-ink:var(--ink-2);--opt-mark-ink:var(--xue-m);--opt-ring:var(--xue-m)}
.option-chip--off{--opt-ink:var(--ink-4);--opt-mark-ink:var(--ink-4);--opt-ring:var(--ink-2);pointer-events:none}
/* v7 一笺（2026-09-11）已删除原 reduced-motion 块（它只关掉 .option-chip 的 transition 与 :active 位移）：
   它当初只为关掉「位移与刻度生长」，而新 chip 已无位移/生长，只剩 background 颜色过渡——
   按该 media 块自己的口径（"颜色反馈保留——颜色不属于动效"），颜色过渡本就不该被关掉，故整块移除。
   既有动效（如 typing 三点呼吸）仍未纳入 reduced-motion，属已知缺口（见状态绑定文档）。 */
/* 三点呼吸等待 */
.typing{display:flex;align-items:center;padding:3px 2px}
.typing .dot{width:6px;height:6px;border-radius:50%;background:var(--qing-m);animation:dotB 1.2s ease-in-out infinite}
.typing .dot:nth-child(2){animation-delay:.15s}
.typing .dot:nth-child(3){animation-delay:.3s}
.typing__label{margin-left:7px;font-size:12px;letter-spacing:.05em;color:var(--ink-3)}
@keyframes dotB{0%,80%,100%{opacity:.35;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}
.chatbar{position:sticky;bottom:0;z-index:20;display:flex;gap:8px;align-items:center;background:var(--paper);border-top:1px solid var(--line);padding:10px 16px calc(12px + env(safe-area-inset-bottom,0px))}
/* 字段外观由 uni-input 容器承载（同 cc-field 惯用法：容器描边，内层 input 透明） */
.chatbar uni-input{flex:1;min-width:0;display:block;height:42px;box-sizing:border-box;border:1.5px solid var(--line);border-radius:999px;background:var(--pure);padding:0 16px;font-size:15px;transition:.25s}
.chatbar uni-input:focus-within{border-color:var(--season-a);box-shadow:0 0 0 4px var(--season-t)}
.chatbar input{width:100%;height:100%;background:transparent;border:none;outline:none;font-size:15px;font-family:var(--sans);color:var(--ink-1);padding:0}
.chatbar .vbtn{width:36px;height:36px}
/* chatbar--lg：聊天页底部输入栏（纸墨协调：纸面底 + 细线描边，聚焦静默变金） */
.chatbar--lg uni-input{height:40px;border-radius:12px;border:1px solid var(--line);background:var(--surface);box-shadow:none}
.chatbar--lg uni-input:focus-within{border-color:var(--season-a);background:var(--pure);box-shadow:none}
.chatbar--lg .vbtn{width:44px;height:44px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink-3)}
.chatbar--lg .vbtn:active{background:var(--season-t);color:var(--season-a)}
.sendbtn{height:38px;padding:0 17px;border-radius:999px;border:none;background:var(--season-a);color:var(--on-accent);font-size:13px;font-family:var(--sans);cursor:pointer;flex:none;transition:.2s;display:inline-flex;align-items:center;justify-content:center;line-height:1}
/* 阶段条 + 输入 = **同一个操作台面**（2026-09-11 · 用户："复盘阶段条和底部不是一个图层"）
   在此之前：阶段条裸露在纸面上（自带一套 margin），输入是另一个带描边的盒子，两者只靠间距分开——
   观感就是"两块各自漂着的东西"，正是用户说的"不是一个图层"。
   现把 .chat-bottom 本身当成那个面：一道极淡的上边界 + 统一内边距，阶段条与输入都坐进同一个面
   （所以内边距从这里给，两个子块自己不再各带一套）。
   为什么用**发丝线**而不是投影或换色：本产品表达"层"一贯只用一条发丝线（卡片、分区都是），
   加投影等于引入第三种视觉语言——而用户这几轮反复要的是"精致、紧凑、优雅"，不是再加一层。
   注：这一步与《聊天界面四方向》里任何一个都兼容 —— A 就是它；B/C/D 里阶段条离开底部，
   这个面自然只剩输入，边界与内边距仍然成立。 */
.chat-bottom{position:sticky;bottom:0;z-index:20;background:var(--paper);
  border-top:1px solid var(--line);
  padding:5px 16px calc(9px + env(safe-area-inset-bottom,0px))}
/* 阶段条（2026-09-11 · 两轮收紧）：
   ① **变小 + 精致**（用户："复盘阶段条变小，背景与聊天框融合到一起" → "变小精致一点10"）：
       点 22→18→16→**14px**（用户："阶段点也变小"）；点上的字 12→11→**10px**；阶段名 12→11→**10px**；提示行 12→11→**10px**；
       间距 18→16→**13px**、块内 6→5→**4px**、外边距 12/10→9/4→**7/3**。
       10px 是 P1-4 字阶白名单里已有的小字档（月历农历），用作"次要进度信息"的档位；
       阶段名本身用户是可读的，但它是过程指示、不是正文，压到 10px 才与"精致"这一档相称。
       点收到 14px 后与 10px 阶段名的比例约 1.4:1——再小就压不住里面的序号了。
   ② **融合**：输入栏原先自带 `--surface` 底 + 一条 `border-top`，在"对话区"与"输入区"之间
      切出一道横缝。现改成与阶段条、与对话区统一用纸底（`--paper`），缝消失，底部整片连着。
   ③ 收窄**只作用于聊天页这一处**（`#chatStage` 作用域内），不动 `.stage-step` 的全局档位——
      记录页等其它地方也复用 `.stage-hint`，不该跟着变小。 */
.chat-bottom #chatStage{margin:0;padding:0}
.chat-bottom #chatStage .stage-hint__steps{justify-content:flex-start;gap:13px}
/* ── 操作台（2026-09-11 · 用户选定「A 操作台」；同日多轮收紧）──
   行序（两步裁定合并后的含义）：
     stage  阶段条 + 材料温度计
     info   「第几站 · 这一站要什么」+ 收尾动作   ← 它是 stage 的**说明**，故在其下，并紧贴输入框
     input  输入
   类名按**内容**命名（不是 r1/r2），免得下次换序时语义反转。
   窄化手段：外边距与行距收到 2-4px、输入框 44→40px、提示与动作都用 10px（已在本文件的字阶档内）。 */
.opbar{display:block}
.opbar__stage{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.opbar__info{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-top:2px}
.opbar__mat{display:flex;align-items:center;gap:5px;flex:none;padding-bottom:2px}
.opbar__mat span{width:7px;height:7px;border-radius:50%;display:block;border:1.5px solid var(--line)}
.opbar__mat span.on{background:var(--qing-m);border-color:var(--qing-m)}
.opbar__mat em{font-style:normal;margin-left:2px;font-size:10px;color:var(--ink-3)}
.opbar__hint{font-size:10px;line-height:1.5;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.opbar__act{font-size:10px;color:var(--ink-3);cursor:pointer;flex:none}
.opbar .chatbar{margin-top:4px}
.chat-bottom #chatStage .stage-step{min-width:40px;gap:4px}
.chat-bottom #chatStage .stage-step__dot{width:14px;height:14px;background:transparent}
.chat-bottom #chatStage .stage-step--done .stage-step__dot{background:var(--mc-t)}
/* ⚠ 必须同时补 --on：本组规则是 `#chatStage` 作用域（含 id），特异性高于基础的
   `.stage-step--on .stage-step__dot`，会把"当前格"的实心底一起压成 transparent ——
   而当前格的序号是 `--on-accent`（近白），底一透明，那个数字就**在白纸上消失了**。
   （2026-09-11 实测踩到：只补了 --done、漏了 --on。） */
.chat-bottom #chatStage .stage-step--on .stage-step__dot{background:var(--mc-a)}
.chat-bottom #chatStage .stage-step__check,
.chat-bottom #chatStage .stage-step__idx{font-size:10px}
.chat-bottom #chatStage .stage-step__label{font-size:10px}
.chat-bottom #chatStage .stage-hint__text{justify-content:center;margin-top:5px;font-size:10px}
.chat-bottom .chatbar{position:relative;bottom:auto;background:transparent;border-top:0;padding:6px 0 0}
.sendbtn:active{transform:scale(.95)}

/* ── 自由式 · 书写纸感（语音钮已移至 .foot 行，不再用绝对定位叠在 textarea 上） ── */
.freebox textarea{background-color:var(--pure);background-image:repeating-linear-gradient(180deg,transparent 0 25px,var(--line) 25px 26px);background-position:0 13px;line-height:26px;padding:4px 10px 4px 2px}

/* ── 语音输入抽屉 ── */
.vwrap{display:flex;flex-direction:column;align-items:center;padding:6px 0 10px}
.vwave{display:flex;align-items:center;gap:5px;height:44px}
.vwave i{width:4px;height:10px;border-radius:999px;background:var(--dai-m);opacity:.4;transition:.3s}
.vwave.rec i{opacity:1;animation:vbar 1s ease-in-out infinite}
.vwave.rec i:nth-child(1){animation-delay:0s}.vwave.rec i:nth-child(2){animation-delay:.15s}
.vwave.rec i:nth-child(3){animation-delay:.3s}.vwave.rec i:nth-child(4){animation-delay:.45s}
.vwave.rec i:nth-child(5){animation-delay:.6s}.vwave.rec i:nth-child(6){animation-delay:.75s}
.vwave.rec i:nth-child(7){animation-delay:.9s}
@keyframes vbar{0%,100%{height:8px}50%{height:34px}}
.vtime{font-family:var(--kai);font-size:20px;color:var(--ink-1);font-feature-settings:"tnum";margin:2px 0 12px}
.vmic{width:72px;height:72px;border-radius:999px;border:none;background:var(--dai-t);color:var(--dai-d);display:grid;place-items:center;cursor:pointer;position:relative;transition:.25s}
.vmic svg{width:26px;height:26px}
.vmic:active{transform:scale(.92)}
.vmic.rec{background:var(--season-a);color:var(--on-accent)}
.vmic.rec::after{content:"";position:absolute;inset:-9px;border-radius:999px;border:2px solid var(--season-a);animation:vring 1.4s ease-out infinite}
@keyframes vring{from{transform:scale(.86);opacity:.7}to{transform:scale(1.22);opacity:0}}
.vstate{font-size:12px;color:var(--ink-3);margin-top:12px}
.vres{width:100%;margin-top:14px;display:none}
.vres-tx{background:var(--pure);border:1px solid var(--line);border-radius:12px;padding:12px 14px;font-size:13px;color:var(--ink-1);line-height:1.7}
.vres-btns{display:flex;gap:10px;margin-top:12px}
.vres-btns .btn{flex:1;height:42px;font-size:13px}

/* ── 附件芯片 ── */
.attachrow{display:none;flex-wrap:wrap;gap:7px;margin-bottom:9px}
.atch{display:inline-flex;align-items:center;gap:5px;background:var(--pure);border:1px solid var(--line);border-radius:999px;padding:5px 10px;font-size:12px;color:var(--ink-2);white-space:nowrap;flex:none;max-width:100%}
.atch svg{width:12px;height:12px;stroke:var(--ink-3);fill:none;stroke-width:1.7;flex:none}
.atch-img{width:48px;height:48px;border-radius:8px;flex:none;background:var(--season-t);object-fit:cover;overflow:hidden}
/* 记录附件图片 · 今日卡片/回顾时间线缩略图 */
.card-atts{display:flex;gap:6px;margin-top:7px;flex-wrap:wrap}
.card-img{width:64px;height:64px;border-radius:8px;flex:none;background:var(--season-t);object-fit:cover;overflow:hidden}
.atch .ax{display:grid;place-items:center;cursor:pointer;margin-left:2px}

/* ── 问山输入态 ── */
.askbox2{flex:1;display:flex;align-items:center;gap:9px;background:var(--pure);border:1px solid var(--line-strong);border-radius:999px;padding:0 6px 0 14px;height:44px;box-shadow:0 1px 4px rgba(38,41,43,.05);transition:border-color .2s,box-shadow .2s}
.askbox2:focus-within{border-color:var(--season-a);box-shadow:0 0 0 3px var(--season-t)}
.askbox2 .sch{width:16px;height:16px;stroke:var(--ink-3);fill:none;stroke-width:1.6;flex:none}
.askbox2 uni-input{flex:1;min-width:0;display:flex;align-items:center}
.askbox2 input{flex:1;border:none;background:transparent;font-size:15px;color:var(--ink-1);outline:none;min-width:0;font-family:var(--sans)}
.askbox2 input::placeholder{color:var(--ink-3);opacity:.9}
.askbtn{width:32px;height:32px;padding:0;border-radius:50%;border:none;background:var(--season-a);color:var(--on-accent);font-size:15px;font-family:var(--kai);cursor:pointer;flex:none;transition:.2s;display:grid;place-items:center;box-shadow:0 2px 6px rgba(176,122,38,.28);line-height:1}
.askbtn::after{display:none}
.askbtn.dis{background:var(--surface);border:1px solid var(--line);color:var(--ink-3);box-shadow:none;cursor:default}
.askbtn:active{transform:scale(.9)}.askchips{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:12px}
.askchips .chip{cursor:pointer;font-size:12px;background:var(--surface);border:1px solid var(--line);color:var(--ink-2);transition:.2s}
.askchips .chip:hover{border-color:var(--dai-m);color:var(--dai-d)}
.ask-wait{display:none;text-align:center;padding:16px 0 12px}
.ask-wait .spin{width:22px;height:22px;border:2.5px solid var(--dai-t);border-top-color:var(--dai-m);border-radius:50%;margin:0 auto 8px;animation:spin .9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.ask-wait p{font-size:12px;color:var(--ink-3)}
.ask-none{display:none;text-align:center;padding:14px 0 12px}
.ask-none .an-t{font-family:var(--kai);font-size:15px;color:var(--ink-2);margin-bottom:6px}
.ask-none p{font-size:12px;color:var(--ink-3);line-height:1.7}

/* ── 分享卡 ── */
.shcard{background:var(--pure);border:1px solid var(--line);border-radius:12px;padding:22px 18px 14px;display:flex;flex-direction:column;align-items:center;text-align:center}
.shc-seal{width:44px;height:44px;border:1.5px solid var(--zhu-m);color:var(--zhu-d);border-radius:8px;display:grid;place-items:center;font-family:var(--kai);font-size:15px;transform:rotate(-3deg);margin-bottom:12px}
.shc-t{font-size:15px;font-weight:600;color:var(--ink-1);font-family:var(--kai)}
.shc-q{font-family:var(--kai);font-size:15px;color:var(--ink-2);line-height:1.8;margin:10px 0 14px;max-width:250px}
.shc-stats{display:flex;width:100%;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:10px 0;margin-bottom:12px}
.shc-stats>div{flex:1}
.shc-stats .v{font-family:var(--kai);font-size:20px;color:var(--ink-1);font-feature-settings:"tnum"}
.shc-stats .u{font-size:12px;color:var(--ink-3);margin-top:2px}
.shc-ridge{width:100%;height:26px}
.shc-ridge svg{width:100%;height:100%}
.shc-f{font-size:12px;color:var(--ink-3);letter-spacing:2px;margin-top:10px}
/* §十候选第 2（2026-09-13 · 回顾页第二轮）：金句单句成图形态（ShareSheet quote 分支）——
   quotebig 金句字级放大（17px 与 canvas 30px/600 宽约 5% 同比例，且在字阶表内）；
   shc-src 来源行仅 quote 形态渲染（period 形态不出现） */
.shc-q.quotebig{font-size:17px;line-height:1.8}
.shc-src{font-family:var(--kai);font-size:12px;color:var(--ink-3);letter-spacing:.04em;margin:2px 0 12px}
/* 自序金句行尾「成图」入口：小幽灵钮，行内次级层次（不抢金句主墨），hover 走季节强调 */
.qimg-btn{flex:none;height:30px;padding:0 12px;font-size:12px;font-family:var(--kai);color:var(--ink-2);background:transparent;border:1px solid var(--line);border-radius:8px;letter-spacing:.06em;transition:color .2s,border-color .2s}
.qimg-btn:hover{color:var(--season-deep);border-color:var(--season-a)}

/* ── 订阅页 ── */
.planrow{display:flex;align-items:center;gap:10px;border:1.5px solid var(--line);border-radius:12px;padding:13px 14px;cursor:pointer;transition:.2s;margin-bottom:10px}
.planrow:last-child{margin-bottom:0}
.planrow.sel{border-color:var(--jin-m);background:var(--jin-t)}
.planrow .pl-t{font-size:15px;font-weight:600;color:var(--ink-1)}
.planrow .pl-d{font-size:12px;color:var(--ink-3);margin-top:2px}
.planrow .pl-p{margin-left:auto;font-family:var(--kai);font-size:17px;color:var(--ink-1);font-feature-settings:"tnum";white-space:nowrap}
.planrow .pl-b{font-size:12px;color:var(--jin-d);background:var(--paper);border-radius:999px;padding:2px 8px;flex:none}
.payrow{display:flex;align-items:center;gap:10px;padding:13px 4px;border-bottom:1px solid var(--line);cursor:pointer}
.payrow:last-of-type{border-bottom:none}
.payrow .py-t{font-size:13px;color:var(--ink-1)}
.payrow .py-d{font-size:12px;color:var(--ink-3);margin-top:1px}
.payrow .rd{margin-left:auto;width:18px;height:18px;border-radius:50%;border:1.5px solid var(--line-strong);flex:none;position:relative}
.payrow.sel .rd{border-color:var(--season-a)}
.payrow.sel .rd::after{content:"";position:absolute;inset:3.5px;border-radius:50%;background:var(--season-a)}
.cmp{width:100%;border-collapse:collapse}
.cmp th{font-size:12px;color:var(--ink-3);font-weight:400;padding:6px 4px;text-align:center;border-bottom:1px solid var(--line)}
.cmp th:first-child{text-align:left}
.cmp td{font-size:12px;color:var(--ink-2);padding:9px 4px;text-align:center;border-bottom:1px solid var(--line)}
.cmp tr:last-child td{border-bottom:none}
.cmp td:first-child{text-align:left;color:var(--ink-1)}
.cmp .yes{color:var(--qing-d);font-weight:600}
.cmp .no{color:var(--ink-3)}

/* ── 回收站 ── */
.recrow{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid var(--line)}
.recrow:last-child{border-bottom:none}
.rec-t{font-size:13px;color:var(--ink-1);line-height:1.5;flex:1;min-width:0}
.rec-m{font-size:12px;color:var(--ink-3);margin-top:3px}
.recday{color:var(--zhu-d);font-weight:600}
.recbtn{height:30px;padding:0 14px;border-radius:999px;border:1px solid var(--qing-m);background:var(--qing-t);color:var(--qing-d);font-size:12px;font-family:var(--sans);cursor:pointer;flex:none;transition:.2s}
.recbtn:active{transform:scale(.93)}
.recdel{width:30px;height:30px;border-radius:8px;border:none;background:transparent;color:var(--ink-3);display:grid;place-items:center;cursor:pointer;flex:none}
.recdel svg{width:15px;height:15px}
.recdel:active{color:var(--zhu-d)}
.recempty{display:none;text-align:center;padding:26px 0 20px}
.recempty .re-i{font-family:var(--kai);font-size:15px;color:var(--ink-2)}
.recempty p{font-size:12px;color:var(--ink-3);margin-top:6px}

/* ── 空态页 ── */
.emptyblk{display:flex;flex-direction:column;align-items:center;text-align:center;padding:26px 18px}
.emptyblk .em-seal{width:46px;height:46px;border:1.5px solid var(--season-a);color:var(--season-a);border-radius:8px;display:grid;place-items:center;font-family:var(--kai);font-size:15px;transform:rotate(-3deg);margin-bottom:14px;opacity:.85}
.emptyblk .em-t{font-family:var(--kai);font-size:15px;color:var(--ink-1);line-height:1.7}
.emptyblk .em-d{font-size:12px;color:var(--ink-3);margin-top:6px;line-height:1.7}
.emptyblk .btn{margin-top:16px;height:40px;padding:0 26px;font-size:13px}

/* ── 注销确认 / 表单抽屉 ── */
.delbox{background:var(--shade);color:var(--shade-ink);border-radius:12px;padding:14px 16px;display:flex;gap:10px;margin-bottom:14px}
.delbox svg{width:20px;height:20px;stroke:var(--zhu-m);fill:none;stroke-width:1.8;flex:none;margin-top:1px}
.delbox li{font-size:12px;line-height:1.9;list-style:none;color:var(--shade-ink-dim)}
.fbtx{width:100%;min-height:110px;resize:none;border:1.5px solid var(--line);border-radius:8px;padding:10px 12px;font-size:15px;font-family:var(--sans);color:var(--ink-1);outline:none;line-height:1.7;transition:.25s;background:var(--pure)}
.fbtx:focus{border-color:var(--season-a);box-shadow:0 0 0 4px var(--season-t)}
.fbtx::placeholder{color:var(--ink-3)}

/* ── 新手引导 ── */
.gstep{display:flex;gap:14px;padding:14px 2px;border-bottom:1px solid var(--line)}
.gstep:last-child{border-bottom:none}
.gstep .gs-n{width:38px;height:38px;border:1.5px solid var(--season-a);border-radius:8px;display:grid;place-items:center;font-family:var(--kai);font-size:15px;color:var(--season-a);flex:none;transform:rotate(-3deg)}
.gstep .gs-t{font-family:var(--kai);font-size:15px;color:var(--ink-1);font-weight:600}
.gstep .gs-d{font-size:12px;color:var(--ink-3);line-height:1.75;margin-top:4px}
.gstep .gs-go{margin-top:8px;font-size:12px;color:var(--season-a);display:inline-flex;align-items:center;gap:3px;cursor:pointer}

/* ── 旅程详情 ── */
.jrn-hero{padding:4px 2px 6px}
.jrn-hero .jr-t{font-family:var(--kai);font-size:20px;color:var(--ink-1);letter-spacing:.05em}
.jrn-hero .jr-d{font-size:12px;color:var(--ink-3);line-height:1.8;margin-top:6px}
.jrnmeta{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.jrn-days{display:flex;flex-direction:column;gap:9px}
.jrn-day{display:flex;align-items:center;gap:11px;padding:11px 13px;border:1px solid var(--line);border-radius:12px;background:var(--pure)}
.jrn-day .jd-n{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:var(--kai);font-size:13px;flex:none;border:1.5px solid var(--line-strong);color:var(--ink-3)}
.jrn-day.done .jd-n{border-color:var(--qing-m);background:var(--qing-t);color:var(--qing-d)}
.jrn-day.cur .jd-n{border-color:var(--season-a);background:var(--season-t);color:var(--season-a)}
.jrn-day .jd-t{font-size:13px;color:var(--ink-1);font-weight:500}
.jrn-day.done .jd-t{color:var(--ink-3)}
.jrn-day .jd-s{font-size:12px;color:var(--ink-3);margin-top:2px}
.jrn-day .jd-st{margin-left:auto;font-size:12px;flex:none}
.jrn-day.done .jd-st{color:var(--qing-d)}
.jrn-day.cur .jd-st{color:var(--season-a)}
.jrn-day.lock .jd-st{color:var(--ink-3)}

/* ── 金句卡 ── */
.qcard{background:var(--pure);border:1px solid var(--line);border-radius:12px;padding:20px 18px 16px;display:flex;flex-direction:column;align-items:center;text-align:center;margin-bottom:12px}
.qcard .q-tx{font-family:var(--kai);font-size:15px;color:var(--ink-1);line-height:2;max-width:270px}
.qcard .q-src{font-size:12px;color:var(--ink-3);margin-top:12px}
.qcard .q-seal{width:34px;height:34px;border:1.5px solid var(--zhu-m);color:var(--zhu-d);border-radius:8px;display:grid;place-items:center;font-family:var(--kai);font-size:12px;transform:rotate(-3deg);margin-bottom:12px}

/* ── 设备管理 ── */
.devrow{display:flex;align-items:center;gap:12px;padding:13px 2px;border-bottom:1px solid var(--line)}
.devrow:last-child{border-bottom:none}
.devrow .dv-i{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;flex:none}
.devrow .dv-i svg{width:19px;height:19px}
.devrow .dv-t{font-size:13px;color:var(--ink-1);font-weight:500}
.devrow .dv-d{font-size:12px;color:var(--ink-3);margin-top:2px}
.devrow .dv-off{margin-left:auto;height:30px;padding:0 13px;border-radius:999px;border:1px solid var(--line-strong);background:transparent;color:var(--ink-2);font-size:12px;font-family:var(--sans);cursor:pointer;flex:none;transition:.2s}
.devrow .dv-off:active{border-color:var(--zhu-m);color:var(--zhu-d)}
.devrow.this .dv-off{display:none}
.dv-badge{font-size:12px;color:var(--season-a);background:var(--season-t);border-radius:999px;padding:2px 8px;margin-left:6px}

/* ── 标签管理 ── */
.tagpool{display:flex;flex-wrap:wrap;gap:8px}
/* P0-6 「并」动作钮与芯片文本分离，不再拼读为「#家人并」 */
.tagmerge{display:inline-flex;align-items:center;gap:5px}
.tagmerge .tm-go{font-size:12px;color:var(--ink-3);cursor:pointer;padding:3px 4px;border-radius:8px}
.tagmerge .tm-go:active{color:var(--xiang-d);background:var(--xiang-t)}
.tagmerge .tm-go.dis{opacity:.5;pointer-events:none}
.tagmerge .tm-to{font-size:12px;color:var(--ink-2)}
/* 标签芯片上的真实出现次数（无 DOM，纯文本） */
.chip.tgl .tgl-n{font-style:normal;font-size:12px;opacity:.55;margin-left:4px;font-feature-settings:"tnum"}
.tagnew{display:flex;gap:8px;margin:12px 0 14px}
.tagnew .cc-field{flex:1;min-width:0;height:40px;border-radius:999px}
.tagnew .btn{height:40px;flex:none;padding:0 18px;font-size:13px}

/* ── 印章详情 ── */
.sealbig-wrap{display:flex;flex-direction:column;align-items:center;padding:6px 0 2px}
.sealbig{width:74px;height:74px;border:2px solid var(--zhu-m);border-radius:12px;display:grid;place-items:center;font-family:var(--kai);font-size:20px;color:var(--zhu-m);transform:rotate(-3deg);background:rgba(178,58,46,.04);margin-bottom:14px}
.sealbig.locked{border-color:var(--line-strong);color:var(--ink-3);background:var(--surface)}
.sealbig-t{font-family:var(--kai);font-size:17px;color:var(--ink-1)}
.sealbig-d{font-size:12px;color:var(--ink-2);line-height:1.85;margin-top:8px;text-align:center;max-width:280px}
.sealbig-m{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap;justify-content:center}

/* ── 备份 ── */
.bkstat{display:flex;gap:10px;margin-bottom:14px}
.bkstat>div{flex:1;text-align:center;border:1px solid var(--line);border-radius:12px;padding:12px 8px;background:var(--pure)}
.bkstat .v{font-family:var(--kai);font-size:20px;color:var(--ink-1);font-feature-settings:"tnum"}
.bkstat .u{font-size:12px;color:var(--ink-3);margin-top:3px}

/* ── 问山历史 ── */
.askhist{display:none;margin-top:10px}
.askhist .ah-t{display:flex;align-items:center;font-size:12px;color:var(--ink-3);margin-bottom:8px}
.askhist .ah-t span:last-child{margin-left:auto;cursor:pointer}
.askhist .ah-chips{display:flex;flex-wrap:wrap;gap:7px}
.askhist .ah-chips .chip{cursor:pointer;font-size:12px}

/* ── 热力图详情 ── */
.hmday{display:flex;flex-direction:column;align-items:center;padding:8px 0 6px}
.hmday .hd-t{font-family:var(--kai);font-size:17px;color:var(--ink-1)}
.hmday .hd-n{font-family:var(--kai);font-size:30px;color:var(--season-a);font-feature-settings:"tnum";margin:8px 0 2px}
.hmday .hd-u{font-size:12px;color:var(--ink-3)}
.heatmap .cell{cursor:pointer}

/* ── 自由式结果 ── */
.fq{display:flex;gap:9px;padding:11px 0;border-bottom:1px solid var(--line)}
.fq:last-child{border-bottom:none}
.fq .fq-n{width:22px;height:22px;border-radius:50%;background:var(--xue-t);color:var(--xue-d);display:grid;place-items:center;font-size:12px;font-family:var(--kai);flex:none}
.fq .fq-t{font-family:var(--kai);font-size:13px;color:var(--ink-1);line-height:1.7}
.orgtx{display:none;background:var(--pure);border:1px dashed var(--line-strong);border-radius:12px;padding:12px 14px;font-size:13px;color:var(--ink-2);line-height:1.8;margin-top:10px}
.orgtg{font-size:12px;color:var(--dai-d);cursor:pointer;display:inline-flex;align-items:center;gap:4px}
/* 自由式摘要 · AI 实时生成 */
.free-sum{font-family:var(--kai);font-size:15px;color:var(--ink-1);line-height:2;text-indent:2em;margin:0 0 8px}
.free-caret{display:inline-block;width:2px;height:1em;background:var(--season-a);vertical-align:-2px;margin-left:2px;animation:fcaret .8s steps(2) infinite}
@keyframes fcaret{0%,49%{opacity:1}50%,100%{opacity:0}}
.free-pending{color:var(--ink-3);font-size:13px}
.free-dots{display:inline-block;margin-left:2px;animation:ldots 1s ease-in-out infinite}
@keyframes ldots{0%,100%{opacity:.4}50%{opacity:1}}
.free-err{color:var(--zhu-d);font-size:13px;cursor:pointer;text-decoration:underline;text-underline-offset:3px;text-indent:0}

/* ── 舞台附加按钮 ── */
.cbtn2{font-size:12px;padding:6px 15px;border-radius:999px;border:1px solid var(--shade-line);background:var(--shade-btn);color:var(--shade-ink-dim);cursor:pointer;transition:.25s;margin-left:8px}
.cbtn2:hover{color:var(--shade-ink)}

/* ── 结构式 · 格子（格志式：一问一格） ── */
.sfcap{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--dai-t);border-radius:12px;margin-bottom:10px;cursor:pointer}
.sfcap-m{font-size:13px;font-weight:600;color:var(--ink-1);font-family:var(--kai)}
.sfcap-d{font-size:12px;color:var(--ink-3);margin-top:2px}
.sfcap-sw{margin-left:auto;font-size:12px;color:var(--dai-d);white-space:nowrap;display:flex;align-items:center;gap:3px}
/* 批 1（2026-09-14）止损：无专属结构式模板的方法走此说明卡（不再用基础法格子兜底）。
   原来兜底会让用户在「WW 复盘」名下填基础法四格、落库 method 却是 WW → 前后端语义错位。 */
.sfallback{padding:14px 4px 4px;text-align:center}
.sfallback .sfn-t{font-family:var(--kai);font-size:13px;color:var(--ink-1);margin-bottom:6px}
.sfallback .sfn-d{font-size:12px;color:var(--ink-3);line-height:1.75;text-align:left;padding:0 2px}
.sfallback .sfn-btn{margin-top:12px}
.sfprog{display:flex;align-items:center;gap:10px;margin:2px 2px 12px}
.sfprog-bar{flex:1;height:5px;background:var(--line);border-radius:999px;overflow:hidden}
.sfprog-bar i{display:block;height:100%;width:0;background:var(--season-a);border-radius:999px;transition:.35s ease}
.sfprog-txt{font-size:12px;color:var(--ink-3);font-feature-settings:"tnum";white-space:nowrap}
.sgrid{display:flex;flex-direction:column;gap:10px}
.scell{border:1px solid var(--line);border-radius:12px;background:var(--pure);padding:12px 14px 13px;transition:border-color .25s,background .35s,box-shadow .25s}
.scell:focus-within{border-color:var(--season-a);box-shadow:0 0 0 3px var(--season-t)}
.scell.done{border-color:var(--qing-m);background:linear-gradient(180deg,var(--qing-t),var(--pure) 52%)}
.scell-h{display:flex;align-items:center;gap:8px}
.scell-n{width:22px;height:22px;border:1.5px solid var(--dai-m);border-radius:8px;display:grid;place-items:center;font-family:var(--kai);font-size:12px;color:var(--dai-d);transform:rotate(-3deg);flex:none}
.scell.done .scell-n{border-color:var(--qing-m);color:var(--qing-d)}
.scell-t{font-size:13px;font-weight:600;color:var(--ink-1);font-family:var(--kai)}
.scell-c{margin-left:auto;font-size:12px;color:var(--ink-3);font-feature-settings:"tnum"}
.scell-q{font-family:var(--kai);font-size:13px;color:var(--ink-2);line-height:1.7;margin:9px 0 2px;display:flex;gap:7px}
.scell-q .qmark{flex:none;width:17px;height:17px;border-radius:50%;background:var(--dai-t);color:var(--dai-d);font-size:12px;display:grid;place-items:center;font-family:var(--sans);margin-top:3px}
/* Bug 修复（2026-09-14）：结构式格子 placeholder 与光标错行。
   根因：格子 textarea 由 JTextarea 渲染（重构后类名 scell-in 已不在模板里，上面旧规则成了死代码），
   .scell 内 textarea 无任何样式 → uni-textarea 的占位 div（.uni-textarea-placeholder）与真实输入区
   各用默认字号/行高/内边距，两条基线对不上。修法照抄 .compose（L704-721）已验证的对齐模式：
   占位 div / 行容器与 textarea 同字号、同行高、同 padding。作用域收在 .scell——仅 StructPage 命中，
   .compose（自由式/记录）/ .zxcard（编辑抽屉）各自既有规则不动。 */
.scell uni-textarea{display:block;width:100%;min-width:0}
.scell textarea{width:100%;min-height:62px;resize:none;border:none;background:transparent;padding:7px 0 0;font-size:15px;font-family:var(--sans);color:var(--ink-1);outline:none;line-height:1.7;box-sizing:border-box}
.scell uni-textarea .uni-textarea-placeholder,
.scell uni-textarea .uni-textarea-line{font-size:15px;line-height:1.7;padding:7px 0 0}
.scell uni-textarea .uni-textarea-placeholder{color:var(--ink-3);opacity:.75}
.vbtn{width:40px;height:40px;border-radius:50%;border:1.5px solid var(--line-strong);background:var(--surface);display:grid;place-items:center;cursor:pointer;transition:.25s;flex:none}
.vbtn svg{width:18px;height:18px;stroke:var(--ink-2);fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.vbtn:active{border-color:var(--season-a)}
.vbtn:active svg{stroke:var(--season-a)}
.cnt-txt{font-size:12px;color:var(--ink-3);font-feature-settings:"tnum";margin-left:auto}

/* ── 今日列表行 ── */
.rowitem{display:flex;gap:10px;padding:12px 4px;border-bottom:1px solid var(--line);align-items:flex-start;cursor:pointer;position:relative}
.rowitem:last-child{border-bottom:none}
.rowitem .tm{font-family:var(--kai);font-size:13px;color:var(--ink-3);width:40px;flex:none;font-feature-settings:"tnum";padding-top:2px}
.rowitem .bd2{flex:1;min-width:0}
.rowitem .tx{font-size:15px;color:var(--ink-1);line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* 复盘状态与标签同一行：状态 chip 回归 .meta 流内（不再 margin-left:auto 漂移到最右，
   避免 wrap 后单独成行偏移遮挡时间）；与标签/心情同行，三端：流内 flex，无 absolute 依赖 */
.rowitem .stchip.rowstamp{position:static;flex:none;flex-shrink:0;white-space:nowrap}
/* 十三轮（2026-09-22 用户拍板重构）：meta 撤胶囊堆 → 印章锚点 + 排印脚注行。
   左区=事实（状态胶囊唯一保留 / 表情裸排 / 计数灰字），右区=归属（margin-left:auto 的 #册名）。
   省出胶囊 padding ≈60px，320px 机型不再触发挤压/截断；册名截断时保底 3 字可读（min-width:56px） */
/* 十五轮补（2026-09-22 用户报 15 Pro 显示不完整）：实测 393px 可用 209px、内容 254px、溢出 45px——
   #测试 被 overflow:hidden 硬裁。收缩组合拳：gap 10→6 / 册签 block 化（text-overflow 在 inline-flex
   上不生效，硬裁无省略号）/ 胶囊内距 9→7；393px 零溢出（复测见 doc §9.27）。 */
.rowitem .meta{display:flex;gap:6px;margin-top:8px;flex-wrap:nowrap;align-items:center;overflow:hidden}
.rowitem .meta .stchip{flex:none;white-space:nowrap;padding:2.5px 7px}
/* 记录行（type=record）同容器复用 .meta：chip/moodmeta 同样锁死不收缩（收缩教训：漏锁项会静默吸收全部收缩） */
.rowitem .meta .chip,.rowitem .meta .moodmeta{flex:none;white-space:nowrap}
.rowitem .m-mood{flex:none;font-size:12px;color:var(--ink-3);white-space:nowrap}
/* 时间线 · 知/行计数：等宽数字对齐，避免 N 值变化时错位 */
.rowitem .m-cnt{flex:none;font-size:12px;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
/* 复盘行 · 归属册名：右置 #册签，唯一可收缩项——display:block 让 ellipsis 真正生效
   （inline-flex 上 text-overflow 是哑的，长册名会被硬裁成半字）；# 前缀弱化为纹理 */
.rowitem .m-tag{flex:0 1 auto;min-width:0;max-width:40%;margin-left:auto;display:block;font-size:12px;color:var(--xiang-d);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rowitem .m-tag::before{content:"#";flex:none;margin-right:2px;opacity:.55;font-weight:600}
/* 十五轮补（实测数字定断点）：一行完整放下需 bd2 ≥207px，只有 ≥392px 视口给得出（15 Pro 393 ✓ / 375 差 10px）——
   ≤391px 诚实地两行排（wrap 后每组信息完整，册签 auto-margin 独占第二行靠右）；
   注意本块必须写在主规则之后——360 块（194 行）里写会被同特异性主规则级联覆盖（实测踩过） */
@media (max-width:391px){
  .rowitem .meta{flex-wrap:wrap}
}
.moodmeta{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-3);line-height:1;letter-spacing:.02em}
.moodmeta .mm-emo{font-size:15px;line-height:1}

/* ── 山径图 ── */
.pathcard{display:flex;flex-direction:column;gap:10px}
.pathcard .path-svg{display:block;width:100%;animation:pathFadeIn .4s ease both}
.pathcard .mtn-far{fill:var(--ink-4);opacity:.04}
.pathcard .mtn-near{fill:var(--season-a);opacity:.03}
.pathcard .trail{fill:none;stroke:var(--season-a);stroke-width:1.2;stroke-dasharray:2 5;stroke-linecap:round;opacity:.4}
.pathcard .pdot{fill:var(--surface);stroke:var(--ink-4);stroke-width:1;transition:all .3s}
.pathcard .pdot.s1{fill:var(--season-a);stroke:var(--season-a)}
.pathcard .pdot.s2{fill:var(--surface);stroke:var(--season-a);stroke-width:2}
.pathcard .path-info{text-align:center}
.pathcard .path-title{font-family:var(--kai);font-size:13.5px;color:var(--ink-1);margin-bottom:7px;letter-spacing:.03em}
/* 年鉴山径卡新增两行（§十候选第 1 · 2026-09-13 · 回顾页第二轮）：path-desc 三境进度短语 + path-year 年度表述 */
.pathcard .path-desc{font-size:12px;color:var(--ink-3);margin-bottom:9px;letter-spacing:.02em}
.pathcard .path-realms{display:flex;flex-direction:column;gap:4px}
.pathcard .realm{display:flex;align-items:center;gap:8px;padding:3px 0;animation:pathFadeIn .4s ease both}
.pathcard .realm:nth-child(1){animation-delay:.06s}
.pathcard .realm:nth-child(2){animation-delay:.12s}
.pathcard .realm:nth-child(3){animation-delay:.18s}
.pathcard .realm .rdot{width:7px;height:7px;border-radius:50%;flex:none;border:1px solid var(--ink-4);transition:all .3s}
.pathcard .realm.s1 .rdot{background:var(--season-a);border-color:var(--season-a)}
.pathcard .realm.s2 .rdot{background:transparent;border-color:var(--season-a);border-width:1.5px}
.pathcard .realm .rname{font-family:var(--kai);font-size:13px;color:var(--ink-1);flex:none}
.pathcard .realm .ract{font-size:11px;color:var(--ink-3);flex:1}
.pathcard .realm .rstat{font-size:11px;color:var(--ink-4);flex:none}
.pathcard .realm.s1 .rstat,.pathcard .realm.s2 .rstat{color:var(--season-a)}
.pathcard .path-year{font-family:var(--kai);font-size:12px;color:var(--ink-2);margin-top:9px;letter-spacing:.02em;line-height:1.6}

/* ── 山径 · 三境界 品牌位（2026-09-17）──────────────────────────────
   此前这张卡只是「进度条」（三圆点 + 状态），而三境界是见山的方法论招牌：
   第一次打开的人该记住的是那三句话，不是"我走到第几境"。故把品牌层做成常驻视觉主体
   （印章头 + 原典背书 + 三境释义 + 标语），进度仍挂在尾部（同源 journeyS，不另起一套）。 */
.brandpath .bp-head{display:flex;align-items:center;gap:11px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.brandpath .bp-seal{width:34px;height:34px;flex:none;border-radius:6px;background:var(--season-a);color:var(--surface);display:grid;place-items:center;font-family:var(--kai);font-size:17px;letter-spacing:0;box-shadow:var(--sh-rest)}
.brandpath .bp-titles{min-width:0}
.brandpath .bp-title{font-family:var(--kai);font-size:14px;color:var(--ink-1);letter-spacing:.16em;line-height:1.3}
.brandpath .bp-sub{font-size:11px;color:var(--ink-3);letter-spacing:.04em;margin-top:3px}
.brandpath .path-realms{gap:6px;margin-top:6px}
.brandpath .realm{align-items:flex-start;padding:4px 0}
.brandpath .realm .rno{flex:none;font-family:var(--kai);font-size:11px;color:var(--season-a);opacity:.75;letter-spacing:.05em;padding-top:2px}
.brandpath .realm .rdot{margin-top:6px}
.brandpath .realm .rtext{display:flex;flex-direction:column;flex:1;min-width:0}
.brandpath .realm .rname{font-family:var(--kai);font-size:13.5px;color:var(--ink-1);letter-spacing:.04em}
/* 原句（2026-09-18）：三境各挂自己那一句原典——三句连读才是完整的青原惟信语录，
   此前只引「见山是山，见水是水」半句，等于把"是→不是→还是"的转折砍掉了。 */
.brandpath .realm .ryuan{font-family:var(--kai);font-size:12px;color:var(--ink-2);line-height:1.6;letter-spacing:.02em;margin-top:1px}
.brandpath .realm .rdesc{font-size:11px;color:var(--ink-3);line-height:1.5;margin-top:1px}
.brandpath .realm .rstat{margin-top:3px}
.brandpath .bp-src{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line);font-family:var(--kai);font-size:11px;color:var(--ink-4);letter-spacing:.05em;text-align:right}

/* ── 往日 · 足迹（2026-09-17）──────────────────────────────────────
   折叠手感与回顾页时间线保持一致（▸ + 日期 + 条数 + 折叠态首条摘要），不另发明一套交互；
   行形状复用今日卡片的 .rowitem，让"往日"与"今日"读起来是同一种东西。 */
.pastwrap{padding-top:4px}
.pastday+.pastday{margin-top:2px;border-top:1px solid var(--line)}
.pd-head{display:flex;align-items:center;gap:7px;padding:8px 2px;cursor:pointer}
.pd-caret{font-size:10px;color:var(--ink-4);transition:transform .2s;display:inline-block}
.pastday.open .pd-caret{transform:rotate(90deg)}
.pd-date{font-family:var(--kai);font-size:13px;color:var(--ink-1);letter-spacing:.03em;flex:none}
.pd-cnt{font-size:11px;color:var(--ink-4);flex:none}
.pd-peek{flex:1;min-width:0;font-size:11px;color:var(--ink-3);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:right}
.pd-more{padding:9px 0 4px;text-align:center;font-size:12px;color:var(--season-a);cursor:pointer;letter-spacing:.03em}
.pd-more:active{opacity:.5}
.pastwrap .rowitem{padding-left:2px}
.pastgo{color:var(--season-a);border-color:var(--season-a)}
@keyframes pathFadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}

/* ── 三模式 ── */
.mode-row{display:flex;gap:8px;margin-bottom:13px}
.mode-panel{display:none;animation:wbIn .3s ease}
.mode-panel.show{display:block}
@keyframes wbIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1}}
.mode-panel .mp-t{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--dai-d);display:flex;gap:8px;align-items:center}
.mode-panel p{font-size:12px;color:var(--ink-2);margin-top:5px;line-height:1.7}

/* 四栏结构化 */
.fourcol{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.fcell{border:1px dashed var(--line-strong);border-radius:8px;padding:9px 10px;background:var(--pure)}
.fcell .fk{font-size:12px;letter-spacing:.15em;color:var(--ink-3);margin-bottom:4px;font-family:var(--serif)}
.fcell .fv{font-size:12px;color:var(--ink-2);line-height:1.55;min-height:32px}

/* 自由写 */
.freewrite-hint{margin-top:10px;border:1px dashed var(--dai-m);border-radius:8px;padding:10px 12px;background:var(--dai-t)}
.freewrite-hint .fh-t{font-size:12px;font-weight:600;color:var(--dai-d);letter-spacing:.1em}
.freewrite-hint p{font-size:12px;color:var(--dai-d);margin-top:4px;line-height:1.65}

/* ── 引导式旅程 ── */
.journey{display:flex;gap:11px;padding:11px 2px;border-bottom:1px solid var(--line);align-items:flex-start;cursor:pointer}
.journey:last-child{border:none}
.journey .jn{width:26px;height:26px;border-radius:50%;background:var(--season-t);color:var(--season-a);display:grid;place-items:center;font-family:var(--kai);font-size:12px;flex:none;margin-top:2px}
.journey.done .jn{background:var(--qing-m);color:var(--on-accent)}
.journey .jb{flex:1;min-width:0}
.journey .jt{font-size:15px;font-weight:600;color:var(--ink-1);display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.journey .jd{font-size:12px;color:var(--ink-2);margin-top:3px;line-height:1.6}
.journey .jp{display:flex;gap:3px;margin-top:7px}
.journey .jp i{width:14px;height:4px;border-radius:999px;background:var(--line)}
.journey .jp i.f{background:var(--qing-m)}
.journey .jp i.cur{background:var(--season-a)}

/* ── 见山 AI 标识 ── */
.ai-chip .mini-seal{width:18px;height:18px;border:1px solid var(--zhu-m);border-radius:8px;display:grid;place-items:center;font-family:var(--kai);font-size:12px;color:var(--zhu-m);transform:rotate(-3deg)}
.stagebar{display:flex;gap:5px;margin:2px 0 14px}
.stagebar i{flex:1;height:3px;border-radius:999px;background:var(--line)}
.stagebar i.done{background:var(--qing-m)}
.stagebar i.cur{background:var(--season-a)}

/* ── 印章 ── */
.seal-fall{position:relative;display:inline-flex;flex-direction:row-reverse;align-items:center;justify-content:center;gap:1px;width:64px;height:64px;border:1.5px solid var(--zhu-m);border-radius:8px;color:var(--zhu-m);font-family:var(--kai);font-size:15px;letter-spacing:.12em;transform:rotate(-3deg);background:rgba(178,58,46,.04);box-sizing:border-box;padding:3px;cursor:pointer}
.seal-fall .col{writing-mode:vertical-rl;text-orientation:upright;line-height:1;letter-spacing:.12em}
/* P2-15 收尾盖章仪式：1.6x 缩落 + 轻回弹 + 印泥晕开（radial-gradient 400ms） */
.seal-fall.falling{animation:stampIn .5s cubic-bezier(.2,1.6,.4,1)}
.seal-fall.falling::after{content:"";position:absolute;inset:-12px;border-radius:12px;background:radial-gradient(closest-side,rgba(178,58,46,.16),transparent 74%);animation:sealBlot .4s ease-out both;pointer-events:none}
@keyframes stampIn{0%{transform:rotate(-14deg) scale(1.6);opacity:0}55%{transform:rotate(-2deg) scale(.94);opacity:1}100%{transform:rotate(-3deg) scale(1)}}
@keyframes sealBlot{0%{transform:scale(.55);opacity:0}45%{opacity:1}100%{transform:scale(1.3);opacity:0}}

/* ── 知行页 ── */
.seg{display:flex;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:3px;gap:3px;margin-bottom:14px}
.seg .zt{flex:1;text-align:center;font-size:13px;font-weight:500;padding:7px 0;border-radius:999px;color:var(--ink-2);cursor:pointer;transition:.25s}
.seg .zt.on{background:var(--season-a);color:var(--on-accent)}
.pane{display:none}
.pane.show{display:block;animation:wbIn .3s ease}
.zx-stats{display:flex;justify-content:space-around;padding:4px 0 2px}
.zx-stats .k{text-align:center}
.zx-stats .v{font-family:var(--kai);font-size:30px;line-height:1;font-feature-settings:"tnum"}
.zx-stats .v.xue{color:var(--xue-d)}.zx-stats .v.jin{color:var(--jin-d)}.zx-stats .v.qing{color:var(--qing-d)}
.zx-stats .u{font-size:12px;color:var(--ink-2);margin-top:5px}
.revisit-tag{display:flex;align-items:center;gap:6px;font-size:12px;letter-spacing:.18em;color:var(--xue-d);font-family:var(--serif);margin-bottom:8px}
.revisit-tag svg{width:14px;height:14px;stroke:var(--xue-d);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.revisit-txt{font-family:var(--kai);font-size:17px;color:var(--ink-1);line-height:1.7}
.revisit-meta{font-size:12px;color:var(--ink-3);margin-top:6px}
.revisit-btns{display:flex;gap:12px;margin-top:14px;justify-content:center}
.revisit-btns .rb{flex:0 1 auto;min-width:120px;height:40px;box-sizing:border-box;border-radius:999px;border:1.5px solid var(--line-strong);background:transparent;font-size:13px;color:var(--ink-2);cursor:pointer;transition:.2s;font-family:var(--sans);line-height:38px;text-align:center;padding:0 18px}
.revisit-btns .rb:active{border-color:var(--xue-m);color:var(--xue-d)}
/* 每日重温 · 已标状态回显（2026-09-15）：点过「还记得/有点模糊」下次进来仍是实心态，不再"点过像没点" */
.revisit-btns .rb.on{border-color:var(--xue-m);background:var(--xue-t);color:var(--xue-d);font-weight:600}
.revisit-meta .recall-badge{color:var(--xue-d)}
.revisit-meta .recall-badge.blur{color:var(--dai-d)}
/* 十二轮（2026-09-22）知条目墨签：左缘一竖淡墨条，标出"这是一条认识"（与行条目的落章圈对仗） */
.insight{position:relative;padding:13px 2px 13px 14px;border-bottom:1px solid var(--line)}
.insight::before{content:"";position:absolute;left:2px;top:17px;bottom:17px;width:3px;border-radius:999px;background:var(--xue-m);opacity:.32}
.insight:last-child{border:none}
.insight .it{font-size:15px;color:var(--ink-1);line-height:1.65}
.insight .im{display:flex;gap:6px;align-items:center;margin-top:8px;flex-wrap:wrap;font-size:12px;color:var(--ink-3)}
.insight .src{display:inline-flex;align-items:center;gap:3px;cursor:pointer}
.insight .src:hover{color:var(--dai-m)}
.insight .it-row{display:flex;align-items:flex-start;gap:8px}
.insight .ibtns{margin-left:auto;display:flex;align-items:center;gap:4px;flex:none}
.ibtn{width:26px;height:26px;border-radius:8px;border:none;background:transparent;display:grid;place-items:center;cursor:pointer;padding:0;flex:none}
.ibtn svg{width:15px;height:15px;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;transition:.2s}
.ibtn.on svg{stroke:var(--jin-m);fill:var(--jin-t)}
@media (hover:hover){.ibtn-del:hover svg{stroke:var(--zhu-d)}}
.ibtn-del:active{background:var(--zhu-t)}
.actitem{display:flex;align-items:center;gap:12px;padding:13px 2px;border-bottom:1px solid var(--line)}
.actitem:last-child{border:none}
.actitem .ftx{flex:1;font-size:15px;color:var(--ink-1);line-height:1.55;transition:.2s}
.actitem.done .ftx{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--line-strong)}
.actitem .am{display:flex;gap:6px;align-items:center;margin-top:4px;font-size:12px;color:var(--ink-3);flex-wrap:wrap}
.actitem.done .am{opacity:.6}
.actitem.done .act-edit,.actitem.done .act-del{opacity:.45}
.act-del{width:26px;height:26px;flex:none;cursor:pointer;color:var(--ink-3);display:flex;align-items:center;justify-content:center;border-radius:8px;transition:.15s}
.act-del:hover{color:var(--zhu-m);background:var(--zhu-t)}
.act-del svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round}
.act-edit{width:26px;height:26px;flex:none;cursor:pointer;color:var(--ink-3);display:flex;align-items:center;justify-content:center;border-radius:8px;transition:.15s}
.act-edit:hover{color:var(--dai-m);background:var(--dai-t)}
.act-edit svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round}
.actitem.editing{padding:10px 0}
.edit-panel{flex:1;min-width:0}
.edit-ta{width:100%}
.edit-due{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.duechip2{font-size:12px;color:var(--ink-2);border:1px solid var(--line);border-radius:8px;padding:3px 10px;cursor:pointer;transition:.15s}
.duechip2.on{background:var(--dai-t);color:var(--dai-d);border-color:var(--dai-m)}
.edit-btns{display:flex;gap:8px;margin-top:8px}
.eb{font-size:12px;padding:5px 14px;border-radius:8px;color:var(--ink-2);cursor:pointer;background:var(--surface);border:1px solid var(--line);transition:.15s}
.eb.save{background:var(--season-t);color:var(--season-a);border-color:var(--season-a);font-weight:600}
.actitem.late .am .due{color:var(--zhu-m);font-weight:600}
.pairrow{padding:13px 2px;border-bottom:1px solid var(--line)}
.pairrow:last-child{border:none}
.pairrow .pz{display:flex;gap:9px;align-items:flex-start}
.pairrow .pzk{font-family:var(--serif);font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--xue-d);background:var(--xue-t);border-radius:8px;padding:2px 8px;flex:none;margin-top:1px}
.pairrow .pzt{font-size:13px;color:var(--ink-1);line-height:1.6}
.pairrow .plink{display:flex;align-items:center;gap:7px;padding:3px 0 3px 2px}
.pairrow .plink svg{width:14px;height:14px;stroke:var(--line-strong);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;margin-left:12px}
.pairrow .phx{font-family:var(--serif);font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--jin-d);background:var(--jin-t);border-radius:8px;padding:2px 8px;flex:none}
.pairrow .pht{font-size:13px;color:var(--ink-2);line-height:1.6}
.pairrow .pd{display:inline-flex;align-items:center;gap:4px;font-size:12px;margin-left:6px}

/* ── 知行页 · 新增知/行 + 关联复盘 ── */
.addrow{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:12px;padding:9px 0;border:1px dashed var(--line-strong);border-radius:8px;color:var(--ink-3);font-size:13px;cursor:pointer;transition:.18s}
.addrow:active{border-color:var(--season-a);color:var(--ink-2);background:var(--season-t)}
.addrow-jin:active{border-color:var(--jin-m);background:var(--jin-t)}
.addform{margin-top:12px;padding:12px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
.add-ta{width:100%}
.add-link,.add-due{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}
.add-link .lbx{font-size:12px;color:var(--ink-3);flex:none}
.rvsel{font-size:12px;color:var(--ink-2);border:1px solid var(--line);border-radius:8px;padding:4px 10px;cursor:pointer;transition:.15s}
.rvsel.on{color:var(--dai-d);border-color:var(--dai-m);background:var(--dai-t)}
.rvlist{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.rvi{font-size:12px;color:var(--ink-2);border:1px solid var(--line);border-radius:8px;padding:4px 10px;cursor:pointer;transition:.15s;max-width:100%}
.rvi.on{color:var(--season-a);border-color:var(--season-a);background:var(--season-t)}
.add-btns{display:flex;gap:8px;margin-top:12px}
.ab{font-size:12px;padding:6px 16px;border-radius:8px;color:var(--ink-2);cursor:pointer;background:var(--surface);border:1px solid var(--line);transition:.15s}
.ab.save{background:var(--season-t);color:var(--season-a);border-color:var(--season-a);font-weight:600}

/* ── 知行合一 · 同源分组卡（中茎双叶：知左行右同干而生） ── */
.unity-empty{letter-spacing:.08em}
.unity-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.rvbadge{font-family:var(--serif);font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--dai-d);background:var(--dai-t);border-radius:8px;padding:2px 8px;flex:none}
.unity-src{font-size:12px;color:var(--ink-3);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 知行合一 · 上下堆叠卡片（长文本自然下扩，不左右挤压）：知在上、行在下，
   中间用语义色分隔线 + 标签标识知↔行同源关系；默认纵向，无需额外 .stack 类 */
.unity-tree{display:flex;flex-direction:column;align-items:stretch}
.tree-col{flex:none;width:100%;min-width:0;padding:0}
.tree-col.sx{padding-bottom:12px}
.tree-col.sy{padding-top:12px}
.tree-cap{display:flex;align-items:center;gap:6px;margin-bottom:10px}
.tree-cap .zc{font-family:var(--serif);font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--xue-d);background:var(--xue-t);border-radius:8px;padding:2px 8px}
.tree-cap .xc{font-family:var(--serif);font-size:12px;font-weight:600;letter-spacing:.1em;color:var(--jin-d);background:var(--jin-t);border-radius:8px;padding:2px 8px}
.tree-cap .cap-t{font-family:var(--kai);font-size:13px;color:var(--ink-2)}
/* 知↔行语义分隔线：知段紫、行段金，中间一条中轴线标识同根关联 */
.tree-stem{width:100%;height:1px;background:linear-gradient(90deg,var(--xue-m),var(--xue-m));margin:0;position:relative}
.tree-stem::after{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:7px;height:7px;border-radius:50%;background:var(--zhu-m);box-shadow:0 0 0 2.5px var(--paper)}
.tree-item{font-size:13px;color:var(--ink-1);line-height:1.65;padding:7px 0;border-bottom:1px solid var(--line)}
.tree-col .tree-item:last-child{border-bottom:none}
.tree-item.tx{display:flex;align-items:flex-start;gap:8px;cursor:pointer}
.tree-item.tx .tk{width:18px;height:18px;flex:none;margin-top:2px;border-radius:8px;border:1.5px solid var(--line-strong);display:grid;place-items:center;transition:.2s}
.tree-item.tx .tk svg{width:11px;height:11px;stroke:var(--on-accent);fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.4);transition:.2s}
.tree-item.tx .tk.done{background:var(--jin-m);border-color:var(--jin-m)}
.tree-item.tx .tk.done svg{opacity:1;transform:scale(1)}
.tree-item.tx.done{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--line-strong)}
.unity-foot{display:flex;align-items:baseline;gap:4px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:12px;color:var(--ink-3)}
.unity-foot .kz{font-family:var(--kai);font-size:20px;color:var(--xue-d)}
.unity-foot .kx{font-family:var(--kai);font-size:20px;color:var(--jin-d)}
.unity-foot .kd{font-family:var(--kai);font-size:20px;color:var(--zhu-m)}

/* ── 回顾页 ── */
.toolbar{position:sticky;top:0;z-index:20;background:var(--paper);padding:8px 0 10px;display:flex;gap:9px;align-items:center;transition:background .5s}
.askbox{flex:1;display:flex;align-items:center;gap:8px;background:var(--surface);border:1.5px solid var(--dai-m);border-radius:8px;padding:9px 12px;cursor:pointer}
.askbox svg{width:15px;height:15px;stroke:var(--dai-m);fill:none;stroke-width:1.5;flex:none}
.askbox span{font-size:13px;color:var(--dai-d);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.zhu-btn{width:42px;height:42px;flex:none;border-radius:12px;border:1.5px solid var(--zhu-m);display:grid;place-items:center;cursor:pointer;background:rgba(178,58,46,.05)}
.zhu-btn svg{width:19px;height:19px;stroke:var(--zhu-m);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ask-answer{display:none;margin-top:10px}
.ask-answer.show{display:block;animation:bIn .35s ease}
.ask-q{font-size:12px;color:var(--ink-3);padding:0 2px 8px;display:flex;gap:6px;align-items:center}
.ask-q svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.6;flex:none}
.ask-a{background:var(--dai-t);border-radius:12px;padding:12px 14px;font-size:13px;color:var(--dai-d);line-height:1.7}
.ask-a .src{margin-top:9px;padding-top:8px;border-top:1px dashed rgba(74,111,165,.3);font-size:12px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
/* 问山答案来源 chips（2026-09-13 · 问山补全）：消费后端 ask_mountain 的 r.sources（Top 命中记录
   {id,date,snippet}，此前前端从未消费=来源不可见半成品）；chips 可点，打开命中记录所在日的当日详情抽屉 */
.ask-srclist{margin-top:8px;display:flex;flex-wrap:wrap;gap:6px}
.ask-srchip{max-width:100%;font-size:11px;color:var(--ink-2);background:var(--paper);border:1px solid var(--line);border-radius:999px;padding:3px 10px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ask-srchip:active{color:var(--season-a);border-color:var(--season-a)}
.report-link{display:flex;align-items:center;gap:12px;padding:14px 15px}
.report-link .ic{width:40px;height:40px;border-radius:8px;background:var(--season-t);display:grid;place-items:center;flex:none;transition:background .5s}
.report-link .ic svg{width:20px;height:20px;stroke:var(--season-a);fill:none;stroke-width:1.5;stroke-linejoin:round}
.report-link .tt{flex:1}
.report-link .tt .h{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink-1)}
.report-link .tt p{font-size:12px;color:var(--ink-2);margin-top:2px}
.report-link .arr{color:var(--ink-3)}
.daygroup{font-family:var(--kai);font-size:13px;color:var(--ink-2);margin:16px 0 4px;display:flex;align-items:center;gap:10px}
.daygroup::after{content:"";flex:1;height:1px;background:var(--line)}
.sess{display:flex;gap:12px;align-items:flex-start;padding:13px 4px;border-bottom:1px solid var(--line);cursor:pointer}
.sess:last-child{border:none}
.sess .st{width:8px;height:8px;border-radius:50%;margin-top:7px;flex:none}
.sess .bd2{flex:1;min-width:0}
.sess .t1{font-family:var(--serif);font-size:15px;font-weight:600;color:var(--ink-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sess .t2{display:flex;gap:6px;align-items:center;margin-top:5px;flex-wrap:wrap;font-size:12px;color:var(--ink-3)}

/* ── 复盘记录 · 批量选择与操作 ── */
.batch-ent{display:inline-flex;align-items:center;gap:6px;font-family:var(--serif);font-size:12px;letter-spacing:.08em;color:var(--ink-2);border:1px solid var(--line-strong);border-radius:999px;padding:4px 12px;cursor:pointer;transition:.2s;background:var(--pure);flex:none}
.batch-ent:hover{border-color:var(--season-a);color:var(--season-deep)}
.batch-ent:active{transform:scale(.97)}
.batch-ent .be-ic{display:inline-flex;align-items:center;justify-content:center;min-width:15px;height:15px}
.batch-ent .be-ic svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.batch-ent .be-n{font-style:normal;font-family:var(--kai);font-size:12px;line-height:1;color:var(--pure);background:var(--season-a);border-radius:999px;min-width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;padding:0 4px}
.batch-ent.on{border-color:var(--season-a);color:var(--season-deep);background:var(--season-t)}

/* 日期头：右侧同天条数 · 楷书轻计数（不加框，与纸面齐平） */
.daygroup .dg-cnt{font-family:var(--kai);font-size:12px;color:var(--ink-3);letter-spacing:.05em;white-space:nowrap}
.daygroup .dg-cnt::before{content:"· ";opacity:.7}
/* 时间线折叠面板（2026-09-13 · 回顾页优化）：daygroup 组头可点切换展开/折叠——近 3 天默认展开、
   更早默认折叠为单行摘要（首条截断），修「复盘记录全量平铺显拥挤」；月历点格联动展开对应天组。
   折叠态隐藏组尾分隔线，让位给首条摘要（.dg-peek 占 flex:1） */
.daygroup.dg-fold{cursor:pointer;-webkit-user-select:none;user-select:none}
.daygroup.dg-fold:active{color:var(--ink-1)}
.daygroup .dg-caret{display:inline-block;flex:none;width:10px;font-size:10px;color:var(--ink-3);transform:rotate(0deg);transition:transform .18s ease}
.daygroup.dg-fold.open .dg-caret{transform:rotate(90deg)}
.daygroup .dg-peek{flex:1;min-width:0;font-family:var(--kai);font-size:12px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}
.daygroup.dg-fold:not(.open)::after{display:none}

/* 文件夹筛选：书签式标签（香=标签语义），选中为淡香底而非实块。
   2026-09-15：心情筛选行删除后本行成为唯一筛选行，顶距归位（4→6px 顶、10px 底） */
/* 十四轮（2026-09-22）：筛选栏改单行——胶囊差一点放不下时批量被 wrap+auto-margin 挤成孤行（用户报 bug）；
   改 nowrap+横向滑动（滚动条隐藏），批量永远钉在同一行右侧；胶囊 padding 微收 5/13→4/11 省出 ~20px */
.folder-filter{display:flex;gap:6px;flex-wrap:nowrap;align-items:center;margin:8px 0 12px;overflow-x:auto;scrollbar-width:none}
.folder-filter::-webkit-scrollbar{display:none}
.folder-filter .batch-ent{margin-left:auto;flex:none}
.folder-filter .ff{font-size:12px;color:var(--ink-2);padding:4px 11px;border:1px solid var(--line);border-radius:999px;background:var(--pure);cursor:pointer;transition:.2s;font-family:var(--kai);letter-spacing:.05em;min-height:26px;display:inline-flex;align-items:center;flex:none}
.folder-filter .ff:hover{border-color:var(--line-strong);color:var(--ink-1)}
.folder-filter .ff.on{background:var(--xiang-d);border-color:var(--xiang-d);color:var(--on-accent);font-weight:500;box-shadow:var(--sh-rest)}
/* 夜间模式：实印激活退回淡彩（夜间 --xiang-d 是亮金，白字会不可读） */
.phone.is-night .folder-filter .ff.on{background:var(--xiang-t);border-color:var(--xiang-m);color:var(--xiang-d);box-shadow:none}
.folder-filter .ff.add{border-style:dashed;color:var(--season-a);background:transparent;border-color:var(--season-a)}
.folder-filter .ff.add:hover{background:var(--season-t)}
/* 触屏 active 等价（hover 的按压反馈，三端一致）：缩 + 季节色描边 */
.folder-filter .ff:active{transform:scale(.96);border-color:var(--season-a);color:var(--ink-1)}

/* 十三轮：旧 .fchip/.moodchg/.rdcnt 胶囊基类已随 meta 重构删除（消费方改 m-mood/m-cnt/m-tag，样式并入 .rowitem 段） */

/* 批量模式：仅复盘行可勾选；记录行淡出为被动展示 */
.rowitem.batch{cursor:pointer}
.rowitem.batch.review{cursor:pointer}
.rowitem.batch.record{opacity:.5;cursor:default}
.rowitem.sel{background:linear-gradient(90deg,var(--season-t),transparent 78%);border-radius:12px}
.rowitem.sel .tm{color:var(--season-deep)}

/* 勾选印记：小圆角方章，选中灌入季节墨 */
.bcheck{width:22px;height:22px;border-radius:8px;border:1.5px solid var(--line-strong);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:.2s;background:var(--pure);flex:none}
.bcheck:active{transform:scale(.9)}
.bcheck svg{width:12px;height:12px;stroke:var(--on-accent);fill:none;stroke-width:2.8;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.4);transition:.2s}
.bcheck.on{border-color:var(--season-a);background:var(--season-a)}
.bcheck.on svg{opacity:1;transform:scale(1)}

/* 批量操作落款条：纸面悬浮 · 朱红印记 · 檐下操作 */
.batch-bar{position:sticky;bottom:16px;z-index:20;display:flex;align-items:center;gap:3px;margin-top:12px;background:var(--surface);border:1px solid var(--line-strong);border-radius:999px;padding:7px 10px;box-shadow:0 10px 30px rgba(38,41,43,.14)}
.batch-bar .bb-cnt{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);padding:0 10px 0 4px;font-weight:600;white-space:nowrap}
.batch-bar .bb-dot{width:8px;height:8px;border-radius:50%;background:var(--zhu-m);flex:none}
.batch-bar .bb-act{font-size:12px;color:var(--ink-2);padding:6px 12px;border-radius:999px;cursor:pointer;white-space:nowrap;transition:.15s;display:inline-flex;align-items:center;gap:3px;font-family:var(--sans)}
.batch-bar .bb-act:hover{background:var(--paper)}
.batch-bar .bb-act:active{background:var(--season-t)}
.batch-bar .bb-del{color:var(--zhu-d);font-weight:600}
.batch-bar .bb-del:hover{background:var(--zhu-t)}
.batch-bar .bb-caret{font-size:12px;color:var(--ink-3);transform:translateY(1px)}
.batch-bar .bb-move{position:relative}
.batch-bar .bb-folder{position:absolute;bottom:calc(100% + 8px);left:0;z-index:30;min-width:132px;padding:6px;background:var(--pure);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.1);display:flex;flex-direction:column;gap:2px}
.batch-bar .bb-folder span{display:flex;align-items:center;padding:8px 10px;border-radius:8px;font-size:12px;color:var(--ink-2);cursor:pointer;white-space:nowrap;transition:.15s;font-family:var(--sans)}
.batch-bar .bb-folder span:hover{background:var(--surface)}
.batch-bar .bb-folder span:active{background:var(--season-t)}

/* ── 新建分类弹层 · 居中纸卡（见山风格，替代浏览器原生 prompt） ──
   2026-09-15 美化：右上「类」字方印（呼应节气方印/年鉴十词印的印章语汇）、留白微调 */
.cat-mask{position:absolute;inset:0;background:rgba(38,41,43,.42);z-index:80;backdrop-filter:blur(2px);animation:catFade .2s ease}
@keyframes catFade{from{opacity:0}to{opacity:1}}
.cat-card{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:min(292px,84%);z-index:81;background:var(--surface);border:1px solid var(--line-strong);border-radius:18px;padding:20px 20px 18px;box-shadow:0 18px 50px rgba(38,41,43,.22);animation:catIn .24s cubic-bezier(.2,1.4,.4,1)}
@keyframes catIn{from{opacity:0;transform:translate(-50%,-47%) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
.cat-card .cc-seal{position:absolute;top:16px;right:16px;width:34px;height:34px;display:grid;place-items:center;background:var(--paper);border:1px solid var(--line-strong);border-radius:8px;font-family:var(--kai);font-size:15px;color:var(--ink-3);transform:rotate(4deg)}
.cat-card .cc-head{margin-bottom:16px;padding-right:44px}
.cat-card .cc-t{font-family:var(--serif);font-weight:600;font-size:15px;letter-spacing:.12em;color:var(--ink-1)}
.cat-card .cc-sub{display:block;font-size:12px;color:var(--ink-3);margin-top:5px}
.cc-field{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:0 12px;display:flex;align-items:center;transition:border-color .2s}
.cc-field:focus-within{border-color:var(--season-a)}
.cc-field uni-input{display:block;flex:1;min-width:0}
.cc-field input{width:100%;height:40px;background:transparent;border:none;outline:none;font-size:15px;font-family:var(--sans);color:var(--ink-1)}
.cat-card .cc-field input::placeholder{color:var(--ink-3);opacity:.8}
.cc-field uni-input .uni-input-placeholder{font-size:15px;color:var(--ink-3);opacity:.8}
.cat-card .cc-hint{font-size:12px;color:var(--ink-3);margin:9px 2px 14px;line-height:1.5}
.cc-acts{display:flex;gap:9px}
.cc-acts button{flex:1;height:38px;border-radius:12px;font-size:13px;cursor:pointer;transition:.15s;font-family:var(--sans)}
.cc-cancel{border:1px solid var(--line-strong);background:transparent;color:var(--ink-2)}
.cat-card .cc-cancel:active{background:var(--paper)}
.cc-ok{border:none;background:var(--season-a);color:var(--on-accent);font-weight:500}
.cat-card .cc-ok:active{filter:brightness(.94)}

/* ── 行内快捷操作图标 + 长按弹出（记录卡片 / 复盘行 共用；替代滑动） ──
   视觉：纸墨系幽灵图标钮——细线描边 + 透明底 + 墨色图标，悬停才浮现行动语义色（dai/qing/xiang/zhu） */
.row-acts{display:flex;align-items:center;gap:5px;flex:none}
.row-acts .ra{width:28px;height:28px;border:1px solid var(--line);border-radius:8px;display:grid;place-items:center;cursor:pointer;color:var(--ink-3);background:transparent;font-size:13px;line-height:1;font-style:normal;transition:.15s}
.row-acts .ra:hover{background:var(--surface);border-color:var(--line-strong);color:var(--ink-1)}
.row-acts .ra:active{transform:scale(.92);background:var(--paper)}
.row-acts .ra-menu{font-weight:600;letter-spacing:.06em}

/* ── uni-button 默认样式重置：全站自定义按钮自持外观（灰底/高行距/::after 描边残影都归零） ── */
uni-button{background:transparent;border:none;padding:0;margin:0;line-height:1.4;color:inherit;font-size:inherit}
uni-button::after{display:none}

/* ── 周报 L3（2026-09-22 美化微调：hero 三层层次靠 字号/色阶/留白 承担，金线 .rule 随用户拍板移除；
   眉语与主标呼吸 +2、日期行降为第三层墨色并加字距、主标楷体加重半档、hero 底部留白补偿删线） ── */
.weekly-hero{text-align:center;padding:30px 0 26px;position:relative}
.weekly-hero .ju{font-family:var(--kai);font-size:15px;color:var(--season-a);letter-spacing:.5em;text-indent:.5em;margin-bottom:12px}
.weekly-hero h2{font-family:var(--kai);font-size:30px;font-weight:600;letter-spacing:.12em;text-indent:.12em;color:var(--ink-1)}
.weekly-hero .rng{font-size:12px;color:var(--ink-3);margin-top:10px;letter-spacing:.08em;font-feature-settings:"tnum"}
.rulegrid{border-top:1.5px solid var(--line-strong);border-bottom:1.5px solid var(--line-strong);display:flex}
.rulegrid .cell3{flex:1;text-align:center;padding:16px 6px 14px;border-right:1.5px solid var(--line)}
.rulegrid .cell3:last-child{border-right:none}
.rulegrid .v{font-family:var(--kai);font-size:30px;line-height:1;font-feature-settings:"tnum"}
.rulegrid .v.qing{color:var(--qing-d)}.rulegrid .v.dai{color:var(--dai-d)}.rulegrid .v.jin{color:var(--jin-d)}
.rulegrid .u{font-size:12px;color:var(--ink-2);margin-top:7px}
.rulegrid .tr{display:inline-block;font-size:12px;font-weight:600;padding:0 6px;border-radius:999px;margin-top:5px}
.tr.up{background:var(--qing-t);color:var(--qing-d)}.tr.down{background:var(--zhu-t);color:var(--zhu-d)}
/* A4 · 中性徽章：0% 落地率时不再配「+6%」涨幅语义 */
.tr.hold{background:var(--paper);color:var(--ink-3)}

/* 情绪曲线 */
.moodcurve{padding:16px 12px 12px}
.moodcurve .mc-head{display:flex;align-items:baseline;justify-content:space-between;padding:0 4px 12px}
.moodcurve .mc-head .t{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink-1)}
.moodcurve .mc-head .s{font-size:12px;color:var(--ink-3)}
.mcbars{display:flex;gap:6px;align-items:flex-end;height:64px}
.mcbar{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;height:100%;justify-content:flex-end}
.mcbar .b{width:100%;border-radius:8px 8px 0 0;transition:.3s;min-height:5px}
.mcbar span{font-size:12px;color:var(--ink-3)}
.mcbar.today span{color:var(--season-a);font-weight:600}
.mcbar.today .b{outline:1.5px dashed var(--season-a);outline-offset:-1.5px}
.mc-note{display:flex;gap:6px;align-items:center;margin-top:11px;padding:8px 11px;background:var(--qing-t);border-radius:8px;font-size:12px;color:var(--qing-d);line-height:1.6}
.mc-note svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.6;flex:none;stroke-linecap:round;stroke-linejoin:round}

/* FREE-1（2026-09-05）：自由式 AI 摘要卡片（记录卡内展示）与补存重试链接 */
.free-ai-sum{font-size:12px;color:var(--ink-2);line-height:1.6;margin-top:6px;padding:6px 10px;background:var(--paper);border-left:2px solid var(--xue-m);border-radius:6px}
.retry-free{color:var(--season-a);text-decoration:underline;margin-left:4px}

/* 波3-4（2026-09-05）：报告未读标识（复盘页报告入口「新」徽标） */
.rep-dot{display:inline-block;margin-left:6px;padding:0 6px;font-size:10px;line-height:16px;background:var(--zhu-m);color:var(--on-accent);border-radius:8px;vertical-align:2px}

/* P1-6（2026-09-06 · 质量报告 F3）：接话行独立渲染——更轻字号与墨色，与主问句形成呼吸感 */
.bubble__echo{display:block;font-size:12px;color:var(--ink-3);line-height:1.6;margin-bottom:2px}

/* 认识词云 */
.wordcloud{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;justify-content:center;padding:16px 8px 14px;line-height:1.5}
.wordcloud span{font-family:var(--kai)}

/* 上期跟进 */
.followrow{display:flex;align-items:center;gap:12px;padding:12px 2px;border-bottom:1px solid var(--line)}
.followrow:last-child{border:none}
.fcheck{width:24px;height:24px;border-radius:8px;border:1.5px solid var(--line-strong);flex:none;display:grid;place-items:center;cursor:pointer;position:relative;transition:.2s}
.fcheck svg{width:14px;height:14px;stroke:var(--on-accent);fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;opacity:0;transform:scale(.4);transition:.2s}
.fcheck.done{background:var(--jin-m);border-color:var(--jin-m)}
.fcheck.done svg{opacity:1;transform:scale(1)}
.fcheck .stampfx{position:absolute;right:-7px;top:-13px;font-family:var(--kai);font-size:12px;color:var(--zhu-m);border:1px solid var(--zhu-m);border-radius:8px;padding:1px 3px;transform:rotate(-8deg);opacity:0}
.fcheck.done .stampfx{animation:stampIn .45s .05s cubic-bezier(.2,1.6,.4,1) both}
.followrow .ftx{flex:1;font-size:15px;color:var(--ink-1);line-height:1.55}
.followrow.done .ftx{color:var(--ink-3)}
.ridgefoot{margin:26px -20px 0;position:relative;height:74px;pointer-events:none}
.ridgefoot svg{position:absolute;bottom:0;left:0;width:100%;height:100%}
/* P2-15 远山装饰层 8px 视差入场（收尾页仪式增强） */
.page.act .ridgefoot{animation:ridgeRise .55s .12s cubic-bezier(.32,.72,.28,1) both}
@keyframes ridgeRise{from{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}
.share-row{display:flex;gap:10px;margin-top:18px}
.share-row .btn{flex:1;height:44px;font-size:13px}

/* ── 回顾页 · AI 报告正文（周志/月令/年鉴/自序共用）──
   收敛 4 页重复的内联正文样式为共享类：正文字号 13.5px（阅读更舒展）、行距 1.9、段距 9px；
   引用块改楷体 + 季节色左引导线，与正文拉开层次；列表项以季节色圆点引导。
   全部沿用既有令牌（--ink/--season/--kai），不新增颜色，三端均可渲染伪元素/绝对定位。 */
.rpt-body{font-size:13.5px;line-height:1.9;color:var(--ink-1)}
.rpt-body p{margin:0 0 9px}
.rpt-body b{font-weight:600}
.rpt-body .rq{margin:0 0 9px;padding:8px 12px;border-left:3px solid var(--season-a);background:var(--paper);border-radius:0 8px 8px 0;color:var(--ink-2);font-family:var(--kai);font-size:13px;line-height:1.8}
.rpt-body .rl{margin:0 0 7px;padding-left:14px;position:relative}
.rpt-body .rl .dot{position:absolute;left:2px;top:0;color:var(--season-a)}
/* 章节标题（四维洞察 ## 章节；2026-09-12）：楷体小标题，拉开与正文层次，首章顶格不额外留白 */
.rpt-body .rpt-h2{margin:18px 0 8px;font-size:14px;font-weight:600;color:var(--ink-1);font-family:var(--kai);letter-spacing:.5px;padding-left:9px;border-left:3px solid var(--season-a);line-height:1.4}
.rpt-body .rpt-h2:first-child{margin-top:2px}
/* 生成态骨架条与加载文案（周/月/年鉴/自序四页同构，此处一次性定义） */
.rpt-loading{font-size:13px;color:var(--ink-3);line-height:1.9}
.rpt-skel{display:block;margin-top:8px;height:10px;border-radius:8px;background:var(--line);opacity:.5}
.rpt-skel.rpt-skel-w{width:72%;margin-top:6px;opacity:.35}
/* 报告空态卡（2026-09-13 · 回顾页优化）：四页同构——ensureReport 返回 null（从未生成成功且无兜底稿）时
   v-if/v-else-if 双分支都不命中，报告区整块消失，唯一再生入口在报告卡内 = 用户永远无法触发生成（死循环）。
   v-else 兜底卡：说明行 + 显式生成入口（regenerate 绕过 30s 冷却）。全类化（行内样式棘轮零新增） */
.rpt-empty-card{margin-bottom:12px}
.rpt-empty-card .bd{padding:14px 16px}
.rpt-empty-card .sect{padding:0 0 8px}
.rpt-empty-txt{font-size:13px;color:var(--ink-3);line-height:1.8;padding:2px 0 4px}
.rpt-empty-btn{height:36px;font-size:12px;margin-top:10px;padding:0 18px}

/* ── 我的页 ── */
.acct{display:flex;align-items:center;gap:14px}
.avatar{width:52px;height:52px;border-radius:50%;background:var(--qing-t);display:grid;place-items:center;font-family:var(--kai);font-size:20px;color:var(--qing-d);flex:none;overflow:hidden}
.avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.acct .nm{font-family:var(--serif);font-weight:600;font-size:17px;color:var(--ink-1)}
.acct .ph{font-size:12px;color:var(--ink-3);margin-top:3px;font-feature-settings:"tnum"}
.acct .prof-edit{width:100%;border:none;outline:none;background:var(--season-t);border-radius:8px;padding:2px 8px;font-family:var(--serif);font-weight:600;font-size:17px;color:var(--ink-1);box-sizing:border-box}
.acct .prof-edit.ph-edit{font-family:var(--sans);font-weight:400;font-size:12px;color:var(--ink-2);margin-top:3px}
.acct .avatar{width:56px;height:56px;font-size:20px;border:2px solid var(--season-t);box-shadow:0 0 0 1px var(--line),0 3px 10px rgba(38,41,43,.08)}
.pedit-hint{font-style:normal;font-size:12px;color:var(--ink-4);margin-left:7px;vertical-align:2px}
.acct-tip{font-size:12px;color:var(--ink-4);text-align:center;margin-top:12px;padding-top:10px;border-top:1px dashed var(--line);letter-spacing:.04em}
.statline{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.kpi3{display:flex;justify-content:space-between;padding:6px 2px 2px;gap:4px}
/* 质量区 KPI（v2 扩至 7+ 格后 flex 单行小屏互相挤压）：固定 4 列网格，小屏自动两行排布 */
.kpi3--grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 4px;padding:6px 2px 2px}
.kpi3 .k{text-align:center;flex:1;min-width:0}
.kpi3 .v{font-family:var(--kai);font-size:20px;line-height:1;font-feature-settings:"tnum";white-space:nowrap}
.kpi3 .v.qing{color:var(--qing-d)}.kpi3 .v.jin{color:var(--jin-d)}.kpi3 .v.xue{color:var(--xue-d)}
.kpi3 .u{font-size:12px;color:var(--ink-2);margin-top:5px;white-space:nowrap}

/* 印章墙（15 枚 · 5 列；印面按古代篆刻右起竖读布字，见 sealLayout） */
.sealwall{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px 6px;padding:14px 4px 8px}
.sw-cell{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;overflow:visible}
/* 描述完整单行显示（不再换行、不再省略号截断）：width:auto 随内容、overflow 可见，居中不溢出重叠 */
.sw-cell>span{display:inline-block;max-width:none;font-size:12px;color:var(--ink-2);white-space:nowrap;overflow:visible;text-overflow:clip;text-align:center;line-height:1.5;letter-spacing:.02em}
/* 白文印（红地白字 · 阴刻）：主色走 --zhu 印章红 token，不硬编码十六进制 */
.sw-seal{width:56px;height:56px;border-radius:8px;display:flex;flex-direction:row-reverse;align-items:center;justify-content:center;gap:2px;font-family:var(--kai);font-size:13px;line-height:1;text-align:center;letter-spacing:.02em;cursor:pointer;transition:.2s;padding:3px;box-sizing:border-box;transform:rotate(-1.5deg);background:linear-gradient(145deg,var(--zhu-m),var(--zhu-d));color:var(--seal-ink-soft);box-shadow:inset 0 0 0 1.5px rgba(251,243,234,.34),0 3px 8px rgba(38,41,43,.18);position:relative}
/* 列内竖排（右起）：与 .seal-term 节气管同源手法 */
.sw-seal .col{writing-mode:vertical-rl;text-orientation:upright;letter-spacing:.06em;white-space:nowrap;flex:none}
.sw-seal .q{font-size:15px;color:currentColor}
/* 三字印（如「已复盘」）：改横排一字一列、字距均匀不溢出（用户要求单行均匀分布） */
.sw-seal.three{flex-direction:row;gap:1px;padding:2px}
.sw-seal.three .col{writing-mode:horizontal-tb;text-orientation:inherit;letter-spacing:.12em;font-size:13px}
/* 田字界格：仅 4 字印（2×2）显示，用绝对定位避让 flex 流 */
.sw-seal.grid::before,.sw-seal.grid::after{content:"";position:absolute;background:rgba(251,243,234,.22);pointer-events:none}
.sw-seal.grid::before{top:50%;left:6%;right:6%;height:1px;transform:translateY(-.5px)}
.sw-seal.grid::after{left:50%;top:6%;bottom:6%;width:1px;transform:translateX(-.5px)}
.sw-seal:active{transform:rotate(-1.5deg) scale(1.06)}
/* 季节章：各着四季色（印面随季） */
.sw-seal.chun{background:linear-gradient(145deg,var(--qing-m),var(--qing-d))}
.sw-seal.xia{background:linear-gradient(145deg,var(--dai-m),var(--dai-d))}
.sw-seal.qiu{background:linear-gradient(145deg,var(--jin-m),var(--jin-d))}
.sw-seal.dong{background:linear-gradient(145deg,var(--xue-m),var(--xue-d))}
/* 锁定态：灰虚线；季节章透出对应季节色描边（暗示“这一季还来得及”） */
.sw-seal.locked{border:1.5px dashed var(--line-strong);color:var(--line-strong);background:transparent;box-shadow:none}
.sw-seal.chun.locked{border-color:var(--qing-m);color:var(--qing-m)}
.sw-seal.xia.locked{border-color:var(--dai-m);color:var(--dai-m)}
.sw-seal.qiu.locked{border-color:var(--jin-m);color:var(--jin-m)}
.sw-seal.dong.locked{border-color:var(--xue-m);color:var(--xue-m)}
.sw-cell > span{font-size:12px;color:var(--ink-3);letter-spacing:.02em}
.sw-cell.got > span{color:var(--ink-2)}

/* 会员徽章 · 精致铭牌（见山，浅朱砂底 + 朱砂描边 + 双菱形界格点缀；与印信分属两制：印信记功过、徽章明身份）；退订即失 */
.tier-wrap{position:relative;display:inline-flex;align-items:center;vertical-align:middle;margin-left:4px}
.tier-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--kai);font-size:13px;line-height:1;letter-spacing:.14em;color:var(--zhu-d);border:1.5px solid var(--zhu-m);border-radius:8px;padding:4px 9px;background:var(--zhu-t);transform:rotate(-1.5deg);box-shadow:inset 0 0 0 1px rgba(178,58,46,.10),0 1px 2px rgba(140,53,41,.08)}
.tier-chip::before,.tier-chip::after{content:"";width:4px;height:4px;background:var(--zhu-m);opacity:.5;flex:none;transform:rotate(45deg)}
/* 悬浮说明卡（仅 H5 鼠标悬浮；收起态 visibility:hidden 不绘制，符合三端纪律） */
.tier-tip{position:absolute;top:calc(100% + 7px);left:50%;transform:translateX(-50%);white-space:nowrap;background:var(--ink-1);color:var(--paper);font-family:var(--sans);font-size:12px;line-height:1.5;letter-spacing:.04em;padding:5px 10px;border-radius:8px;box-shadow:0 4px 12px rgba(38,41,43,.16);font-style:normal;visibility:hidden;opacity:0;transition:opacity .18s;pointer-events:none;z-index:20}
.tier-tip::before{content:"";position:absolute;top:-4px;left:50%;transform:translateX(-50%) rotate(45deg);width:7px;height:7px;background:var(--ink-1);border-radius:0}
.tier-wrap:hover .tier-tip{visibility:visible;opacity:1}

/* 热力图 */
.heatmap-wrap{padding:16px 12px 12px}
.hm-head{display:flex;justify-content:space-between;align-items:baseline;padding:0 4px 12px}
.hm-head .t{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink-1)}
.hm-head .s{font-size:12px;color:var(--ink-3)}
.heatmap{display:grid;grid-template-columns:repeat(14,1fr);gap:3px}
.heatmap .cell{aspect-ratio:1;border-radius:2px;background:var(--line);transition:.2s}
.heatmap .cell:active{transform:scale(1.3)}
.hm-legend{display:flex;align-items:center;gap:4px;justify-content:flex-end;margin-top:9px;font-size:12px;color:var(--ink-3)}
.hm-legend i{width:9px;height:9px;border-radius:2px;display:inline-block}

.menu-row{display:flex;align-items:center;gap:12px;padding:14px 2px;border-bottom:1px solid var(--line);cursor:pointer}
.menu-row:last-child{border:none}
.menu-row .mi{width:34px;height:34px;border-radius:8px;display:grid;place-items:center;flex:none}
.menu-row .mi svg{width:17px;height:17px;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.menu-row .mt{flex:1;font-size:15px;color:var(--ink-1)}
.menu-row .ms{font-size:12px;color:var(--ink-3)}
.mine-foot{text-align:center;padding:26px 0 8px}
.mine-foot .big-seal{width:56px;height:56px;border:1.5px solid var(--zhu-m);border-radius:8px;display:inline-flex;flex-direction:row-reverse;align-items:center;justify-content:center;gap:1px;font-family:var(--kai);font-size:20px;color:var(--zhu-m);transform:rotate(-3deg);background:rgba(178,58,46,.04);box-sizing:border-box;padding:3px}
.mine-foot p{font-size:12px;color:var(--ink-3);margin-top:12px;letter-spacing:.1em}

/* ── 我的 · 设置子页 ── */
.setrow{display:flex;align-items:center;gap:12px;padding:13px 2px;border-bottom:1px solid var(--line)}
.setrow:last-child{border-bottom:none}
.setrow .lcol{flex:1;min-width:0}
.setrow .sl{font-size:15px;color:var(--ink-1)}
.setrow .sd{font-size:12px;color:var(--ink-3);margin-top:3px;line-height:1.55}
/* M-3（2026-09-11 审计）：.sv 实测触控高 ≈20px，跌破「批 8」的 ≥24×24 下限（WCAG 2.5.8），补热区——
   视觉不变（flex 撑开，文字仍 13px），仅命中区扩到 24px。 */
.setrow .sv{font-size:13px;color:var(--ink-2);font-feature-settings:"tnum";flex:none;display:flex;align-items:center;gap:2px;cursor:pointer;min-height:24px;min-width:24px}
.setrow .sv svg{width:13px;height:13px;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.tsw{width:44px;height:26px;border-radius:999px;background:var(--line);position:relative;display:inline-flex;align-items:center;justify-content:flex-start;margin:0;cursor:pointer;flex:none;transition:background .25s;border:none;padding:0;line-height:1;font-size:0;overflow:hidden}
.tsw::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:var(--pure);transition:left .25s,width .15s;box-shadow:0 1px 3px rgba(38,41,43,.28)}
.tsw.on{background:var(--season-a)}
.tsw.on::after{left:21px}
.tsw:active::after{width:23px}
.chiprow{display:flex;gap:7px;flex-wrap:wrap;padding:10px 2px 4px}
.dgr-btn{width:100%;height:46px;border:none;border-radius:999px;background:var(--shade);color:var(--shade-ink-strong);font-size:13px;font-family:var(--sans);letter-spacing:.08em;display:flex;align-items:center;justify-content:center;gap:7px;cursor:pointer;transition:transform var(--mo-1)}
.dgr-btn svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.dueopt.chk::before{content:"";width:18px;height:18px;border:1.5px solid var(--line-strong);border-radius:8px;flex:none;display:grid;place-items:center;font-size:12px;color:var(--on-accent);transition:.2s}
.dueopt.chk.sel::before{content:"✓";background:var(--season-a);border-color:var(--season-a)}

/* ── 登录页 ── */
.login-wrap{flex:1;display:flex;flex-direction:column;padding:0 32px 20px;overflow:hidden}
.login-hero{flex:none;text-align:center;padding:44px 0 30px}
.login-hero .lseal{width:70px;height:70px;border:1.5px solid var(--zhu-m);border-radius:8px;display:inline-flex;flex-direction:row-reverse;align-items:center;justify-content:center;gap:1px;font-family:var(--kai);font-size:24px;color:var(--zhu-m);transform:rotate(-3deg);background:rgba(178,58,46,.04);box-sizing:border-box;padding:3px}
.login-hero .lseal .col,.mine-foot .big-seal .col{writing-mode:vertical-rl;text-orientation:upright;letter-spacing:.1em;line-height:1;white-space:nowrap;flex:none}
.login-hero h1{font-family:var(--kai);font-size:24px;font-weight:500;letter-spacing:.14em;color:var(--ink-1);margin-top:20px}
.login-hero .slog{font-size:12px;color:var(--ink-3);margin-top:9px;letter-spacing:.28em}
.lg-field{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:12px;background:var(--pure);padding:0 14px;height:52px;margin-bottom:13px;transition:.25s}
.lg-field:focus-within{border-color:var(--season-a);box-shadow:0 0 0 3px var(--season-t)}
.lg-field .pre{font-size:15px;color:var(--ink-2);flex:none;font-feature-settings:"tnum"}
.lg-field input{flex:1;min-width:0;border:none;background:none;outline:none;font-size:15px;color:var(--ink-1);font-family:var(--sans);letter-spacing:.08em}
.lg-field .code-btn{flex:none;border:none;background:var(--season-t);color:var(--season-a);font-size:12px;font-family:var(--sans);padding:8px 11px;border-radius:8px;cursor:pointer;transition:.2s;white-space:nowrap}
.lg-field .code-btn:disabled{background:var(--line);color:var(--ink-4);cursor:default}
.lg-proto{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3);margin:4px 2px 16px;line-height:1.6}
.lg-proto .pchk{width:16px;height:16px;border:1.5px solid var(--line-strong);border-radius:8px;display:grid;place-items:center;cursor:pointer;flex:none;transition:.2s;background:var(--pure)}
.lg-proto .pchk.on{background:var(--season-a);border-color:var(--season-a)}
.lg-proto .pchk svg{width:10px;height:10px;stroke:var(--on-accent);stroke-width:2.6;fill:none;stroke-linecap:round;stroke-linejoin:round;opacity:0;transition:.15s}
.lg-proto .pchk.on svg{opacity:1}
.lg-proto u{color:var(--ink-2);cursor:pointer;text-decoration:none;border-bottom:1px solid var(--line-strong)}
.lg-btn{width:100%;height:50px;border:none;border-radius:999px;background:var(--season-a);color:var(--on-accent);font-size:15px;font-family:var(--sans);font-weight:500;letter-spacing:.12em;cursor:pointer;transition:.25s;display:flex;align-items:center;justify-content:center;gap:7px}
.lg-btn:disabled{background:var(--ink-4);color:var(--surface);cursor:default}
.lg-or{display:flex;align-items:center;gap:12px;color:var(--ink-3);font-size:12px;margin:20px 0 16px;letter-spacing:.14em}
.lg-or::before,.lg-or::after{content:"";flex:1;height:1px;background:var(--line)}
.lg-guest{text-align:center;font-size:13px;color:var(--ink-2);cursor:pointer}
.lg-guest b{color:var(--season-a);font-weight:600}
.login-foot{flex:none;text-align:center;margin-top:auto;padding:22px 0 6px;font-size:12px;color:var(--ink-3);letter-spacing:.08em;line-height:1.9}

/* ── 年度导出 · 书影 ── */
.book{margin:4px auto 0;width:168px;height:226px;background:var(--pure);border:1px solid var(--line-strong);border-radius:8px;box-shadow:var(--sh-rest),3px 3px 0 var(--paper),4px 4px 0 var(--line);position:relative;padding:20px 14px 16px;display:flex;flex-direction:column;align-items:center}
.book .b-seal{font-family:var(--kai);color:var(--zhu-m);border:1.5px solid var(--zhu-m);border-radius:8px;padding:5px;font-size:13px;transform:rotate(-3deg);writing-mode:vertical-rl;letter-spacing:.18em;background:rgba(178,58,46,.04)}
.book .b-ju{font-family:var(--kai);font-size:12px;color:var(--ink-2);letter-spacing:.4em;margin-top:16px;writing-mode:vertical-rl}
.book .b-t{font-family:var(--kai);font-size:20px;color:var(--ink-1);letter-spacing:.32em;writing-mode:vertical-rl;margin-top:14px}
.book .b-rng{font-size:12px;color:var(--ink-3);margin-top:auto;letter-spacing:.18em;font-feature-settings:"tnum"}
.book::after{content:"";position:absolute;top:12px;bottom:12px;right:8px;width:1px;background:var(--line)}
/* 2026-09-11：原夜山 .tsw::after{background:var(--pure)} —— 日间规则已改为 var(--pure)，覆盖冗余，已删 */
.phone.is-night .tsw.on::after{background:var(--paper)}

/* P1-13 KPI 数字卡统一规格（四种实现 → 一套数字语言：楷体 + tnum + 档位字阶）
   注：我的页质量区 KPI（.kpi3）小屏一行四列易挤，单独用 20px 档；知行/规则页大数字保持 30px 档 */
.kpi3 .v,.zx-stats .v,.rulegrid .v,.bkstat .v{font-family:var(--kai);line-height:1;font-feature-settings:"tnum"}
.zx-stats .v,.rulegrid .v{font-size:30px}
.bkstat .v{font-size:20px}
.kpi3 .v{font-size:20px}

/* ── TabBar ── */
.tabbar{flex:none;height:calc(56px + env(safe-area-inset-bottom,0px));background:linear-gradient(180deg,var(--season-t),var(--paper) 70%);border-top:1px solid var(--line);display:flex;z-index:40;transition:background .5s;box-shadow:none}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;color:var(--ink-3);transition:color .25s;position:relative}
.tab svg{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;transition:.25s}
.tab span{font-size:12px;letter-spacing:.05em}
.tab.on{color:var(--season-a)}
.tab.on svg{stroke-width:1.8}

/* 返回条 */
.backbar{flex:none;display:flex;align-items:center;gap:8px;padding:8px 20px 10px;background:var(--paper);z-index:30;transition:background .5s}
.backbar .bk{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--ink-2);cursor:pointer}
.backbar .bk svg{width:16px;height:16px;stroke:var(--ink-2);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.backbar .tt{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--ink-1);margin:0 auto;letter-spacing:.15em;text-indent:.15em}
/* 聊天页返回栏右侧＝「这次复盘是什么」（2026-09-11 · 用户："最上面的自由复盘那一栏是否可以不需要"）：
   原先那块信息在返回栏下面另起一张 sticky 事件卡，与返回栏一起构成"两条 chrome"；
   现并入返回栏，顶部只剩一条。可能较长（事件名），故单行省略而不是换行撑高。 */
/* ⚠ 用 12px 而不是 12.5px：P1-4 对 interaction.css 有两条纪律——
   「字号档位 ≤11 档」且「每个值都落在字阶表 10/11/12/13/13.5/14/15/17/20/24/30 内」。
   12.5 只在 .vue 的内联样式里用过、从未进过这张表，写进来会同时踩这两条（实测被门禁拦下）。 */
.backbar .bb-ev{font-size:12px;color:var(--ink-2);margin-left:auto;max-width:62%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 「先停一停」是机制信号（识别到过虑倾向），随栏保留但只给一个小标记 */
.backbar .bb-rum{flex:none;font-size:10px}

/* 四子页平级导航 chip（P2 2026-09-13）→ **2026-09-22 用户拍板退役**：四页 .subnav 行、
   本段样式与 reportShared.REVIEW_SUBNAV 常量一并删除——四页互切统一回回顾主区四行入口。
   留痕防回流；删除后子页 backbar 直接衔接 hero（hero 自带 28px 顶呼吸）。 */

/* C2 跨期迷你趋势（2026-09-22）：周 8 期/月 6 期，样本 <3 不渲染（「没数据不渲染成 0」纪律）。
   柱高按情绪均值 1-5 → 百分比（:style 动态绑定，cross-platform 行内样式基线已按用户拍板同步 +1/文件）；
   颜色低=朱 中=青浅 高=青深，无记录期=地线灰。四页报告语境共享（无 #pg- 前缀——四页 DOM 各自挂载）。 */
.rpt-trend{display:flex;align-items:flex-end;gap:5px;height:40px;padding:10px 2px 10px}
.rpt-trend i{flex:1;display:block;border-radius:3px 3px 0 0;min-height:5px;transition:var(--mo-3)}
.rpt-trend i.low{background:var(--zhu-d)}
.rpt-trend i.mid{background:var(--qing-d)}
.rpt-trend i.high{background:var(--jin-d)}
.rpt-trend i.none{background:var(--line)}
.rpt-trend i.now::after{content:/今/;position:absolute;left:50%;transform:translateX(-50%);top:-14px;font-size:10px;color:var(--ink-2);font-family:var(--kai)}/n.rpt-trend i.now{position:relative}
.rpt-trend{padding-top:14px}
/* C5 章节锚点 chips（2026-09-22）：报告卡内章节导航，点击滚动定位；当前无"当前章"态（滚动监听留待观察价值） */
/* C5 章节锚点 chips（2026-09-23 二次升级 · 用户「有点不搭、突兀」）：**去底色去圆角**——
   浅纸底条与纸色卡形成异色块故显突兀；改为无底居中一组（与版心、章题同中轴），
   楷体 + 汉字卷次「其一」+ 点分隔；横滑单行无线 */
.rpt-chips{display:flex;gap:12px;padding:2px 0 14px;margin:0;justify-content:center;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;counter-reset:chip}
.rpt-chips::-webkit-scrollbar{display:none}
.rpt-chips span{flex:0 0 auto;font-family:var(--kai);font-size:12px;color:var(--ink-2);letter-spacing:.08em;cursor:pointer;transition:var(--mo-3)}
.rpt-chips span::before{counter-increment:chip;content:'其' counter(chip, cjk-ideographic) '　';font-size:10px;color:var(--ink-3);letter-spacing:0}
.rpt-chips span:not(:first-child)::before{content:'·　其' counter(chip, cjk-ideographic) '　'}
.rpt-chips span:active{color:var(--zhu-d)}
/* C1 引用块日期锚（2026-09-22）：带 date 的 .rq 可点开当日下钻；按压态给季节色反馈 */
.rq.rq-day{cursor:pointer}
.rq.rq-day:active{background:var(--season-t)}
/* 文案与操作降级（2026-09-22 · 用户「按钮很大、和页面不搭」）：报告卡内的次级操作从
   全站 48px 大胶囊（.btn）降为 12px 小链接胶囊，与 .cnt/.rq 的密度同层；
   .rpt-acts 是操作行容器（周志两按钮并排）。主操作（share-row 存入山志/分享卡）保持 .btn。 */
.rpt-acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;align-items:flex-start}
/* align-self/width 双保险（2026-09-23 用户截图：月令/年鉴/自序页的「再复盘一次」被父级 flex 拉伸满行） */
.rpt-link{font-family:var(--sans);font-size:12px;color:var(--ink-2);background:transparent;border:1px solid var(--line);border-radius:999px;height:28px;padding:0 12px;cursor:pointer;transition:var(--mo-3);align-self:flex-start;width:fit-content;max-width:100%;display:inline-flex;align-items:center;justify-content:center}
.rpt-link:active{color:var(--on-accent);background:var(--season-a);border-color:var(--season-a)}
.rpt-link.done{color:var(--ink-3);border-style:dashed}
/* P0-3（2026-09-22 · 移动端实测）：「数据截至」独立行——原挤在 sect 标题行里把楷体标题
   切成两截（"本周山/志"三页实锤）；改正文前右对齐小字，390px 下不与标题争宽 */
.rpt-asof{text-align:right;font-size:11px;color:var(--ink-3);margin:2px 0 8px;letter-spacing:.04em}

/* toast：P2-19 避让 TabBar + 长文可换行 */
.toast{position:absolute;bottom:calc(72px + env(safe-area-inset-bottom,0px));left:50%;transform:translateX(-50%) translateY(10px);background:var(--shade);color:var(--shade-ink-strong);font-size:12px;padding:8px 16px;border-radius:999px;opacity:0;pointer-events:none;transition:var(--mo-3);z-index:80;white-space:nowrap;max-width:82%;overflow:hidden;text-overflow:ellipsis;line-height:1.5;font-family:var(--sans);letter-spacing:.02em}
.toast.show{opacity:1;transform:translateX(-50%)}

/* ── P2-14 主题纸纹系统（五材质；只换纸不换骨，结构与六色语义恒定；body[data-paper] 由 useThemeStore 维护）──
   SVG feTurbulence 纤维噪点平铺，约 1KB/材质；中性灰低透明度，日间/夜山通用 */
.phone.paper-xuan,.phone.paper-xuan .chat-bottom{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.45 0 0 0 0 0.43 0 0 0 0 0.38 0 0 0 0.05 0'/%3E%3C/filter%3E%3Crect width='260' height='260' filter='url(%23p)'/%3E%3C/svg%3E")}
.phone.paper-juan,.phone.paper-juan .chat-bottom{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='260' height='260'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.004 0.22' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.42 0 0 0 0 0.38 0 0 0 0 0.30 0 0 0 0.06 0'/%3E%3C/filter%3E%3Crect width='260' height='260' filter='url(%23p)'/%3E%3C/svg%3E")}
.phone.paper-yunkai,.phone.paper-yunkai .chat-bottom{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.045' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.40 0 0 0 0 0.40 0 0 0 0 0.42 0 0 0 0.07 0'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23p)'/%3E%3C/svg%3E")}
.phone.paper-niupi,.phone.paper-niupi .chat-bottom{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.16' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.42 0 0 0 0 0.32 0 0 0 0 0.22 0 0 0 0.09 0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23p)'/%3E%3C/svg%3E")}
.phone.paper-zhulian,.phone.paper-zhulian .chat-bottom{background-image:repeating-linear-gradient(90deg,rgba(122,112,90,.05) 0 1px,transparent 1px 5px),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.6' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.45 0 0 0 0 0.42 0 0 0 0 0.34 0 0 0 0.04 0'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23p)'/%3E%3C/svg%3E")}
/* 卡片 1px 内高光（纸面受光的微量立体感）；夜山减弱 */
.card{box-shadow:var(--sh-rest),var(--sh-topline)}
/* 2026-09-11：本行原为夜山 .card 投影覆盖 —— 现 --sh-rest/--sh-topline 均带夜山值，覆盖冗余，已删 */

/* ── 刻本／书影形态（报告卡 · 2026-09-23 用户拍板「报告做成刻本形式或者书影形式」）──
   刻本 = 古籍雕版书页视觉：纸色底 + 双线版框 + 宽天头 + 楷体正文 + 右上藏书朱印，横排。
   全部沿用既有令牌（--paper/--surface/--line/--ink/--kai/--zhu-d），随日间/夜山自动适配；
   不改 ReportBody DOM（D2 四章锚点依赖 .rpt-body .rpt-h2 下标，结构逐字不动）。
   ⚠ 本段必须在 .card（含上方投影声明）之后：.card.rpt-print 与 .card 同为 (0,2,0)/(0,1,0) 量级，
   靠"更专 + 更后"两条一起压住基础卡观感。 */
/* 纸色底 + 双线版框：外 1px --line，内用 inset box-shadow 叠出"外粗内细"的刻本版框（5px 纸色隔 + 1px 线）；
   再叠一层极淡斜向渐层模拟雕版刷印的纸纹不匀（中性 rgba，日夜皆宜）；直角 2px（刻本无圆角卡） */
.card.rpt-print{background:var(--paper);border:1px solid var(--line);border-radius:2px;box-shadow:inset 0 0 0 5px var(--paper),inset 0 0 0 6px var(--line)}
/* 去卡顶季节渐变冠：刻本是一整面纸，不留现代卡片的彩色渐变头（版框整圈干净） */
.card.rpt-print::before{display:none}
/* 内边距到刻本比例（上下 20px / 左右 16px，天头更宽）；.bd 原为行内 padding，
   以 !important 覆写而非新增行内样式（行内样式棘轮只减不增） */
/* 内边距到刻本比例（宋本天头:地脚≈3:1 → 上 28 / 下 16 / 左右 16；.bd 原为行内 padding，
   以 !important 覆写而非新增行内样式） */
.rpt-print .bd{padding:28px 16px 16px!important}
/* 版心（书口）：朱色鱼尾 ❖ + 题记（见山 · 周志/月令/年鉴/自序）居中。
   2026-09-23 用户「不要用横线竖线等」：删去原上下两条细线——版口层次改由
   **上下留白（padding 10/12）+ 字距 .24em + 墨色 --ink-3 + 朱色鱼尾**承载，不加任何线 */
/* 版心（书口 · 2026-09-23 用户「山志那行不够突出」升级）：宋本版心＝鱼尾标折缝 + 书名 + 卷叶——
   书名用**朱色楷体大字**（与章题同字号，全页第二视觉锚点），叶号灰小字，双鱼尾分列；白口无线 */
.rpt-print .rpt-press{display:flex;align-items:center;justify-content:center;gap:6px;margin:0 0 6px;padding:12px 0 10px;font-family:var(--kai);color:var(--ink-3)}
.rpt-print .rpt-press b{font-family:var(--kai);font-size:15px;font-weight:normal;color:var(--zhu-d);letter-spacing:.24em;margin-left:2px}
.rpt-print .rpt-press .pl{font-size:11px;color:var(--ink-3);letter-spacing:.08em}
.rpt-print .rpt-press i{font-style:normal;font-size:10px;color:var(--zhu-d);letter-spacing:0}
/* 正文：楷体 + 15px（字阶表内）+ 行距 1.9 + 两端对齐（inter-ideograph 为中日文标准对齐，避免数字串拉出"字距河流"） */
.rpt-print .rpt-body{margin-top:16px;font-family:var(--kai);font-size:15px;line-height:1.9;text-align:justify;text-justify:inter-ideograph;color:var(--ink-1)}
/* 首行缩进 2 字——仅正文段落；引用块/列表不缩进（.rq/.rl 各保其形态） */
.rpt-print .rpt-body p{text-indent:2em;margin:0 0 10px}
/* 章节标题：2026-09-23 用户「不要用横线竖线等」——**删去原题下 24px 短墨线**（.rpt-h2::after）；
   **并删去基础类的左侧季节色竖条**（.rpt-body .rpt-h2 的 border-left:3px solid var(--season-a)，
   它就是用户否定的那条竖线；padding-left:9px 本是给这条竖条让位，一并归零让标题与正文左缘对齐）。
   只覆盖报告作用域（不改动第 1760 行的基础段，避免影响其余页面）。
   层级改由「字号/墨色/楷体 + 上下留白」承担：上留白 26px、下留白 12px。
   题前**不加符号**（判断：纯留白最稳——标题已由字族、字号与正文拉开，再加朱色方点
   等于新增一处装饰，与"用见山语汇与留白承载层次"的方向相反，故只留白） */
/* 章节标题：刻本卷题形态——居中 + 朱色 + 宽字距 + **卷次小字「其一」**（CSS counter 汉字编号，
   宋本卷内小题带次第的惯例；不用任何线/符号，靠色彩与留白突出） */
.rpt-print .rpt-body{counter-reset:chap}
.rpt-print .rpt-body .rpt-h2{margin-top:30px;margin-bottom:14px;border-left:none;padding-left:0;text-align:center;color:var(--zhu-d);letter-spacing:.28em;font-weight:normal}
.rpt-print .rpt-body .rpt-h2::before{counter-increment:chap;content:'其' counter(chap, cjk-ideographic) '　';font-size:11px;color:var(--ink-3);letter-spacing:.1em}
/* 引用块刻本适配：卡底已是纸色，原 --paper 底会与版面同色消失——改用 --surface 微亮一档拉开层次，
   并左右各缩进 1em。2026-09-23 用户「不要用横线竖线等」：删去基础类的**左侧季节色引导线**
   （.rpt-body .rq 的 border-left:3px solid var(--season-a)）——引用块改由
   **左右缩进 + 底色 + 楷体**与正文区分，不靠竖线 */
.rpt-print .rpt-body .rq{margin-left:1em;margin-right:1em;background:var(--surface);border-left:none}
/* 藏书朱印：钤于**地脚右侧**（模板 .rpt-seal，仅 report 存在时渲染）——原右上会与版心/数据截至挤顶（QA 可达性判定）；父 .card 已 position:relative */
.rpt-print .rpt-seal{position:absolute;bottom:14px;right:16px;writing-mode:vertical-rl;text-orientation:upright;font-family:var(--kai);font-size:10px;line-height:1.05;letter-spacing:0;color:var(--zhu-d);border:1px solid var(--zhu-d);border-radius:2px;padding:4px 3px;background:transparent;z-index:2}
/* 夜山：--paper 变深后"纸色"语义失效 → 刻本卡去纸底与纸纹，只留版框 + 朱印 + 楷体（观感＝墨底纸纹不显） */
.phone.is-night .card.rpt-print{background:transparent;background-image:none;box-shadow:inset 0 0 0 5px transparent,inset 0 0 0 6px var(--line)}

/* ── 夜山 ── */
.phone.is-night{
  --paper:#1d1f1c;--surface:#26292b;--pure:#2d302c;
  --ink-1:#e8e4d8;--ink-2:#b5b1a4;--ink-3:#8a8678;--ink-4:#8a8678;
  --line:#3a3d38;--line-strong:#4a4e47;
  --qing-t:#33443a;--dai-t:#33404f;--jin-t:#453a26;--zhu-t:#4a3230;--xue-t:#3d3448;--xiang-t:#453b28;
  --qing-m:#6e8a77;--dai-m:#6d88b5;--jin-m:#d2a25c;--zhu-m:#c25a4e;--xue-m:#9d8bb8;--xiang-m:#dcb45e;
  --qing-d:#a8bfae;--dai-d:#a8bad6;--jin-d:#d2b178;--zhu-d:#d4928a;--xue-d:#bcaad4;--xiang-d:#d9bd7e;
  /* 2026-09-11 审计补齐（原先这些差异散在 body[data-ptheme=night] .xxx 的内联规则里，现收进令牌层）：
     · --season-t 此前只有日间值 #f5ecdb（近白）——夜山里 .csat-star 会拿到一块近白底、
       输入框/文本域聚焦环会变成近白光晕，而底上的 --ink-2 只剩约 1.9:1 → 取夜山金系深调（同 --jin-t）。
     · 投影与纸笺卡底/正文的夜山值：原先内联在各条夜山覆盖规则里，无法被断言守护。 */
  --season-t:#453a26;
  --sh-rest:0 1px 3px rgba(0,0,0,.28);
  --sh-float:0 -8px 40px rgba(0,0,0,.5);
  --sh-card:0 4px 12px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.03);
  --sh-topline:inset 0 1px 0 rgba(255,255,255,.04);
  --sh-bubble-user:0 4px 12px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.05);
  --card-ai-bg:linear-gradient(180deg,#24272a,#1d211f);
  --card-ai-ink:#c9c4b6;
  /* 选项「一笺」容器底（夜山 · v7 · 2026-09-11）：中性叠加，此处近纸（日间近墨），各一档 */
  --opt-panel:rgba(232,228,216,.06);--opt-panel-hot:rgba(232,228,216,.09);
  color-scheme:dark;
}
/* P1-12 夜山组件审计：TabBar 亮色横带 → 墨色系（原 bg=ink-1 即 #e8e4d8 亮带） */
.phone.is-night .tabbar{background:var(--surface);border-top-color:var(--line)}
/* 2026-09-11：原 body[data-ptheme=night] .avatar{color:#a8bfae} —— 与夜山 --qing-d 等值，日间规则已用 var(--qing-d)，已删 */
.phone.is-night .ai-chip .mini-seal{border-color:var(--zhu-t);color:var(--zhu-t)}
/* 2026-09-11：原夜山 .bubble--ai 覆盖（渐变底/描边/字色/投影）—— 现全部走 --card-ai-bg 与 --sh-card 的夜山值，已删 */

/* 2026-09-11：原夜山 .bubble--ai .bubble__text{color:#c9c4b6} —— 现为 --card-ai-ink 的夜山值，已删 */
/* 日间底是 --mc-t（按方法取色，无法上提为 :root 令牌），故夜山仍需显式换梯度；字色/投影已由 --ink-1 与 --sh-bubble-user 的夜山值承担 */
.phone.is-night .bubble--user{background:linear-gradient(135deg,var(--season-a),var(--season-deep))}
.phone.is-night .bubble__seal--user{background:var(--qing-t);color:var(--qing-d);border-color:var(--qing-m)}
.phone.is-night .ask-a .src{border-top-color:rgba(109,136,181,.3)}


/* ═══ uni-app 三端容器适配（置于文件末尾保证级联优先）═══ */
/* 解除包装层约束，.phone 直接按本文件布局 */
uni-app,uni-page,uni-page-wrapper{display:block}
uni-page-body{display:block;width:auto;min-height:0;padding:0;margin:0;background:transparent}
/* 高度链兜底：.phone 自身用 100dvh，此处覆盖不支持 dvh 的老内核（低版本 Android WebView） */
html,body,#app,uni-app,uni-page,uni-page-wrapper,uni-page-body{height:100%}
/* 容器外（宽屏留白 / 下拉回弹）用纸色，夜山用夜纸；:has 不支持时降级为日间纸色，不影响功能 */
html{background:var(--paper)}
html:has(.phone.is-night){background:#161815}

/* ═══ 十四轮（2026-09-22）全站视觉统一升级 · 桌面舞台 / 悬停微交互 / 焦点可达性 ═══ */
/* 键盘焦点圈：仅 :focus-visible（键盘导航）显示，季节色描边外扩 2px；鼠标点击不出现 */
:where(button,[role="button"],.ff,.zt,.rb,.ab,.cbtn,.tl-more,.reprow,.as-row,.chip):focus-visible{outline:2px solid var(--season-a);outline-offset:2px}
/* 精确指针（桌面）悬停微交互：卡片描边加深浮起、主按钮垫影、ghost 灌淡彩、报告册行垫色——触屏不受影响 */
@media (hover:hover){
  .card{transition:border-color .25s ease,box-shadow .25s ease}
  .card:hover{border-color:var(--line-strong);box-shadow:var(--sh-card),var(--sh-topline)}
  .btn:hover{box-shadow:var(--sh-rest)}
  .btn.ghost:hover{background:var(--season-t)}
  .reprow{transition:background .15s ease}
  .reprow:hover{background:var(--paper)}
  .tl-more:hover{border-color:var(--season-a);color:var(--season-a)}
}
/* 桌面舞台（≥768px）：通栏列升级为"纸上画框"——顶部季节色氛围光 + 纸笺卡浮起；<768px 移动端零改动 */
@media (min-width:768px){
  html{background:linear-gradient(180deg,var(--season-t),var(--paper) 220px)}
  .phone{height:calc(100vh - 44px);height:calc(100dvh - 44px);margin:22px auto;border:1px solid var(--line);border-radius:18px;box-shadow:var(--sh-card)}
}

/* ── L9 点按目标 ≥24×24（WCAG 2.5.8）· 批 8 追加 ── */
.chip.tgl{min-height:24px;display:inline-flex;align-items:center}
.ff{min-height:24px;display:inline-flex;align-items:center}
.sum-foot span{min-height:28px;display:inline-flex;align-items:center;gap:5px}

/* ── L4 时间线分批渲染 · 展开更早 ── */
.tl-more{margin:10px 0 14px;height:40px;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--ink-2);background:var(--paper);border:1px dashed var(--line);border-radius:12px;cursor:pointer}
.tl-more:active{background:var(--season-t)}

/* ── 进行中的复盘 · 可续聊列表 ── */
.live-row{padding:11px 2px;border-bottom:1px dashed var(--line);cursor:pointer}
.live-row:last-child{border-bottom:none}
.live-row:active{background:var(--season-t)}
.lv-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.lv-ev{font-size:13px;color:var(--ink-1);margin-bottom:3px}
.lv-meta{font-size:12px;color:var(--ink-3)}

/* ── 今日卡片 · 标签 chip + 多选模式 ── */
.tagchip{font-size:12px;padding:2px 7px;border-radius:8px;background:var(--xiang-t);color:var(--xiang-d);white-space:nowrap;flex-shrink:1;min-width:0}
/* 标签过多折叠：为让「心情+状态+少量标签」同行，超出 2 个折叠为 +N（点击无操作，仅提示全部） */
.tagchip.more{background:var(--surface);border:1px dashed var(--line-strong);color:var(--ink-3);cursor:default}
.rowitem.sel{background:var(--season-t)}
.cardmulti{display:flex;align-items:center;gap:9px;padding:8px 12px;margin-bottom:10px;border:1px dashed var(--line-strong);border-radius:12px;background:var(--paper)}
.cardmulti .cm-n{font-size:12px;color:var(--ink-2);flex:1}
.cardmulti .cm-btn{border:1px solid var(--line-strong);background:transparent;border-radius:999px;padding:4px 13px;font-size:12px;color:var(--ink-2);cursor:pointer;font-family:var(--sans);transition:.15s}
.cardmulti .cm-btn:hover{color:var(--ink-1)}
.cardmulti .cm-btn.danger{border-color:var(--zhu-t);color:var(--zhu-m)}
.cardmulti .cm-btn.danger:hover{background:var(--zhu-t)}
.cardmulti .cm-btn:disabled{color:var(--ink-4);border-color:var(--line);cursor:default}

/* ── 进行中的复盘 · 焦点卡片（阶段进度条 + 事项 + 暂停/继续/收尾） ── */
.live-bars{display:flex;gap:6px;margin:2px 2px 12px}
.live-bars .lbar{flex:1;height:4px;border-radius:999px;background:var(--line);transition:background .3s}
.live-bars .lbar.done{background:var(--qing-m)}
.live-bars .lbar.cur{background:var(--season-a)}
.live-ev{font-family:var(--kai);font-size:15px;font-weight:600;color:var(--ink-1);margin:0 2px 6px}
.live-meta{font-size:12px;color:var(--ink-3);margin:0 2px 14px}
.live-acts{display:flex;gap:10px}
.live-acts .lbtn{flex:1;height:40px;border-radius:999px;font-size:13px;cursor:pointer;font-family:var(--sans);display:inline-flex;align-items:center;justify-content:center;gap:5px;transition:.15s;padding:0;white-space:nowrap;line-height:1}
.live-acts .lbtn.ghost{border:1.5px solid var(--season-a);background:transparent;color:var(--season-a)}
.live-acts .lbtn.ghost:active{background:var(--season-t)}
.live-acts .lbtn.primary{border:none;background:var(--season-a);color:var(--on-accent);font-weight:500}
.live-acts .lbtn.primary:active{filter:brightness(.94)}
.live-acts .lbtn.danger{border-color:var(--zhu-m);color:var(--zhu-d)}
.live-acts .lbtn.danger:active{background:var(--zhu-t)}
.live-acts .lbtn.back{width:100%;border-style:dashed;border-color:var(--line-strong);color:var(--ink-3);margin-top:8px}
.live-acts .lpause{font-size:12px;letter-spacing:-1px}
.live-pager{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:12px}
.live-pager .lpage{width:26px;height:26px;border-radius:50%;border:1px solid var(--line);background:var(--pure);color:var(--ink-2);font-size:15px;line-height:1;cursor:pointer;display:grid;place-items:center;transition:.15s}
.live-pager .lpage:hover{border-color:var(--season-a);color:var(--season-a)}
.live-pager .lpage:active{transform:scale(.9);background:var(--season-t)}
.live-pager .lpag-n{font-family:var(--kai);font-size:12px;color:var(--ink-3);letter-spacing:.08em;min-width:44px;text-align:center;font-feature-settings:"tnum"}
.live-srow{padding:10px 2px;border-bottom:1px dashed var(--line);cursor:pointer}
.live-srow:last-of-type{border-bottom:none}
.live-srow:active{background:var(--season-t)}

/* Q4.3 primary 置顶（2026-09-04） */.sum-primary{display:flex;align-items:center;gap:8px;margin:2px 0 8px;padding:8px 10px;background:var(--season-t);border-radius:10px;border:1px solid var(--line)}.sum-primary .sp-tag{flex:none;font-size:11px;color:var(--dai-d);background:var(--paper);border-radius:6px;padding:2px 6px;font-weight:600}.sum-primary .sp-tx{font-size:13.5px;color:var(--ink-1);font-weight:600;line-height:1.6}
.mem-row{display:flex;align-items:center;gap:8px;padding:7px 2px;border-bottom:1px dashed var(--line)}.mem-row:last-of-type{border-bottom:none}.mem-tx{flex:1;font-size:13px;color:var(--ink-1);line-height:1.6}.mem-rm{flex:none;color:var(--ink-3);font-size:12px;padding:2px 6px;border-radius:6px;cursor:pointer}.mem-rm:active{color:var(--xue-d)}
.csat-strip{display:flex;align-items:center;gap:8px}.csat-star{width:34px;height:34px;border-radius:8px;background:var(--season-t);color:var(--ink-2);font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer;border:1px solid transparent}.csat-star.on{background:var(--dai-d);color:var(--on-accent);border-color:var(--dai-d)}.csat-tx{margin-left:6px;font-size:12px;color:var(--ink-3)}.csat-agg{margin-left:auto;font-size:11px;color:var(--ink-3);white-space:nowrap}.csat-agg b{color:var(--dai-d);font-size:13px}

/* ── 批 3（2026-09-14）· 速记：记录线的极简入口（首页底部入口窄条 + 抽屉三格）────────── */
/* 入口窄条：放在记录页内容末尾而非头部——头部是「认真记录」的主入口，速记是低摩擦备选，
   放视线末端避免变成新的填表压力（给出口不逼选）。虚线框表达「轻」的语义，与实线卡片区分。 */
.qk-entry{display:flex;align-items:center;gap:8px;margin-top:12px;padding:11px 14px;border:1px dashed var(--line);border-radius:12px;background:var(--paper);cursor:pointer;transition:.2s}
.qk-entry:active{border-color:var(--season-a)}
.qk-entry .qk-e-ico{flex:none;font-size:13px;color:var(--season-a)}
.qk-entry .qk-e-t{flex:1;min-width:0;font-size:13px;color:var(--ink-2);font-family:var(--kai);letter-spacing:.02em}
.qk-entry .qk-e-arr{flex:none;width:14px;height:14px;stroke:var(--ink-3);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
/* 抽屉三格：一句话 / 心情五档（默认全不选）/ 细分词（末位常驻「说不清」） */
.qk-cap{font-size:12px;color:var(--ink-3);margin:12px 0 7px}
.qk-cap .qk-opt{color:var(--ink-3);opacity:.75}
.qk-moods{display:flex;gap:6px}
.qk-mood{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:7px 0;border:1px solid var(--line);border-radius:10px;background:var(--pure);cursor:pointer;transition:.2s}
.qk-mood .qk-emo{font-size:15px;line-height:1}
.qk-mood .qk-nm{font-size:11px;color:var(--ink-3)}
.qk-mood.on{border-color:var(--season-a);background:var(--season-t)}
.qk-mood.on .qk-nm{color:var(--season-a);font-weight:600}
.qk-after{margin-top:10px;text-align:center;font-size:12px;color:var(--ink-3);opacity:.8;font-family:var(--kai)}

/* ── 批 4（2026-09-14）· 合规声明卡（我的页常驻：AI 标识 / 非医疗 / 危机出口）────────── */
.comply-card{margin-bottom:0}
.comply-card .cp-badge{display:inline-block;font-size:11px;color:var(--dai-d);background:var(--dai-t);border-radius:999px;padding:3px 10px;margin-bottom:8px}
.comply-card .cp-line{font-size:12px;color:var(--ink-3);line-height:1.75}
.comply-card .cp-crisis{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);color:var(--ink-2)}

/* ── 质量区 · 让数字能回答「所以呢」（2026-09-15）────────────────────────
   分数足迹条 / 分母说明 / 下一步建议。高度与颜色**按档位走 class 而非行内样式**
   ——本仓有「行内样式只减不增」棘轮（tests/unit/cross-platform.spec.mjs），
   新增可视化不得再往 .vue 里塞 style=/:style=，样式一律落这里。 */
.q-foot{display:flex;align-items:flex-end;gap:4px;height:34px;margin-top:10px}
.q-foot i{flex:1;min-height:3px;border-radius:2px;background:var(--ink-4);transition:height .5s cubic-bezier(.22,.61,.36,1)}
.q-foot i.h0{height:3px}
.q-foot i.h1{height:20%}
.q-foot i.h2{height:40%}
.q-foot i.h3{height:60%}
.q-foot i.h4{height:80%}
.q-foot i.h5{height:100%}
.q-foot i.t-jin{background:var(--jin-m)}
.q-foot i.t-qing{background:var(--qing-m)}
.q-foot i.t-dai{background:var(--dai-m)}
.q-foot i.t-ink{background:var(--ink-4)}
.q-meta{margin-top:6px;font-size:11px;color:var(--ink-3);line-height:1.7}
.q-next{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:12px;line-height:1.8;color:var(--ink-2)}

/* ── 质量区 · 自评改变率降级为「校准项」（2026-09-15 北极星换轨）────────────
   为什么降级：改变率口径 rating>=2 即「不一样了」，**不区分变好/变坏**——状态更差也加分；
   且它是自述，系统无法证伪。故不再让它独占 KPI 位，改为与客观指标并排的校准行：
   差值（感受 vs 证据）本身成为线索。 */
.q-cal{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line)}
.q-cal-row{display:flex;align-items:center;gap:8px}
.q-cal-k{font-size:12px;color:var(--ink-2)}
.q-cal-v{flex:1;font-size:13px;font-weight:500;color:var(--ink-1)}
.q-cal-note{margin-top:6px;font-size:11px;color:var(--ink-3);line-height:1.7}

