/* ============================================================
   AZOTH · 锈湖·根源 Roots v1 —— 「证物档案 · EVIDENCE ARCHIVE」
   ------------------------------------------------------------
   正典来源: Claude Design 终版可交互原型 RustPhone.dc.html
             (review内容/UI设计/锈湖UI风参考/锈湖证物档案UI设计 (1)/,
              2026-07-05 塔拉磨合, 2026-07-19 拍板 variant=1a 档案纸)
   世界语言: 暗红棕档案底(墨粒+涟漪) → 奶油米纸物件浮在其上;
             AI 消息=钉着蜡封图钉的磨砂手稿(玫瑰暗纹透底),
             用户消息=鸦羽红票据; 按钮=火漆票券(直角+mono);
             底部导航=金属磨砂霜条(红血丝纹理)+红漆 FAB;
             serif 正文 + mono 机器声 + Cinzel 印章标题。
   工程纪律: 全部规则 scope 在 [data-theme="roots"] 下;
             仿 Claude/ChatGPT 模式一律 :not() 隔离不碰(Émile 皮教训);
             backdrop-filter 仅 3 处(状态条/导航条/聊天输入), 气泡零 blur
             (fog v3-16 教训: N 泡×blur=滚动卡顿元凶), 无 blur 环境实底降级;
             纹理全 data-URI(原型原创 SVG, 零外部资产/零版权风险);
             !important 仅用于对抗内联样式与跨文件 !important 遗留, 不外溢。
   ============================================================ */

/* ---- 1. 世界 token 覆盖 (核心契约 + roots 私有) ---- */
[data-theme="roots"] {
  --bg: #241315;
  --bg-rgb: 36, 19, 21;
  --card-bg: #2c1719;              /* 传统暗底消费者的降级面 */
  --text: #e6dcc6;                 /* bone 骨白 */
  --accent: #8c3b3b;               /* ox 牛血 (与旧值同, 存量零跳变) */
  --accent-rgb: 140, 59, 59;
  --highlight: #c45c5c;
  --completed: #5c6b50;            /* moss 苔绿 */
  --daily: #a89e86;
  --deadline: #b02a2a;             /* string 红线 */
  --gold: #b8a468;
  --shadow: 0 14px 30px rgba(0, 0, 0, 0.5);
  --mystery-1: #3a1d20;
  --mystery-2: #2c1719;

  /* roots 私有 (正典 _tokens() paper 变体原样) */
  --rl-ground2: #2c1719;
  --rl-bone: #e6dcc6;
  --rl-bone-dim: rgba(230, 220, 198, 0.55);
  --rl-paper: #e7dcc4;
  --rl-paper2: #dccfb2;
  --rl-paper-edge: #c3b48f;
  --rl-ink: #2b2119;
  --rl-ink-soft: #6a5c48;
  --rl-ox: #8c3b3b;
  --rl-string: #b02a2a;
  --rl-moss: #5c6b50;
  --rl-gold: #b8a468;
  --rl-hair: rgba(230, 220, 198, 0.14);
  --rl-thread-empty: rgba(107, 92, 72, 0.5);
  --rl-frost: rgba(233, 231, 225, 0.7);    /* 手稿灰白磨砂 (CD 原配方, 塔拉: 不是米黄) */
  --rl-frost-ink: #38363e;
  --rl-decrypt-rule: rgba(160, 42, 42, 0.42);
  --rl-decrypt-ink: rgba(92, 88, 98, 0.82);
  --rl-serif: 'Noto Serif SC', 'Songti SC', serif;
  --rl-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;
  --rl-display: 'Cinzel', 'Noto Serif SC', serif;

  /* 纹理 (正典生成算法原样 URL-encode) */
  --rl-grain-ink: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27260%27%20height%3D%27260%27%3E%3Cfilter%20id%3D%27n%27%3E%3CfeTurbulence%20type%3D%27fractalNoise%27%20baseFrequency%3D%271.1%27%20numOctaves%3D%272%27%20stitchTiles%3D%27stitch%27%20seed%3D%277%27%2F%3E%3CfeColorMatrix%20values%3D%270%200%200%200%200.72%200%200%200%200%200.68%200%200%200%200%200.58%200%200%200%200.22%200%27%2F%3E%3C%2Ffilter%3E%3Crect%20width%3D%27100%25%27%20height%3D%27100%25%27%20filter%3D%27url%28%23n%29%27%2F%3E%3C%2Fsvg%3E");
  --rl-grain-paper: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27260%27%20height%3D%27260%27%3E%3Cfilter%20id%3D%27n%27%3E%3CfeTurbulence%20type%3D%27fractalNoise%27%20baseFrequency%3D%270.9%27%20numOctaves%3D%272%27%20stitchTiles%3D%27stitch%27%20seed%3D%273%27%2F%3E%3CfeColorMatrix%20values%3D%270%200%200%200%200.12%200%200%200%200%200.09%200%200%200%200%200.07%200%200%200%200.5%200%27%2F%3E%3C%2Ffilter%3E%3Crect%20width%3D%27100%25%27%20height%3D%27100%25%27%20filter%3D%27url%28%23n%29%27%2F%3E%3C%2Fsvg%3E");
  --rl-ghost-rose: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27230%27%20height%3D%27340%27%20viewBox%3D%270%200%20230%20340%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27%232b2119%27%20stroke-opacity%3D%270.08%27%20stroke-width%3D%272.2%27%20stroke-linecap%3D%27round%27%3E%3Cpath%20d%3D%27M168%20340%20C132%20282%20188%20232%20146%20168%20C112%20116%20168%2072%20132%2014%27%2F%3E%3Cpath%20d%3D%27M150%20268%20l-30%20-16%20M150%20268%20l6%20-26%27%2F%3E%3Cpath%20d%3D%27M156%20200%20l28%20-12%20M156%20200%20l-4%20-28%27%2F%3E%3Cpath%20d%3D%27M140%20128%20l-28%20-14%20M140%20128%20l8%20-26%27%2F%3E%3Cpath%20d%3D%27M150%2076%20l26%20-8%20M150%2076%20l-6%20-22%27%2F%3E%3C%2Fg%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27%232b2119%27%20stroke-opacity%3D%270.08%27%20stroke-width%3D%271.8%27%3E%3Ccircle%20cx%3D%27132%27%20cy%3D%2718%27%20r%3D%2713%27%2F%3E%3Ccircle%20cx%3D%27132%27%20cy%3D%2718%27%20r%3D%277%27%2F%3E%3Cpath%20d%3D%27M119%2018%20q13%20-16%2026%200%20q-13%2016%20-26%200%27%2F%3E%3Ccircle%20cx%3D%27104%27%20cy%3D%27104%27%20r%3D%2710%27%2F%3E%3Ccircle%20cx%3D%27104%27%20cy%3D%27104%27%20r%3D%275%27%2F%3E%3Cpath%20d%3D%27M94%20104%20q10%20-12%2020%200%20q-10%2012%20-20%200%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
  --rl-veins: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27360%27%20height%3D%2764%27%20viewBox%3D%270%200%20360%2064%27%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27%239e2020%27%20stroke-width%3D%270.7%27%20opacity%3D%270.6%27%20stroke-linecap%3D%27round%27%3E%3Cpath%20d%3D%27M-5%2044%20C40%2030%2070%2052%20120%2034%20C160%2020%20200%2040%20250%2026%20C300%2014%20330%2034%20366%2022%27%2F%3E%3Cpath%20d%3D%27M60%208%20C80%2024%2070%2040%2096%2052%27%2F%3E%3Cpath%20d%3D%27M120%2034%20c14%206%2020%2016%2022%2026%20M120%2034%20c-6%20-10%20-4%20-20%20-14%20-28%27%2F%3E%3Cpath%20d%3D%27M250%2026%20c10%208%2012%2018%2010%2030%20M250%2026%20c8%20-8%2020%20-10%2030%20-8%27%2F%3E%3Cpath%20d%3D%27M180%2062%20C190%2042%20176%2030%20200%2016%27%2F%3E%3Cpath%20d%3D%27M300%2050%20c-6%20-12%20-18%20-14%20-30%20-12%27%2F%3E%3C%2Fg%3E%3Cg%20fill%3D%27none%27%20stroke%3D%27%23b83030%27%20stroke-width%3D%270.5%27%20opacity%3D%270.42%27%3E%3Cpath%20d%3D%27M20%2020%20C60%2034%20100%2018%20150%2040%20C200%2060%20260%2044%20320%2058%27%2F%3E%3Cpath%20d%3D%27M96%2052%20c12%20-4%2018%20-12%2018%20-22%27%2F%3E%3Cpath%20d%3D%27M215%206%20c-8%2014%20-6%2028%206%2040%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
  --rl-frost-mist: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27300%27%20height%3D%27120%27%3E%3Cfilter%20id%3D%27f%27%3E%3CfeTurbulence%20type%3D%27fractalNoise%27%20baseFrequency%3D%270.015%200.03%27%20numOctaves%3D%273%27%20stitchTiles%3D%27stitch%27%20seed%3D%279%27%2F%3E%3CfeGaussianBlur%20stdDeviation%3D%271.4%27%2F%3E%3CfeColorMatrix%20values%3D%270%200%200%200%201%200%200%200%200%201%200%200%200%200%201%200%200%200%200.55%200%27%2F%3E%3C%2Ffilter%3E%3Crect%20width%3D%27100%25%27%20height%3D%27100%25%27%20filter%3D%27url%28%23f%29%27%2F%3E%3C%2Fsvg%3E");
  --rl-ravens: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27380%27%20height%3D%27520%27%20viewBox%3D%270%200%20380%20520%27%20fill%3D%27%23b23636%27%3E%3Cg%20transform%3D%27translate%2840%20470%29%20rotate%2814%29%20scale%282.1%29%27%20opacity%3D%270.9%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28150%20412%29%20rotate%28-9%29%20scale%281.6%29%27%20opacity%3D%270.85%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%2870%20352%29%20rotate%2822%29%20scale%281.35%29%27%20opacity%3D%270.8%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28220%20352%29%20rotate%28-13%29%20scale%281.15%29%27%20opacity%3D%270.72%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28128%20292%29%20rotate%2810%29%20scale%281%29%27%20opacity%3D%270.7%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28264%20300%29%20rotate%28-22%29%20scale%281.25%29%27%20opacity%3D%270.66%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%2896%20236%29%20rotate%2818%29%20scale%280.85%29%27%20opacity%3D%270.6%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28300%20236%29%20rotate%28-10%29%20scale%280.7%29%27%20opacity%3D%270.55%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28196%20214%29%20rotate%289%29%20scale%280.62%29%27%20opacity%3D%270.55%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28326%20180%29%20rotate%28-14%29%20scale%280.52%29%27%20opacity%3D%270.5%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28240%20164%29%20rotate%2812%29%20scale%280.5%29%27%20opacity%3D%270.48%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28150%20150%29%20rotate%28-6%29%20scale%280.46%29%27%20opacity%3D%270.46%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28330%20120%29%20rotate%2810%29%20scale%280.42%29%27%20opacity%3D%270.42%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28262%20104%29%20rotate%28-8%29%20scale%280.36%29%27%20opacity%3D%270.4%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28196%2096%29%20rotate%2814%29%20scale%280.34%29%27%20opacity%3D%270.38%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28316%2066%29%20rotate%28-6%29%20scale%280.3%29%27%20opacity%3D%270.34%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28240%2054%29%20rotate%2810%29%20scale%280.26%29%27%20opacity%3D%270.32%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28286%2034%29%20rotate%28-8%29%20scale%280.24%29%27%20opacity%3D%270.3%27%3E%3Cpath%20d%3D%27M0%208%20C7%201%2011%201%2015%207%20C19%201%2023%201%2030%208%20C23%205%2019%206%2015%2011%20C11%206%207%205%200%208%20Z%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
}

/* ---- 2. 地面: 暗红棕档案底 + 墨粒 + 涟漪 (影像层, UI 之下) ---- */
html[data-theme="roots"] {
  background: var(--bg);
}
[data-theme="roots"] body {
  font-family: var(--rl-serif);
  background: transparent !important;
  background-image: none !important;
}
[data-theme="roots"] body::before {
  content: '';
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background-color: var(--bg);
  background-image:
    /* 墨粒 (screen 亮斑, 正典 groundTex opacity .4 → 混合后压淡) */
    var(--rl-grain-ink),
    /* 涟漪同心环 (正典 rippleStyle, alpha 已按 .16 层透明度预乘) */
    radial-gradient(circle at 50% 42%,
      transparent 0, transparent 8%, rgba(176, 42, 42, 0.025) 8.4%, transparent 9%,
      transparent 15%, rgba(230, 220, 198, 0.012) 15.4%, transparent 16%,
      transparent 24%, rgba(230, 220, 198, 0.01) 24.4%, transparent 25%,
      transparent 34%, rgba(230, 220, 198, 0.008) 34.4%, transparent 35%,
      transparent 46%, rgba(230, 220, 198, 0.006) 46.4%, transparent 47%),
    /* 底色渐晕 (正典 ground radial) */
    radial-gradient(circle at 30% 16%, #2c1719 0%, #1c0e10 72%);
  background-repeat: repeat, no-repeat, no-repeat;
  background-size: 260px 260px, 130% 130%, 100% 100%;
  background-position: 0 0, center 30%, 0 0;
  background-blend-mode: screen, normal, normal;
  opacity: 1;
}

/* ---- 3. 排版: serif 正文 + mono 机器声 + Cinzel 印章 ----
   (替代旧 [data-theme=roots] div{font-family !important} 地毯, d4o-b 同源雷已拆) ---- */
[data-theme="roots"] h1,
[data-theme="roots"] h2,
[data-theme="roots"] h3,
[data-theme="roots"] h4 {
  font-family: var(--rl-serif);
  font-weight: 700;
  letter-spacing: 0.03em;
}
[data-theme="roots"] .app-name {
  font-family: var(--rl-display);
  font-weight: 600;
  letter-spacing: 0.32em;
  color: var(--rl-string);
}
[data-theme="roots"] .sys-clock {
  font-family: var(--rl-mono);
  letter-spacing: 0.06em;
  color: var(--rl-bone-dim);
}

/* ---- 4. 材质: 米纸物件 (卡片=档案纸, 1a 直角双线边) ---- */
[data-theme="roots"] .mini-card,
[data-theme="roots"] .sheet {
  /* 纸面上一切 var 消费者(含内联)翻墨色;
     --bg 也翻浅纸井: 账户中心等内卡 background:var(--bg) 否则成"暗井吞墨字"(塔拉 7-20) */
  --text: var(--rl-ink);
  --bg: #efe6d2;
  --bg-rgb: 239, 230, 210;
  --card-bg: #efe6d2;
  --highlight: #a03636;
  --gold: #8a7440;
  --daily: #6a5c48;
  --mystery-1: #dccfb2;
  --mystery-2: #d3c5a5;
  background-color: var(--rl-paper);
  background-image: var(--rl-grain-paper);
  background-size: 260px 260px;
  background-blend-mode: multiply;
  color: var(--rl-ink);
  border: 1.5px double var(--rl-paper-edge);
  /* !important: index.html 四处 .sheet 弹层带内联 border-radius (哥哥初审) — 直角=档案纸语言 */
  border-radius: 2px !important;
  box-shadow: 0 6px 18px -10px rgba(0, 0, 0, 0.5);
}
[data-theme="roots"] .cell {
  --text: var(--rl-ink);
  --highlight: #a03636;
  --gold: #8a7440;
  background: var(--rl-paper) !important;
  background-image: var(--rl-grain-paper) !important;
  background-size: 260px 260px !important;
  background-blend-mode: multiply !important;
  border: 1px solid rgba(43, 33, 25, 0.16) !important;
  border-radius: 2px !important;
  color: var(--rl-ink) !important;
  font-family: var(--rl-serif) !important;
  box-shadow: 0 4px 14px -8px rgba(0, 0, 0, 0.45);
}
[data-theme="roots"] .cell.completed {
  /* 结案: 苔绿墨水洗 + 苔章边 */
  background: linear-gradient(0deg, rgba(92, 107, 80, 0.2), rgba(92, 107, 80, 0.2)), var(--rl-paper) !important;
  border-color: var(--rl-moss) !important;
  color: var(--rl-ink) !important;
}

/* ---- 4b. 日历: 一张档案纸上的整副宾果牌 (CD 时序宾果正典结构) ----
   关键: 纸面板 = .calendar-grid 整体, 格子印在纸上; 月份栏 = 题头式排版浮在暗底 */
[data-theme="roots"] .cal-nav {
  background: transparent;
  border: none;
  border-radius: 0;
  box-shadow: none;
  padding: 6px 4px 10px;
}
[data-theme="roots"] .cal-nav #cal-title {
  font-family: var(--rl-serif) !important;
  font-weight: 700;
  font-size: 22px;
  letter-spacing: 0.04em;
  color: var(--rl-bone) !important;
}
[data-theme="roots"] .cal-nav #cal-year {
  font-family: var(--rl-mono);
  font-size: 10px;
  letter-spacing: 0.34em;
  color: var(--rl-string) !important;
  opacity: 1 !important;
}
[data-theme="roots"] .cal-btn {
  color: var(--rl-string);
  font-size: 18px;
}
[data-theme="roots"] .calendar-grid {
  background-color: var(--rl-paper);
  background-image: var(--rl-grain-paper);
  background-size: 260px 260px;
  background-blend-mode: multiply;
  border: 1.5px double var(--rl-paper-edge);
  border-radius: 2px;
  box-shadow: 0 8px 22px -10px rgba(0, 0, 0, 0.55);
  padding: 12px 11px 13px;
  gap: 4px;
}
[data-theme="roots"] .weekday {
  font-family: var(--rl-mono);
  font-size: 9px;
  letter-spacing: 0.08em;
  color: var(--rl-ink-soft);
  opacity: 0.7;
}
[data-theme="roots"] .cal-day {
  background: rgba(43, 33, 25, 0.035);
  border: 1px solid rgba(43, 33, 25, 0.14);
  border-radius: 2px;
  color: var(--rl-ink-soft);
  font-family: var(--rl-mono);
}
[data-theme="roots"] .cal-day:empty {
  background: transparent;
  border-color: transparent;
}
[data-theme="roots"] .cal-day.today {
  border: 1.5px solid var(--rl-ox);
  background: rgba(43, 33, 25, 0.035);
  color: var(--rl-string);
  font-weight: 700;
}
[data-theme="roots"] .cal-day.has-data {
  background: rgba(140, 59, 59, 0.12);
  color: var(--rl-string);
}
[data-theme="roots"] .cal-day.has-data::after {
  background: var(--rl-string);
  box-shadow: 0 0 4px var(--rl-string);
}
/* 段落题头「进行中」: serif + 红线渐隐 (CD 正典) */
[data-theme="roots"] #view-calendar h3 {
  display: flex;
  align-items: center;
  gap: 9px;
  font-family: var(--rl-serif);
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--rl-bone);
}
[data-theme="roots"] #view-calendar h3::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, var(--rl-string), transparent);
  opacity: 0.5;
}
/* 缝线进度 (renderActiveList .thread-track/.thread-fill 钩子):
   虚线底 + 3px 红线缝到进度处 + 线头红结 */
[data-theme="roots"] .thread-track {
  background: transparent !important;
  border-radius: 0 !important;
  border-top: 1px dashed var(--rl-thread-empty);
  height: 5px !important;
  overflow: visible !important;
  margin-top: 3px;
}
[data-theme="roots"] .thread-track .thread-fill {
  background: transparent !important;
  height: 0 !important;
  border-top: 3px solid var(--rl-ox);
  border-radius: 0 !important;
  margin-top: -2px;
  position: relative;
  overflow: visible;
}
[data-theme="roots"] .thread-track .thread-fill::after {
  content: '';
  position: absolute;
  right: -3px;
  top: -4.5px;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--rl-string);
  box-shadow: 0 0 4px var(--rl-string);
}
[data-theme="roots"] .thread-track .thread-fill[style*="width:0%"]::after {
  display: none;
}

/* ---- 4c. 票券标签 (renderActiveList 的 .tag-chip/.diff-chip/.deadline-chip 钩子;
   !important 对抗模板内联的 Material 调色盘——塔拉点名的"AI味卡片"本体) ---- */
[data-theme="roots"] .tag-chip {
  background: transparent !important;
  color: var(--rl-ink-soft) !important;
  border: 1px solid rgba(43, 33, 25, 0.35) !important;
  border-radius: 2px !important;
  font-family: var(--rl-mono);
  letter-spacing: 0.06em;
}
[data-theme="roots"] .diff-chip {
  background: transparent !important;
  color: var(--rl-ink-soft) !important;
  border: 1px solid var(--rl-ink-soft) !important;
  border-radius: 2px !important;
  font-family: var(--rl-mono);
  letter-spacing: 0.1em;
}
[data-theme="roots"] .diff-chip[data-diff="easy"] {
  color: var(--rl-moss) !important;
  border-color: var(--rl-moss) !important;
}
[data-theme="roots"] .diff-chip[data-diff="hard"] {
  background: var(--rl-ox) !important;
  color: #f0e4d6 !important;
  border-color: var(--rl-ox) !important;
}
[data-theme="roots"] .diff-chip[data-diff="hell"] {
  background: var(--rl-string) !important;
  color: #f7ecdf !important;
  border-color: var(--rl-string) !important;
}
[data-theme="roots"] .diff-chip[data-diff="custom"] {
  color: #8a7440 !important;
  border-color: #8a7440 !important;
}
[data-theme="roots"] .deadline-chip {
  background: var(--rl-string) !important;
  color: #f7ecdf !important;
  border-radius: 2px !important;
  font-family: var(--rl-mono);
}
/* 难度左边条(模板内联)压平: 档案纸统一双线边, 难度信号走票券章 */
[data-theme="roots"] .mini-card[style*="border-left"] {
  border-left: 1.5px double var(--rl-paper-edge) !important;
}

/* ---- 4d. 信息管理 · 卷宗架化 (塔拉 7-20: 纯纸太单调, 上档案母题) ---- */
[data-theme="roots"] #panel-character-manager .sheet .header {
  background: var(--rl-paper) !important;
  border-bottom: 1px dashed var(--rl-decrypt-rule) !important;
  box-shadow: none !important;
}
[data-theme="roots"] #character-manager-title {
  font-family: var(--rl-display) !important;
  font-size: 15px;
  letter-spacing: 0.3em;
  color: var(--rl-string) !important;
}
/* 分组条 = 卷宗批次: mono 宽字距牛血字 */
[data-theme="roots"] #character-list > div.char-group {
  font-family: var(--rl-mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  color: var(--rl-ox);
}
/* 角色头像 = 红线圈证件照 */
[data-theme="roots"] #character-list img {
  border: 1.5px solid rgba(176, 42, 42, 0.45) !important;
}
/* 会话行 = 索引卡: 素纸均匀边 + 抽卡手感
   🔴 红线: 任何"彩色左边条"都是塔拉反例图(不喜欢的AI味卡片)本体, roots 全域禁用 */
[data-theme="roots"] .character-session-item {
  background: var(--rl-paper);
  border: 1px solid rgba(43, 33, 25, 0.18);
  border-radius: 2px;
  transition: transform 0.13s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}
[data-theme="roots"] .character-session-item:hover {
  transform: translateX(3px);
  box-shadow: 0 6px 14px -10px rgba(0, 0, 0, 0.5);
  border-color: rgba(140, 59, 59, 0.5);
}
[data-theme="roots"] .character-session-name {
  font-family: var(--rl-serif);
  font-weight: 600;
}
[data-theme="roots"] .character-session-desc {
  font-family: var(--rl-mono);
  font-size: 10px;
  color: var(--rl-ink-soft);
}
/* 新建窗口 = 虚线登记票 (「登记新证物」语气) */
[data-theme="roots"] #character-list button.btn-sec[style*="calc(100% - 20px)"] {
  border: 1.5px dashed rgba(140, 59, 59, 0.55);
  color: var(--rl-ox);
  background: rgba(140, 59, 59, 0.04);
  font-family: var(--rl-mono);
  letter-spacing: 0.12em;
}
/* 底部双 tab = 卡片索引突耳: mono + 图钉红点 */
[data-theme="roots"] .character-manager-tabs {
  background: var(--rl-paper);
  border-top: 1px dashed var(--rl-decrypt-rule);
}
[data-theme="roots"] .character-manager-tab {
  font-family: var(--rl-mono);
  letter-spacing: 0.08em;
  color: var(--rl-ink-soft);
  position: relative;
}
[data-theme="roots"] .character-manager-tab.active {
  color: var(--rl-string);
}
[data-theme="roots"] .character-manager-tab.active::after {
  content: '';
  position: absolute;
  bottom: -3px;
  left: 50%;
  transform: translateX(-50%);
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--rl-string);
  box-shadow: 0 0 6px var(--rl-string);
}
/* 纸面装饰: 红线钉串(右缘垂落) + 墨渍飞溅 + 涟漪观测水印 (塔拉 7-20 三图定调) */
[data-theme="roots"] .character-manager-tab-page {
  background-image:
    url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27300%27%20height%3D%27560%27%20viewBox%3D%270%200%20300%20560%27%20fill%3D%27none%27%3E%3Cpath%20d%3D%27M285%2025%20C200%2095%20265%20190%20175%20255%20C95%20315%20235%20400%20130%20500%27%20stroke%3D%27%239e2020%27%20stroke-width%3D%271.1%27%20opacity%3D%270.45%27%2F%3E%3Cg%20fill%3D%27%237a1414%27%3E%3Ccircle%20cx%3D%27285%27%20cy%3D%2725%27%20r%3D%274%27%2F%3E%3Ccircle%20cx%3D%27175%27%20cy%3D%27255%27%20r%3D%274%27%2F%3E%3Ccircle%20cx%3D%27130%27%20cy%3D%27500%27%20r%3D%274%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
    url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27220%27%20height%3D%27220%27%3E%3Cg%20fill%3D%27%237a1414%27%20opacity%3D%270.07%27%3E%3Ccircle%20cx%3D%2732%27%20cy%3D%2744%27%20r%3D%272.2%27%2F%3E%3Ccircle%20cx%3D%2739%27%20cy%3D%2751%27%20r%3D%271%27%2F%3E%3Ccircle%20cx%3D%27170%27%20cy%3D%27128%27%20r%3D%272.7%27%2F%3E%3Ccircle%20cx%3D%27162%27%20cy%3D%27136%27%20r%3D%271.2%27%2F%3E%3Ccircle%20cx%3D%2796%27%20cy%3D%27182%27%20r%3D%271.5%27%2F%3E%3Ccircle%20cx%3D%27201%27%20cy%3D%2736%27%20r%3D%271.3%27%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),
    radial-gradient(circle at 50% 92%,
    transparent 0 10%, rgba(140, 59, 59, 0.05) 10.4% 10.8%,
    transparent 11.2% 18%, rgba(43, 33, 25, 0.045) 18.4% 18.8%,
    transparent 19.2% 27%, rgba(43, 33, 25, 0.035) 27.4% 27.8%,
    transparent 28.2% 38%, rgba(43, 33, 25, 0.025) 38.4% 38.8%,
    transparent 39%);
  background-repeat: no-repeat, repeat, no-repeat;
  background-position: right 4px top 50px, 0 0, 0 0;
  background-size: 300px 560px, 220px 220px, auto;
}

/* ---- 4e. 拼贴装饰层: 证物板"物件感" (塔拉 7-20 三图定调: 歪/叠/贴/钉) ---- */
/* 金色角花: 侧栏弹层纸面对角 (参考 锈湖(15) 装饰框; 炼金暗面板豁免) */
[data-theme="roots"] .sidebar-panel .sheet:not(.alchemy-sheet) {
  background-image:
    url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%2764%27%20height%3D%2764%27%20viewBox%3D%270%200%2064%2064%27%20fill%3D%27none%27%20stroke%3D%27%23b8a468%27%20stroke-width%3D%271.3%27%20opacity%3D%270.55%27%3E%3Cpath%20d%3D%27M3%2061%20V13%20Q3%203%2013%203%20H61%27%2F%3E%3Cpath%20d%3D%27M9%2061%20V17%20Q9%209%2017%209%20H61%27%20opacity%3D%270.6%27%2F%3E%3Ccircle%20cx%3D%2713%27%20cy%3D%2713%27%20r%3D%272.6%27%2F%3E%3C%2Fsvg%3E"),
    url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%2764%27%20height%3D%2764%27%20viewBox%3D%270%200%2064%2064%27%20fill%3D%27none%27%20stroke%3D%27%23b8a468%27%20stroke-width%3D%271.3%27%20opacity%3D%270.55%27%3E%3Cpath%20d%3D%27M61%203%20V51%20Q61%2061%2051%2061%20H3%27%2F%3E%3Cpath%20d%3D%27M55%203%20V47%20Q55%2055%2047%2055%20H3%27%20opacity%3D%270.6%27%2F%3E%3Ccircle%20cx%3D%2751%27%20cy%3D%2751%27%20r%3D%272.6%27%2F%3E%3C%2Fsvg%3E"),
    var(--rl-grain-paper);
  background-repeat: no-repeat, no-repeat, repeat;
  background-position: 7px 7px, right 7px bottom 7px, 0 0;
  background-size: 64px 64px, 64px 64px, 260px 260px;
  background-blend-mode: normal, normal, multiply;
}
/* 胶带贴角: 任务卡 / 会话索引卡 (CD collage tapeStyle 原样) */
[data-theme="roots"] #active-list .mini-card,
[data-theme="roots"] #character-list .character-session-item {
  position: relative;
}
[data-theme="roots"] #active-list .mini-card::before,
[data-theme="roots"] #character-list .character-session-item::before {
  content: '';
  position: absolute;
  top: -7px;
  left: 16px;
  width: 46px;
  height: 15px;
  background: rgba(200, 190, 160, 0.5);
  transform: rotate(-4deg);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
  z-index: 2;
  pointer-events: none;
}
/* 微歪: 打破打印店排版 (hover 时"被拿起"回正) */
[data-theme="roots"] #active-list .mini-card:nth-child(odd) { transform: rotate(-0.35deg); }
[data-theme="roots"] #active-list .mini-card:nth-child(even) { transform: rotate(0.3deg); }
[data-theme="roots"] #character-list .character-session-item:nth-child(odd) { transform: rotate(-0.3deg); }
[data-theme="roots"] #character-list .character-session-item:nth-child(even) { transform: rotate(0.28deg); }
/* (题头邮戳已撤 — 塔拉 7-20) */

/* ---- 5. 控件: 火漆票券按钮 + 口供输入槽 ---- */
[data-theme="roots"] .btn {
  background: var(--rl-ox);
  color: #f0e4d6;
  border: 1px solid #6e2020;
  border-radius: 2px;
  font-family: var(--rl-mono);
  font-weight: 600;
  letter-spacing: 0.1em;
  box-shadow: 0 2px 0 rgba(0, 0, 0, 0.28), inset 0 1px 0 rgba(255, 236, 223, 0.22);
}
[data-theme="roots"] .btn:active {
  /* 印章落下 */
  transform: translateY(1px);
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.28);
}
[data-theme="roots"] .btn-sec {
  background: transparent;
  color: var(--text);
  border: 1.5px double var(--rl-bone-dim);
  border-radius: 2px;
  font-family: var(--rl-mono);
  letter-spacing: 0.08em;
}
[data-theme="roots"] .mini-card .btn-sec,
[data-theme="roots"] .sheet .btn-sec {
  border-color: rgba(43, 33, 25, 0.45);
}
[data-theme="roots"] .btn-sec.active {
  background: var(--rl-ox);
  color: #f0e4d6;
  border-color: var(--rl-ox);
}
/* 渗漏圈: 仿 Claude / 仿 ChatGPT 模式内的表单控件一律不碰 (Émile 皮教训③);
   checkbox/radio/range/color/file 不是文本槽, 上底色会画出"白圆点"(塔拉 7-20 炼金面板实锤) */
[data-theme="roots"] input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] select:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] textarea:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  background: rgba(230, 220, 198, 0.07);
  border: 1px solid rgba(230, 220, 198, 0.22);
  border-radius: 3px;
  color: var(--text);
  font-family: var(--rl-serif);
}
[data-theme="roots"] input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *):focus,
[data-theme="roots"] select:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *):focus,
[data-theme="roots"] textarea:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *):focus {
  border-color: rgba(176, 42, 42, 0.65);
  box-shadow: 0 0 0 1px rgba(176, 42, 42, 0.3);
  outline: none;
}
/* 纸面上的输入槽翻墨色 (炼金面板豁免: 它在 roots 下是自洽的暗底+骨白设计) */
[data-theme="roots"] .mini-card input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] .mini-card select:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] .mini-card textarea:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] .sheet input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="file"]):not(.alchemy-sheet *):not(.alchemy-selector-sheet *):not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] .sheet select:not(.alchemy-sheet *):not(.alchemy-selector-sheet *):not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] .sheet textarea:not(.alchemy-sheet *):not(.alchemy-selector-sheet *):not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  background: rgba(43, 33, 25, 0.05);
  border-color: rgba(43, 33, 25, 0.28);
  color: var(--rl-ink);
}
/* 暗岛回骨白: 炼金秘语在 roots 下有自己的暗色 token 家族, 纸面重映射一律退出 */
[data-theme="roots"] .alchemy-sheet,
[data-theme="roots"] .alchemy-selector-sheet {
  --text: var(--rl-bone);
  --card-bg: #2c1719;
  --highlight: #c45c5c;
  --gold: var(--rl-gold);
  --daily: #a89e86;
  --mystery-1: #3a1d20;
  --mystery-2: #2c1719;
  --bg: #241315;
  --bg-rgb: 36, 19, 21;
  color: var(--alchemy-text, var(--rl-bone));
  background-image: none;
}

/* ---- 6. 壳: 顶部档案条 + 底部金属霜条导航 (正典 frosted pill + 红血丝) ---- */
[data-theme="roots"] .status-bar {
  background: rgba(36, 19, 21, 0.78);
  backdrop-filter: blur(18px) saturate(110%);
  -webkit-backdrop-filter: blur(18px) saturate(110%);
  border-bottom: 1px solid var(--rl-hair);
  box-shadow: none;
}
[data-theme="roots"] .balance-pill {
  background: var(--rl-paper);
  color: var(--rl-ox);
  border: 1px solid var(--rl-paper-edge);
  border-radius: 2px;
  font-family: var(--rl-mono);
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.35);
}
[data-theme="roots"] .nav-bar {
  left: 12px;
  right: 12px;
  width: auto;
  bottom: max(10px, env(safe-area-inset-bottom));
  border-radius: 26px;
  padding: 9px 4px;
  padding-bottom: 9px;
  /* 7-22 塔拉: 学「口供输入槽」(.chat-input-wrap) 的通透深色毛玻璃——极淡骨白薄色 over 深底 blur，
     不再堆 0.27-0.42 冷白高光 + frost-mist 磨砂雾（旧版糊成不透光的奶白亚克力=塑料感）。
     只留一丝锈湖红纹签名(soft-light 融入)。 */
  border: 1px solid rgba(230, 220, 198, 0.22);
  border-top: 1px solid rgba(230, 220, 198, 0.32);
  background-color: transparent;
  background-image:
    var(--rl-veins),
    linear-gradient(150deg, rgba(230, 220, 198, 0.14), rgba(230, 220, 198, 0.055));
  background-repeat: repeat-x, no-repeat;
  background-size: 360px 60px, 100% 100%;
  background-position: 0 bottom, 0 0;
  background-blend-mode: soft-light, normal;
  backdrop-filter: blur(20px) saturate(128%);
  -webkit-backdrop-filter: blur(20px) saturate(128%);
  box-shadow: 0 14px 34px -14px rgba(0, 0, 0, 0.6),
              inset 0 1px 0 rgba(255, 255, 255, 0.16);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  [data-theme="roots"] .status-bar {
    background: rgba(36, 19, 21, 0.96);
  }
  [data-theme="roots"] .nav-bar {
    background-color: rgba(52, 32, 30, 0.94);
  }
}
/* 霜条上的墨色图标 (基座 opacity .4 换成色彩本身带灰度) */
[data-theme="roots"] .nav-item {
  /* 7-22 塔拉: 玻璃改通透深色后，旧的深墨图标(0.72)在深底上发灰看不清——改骨白，
     与「口供输入槽」深底骨白文字同理。选中仍红绳色。 */
  color: rgba(232, 223, 202, 0.82);
  opacity: 1;
  position: relative;
  font-family: var(--rl-mono);
  letter-spacing: 0.04em;
}
[data-theme="roots"] .nav-item.active {
  color: var(--rl-string);
  filter: drop-shadow(0 1px 3px rgba(176, 42, 42, 0.5));
}
[data-theme="roots"] .nav-item.active::after {
  /* 图钉红点 */
  content: '';
  position: absolute;
  bottom: -4px;
  left: 50%;
  transform: translateX(-50%);
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--rl-string);
  box-shadow: 0 0 6px var(--rl-string);
}
[data-theme="roots"] .nav-item.active .nav-icon {
  background: transparent;
  padding: 0;
}
[data-theme="roots"] .add-icon-circle {
  /* 红漆蜡封 FAB; --bg 局部重映射让内联 color:var(--bg) 的 + 号翻奶油色 */
  --bg: #f7ecdf;
  background: radial-gradient(circle at 40% 30%, #c25050, #6e1f22 72%);
  box-shadow: 0 12px 24px -5px rgba(110, 31, 34, 0.75),
              inset 0 2px 0 rgba(255, 236, 223, 0.45),
              0 0 0 4px rgba(255, 252, 246, 0.34);
  transform: translateY(-8px);
}

/* ---- 7. 聊天 native 皮 · 「审讯记录」 ----
   AI 消息=钉图钉的磨砂手稿(米纸+玫瑰暗纹+虚线封条),
   用户消息=鸦羽红票据(3/15 不对称角)。
   !important: 对抗内联 bubbleStyle 与跨主题深色遗留, 仅 roots 作用域内。 */
/* 聊天全屏自铺档案底 + 乌鸦群 (覆盖层不透 body, fog 同款做法) */
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) {
  background-color: var(--bg) !important;
  background-image:
    /* 暗纱 (正典 ravenBg 渐变原值) */
    linear-gradient(180deg, rgba(24, 14, 14, 0.58) 0%, rgba(20, 12, 12, 0.7) 55%, rgba(20, 12, 12, 0.82) 100%),
    /* 三联水墨鸟壁纸 (塔拉 7-19 授权, 出处.jpg 压缩版) */
    url('roots-assets/chat-bg.jpg'),
    radial-gradient(circle at 30% 14%, #2c1719 0%, #1a0d0f 70%) !important;
  background-repeat: no-repeat, no-repeat, no-repeat !important;
  background-size: 100% 100%, cover, 100% 100% !important;
  background-position: 0 0, center top, 0 0 !important;
  background-blend-mode: normal !important;
}
[data-theme="roots"] .chat-messages {
  font-family: var(--rl-serif);
  background: transparent;
}
/* 滚动区独立合成层, 与档案底解耦 (fog v3-19 性能教训) */
[data-theme="roots"] #character-chat-messages:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
  background: transparent !important;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  transform: translateZ(0);
  will-change: scroll-position;
}
/* AI 手稿 */
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
  --text: var(--rl-frost-ink);
  --accent: var(--rl-ox);
  --highlight: #a03636;
  /* 手稿内结构化卡片/嵌套件翻纸色 (哥哥初审: 暗 --card-bg 配墨字会隐形) */
  --card-bg: #efe6d2;
  --mystery-1: #dccfb2;
  --mystery-2: #d3c5a5;
  --gold: #8a7440;
  --daily: #6a5c48;
  background-color: var(--rl-frost) !important;
  background-image:
    /* 毛边侧影 (正典 deckle 渐变) */
    linear-gradient(90deg, rgba(58, 42, 34, 0.16) 0, transparent 5%, transparent 95%, rgba(58, 42, 34, 0.16) 100%),
    /* 玫瑰暗纹透底 (右侧, multiply) */
    var(--rl-ghost-rose),
    /* 纸粒 */
    var(--rl-grain-paper) !important;
  background-repeat: no-repeat, no-repeat, repeat !important;
  background-size: 100% 100%, 230px 340px, 260px 260px !important;
  background-position: 0 0, right -14px top -18px, 0 0 !important;
  background-blend-mode: normal, multiply, multiply !important;
  color: var(--rl-frost-ink) !important;
  border: 1px solid rgba(70, 52, 40, 0.24) !important;
  border-top: 1px dashed var(--rl-decrypt-rule) !important;
  border-bottom: 1px dashed var(--rl-decrypt-rule) !important;
  border-radius: 9px !important;
  box-shadow: 0 12px 30px -16px rgba(0, 0, 0, 0.55),
              inset 0 1px 0 rgba(255, 255, 255, 0.36),
              inset 8px 0 12px -10px rgba(50, 34, 26, 0.3),
              inset -8px 0 12px -10px rgba(50, 34, 26, 0.3) !important;
  font-family: var(--rl-serif);
  line-height: 1.8;
  letter-spacing: 0.015em;
  padding: 20px 18px 14px !important; /* 顶部给蜡封图钉留位 (内联 14px 不够) */
  /* CD 原配方毛玻璃 (塔拉 7-19: 气泡要灰白磨砂非米黄实底; QA 盯滚动帧率, 卡则降级实底) */
  backdrop-filter: blur(13px) saturate(120%);
  -webkit-backdrop-filter: blur(13px) saturate(120%);
  text-shadow: 0 0 0.7px rgba(40, 38, 46, 0.55), 0 0 1.4px rgba(60, 58, 66, 0.22);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  [data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
    background-color: rgba(233, 231, 225, 0.94) !important;
  }
}
/* 蜡封图钉 (泡内顶部居中小红点) */
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *)::after {
  content: '';
  position: absolute;
  top: 6px;
  left: 50%;
  transform: translateX(-50%);
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: radial-gradient(circle at 38% 30%, #e05a5a, #7a1414 72%);
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.45), 0 0 0 1px rgba(0, 0, 0, 0.18);
  pointer-events: none;
}
/* 用户鸦羽红票据 */
[data-theme="roots"] .chat-message-bubble[data-msg-role="user"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
  --text: #f7ecdf;
  background: linear-gradient(155deg, rgba(178, 74, 74, 0.96), var(--rl-ox) 46%, #6e1f22 100%) !important;
  color: #f7ecdf !important;
  border: 1px solid rgba(255, 220, 200, 0.22) !important;
  border-radius: 3px 15px 3px 15px !important;
  box-shadow: 0 14px 26px -10px rgba(0, 0, 0, 0.68),
              0 4px 10px -4px rgba(110, 31, 34, 0.55),
              inset 0 1.5px 0 rgba(255, 236, 223, 0.35),
              inset 0 -6px 12px -6px rgba(0, 0, 0, 0.4) !important;
  font-family: var(--rl-serif);
  line-height: 1.55;
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  /* 手稿/票据本就实底, 无需降级 */
}
/* 头像红线圈 (对抗内联 border) */
[data-theme="roots"] .chat-msg-avatar-ai:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
  border: 1.5px solid rgba(176, 42, 42, 0.55) !important;
}
/* 页边打字机小字 */
[data-theme="roots"] .chat-date-separator {
  font-family: var(--rl-mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  color: var(--rl-bone-dim);
}
[data-theme="roots"] .chat-message-time {
  font-family: var(--rl-mono);
  letter-spacing: 0.04em;
}
/* 手稿内引用/摘录块: 全局深底白字反色规则在米纸上隐形, 同 fog 修法压回墨色 */
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"] .quote-block,
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"] .excerpt-block {
  background: rgba(43, 33, 25, 0.06);
  border-color: rgba(43, 33, 25, 0.18);
  border-left-color: var(--rl-ox);
}
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"] .quote-block-header,
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"] .excerpt-block-header {
  color: rgba(43, 33, 25, 0.66);
}
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"] .quote-block-content,
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"] .excerpt-block-content {
  color: var(--rl-frost-ink);
}
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"] .quote-block:hover {
  background: rgba(43, 33, 25, 0.1);
}

/* 手稿落款封条 (CD 正典: 底部虚线 + —— 角色名 · 时间; 名字走 data-char-name 属性) */
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) .chat-message-time {
  display: block;
  border-top: 1px dashed var(--rl-decrypt-rule);
  margin-top: 12px !important;
  padding-top: 8px;
  text-align: right !important;
  font-family: var(--rl-mono) !important;
  font-size: 9px !important;
  letter-spacing: 0.04em;
  color: var(--rl-decrypt-ink) !important;
  opacity: 1 !important;
}
[data-theme="roots"] .chat-message-bubble[data-msg-role="assistant"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) .chat-message-time::before {
  content: '\2014\2014 ' attr(data-char-name) ' \00b7 ';
  margin-right: 2px;
}

/* 用户票据时间戳: 移到泡下方 (塔拉 7-19 指令, CD 正典位) */
/* full 模式: 时间戳在泡内 → 绝对定位甩到泡下 (泡自带 position:relative) */
[data-theme="roots"] .chat-message-bubble[data-msg-role="user"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) .chat-message-time {
  position: absolute !important;
  top: calc(100% + 4px) !important;
  right: 2px !important;
  left: auto !important;
  bottom: auto !important;
  margin: 0 !important;
  white-space: nowrap;
  color: var(--rl-bone-dim) !important;
  font-family: var(--rl-mono) !important;
  font-size: 9.5px !important;
  letter-spacing: 0.04em;
  opacity: 1 !important;
}
/* split 模式: 时间戳是泡外兄弟(内联把它吸到泡左侧) → 改回文档流落到泡下 */
[data-theme="roots"] #character-chat-messages .chat-message-meta-outside[style*="right:calc"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *),
[data-theme="roots"] #character-chat-messages .chat-message-meta-outside[style*="right: calc"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
  position: static !important;
  margin-top: 4px !important;
  text-align: right !important;
  color: var(--rl-bone-dim) !important;
  font-family: var(--rl-mono) !important;
  font-size: 9.5px !important;
  letter-spacing: 0.04em;
}
/* 泡内时间戳被甩出后, 撑开行距防叠字 */
[data-theme="roots"] .chat-message-bubble[data-msg-role="user"]:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
  margin-bottom: 16px;
}

/* ---- 7b. 默认皮输入区 · 「写下口供」霜条 (fog 7c 同构) ---- */
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude)>div:last-child {
  background: transparent !important;
  border-top: none !important;
  box-shadow: none !important;
}
/* 霜条容器 = .chat-input-wrap, 内部 textarea 全透明 (双框病根治) */
[data-theme="roots"] .chat-input-wrap:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  background: linear-gradient(150deg, rgba(230, 220, 198, 0.12), rgba(230, 220, 198, 0.05));
  border: 1px solid rgba(230, 220, 198, 0.2);
  border-radius: 14px;
  box-shadow: 0 10px 26px -12px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.18);
  backdrop-filter: blur(16px) saturate(130%);
  -webkit-backdrop-filter: blur(16px) saturate(130%);
}
[data-theme="roots"] .chat-input-wrap:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *):focus-within {
  border-color: rgba(176, 42, 42, 0.55);
  box-shadow: 0 10px 26px -12px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(176, 42, 42, 0.3);
}
[data-theme="roots"] #character-chat-input:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *) {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  color: var(--rl-bone) !important;
  font-family: var(--rl-serif);
}
[data-theme="roots"] #character-chat-input:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *):focus {
  border: none !important;
  box-shadow: none !important;
  outline: none !important;
}
[data-theme="roots"] #character-chat-input:not(.chat-ui-mode-chatgpt *):not(.chat-ui-mode-claude *)::placeholder {
  color: var(--rl-bone-dim);
}
[data-theme="roots"] .chat-input-newline-btn:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  color: var(--rl-bone-dim);
  font-family: var(--rl-mono);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  [data-theme="roots"] .chat-input-wrap:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
    background: rgba(52, 32, 30, 0.94);
  }
}

/* ---- 7b-2. 输入行: 容器全透明+渐隐, 按键与麦克风同素 (塔拉 7-20 三改) ---- */
/* .input-row 自带 var(--card-bg) 暗底 (style.css) — 透明化, 渐隐给 wrapper */
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) .input-container-wrapper {
  background: linear-gradient(0deg, rgba(36, 19, 21, 0.85) 45%, rgba(36, 19, 21, 0.35) 80%, transparent) !important;
  border-top: none !important;
  box-shadow: none !important;
}
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) .input-row {
  background: transparent !important;
  border-top: none !important;
  box-shadow: none !important;
}
/* 三键与麦克风同素: 无底无边, 骨白线图标 */
[data-theme="roots"] .plus-btn:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] #character-ai-reply-btn:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *),
[data-theme="roots"] #character-voice-btn:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  background: transparent !important;
  border: none !important;
  color: var(--rl-bone-dim) !important;
  box-shadow: none !important;
  opacity: 1;
}
/* AI 回复键 → 羽毛笔线图标 (塔拉 7-20 点名换 SVG; 原聊天泡图标藏起) */
[data-theme="roots"] #character-ai-reply-btn:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27rgba%28230%2C220%2C198%2C0.62%29%27%20stroke-width%3D%271.8%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Cpath%20d%3D%27M20.24%2012.24a6%206%200%200%200-8.49-8.49L5%2010.5V19h8.5z%27%2F%3E%3Cline%20x1%3D%2716%27%20y1%3D%278%27%20x2%3D%272%27%20y2%3D%2722%27%2F%3E%3Cline%20x1%3D%2717.5%27%20y1%3D%2715%27%20x2%3D%279%27%20y2%3D%2715%27%2F%3E%3C%2Fsvg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: center !important;
  background-size: 21px 21px !important;
}
[data-theme="roots"] #character-ai-reply-btn:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) svg {
  display: none;
}
/* 发送钮 → 红漆方章 (图标不藏: 生成中会切停止态, 换壳保功能);
   内联 stroke:var(--bg) 靠局部重映射翻奶油色 */
[data-theme="roots"] .send-btn:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  --bg: #f7ecdf;
  background: linear-gradient(150deg, rgba(178, 74, 74, 0.95), #6e1f22) !important;
  color: #f7ecdf !important;
  border-radius: 10px !important;
  box-shadow: 0 4px 10px -3px rgba(110, 31, 34, 0.6),
              inset 0 1px 0 rgba(255, 236, 223, 0.35) !important;
}

/* ---- 7b-3. 聊天顶栏: 档案头 (塔拉 7-19 指令) ---- */
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) .chat-top-header {
  /* CD 正典: 顶栏透明浮在档案底上, 只留 hairline (塔拉 7-19 二改) */
  background: transparent !important;
  border-bottom: 1px solid var(--rl-hair) !important;
  box-shadow: none !important;
}
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) #chat-avatar {
  border: 1.5px solid var(--rl-string) !important;
}
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) #chat-character-name {
  color: var(--rl-bone) !important;
  font-family: var(--rl-serif);
  font-weight: 700;
  letter-spacing: 0.05em;
}
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) #chat-status-text,
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) #chat-message-counter {
  font-family: var(--rl-mono);
  letter-spacing: 0.05em;
  color: var(--rl-bone-dim) !important;
  opacity: 1 !important;
}
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) .chat-top-header .tool-icon {
  color: var(--rl-bone);
}
[data-theme="roots"] #character-chat-screen:not(.chat-ui-mode-chatgpt):not(.chat-ui-mode-claude) #chat-back-btn {
  color: var(--rl-bone);
}

/* ---- 7c. 图书馆 · 卷宗架 (fog 7d 同构: 去卡片化 hairline 行) ---- */
[data-theme="roots"] #library-screen {
  background-color: var(--bg) !important;
  background-image:
    radial-gradient(circle at 30% 14%, #2c1719 0%, #1a0d0f 70%) !important;
  background-repeat: no-repeat !important;
  background-size: 100% 100% !important;
}
[data-theme="roots"] .bsf-list-row {
  background: transparent !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 18px 2px !important;
  margin-bottom: 0 !important;
  border-bottom: 1px solid var(--rl-hair);
}
[data-theme="roots"] .bsf-list-row:active {
  transform: none;
  opacity: 0.7;
}
[data-theme="roots"] .bsf-list-cover {
  border-radius: 1px;
  filter: sepia(0.28) contrast(1.05) brightness(0.92);
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.4);
}
[data-theme="roots"] .bsf-list-title {
  font-family: var(--rl-serif);
  font-weight: 700;
  color: var(--text);
}
[data-theme="roots"] .bsf-list-author,
[data-theme="roots"] .bsf-list-desc {
  color: var(--rl-bone-dim);
}
[data-theme="roots"] .bsf-tag {
  font-family: var(--rl-mono);
  font-size: 9px;
  letter-spacing: 0.08em;
  background: transparent;
  border: 1px solid rgba(230, 220, 198, 0.28);
  border-radius: 2px;
  color: var(--rl-bone-dim);
}
[data-theme="roots"] .bsf-list-meta {
  font-family: var(--rl-mono);
  font-size: 10px;
  color: var(--rl-bone-dim);
}

/* ---- 8. 旧 roots 专属组件迁移 (原 style.css 块, 换新色板) ---- */
[data-theme="roots"] .gacha-banner {
  background: linear-gradient(135deg, #3a1d20, #140a0b) !important;
}
[data-theme="roots"] .vesper-comment {
  background: #1a0d0e;
  color: var(--rl-bone);
  /* 🔴 左彩条=AI味反例本体, 改均匀细边 */
  border: 1px solid rgba(230, 220, 198, 0.16) !important;
  border-radius: 2px;
}

/* ---- 9b. 交互动效: 证物档案手感 (塔拉 7-20: 鼠标/按键主题动效) ----
   语言: 纸的抬起落下 / 印章按压 / 红线延伸 / 结案盖章; 禁弹跳弹性 (brief §4) */
[data-theme="roots"] .mini-card,
[data-theme="roots"] .cell {
  transition: transform 0.16s ease-out, box-shadow 0.16s ease-out;
}
[data-theme="roots"] .mini-card:hover,
[data-theme="roots"] .cell:hover {
  transform: translateY(-2px) rotate(-0.2deg);
  box-shadow: 0 12px 26px -12px rgba(0, 0, 0, 0.6);
}
[data-theme="roots"] .mini-card:active,
[data-theme="roots"] .cell:active {
  transform: translateY(0) rotate(0deg);
  box-shadow: 0 3px 10px -8px rgba(0, 0, 0, 0.5);
  transition-duration: 0.06s;
}
[data-theme="roots"] .btn {
  transition: transform 0.08s ease, box-shadow 0.08s ease, filter 0.15s ease;
}
[data-theme="roots"] .btn:hover {
  filter: brightness(1.08);
}
[data-theme="roots"] .btn:active {
  transform: translateY(1px) scale(0.985);
}
/* 日历格: hover 红染, 按下如落印 */
[data-theme="roots"] .cal-day {
  transition: background 0.14s ease, transform 0.08s ease;
}
[data-theme="roots"] .cal-day:hover {
  background: rgba(140, 59, 59, 0.08);
}
[data-theme="roots"] .cal-day:active {
  transform: scale(0.92);
}
/* 结案盖章: completed 出现时落一下章 */
@keyframes roots-stamp {
  0%   { transform: scale(1.18) rotate(-5deg); opacity: 0.3; }
  70%  { transform: scale(0.96) rotate(0.5deg); opacity: 1; }
  100% { transform: scale(1) rotate(0); opacity: 1; }
}
[data-theme="roots"] .cell.completed {
  animation: roots-stamp 0.22s ease-out both;
}
/* 红线延伸: 段落题头进场时红线画出 */
@keyframes roots-thread-draw {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}
[data-theme="roots"] #view-calendar h3::after {
  transform-origin: left center;
  animation: roots-thread-draw 0.5s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
/* 票券章 hover 反白 (按墨) */
[data-theme="roots"] .tag-chip,
[data-theme="roots"] .diff-chip {
  transition: background 0.15s ease, color 0.15s ease;
}
[data-theme="roots"] .tag-chip:hover {
  background: rgba(43, 33, 25, 0.85) !important;
  color: var(--rl-paper) !important;
}
/* 卷宗行 hover: 左缘红线渗出 */
[data-theme="roots"] .bsf-list-row {
  transition: box-shadow 0.18s ease, opacity 0.18s ease;
}
[data-theme="roots"] .bsf-list-row:hover {
  box-shadow: inset 3px 0 0 var(--rl-string);
}
/* 图标 hover 染红 (羽毛笔是底图色不吃 currentColor, 其余全吃) */
[data-theme="roots"] .tool-icon:hover,
[data-theme="roots"] .plus-btn:hover,
[data-theme="roots"] #character-voice-btn:hover {
  color: var(--rl-string) !important;
}
[data-theme="roots"] .nav-item {
  transition: color 0.2s ease, transform 0.2s ease;
}
[data-theme="roots"] .nav-item:hover {
  color: rgba(246, 239, 225, 0.98);
  transform: translateY(-1px);
}
/* 红漆 FAB: 按压蜡封 */
[data-theme="roots"] .add-icon-circle {
  transition: transform 0.15s ease, box-shadow 0.2s ease;
}
[data-theme="roots"] .add-icon-circle:active {
  transform: translateY(-8px) scale(0.92);
}
/* ---- 9c. 全域动效铺装 (塔拉 7-20 二反馈: 侧边栏/面板/所有按键都得有) ----
   注: 手机无 hover, 体感主要靠 :active 按压 + 面板开启滑纸 */
/* 面板开启 = 档案纸滑入 (所有 .sidebar-panel 弹层通用) */
@keyframes roots-sheet-up {
  from { transform: translateY(22px); opacity: 0; }
  to   { transform: none; opacity: 1; }
}
[data-theme="roots"] .sidebar-panel.active .sheet {
  animation: roots-sheet-up 0.28s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
/* 通用按键 = 印章按压 (模式皮隔离) */
[data-theme="roots"] button:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *) {
  transition: transform 0.1s ease, filter 0.15s ease, opacity 0.15s ease,
              background 0.15s ease, box-shadow 0.15s ease;
}
[data-theme="roots"] button:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *):hover {
  filter: brightness(1.08);
}
[data-theme="roots"] button:not(.chat-ui-mode-claude *):not(.chat-ui-mode-chatgpt *):active {
  transform: translateY(1px) scale(0.97);
}
/* 侧边栏条目: hover 右移 + 左缘红线渗出 */
[data-theme="roots"] .sidebar-menu-item {
  transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease, color 0.15s ease;
}
[data-theme="roots"] .sidebar-menu-item:hover {
  transform: translateX(3px);
  box-shadow: inset 3px 0 0 var(--rl-string);
}
[data-theme="roots"] .sidebar-menu-item:active {
  transform: translateX(3px) scale(0.98);
}
/* 战术面板格 / 商店卡 / 账户行 */
[data-theme="roots"] .tool-item,
[data-theme="roots"] .shop-item,
[data-theme="roots"] .account-settings-list button,
[data-theme="roots"] .account-personalization-entry {
  transition: transform 0.13s ease, background 0.15s ease, box-shadow 0.15s ease;
}
[data-theme="roots"] .tool-item:active {
  transform: scale(0.94);
}
[data-theme="roots"] .shop-item:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 22px -12px rgba(0, 0, 0, 0.6);
}
[data-theme="roots"] .shop-item:active {
  transform: scale(0.97);
}

@media (prefers-reduced-motion: reduce) {
  [data-theme="roots"] .mini-card:hover,
  [data-theme="roots"] .cell:hover,
  [data-theme="roots"] .nav-item:hover,
  [data-theme="roots"] .sidebar-menu-item:hover,
  [data-theme="roots"] .shop-item:hover { transform: none; }
  [data-theme="roots"] .cell.completed { animation: none; }
  [data-theme="roots"] #view-calendar h3::after { animation: none; }
  [data-theme="roots"] .sidebar-panel.active .sheet { animation: none; }
}

/* ---- 9. 动效: 翻纸落定 (正典 rp-rise, 240ms) ---- */
@keyframes roots-rise {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}
[data-theme="roots"] .view.active {
  animation: roots-rise 0.24s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}
@media (prefers-reduced-motion: reduce) {
  [data-theme="roots"] .view.active { animation: none; }
  [data-theme="roots"] .btn:active { transform: none; }
}
