/* ==========================================================================
   选址参谋 · 日间 / 夜间双主题（theme.css）
   --------------------------------------------------------------------------
   加载顺序：type-scale.css → theme.css → app.css → 各页 extraCss → mobile.css。
   由此带来两条硬规则：

   1) 只改变量是不够的。app.css 里有 433 处硬编码色值（164 处 rgba()），
      它们不走 var()，换主题时不会跟着变 —— 白字白底、白底白色叠层都在这里。
      所以下面除了令牌，还有一批「组件级覆盖」。
   2) 本文件排在 app.css 之前，同优先级必然被 app.css 盖掉。
      所以所有覆盖统一带 html[data-theme="light"] 前缀（特异性从 0,1,0 抬到 0,2,1 起），
      靠特异性取胜，而不是靠 !important 或者加载顺序。

   本文件不定义字号、行高、间距 —— 那些的唯一真源是 type-scale.css。
   组件覆盖只写真实类名，不用 [class*="..."] 这类模糊匹配（会命中不该命中的元素）。
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. 主题令牌
   -------------------------------------------------------------------------- */

/* 深色是 app.css :root 的原值，这里只用 color-scheme 告诉浏览器
   「原生滚动条 / 表单控件、下拉箭头按深色渲染」。 */
html[data-theme="dark"] { color-scheme: dark; }

/* 亮色令牌：白底、深灰字、逐级变浅的次要文字。
   对比度实测（正文 #172233 on #f4f6fa = 14.8:1，次要 #43566d = 7.0:1，
   三级 #5b6b82 = 5.0:1，全部高于 WCAG AA 的 4.5:1 / 3:1 门槛）。 */
html[data-theme="light"] {
    color-scheme: light;

    --bg: #f4f6fa;
    --bg-soft: #edf1f7;
    --panel: #ffffff;
    --panel-2: #f2f6fb;

    --line: #d9e2ee;
    --line-soft: #e5ebf3;

    --text: #172233;
    --text-2: #43566d;
    --muted: #5b6b82;

    /* 品牌色不换色相，只在白底上压深一档保证 4.5:1：
       #2f81f7 → #1f6fe0（对白 4.8:1），#17b8a6 → #0a7f71（对白 4.7:1）。 */
    --brand: #1f6fe0;
    --brand-2: #0a7f71;
    --brand-soft: rgba(31, 111, 224, .10);

    /* A 股习惯不能改：--up 永远是涨（红）、--down 永远是跌（绿）。
       只把亮度压到白底可读：#f6465d → #d81f38（5.0:1），#0ecb81 → #067a54（5.4:1）。 */
    --up: #d81f38;
    --down: #067a54;
    --warn: #96560a;
    --danger: #c9303c;

    --shadow: 0 8px 24px rgba(15, 23, 42, .08);
}

/* --------------------------------------------------------------------------
   1.1 补充令牌：给页面内联样式用
   --------------------------------------------------------------------------
   app.css 的 :root 只管全局底色令牌，管不到下面三类值，而工作台 / 盈利测算的
   内联 <style> 里原本把它们写死成 rgba(10,14,20,.96)、rgba(47,129,247,.5) 这种
   字面量 —— 内联块晚于本文件出现，同特异性必赢，日间模式下那几块永远是深色。
   所以这里把三类值也令牌化，内联样式只写 var(...)，换主题时零改动跟随：

     --line-strong  比 --line 强一档的描边，用于 hover（原来写死 #2a3949）
     --float        悬浮层（底部常驻条 / 地图浮窗）的底，半透明 + 毛玻璃
     --rgb-*        强调色的 RGB 三元组：rgba(var(--rgb-brand), .06) 这类
                    「同色相 + 低透明度」的染色底只能靠三元组跟随主题，
                    实色令牌（--brand）没有 alpha 通道可拆

   深色一档的值与原字面量逐一对齐，深色主题观感零变化。 */
html[data-theme="dark"],
html:not([data-theme]) {
    --line-strong: #2a3949;
    --float: rgba(10, 14, 20, .96);
    --rgb-brand: 47, 129, 247;
    --rgb-brand-2: 23, 184, 166;
    --rgb-warn: 240, 169, 46;
    --rgb-danger: 239, 77, 90;

    /* 青绿「文字色」。深色下就是原来的字面量 #4fd6c4，所以深色观感零变化。
       单独拎出来是因为 app.css / member.css / profit.css / tool-common.css /
       report-charts.css 里共有 50 处 `color: #4fd6c4` 直接写死了字面量 ——
       那是给深色底配的亮青，换到白底上对比度只有 1.79:1，等于文字消失。
       全部改成 var(--accent-teal-text) 之后，浅色下面统一压深到 #0a7f71（4.7:1）。 */
    --accent-teal-text: #4fd6c4;
    --accent-warn-text: #f3bb5b;
    --accent-danger-text: #ff8a93;
}

html[data-theme="light"] {
    --line-strong: #c9d5e3;
    --float: rgba(255, 255, 255, .96);
    --rgb-brand: 31, 111, 224;
    --rgb-brand-2: 10, 127, 113;
    --rgb-warn: 150, 86, 10;
    --rgb-danger: 201, 48, 60;

    /* 青绿文字色在白底上压深一档：4fd6c4(1.79:1) → 0a7f71(4.7:1)。
       深色值见上面的 dark 块，两处必须成对改。 */
    --accent-teal-text: #0a7f71;
    /* 警示 / 危险同理：f3bb5b(2.0:1) → 8a5a00(5.3:1)，ff8a93(2.3:1) → a3242f(6.4:1)。
       这三个令牌同时给 JS 内联样式用（profit.js / rent-tool.js / menu-tool.js 现读）。 */
    --accent-warn-text: #8a5a00;
    --accent-danger-text: #a3242f;

    /* 悬停态令牌的浅色值（深色定义在 app.css 的 :root 里）。
       深色主题的悬停底比正常态「亮一档」，浅色主题必须反过来「深一档」，
       所以不能共用同一个字面量 —— 这是整套 :hover 换肤的唯一开关：
         --hover-bg        中性面（按钮 / 卡片）悬停底
         --hover-veil      透明底元素（导航 / 侧栏）上的悬停叠加，白色叠加换成深色叠加
         --hover-veil-soft 表格行这类极轻反馈
         --brand-soft-text 品牌浅染底上的文字（白底上白字读不出来，换成品牌蓝）
         --btn-*-hover     白字按钮的悬停渐变：浅色下压深，白字对比度不降反升 */
    --hover-bg: #eaf0f8;
    --hover-veil: rgba(15, 23, 42, .05);
    --hover-veil-soft: rgba(15, 23, 42, .03);
    --brand-soft-text: var(--brand);
    --btn-primary-hover: linear-gradient(135deg, #2472e0, #1a5fc4);
    --btn-teal-hover: linear-gradient(135deg, #0e9488, #0a7a70);
}

/* --------------------------------------------------------------------------
   2. 主题按钮 + 图标显隐
   -------------------------------------------------------------------------- */

/* 头部按钮是方形图标钮，和 .nav-toggle（34×34、1px 边框、7px 圆角）同一套尺寸；
   放进移动菜单（.nav-extra）时改成带文案的横向胶囊。全部取变量，两个主题通用。 */
.theme-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 7px;
    width: 34px; height: 34px; padding: 0; flex: none;
    border: 1px solid var(--line); border-radius: 7px;
    background: var(--panel-2); color: var(--text-2);
    cursor: pointer; -webkit-appearance: none; appearance: none;
    transition: background-color .16s ease, border-color .16s ease, color .16s ease;
}
.theme-btn:hover { border-color: var(--brand); background: var(--brand-soft); color: var(--text); }
.theme-btn:active { transform: translateY(1px); }
.theme-btn:focus { outline: none; }
.theme-btn:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
.theme-btn svg { display: block; flex: none; }
.theme-btn > span { display: none; }

.nav-extra .theme-btn {
    width: auto; height: 32px; padding: 0 12px; justify-content: flex-start;
}
.nav-extra .theme-btn > span { display: inline; font-size: var(--fs-xs, 13px); }

/* 按当前主题只留一个图标：深色显示月亮（点了变浅），亮色显示太阳。
   补一条 :not([data-theme]) 兜底 —— 万一内联脚本被拦截、属性没写上，
   页面仍按深色渲染，太阳图标不该出现。 */
html[data-theme="dark"] .ti-sun { display: none; }
html[data-theme="light"] .ti-moon { display: none; }
html:not([data-theme]) .ti-sun { display: none; }

/* --------------------------------------------------------------------------
   3. 过渡
   -------------------------------------------------------------------------- */

/* 只给「一整块」的元素加过渡：铺到 * 上会让每次 reflow 都算一遍颜色插值，
   长表格滚动直接掉帧。 */
body,
.card, .panel, .panel-head, .table-wrap, .site-header, .site-footer,
.nav-dd-p, .btn, .input, .select, .textarea,
.chip, .budget-item, .method, .plan-card, .stat-cell, .side-nav,
.db-card, .db-kpi, .art-card, .cases-mech-card, .cases-area,
.tag, .alert, .pager a, .pager span, .map-card-head, .map-legend, .map-hint {
    transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}

/* 系统开了「减少动态效果」就一律不做过渡（比逐条 :not() 更可靠）。 */
@media (prefers-reduced-motion: reduce) {
    * { transition: none !important; animation: none !important; }
}

/* --------------------------------------------------------------------------
   4. 组件级覆盖（亮色）
   -------------------------------------------------------------------------- */

/* ---- 4.1 顶部导航 ---- */

/* 深色头是一条 rgba(8,11,17,.86) 的半透明黑：白底上会变成一整条灰带。
   换成半透明白，backdrop-filter 的毛玻璃效果才能显出后面的正文。 */
html[data-theme="light"] .site-header {
    background: rgba(255, 255, 255, .88);
    border-bottom-color: var(--line-soft);
}

/* .nav a:hover 用的是 rgba(255,255,255,.045)，在白底上等于没有 —— 悬停完全没反馈。 */
html[data-theme="light"] .nav a:hover {
    color: var(--text);
    background: var(--hover-veil);
}
html[data-theme="light"] .nav a.on { color: var(--brand); background: var(--brand-soft); }
html[data-theme="light"] .nav-dd:hover .nav-dd-t,
html[data-theme="light"] .nav-dd:focus-within .nav-dd-t,
html[data-theme="light"] .nav-dd-t.on { color: var(--brand); background: var(--brand-soft); }
html[data-theme="light"] .nav-dd-p a:hover,
html[data-theme="light"] .nav-dd-p a.on { color: var(--brand); background: var(--brand-soft); }

/* 下拉浮层的 0 16px 38px rgba(0,0,0,.55) 在白底上像一块脏影子 */
html[data-theme="light"] .nav-dd-p { box-shadow: 0 12px 30px rgba(15, 23, 42, .12); }

/* 汉堡按钮底色是写死的 #0d141e，白底上是个黑方块 */
html[data-theme="light"] .nav-toggle { background: var(--panel); border-color: var(--line); }

/* 移动端展开菜单：底色 #0b1017 必须翻白，否则菜单里的黑字全看不见。
   必须跟着 app.css 的 820px 断点走 —— 桌面端 .nav 是一条无底色的横排，
   无条件加白底 + 阴影会在头部里多出一个白盒子。 */
@media (max-width: 820px) {
    html[data-theme="light"] .nav {
        background: #ffffff;
        box-shadow: 0 18px 44px rgba(15, 23, 42, .14);
    }
}

/* 遮罩 rgba(0,0,0,.55) 在浅色页面上过重，压到 .32 */
html[data-theme="light"] .nav-mask { background: rgba(15, 23, 42, .32); }

/* 积分胶囊：命定色 #4fd6c4 在白底上只有 1.9:1，换成压深后的品牌青 */
html[data-theme="light"] .pill-points {
    color: #0a7f71;
    background: rgba(10, 127, 113, .08);
    border-color: rgba(10, 127, 113, .22);
}

/* ---- 4.2 按钮 ---- */

/* .btn:hover 的深色原值已换成 --line-strong / --hover-bg 令牌，浅色下自动取 #c9d5e3 / #eaf0f8。
   下面这条只兜底「没有自有 hover 配色」的按钮，必须排除 primary / teal / ghost / danger：
   html[data-theme="light"] 让特异性升到 (0,3,1)，会压掉 .btn-primary:hover 的 (0,2,0)，
   主按钮悬停就会变成浅灰底 + 白字 —— 正是用户报的那一幕。 */
html[data-theme="light"] .btn:not(.btn-primary):not(.btn-teal):not(.btn-ghost):not(.btn-danger):hover {
    border-color: var(--line-strong);
    background: var(--hover-bg);
}
html[data-theme="light"] .btn-primary { box-shadow: 0 6px 16px rgba(31, 111, 224, .22); }
html[data-theme="light"] .btn-danger {
    color: #c9303c;
    border-color: rgba(201, 48, 60, .30);
    background: rgba(201, 48, 60, .06);
}
html[data-theme="light"] .btn-danger:hover { background: rgba(201, 48, 60, .12); }
html[data-theme="light"] .btn-code:hover:not(:disabled) { background: rgba(31, 111, 224, .16); }

/* ---- 4.3 表单 ---- */

/* 输入框底色 #0b1119、占位符 #4d5c70 都是给深色面板配的；
   用 background-color 而不是 background 简写，避免把 .select 的内联 SVG 下拉箭头清掉。 */
html[data-theme="light"] .input,
html[data-theme="light"] .select,
html[data-theme="light"] .textarea {
    background-color: #ffffff;
    border-color: var(--line);
}
html[data-theme="light"] .input:focus,
html[data-theme="light"] .select:focus,
html[data-theme="light"] .textarea:focus {
    border-color: var(--brand);
    box-shadow: 0 0 0 3px rgba(31, 111, 224, .14);
}
html[data-theme="light"] .input::placeholder,
html[data-theme="light"] .textarea::placeholder { color: #8391a5; }

/* ---- 4.4 卡片 / 首屏 / 特性 ---- */

html[data-theme="light"] .eyebrow { color: #175fc4; }
html[data-theme="light"] .hero h1 em {
    background: linear-gradient(120deg, #1f6fe0, #0a7f71);
    -webkit-background-clip: text; background-clip: text; color: transparent;
}

/* 报价示意卡：linear-gradient(180deg,#131c2b,#0d141f) 是一整块深底，
   白字落上去全靠深色托着，翻成浅色后必须同时把描边和阴影降下来。 */
html[data-theme="light"] .quote-card {
    background: linear-gradient(180deg, #ffffff, #f4f7fc);
    border-color: var(--line);
    box-shadow: var(--shadow);
}
html[data-theme="light"] .quote-card .qc-badge {
    color: #0a7f71;
    background: rgba(10, 127, 113, .08);
    border-color: rgba(10, 127, 113, .22);
}
html[data-theme="light"] .bar { background: #e3eaf3; }
html[data-theme="light"] .qq-foot .big { color: #175fc4; }

/* 特性卡的顶部叠层是 rgba(255,255,255,.022)：白底上完全消失，
   改成一点点深色渐变，卡片才有「浮起来」的层次。 */
html[data-theme="light"] .feature { background: linear-gradient(180deg, rgba(15, 23, 42, .022), transparent); }
html[data-theme="light"] .feature:hover { border-color: var(--line-strong); }
html[data-theme="light"] .feature .ic { color: #175fc4; }

/* ---- 4.5 表格 ---- */

/* 表头 #0d141e：白底上一整条黑，且表头文字用 var(--muted) 会看不清 */
html[data-theme="light"] table.tb th {
    background: #f0f4fa;
    color: var(--muted);
    border-bottom-color: var(--line);
}
/* 行悬停 rgba(255,255,255,.018) 在白底上等于没有 */
html[data-theme="light"] table.tb tbody tr:hover { background: var(--hover-veil-soft); }
/* 斑马纹：app.css 没做，亮色下长表格更需要一条可循的行基线 */
html[data-theme="light"] table.tb tbody tr:nth-child(even) { background: #f8fafc; }
html[data-theme="light"] table.tb tbody tr:nth-child(even):hover { background: #f1f5fa; }
html[data-theme="light"] .table-wrap { border-color: var(--line-soft); }

/* ---- 4.6 徽标 / 提示 ---- */

/* 这一组全部是「浅色文字 + 半透明深色底」。底色在白底上勉强能看，
   但文字（#9aabbd / #6aa9ff / #4fd6c4 / #f3bb5b / #ff8a93 / #ff7c8c / #48d99b）
   普遍低于 3:1，必须逐个压深，不能只靠 --brand 之类的变量。 */
html[data-theme="light"] .tag-gray { background: #eef2f7; color: #43566d; }
html[data-theme="light"] .tag-blue { background: rgba(31, 111, 224, .10); color: #175fc4; }
html[data-theme="light"] .tag-teal { background: rgba(10, 127, 113, .10); color: #0a7f71; }
html[data-theme="light"] .tag-warn { background: rgba(150, 86, 10, .10); color: #8a5a00; }
html[data-theme="light"] .tag-danger { background: rgba(201, 48, 60, .10); color: #a3242f; }
html[data-theme="light"] .tag-up { background: rgba(216, 31, 56, .10); color: #b3122a; }
html[data-theme="light"] .tag-down { background: rgba(6, 122, 84, .10); color: #06663f; }

html[data-theme="light"] .alert-info {
    background: rgba(31, 111, 224, .07);
    border-color: rgba(31, 111, 224, .22);
    color: #175fc4;
}
html[data-theme="light"] .alert-warn {
    background: rgba(150, 86, 10, .07);
    border-color: rgba(150, 86, 10, .22);
    color: #8a5a00;
}
html[data-theme="light"] .alert-error {
    background: rgba(201, 48, 60, .07);
    border-color: rgba(201, 48, 60, .22);
    color: #a3242f;
}
html[data-theme="light"] .alert-success {
    background: rgba(6, 122, 84, .07);
    border-color: rgba(6, 122, 84, .22);
    color: #06663f;
}

/* ---- 4.7 分页 / 页脚 ---- */

html[data-theme="light"] .pager a:hover { border-color: var(--line-strong); color: var(--text); }
html[data-theme="light"] .site-footer { background: #eef2f8; border-top-color: var(--line-soft); }
html[data-theme="light"] .footer-bottom { color: var(--muted); }

/* ---- 4.8 工作台 / 条件面板 / 地图 ---- */

html[data-theme="light"] .report-empty { border-color: #cfd9e6; background: var(--panel); }
html[data-theme="light"] .score-cell .mini-bar { background: #e3eaf3; }
html[data-theme="light"] .rec-item .rk { background: #ebf1f8; color: var(--muted); }
html[data-theme="light"] .rec-item:first-child .rk { background: rgba(31, 111, 224, .12); color: #175fc4; }
html[data-theme="light"] .rec-item .rc-s { color: #175fc4; }
html[data-theme="light"] .step-no { color: #175fc4; border-color: rgba(31, 111, 224, .30); }
html[data-theme="light"] .spinner { border-color: #dbe3ee; border-top-color: var(--brand); }

html[data-theme="light"] .area-suggest { background: #ffffff; border-color: var(--line); }
html[data-theme="light"] .chip { background: #ffffff; border-color: var(--line); }
html[data-theme="light"] .chip:hover { border-color: var(--line-strong); color: var(--text); }
html[data-theme="light"] .chip.on { color: #175fc4; }
html[data-theme="light"] .budget-item { background: #ffffff; border-color: var(--line); }
html[data-theme="light"] .budget-item:hover { border-color: var(--line-strong); }
html[data-theme="light"] .budget-item.on .b-r { color: #175fc4; }

/* 点位小地图（条件面板）与常驻地图：底色 #0a1017 / #080d14 是瓦片没加载时的
   画布底色，浅色下应该接近页面底色，否则左上角会先闪一块黑。 */
html[data-theme="light"] .map-pick { background: #eef2f7; border-color: var(--line); }
html[data-theme="light"] .map-pick .hint { background: rgba(255, 255, 255, .86); color: var(--muted); }
html[data-theme="light"] .map-stage { background: #eef2f7; }
html[data-theme="light"] .map-legend,
html[data-theme="light"] .map-hint {
    background: rgba(255, 255, 255, .88);
    border-color: var(--line-soft);
    color: var(--muted);
}
html[data-theme="light"] .map-empty { background: rgba(255, 255, 255, .90); }
html[data-theme="light"] .map-q input,
html[data-theme="light"] .map-q button {
    background: rgba(255, 255, 255, .94);
    border-color: var(--line-soft);
}
html[data-theme="light"] .map-q-list { background: rgba(255, 255, 255, .98); border-color: var(--line); }
html[data-theme="light"] .map-zoom { background: rgba(255, 255, 255, .80); border-color: var(--line-soft); }
html[data-theme="light"] .map-zoom button:hover { background: rgba(31, 111, 224, .12); color: var(--text); }
html[data-theme="light"] .map-attr { color: rgba(23, 34, 51, .62); }
html[data-theme="light"] .map-fallback {
    background: rgba(201, 48, 60, .10);
    border-color: rgba(201, 48, 60, .38);
    color: #a3242f;
}
html[data-theme="light"] .mc-name { color: #175fc4; }
html[data-theme="light"] .map-src-badge.lv-ok { color: #0a7f71; background: rgba(10, 127, 113, .08); border-color: rgba(10, 127, 113, .32); }
html[data-theme="light"] .map-src-note.lv-warn { color: #8a5a00; }
html[data-theme="light"] .map-src-note.lv-risk { color: #a3242f; }

html[data-theme="light"] .wb-side-switch button { background: #ffffff; color: var(--muted); }
html[data-theme="light"] .wb-side-switch button.on { background: var(--brand-soft); color: #175fc4; }
html[data-theme="light"] .wb-left .panel { box-shadow: 0 10px 28px rgba(15, 23, 42, .07); }
html[data-theme="light"] .wb-left::-webkit-scrollbar-thumb { background: var(--line-strong); }

/* ---- 4.9 登录 / 注册 ---- */

html[data-theme="light"] .auth-tabs,
html[data-theme="light"] .auth-single { background: #f0f4fa; border-color: var(--line-soft); }
/* 选中态原来是 var(--panel-2)：深色下比 #0b1119 的轨道亮一档，够分辨；
   浅色下 #f2f6fb 与轨道的 #f0f4fa 几乎同色，只剩一圈 inset 描边在撑 —— 直接给纯白。 */
html[data-theme="light"] .auth-tab.is-active { background: #ffffff; color: var(--text); }
html[data-theme="light"] .auth-alt a { color: #175fc4; }
html[data-theme="light"] .invite-inline { background: rgba(10, 127, 113, .06); border-color: rgba(10, 127, 113, .20); }
html[data-theme="light"] .invite-inline .ii-badge { background: rgba(10, 127, 113, .12); color: #0a7f71; }
html[data-theme="light"] .invite-inline .ii-text { color: var(--muted); }
html[data-theme="light"] .invite-inline .ii-text strong { color: var(--text); }
html[data-theme="light"] .invite-inline .ii-text em { color: #0a7f71; }

/* ---- 4.10 会员 / 套餐 / 支付 ---- */

html[data-theme="light"] .member-head {
    background: linear-gradient(120deg, #eaf1fb, #f5f8fc);
    border-color: var(--line-soft);
}
html[data-theme="light"] .member-head .mh-r b { color: #0a7f71; }
html[data-theme="light"] .side-nav a:hover { background: var(--hover-veil); color: var(--text); }
html[data-theme="light"] .side-nav a.on { color: #175fc4; }

html[data-theme="light"] .plan-card { border-color: var(--line); }
html[data-theme="light"] .plan-card:hover { border-color: var(--line-strong); }
/* 套餐卡的虚线分隔是 rgba(255,255,255,.08)，白底上整条消失，卡片内部分层断掉 */
html[data-theme="light"] .plan-card .plan-quota { border-top-color: var(--line); }
html[data-theme="light"] .plan-card .pts,
html[data-theme="light"] .plan-card .plan-quota strong,
html[data-theme="light"] .quota-hint { color: #0a7f71; }
html[data-theme="light"] .pay-amount .pa-p { color: #0a7f71; }
html[data-theme="light"] .method { background: #ffffff; border-color: var(--line); }
html[data-theme="light"] .method:hover { border-color: var(--line-strong); }
html[data-theme="light"] .method .mi { background: #eef2f7; }
html[data-theme="light"] .method .radio { border-color: #b6c4d6; }
html[data-theme="light"] .bank-info { background: #f7fafd; border-color: #cfd9e6; }

/* ---- 4.11 富文本 / 产品页 / 资讯卡 ---- */

html[data-theme="light"] .prose table th { background: #f0f4fa; color: var(--muted); }
html[data-theme="light"] .prose a { color: #175fc4; }
html[data-theme="light"] .prose blockquote { background: rgba(31, 111, 224, .05); }
html[data-theme="light"] .prose code { background: rgba(15, 23, 42, .06); color: #0a6b4d; }
html[data-theme="light"] .prose pre { background: #f6f8fb; border-color: var(--line-soft); }

html[data-theme="light"] .pdp-cap { background: linear-gradient(180deg, #ffffff, #f6f9fd); }
html[data-theme="light"] .pdp-cap:hover { border-color: var(--line-strong); }
html[data-theme="light"] .pdp-cap-no { color: #0a7f71; }
html[data-theme="light"] .pdp-step-no { background: #ffffff; color: #0a7f71; }
html[data-theme="light"] .pdp-table thead th,
html[data-theme="light"] .pdp-table tfoot th,
html[data-theme="light"] .pdp-table tfoot td { background: #f0f4fa; }
html[data-theme="light"] .pdp-table .is-paid { background: rgba(10, 127, 113, .045); }
html[data-theme="light"] .pdp-table thead .is-paid { color: #0a7f71; }
html[data-theme="light"] .pdp-table tfoot b,
html[data-theme="light"] .pdp-free { color: #0a7f71; }

html[data-theme="light"] .art-card:hover { border-color: var(--line-strong); }

/* ---- 4.12 首页数据看板（.db-*） ---- */

/* 六张 KPI 卡是 linear-gradient(180deg,#121c2b,#0e1622)，数字色 #e9f1fa;
   白底上数字直接消失 —— 这是整页最严重的一处硬编码。 */
html[data-theme="light"] .db-kpi { background: linear-gradient(180deg, #ffffff, #f5f8fc); }
html[data-theme="light"] .db-kpi-num { color: var(--text); }
html[data-theme="light"] .db-kpi.is-accent .db-kpi-num { color: #0a7f71; }
html[data-theme="light"] .db-donut-total { fill: var(--text); }
html[data-theme="light"] .db-donut-unit { fill: var(--muted); }

/* 各种进度条轨道 #141e2b / #16202e：白底上是几条黑杠 */
html[data-theme="light"] .db-tierbar,
html[data-theme="light"] .db-city-track,
html[data-theme="light"] .db-heat-track,
html[data-theme="light"] .db-cat-track { background: #e6edf6; }

/* rgba(36,52,72,.6) 的虚线分隔在白底上偏脏，换成冷灰 */
html[data-theme="light"] .db-tierstat-row { border-top-color: rgba(15, 23, 42, .09); }
html[data-theme="light"] .db-rank-row { border-bottom-color: rgba(15, 23, 42, .09); }
html[data-theme="light"] .db-cats-1 .db-cat { border-top-color: rgba(15, 23, 42, .09); }

/* #5f7089 这一档（表头、排名序号的弱化色）在白底上勉强 4.5:1，
   统一收到 --muted，13px 才不虚。 */
html[data-theme="light"] .db-tierstat-head,
html[data-theme="light"] .db-rank-head,
html[data-theme="light"] .db-city-rank,
html[data-theme="light"] .db-heat-rank,
html[data-theme="light"] .db-rank-no,
html[data-theme="light"] .db-cat em,
html[data-theme="light"] .db-mini-legend .db-mini-hint,
html[data-theme="light"] .db-legend-item .db-legend-sub { color: var(--muted); }

html[data-theme="light"] .db-chart::-webkit-scrollbar-thumb { background: var(--line-strong); }
html[data-theme="light"] .db-rank-tier.is-core { color: #0a7f71; border-color: rgba(10, 127, 113, .32); }
html[data-theme="light"] .db-rank-tier.is-community { color: #8a5a00; border-color: rgba(150, 86, 10, .32); }

/* ---- 4.13 案例库 / 品牌合作（.cases-*） ---- */

html[data-theme="light"] .cases-kpi { background: rgba(255, 255, 255, .85); }
html[data-theme="light"] .cases-crumbbar { background: rgba(15, 23, 42, .03); }
html[data-theme="light"] .cases-crumb .sep { color: var(--muted); }
html[data-theme="light"] .cases-chip:hover { border-color: var(--line-strong); background: var(--hover-veil); }
html[data-theme="light"] .cases-chip.is-on { color: #175fc4; }
html[data-theme="light"] .cases-chip.is-on span { color: #175fc4; }
html[data-theme="light"] .cases-mech-no { color: var(--muted); }
html[data-theme="light"] .cases-tag { color: #175fc4; }
html[data-theme="light"] .cases-tier.is-core { color: #175fc4; border-color: rgba(31, 111, 224, .30); background: rgba(31, 111, 224, .07); }
html[data-theme="light"] .cases-area-bar { background: #e6edf6; }
html[data-theme="light"] .cases-lib-nums span { color: var(--muted); }
html[data-theme="light"] .cases-way { background: #f6f9fd; }
html[data-theme="light"] .cases-table thead th { background: #f0f4fa; color: var(--muted); }
html[data-theme="light"] .cases-table .is-focus { background: rgba(31, 111, 224, .05); color: var(--text); }
html[data-theme="light"] .cases-table thead .is-focus { background: rgba(31, 111, 224, .10); color: #175fc4; }
html[data-theme="light"] .cases-table-list li::before { background: #b6c4d6; }
html[data-theme="light"] .cases-cta {
    background: linear-gradient(100deg, rgba(31, 111, 224, .07), rgba(10, 127, 113, .03) 70%, transparent);
}

/* ---- 4.14 图表 / 选址体检（.ch-* .cd-* .chk-*） ---- */

html[data-theme="light"] .ch-empty { background: rgba(15, 23, 42, .02); }
html[data-theme="light"] .ch-track { background: rgba(15, 23, 42, .07); }
html[data-theme="light"] .ch-table td { border-bottom-color: rgba(15, 23, 42, .08); }

html[data-theme="light"] .cd-chart { background: #f7fafd; }
html[data-theme="light"] .cd-kpi-cell > i { color: var(--muted); }
html[data-theme="light"] .cd-tbl th { background: #f0f4fa; color: var(--text-2); border-bottom-color: var(--line); }
html[data-theme="light"] .cd-tbl td { border-bottom-color: rgba(15, 23, 42, .09); }
html[data-theme="light"] .cd-tbl tbody tr:hover { background: var(--hover-veil-soft); }
html[data-theme="light"] .cd-tbl .cd-idx { color: var(--muted); }
html[data-theme="light"] .cd-chart-n,
html[data-theme="light"] .cd-note { color: var(--muted); border-top-color: rgba(15, 23, 42, .10); }
html[data-theme="light"] .cd-tier-chain { color: #0a7f71; }
html[data-theme="light"] .cd-tier-indie { color: #8a5a00; }
html[data-theme="light"] .cd-empty-note { color: #8a5a00; background: #fffaf0; border-color: #e6c47a; }

html[data-theme="light"] .ch-catdet-kpi > div { background: #f5f8fc; border-color: var(--line-soft); }
html[data-theme="light"] .ch-catdet-kpi i { color: var(--muted); }
html[data-theme="light"] .ch-catdet-kpi b { color: var(--text); }
html[data-theme="light"] .ch-catdet-kpi small,
html[data-theme="light"] .ch-catdet-n,
html[data-theme="light"] .ch-catdet-src { color: var(--muted); }
html[data-theme="light"] .ch-catdet-h { color: var(--text-2); }

/* 选址体检档位：绿 / 橙 / 红三档的深色版在白底上过亮，按「文字色 = 深色、底色 = 8% 淡色」重配 */
html[data-theme="light"] .chk-bar { background: #e6edf6; }
html[data-theme="light"] .chk-item { background: #f7fafd; }
html[data-theme="light"] .chk-v[data-level="ok"] { color: #06663f; }
html[data-theme="light"] .chk-v[data-level="warn"] { color: #8a5a00; }
html[data-theme="light"] .chk-v[data-level="risk"] { color: #a3242f; }
html[data-theme="light"] .chk-v[data-level="todo"] { color: var(--muted); }
html[data-theme="light"] .chk-a { color: #175fc4; border-left-color: rgba(31, 111, 224, .30); }
html[data-theme="light"] .chk-todo { background: rgba(31, 111, 224, .05); border-color: rgba(31, 111, 224, .30); }
html[data-theme="light"] .chk-todo-i::before { background: rgba(31, 111, 224, .14); color: #175fc4; }
html[data-theme="light"] .chk-dot[data-level="todo"] { background: #8b9bb0; }

/* --------------------------------------------------------------------------
   5. 打印：一律按亮色出
   --------------------------------------------------------------------------
   项目里有 report_print / sample_print / profit_print 三个打印页。深色主题下直接
   Ctrl+P，浏览器会把深底整块打出来 —— 既费墨，很多打印机的色彩管理还会把它压成
   一片灰黑，正文彻底读不出。所以在 print 媒体里无条件把令牌翻成白底黑字，
   不管当前 data-theme 是 dark 还是 light。
   -------------------------------------------------------------------------- */
@media print {
    html,
    html[data-theme],
    html[data-theme="dark"],
    html[data-theme="light"] {
        --bg: #ffffff;
        --bg-soft: #ffffff;
        --panel: #ffffff;
        --panel-2: #ffffff;
        --line: #d5dbe3;
        --line-soft: #e6eaf0;
        --text: #111111;
        --text-2: #333333;
        --muted: #555555;
        --brand: #1a5fbf;
        --brand-2: #0a7f71;
        --brand-soft: rgba(26, 95, 191, .08);
        --up: #b3122a;
        --down: #06663f;
        --warn: #8a5a00;
        --danger: #a3242f;
        --shadow: none;
        color-scheme: light;
    }

    html[data-theme="light"] body,
    body { background: #ffffff !important; color: #111111 !important; }

    /* 这几个容器是「深色外壳」的代表：头部、地图区、轮播、页脚。打印时全部压白。 */
    html[data-theme="light"] .site-header,
    .site-header,
    .site-footer,
    .map-stage,
    .bcar { background: #ffffff !important; }

    /* 亮色主题下那些「靠浅底托着」的组件，打印时统一成白底细边 */
    html[data-theme="light"] .card,
    html[data-theme="light"] .panel,
    html[data-theme="light"] .db-card,
    html[data-theme="light"] .db-kpi,
    html[data-theme="light"] .cd-chart,
    html[data-theme="light"] .cases-mech-card,
    html[data-theme="light"] .pdp-cap,
    html[data-theme="light"] table.tb th,
    html[data-theme="light"] .cases-table thead th,
    html[data-theme="light"] .cd-tbl th,
    html[data-theme="light"] .pdp-table thead th { background: #ffffff !important; border-color: #dddddd !important; }

    /* 主题按钮在纸上没有意义，且会多印一个空方框 */
    .theme-btn { display: none !important; }
}

/* ==========================================================================
   6. 各页附加样式表的亮色覆盖
   --------------------------------------------------------------------------
   下面这些文件由 site.php:140 的 $extraCss 或页面内 <link> 引入，全部排在
   theme.css 之后 —— 同优先级必输。所以每条都带 html[data-theme="light"] 前缀，
   并且**原样照抄源文件的选择器层级**：源文件几段 class，这里就几段 class + 前缀，
   靠特异性取胜，不靠 !important、也不靠顺序。

   分组顺序按「用户看得到的频率」排：
     6.1 报告图表 → 6.2 会员中心 → 6.3 盈利测算 → 6.4 通用工具壳
     → 6.5 报告榜单 → 6.6 资讯 → 6.7 协议 → 6.8 结论区
     → 6.9 market.css 核查结论 → 6.10 报告页内联样式

   !important 只用了一处（6.5 的 .rb-c-sales），因为源文件自己写了 !important，
   而 !important 优先于任何特异性 —— 只有同层 !important 能抵消，理由写在那一条上。
   ========================================================================== */

/* ---- 6.1 report-charts.css（报告图表区 / 指标口径 / 品类明细 / 雷达图） ----
   这个文件自带两套白底配色：.rk-light（第 126–156 行）与 .print-wrap（第 280–334 行），
   是作者为打印页写的同一份亮色意图。下面沿用那套灰阶（#5c6a7a / #34404e / #16202e
   三级文字 + #dfe4ea / #eef1f5 两条线），只把作用域从 .rk-light 换成 data-theme：
   屏幕上切到亮色的观感 = 打印预览的白底观感，不会变成两套互不相干的白。
   数据系列色（柱 / 折线 / 扇区）一律不动。 */

/* 筛选下拉 #0d141e：#0d141e 的底在白卡片里就是一个黑洞。
   （源 .rk-form select = 0,1,1；本行 = 0,2,2） */
html[data-theme="light"] .rk-form select {
    background: #ffffff;
    color: var(--text);
    border-color: var(--line);
}
html[data-theme="light"] .rk-apply {
    background: rgba(31, 111, 224, .10);
    color: #175fc4;
    border-color: rgba(31, 111, 224, .38);
}
/* 源文件的 .rk-apply:hover（0,2,0）比上面这条基础态（0,2,1）弱，悬停会没有反馈 */
html[data-theme="light"] .rk-apply:hover { border-color: rgba(31, 111, 224, .62); }
html[data-theme="light"] .rk-active b { color: #175fc4; }
html[data-theme="light"] .rk-warn { color: #8a5a00; border-color: rgba(150, 86, 10, .26); }

/* 图表文字：#8b98a9 一档在白底上只有 2.9:1，13px 基本看不见。
   三档灰按「刻度/图例 → 轴标题 → 数据标签」逐级加深，
   #64707f = 5.0:1、#5b6b82 = 5.4:1、#34404e = 10.6:1。 */
html[data-theme="light"] .rk-chart text { fill: #526070; }
html[data-theme="light"] .rk-chart .rk-tick,
html[data-theme="light"] .rk-chart .rk-legend,
html[data-theme="light"] .rk-chart .rk-xlab { fill: #64707f; }
html[data-theme="light"] .rk-chart .rk-axis-title { fill: #5b6b82; }
html[data-theme="light"] .rk-chart .rk-label,
html[data-theme="light"] .rk-chart .rk-value { fill: #34404e; }

/* 网格 / 圆环 / 热力分格线：原来是「浅灰白压在深底上」，白底要反过来用淡蓝灰 */
html[data-theme="light"] .rk-chart .rk-gl { stroke: #dfe4ea; }
html[data-theme="light"] .rk-chart .rk-ring { stroke: var(--line-strong); }
html[data-theme="light"] .rk-chart .rk-cell { stroke: #ffffff; }
html[data-theme="light"] .rk-chart .rk-cell-0 { stroke: #eef1f5; }

/* 均值线 / 折线 / 拐点：同色相压深，不换色 —— #f0a92e→#b5761a（3.8:1）、
   #17b8a6→#0f8f81（3.6:1）。取值与 .rk-light 完全一致，色相仍是「橙=均值、青=连锁」。 */
html[data-theme="light"] .rk-chart .rk-center,
html[data-theme="light"] .rk-chart .rk-center-line { fill: #b5761a; stroke: #b5761a; }
html[data-theme="light"] .rk-chart .rk-line { stroke: #0f8f81; }
html[data-theme="light"] .rk-chart .rk-dot-chain { stroke: #0f8f81; }
html[data-theme="light"] .rk-chart .rk-dot-solo { stroke: #b5761a; }
html[data-theme="light"] .rk-chart .rk-dot-cost { fill: #ffffff; stroke: #0f8f81; }

/* 环形图/雷达图里的内联 fill 属性（_report_charts.php:153 / 373 / 413）。
   圆环空心是 fill="#111927"，白底上中心总数（pie-total 已改成 var(--text)）
   会变成深色压深色 —— 这是报告页最容易被当成「渲染坏了」的一处。 */
html[data-theme="light"] .rk-chart .pie-hole { fill: #ffffff; }
html[data-theme="light"] .rk-chart .rd-grid { stroke: #dfe4ea; }
html[data-theme="light"] .rk-chart .rd-dot { stroke: #ffffff; }
html[data-theme="light"] .rk-chart .pie-total { fill: var(--text); }
html[data-theme="light"] .rk-chart .pie-sub { fill: #64707f; }
html[data-theme="light"] .rk-chart .radar-ax { fill: #5b6b82; }

/* 区域 Top8 列表 */
html[data-theme="light"] .rk-area { border-bottom-color: #edf0f5; }
html[data-theme="light"] .rk-a-bar { background: #e8eef7; }
html[data-theme="light"] .rk-a-bar i { background: linear-gradient(90deg, rgba(31, 111, 224, .55), #2f6bbd); }
html[data-theme="light"] .rk-a-sub { color: #64707f; }

/* 点位表 / 商户固定列宽表 */
html[data-theme="light"] .rk-table th { color: #5b6b82; border-bottom-color: var(--line); }
html[data-theme="light"] .rk-table td { border-bottom-color: #edf0f5; }
html[data-theme="light"] .rk-td-brand { color: #64707f; }
html[data-theme="light"] .rk-td-chain { color: #0a7f71; background: rgba(10, 127, 113, .10); }
html[data-theme="light"] .rk-tbl-fixed th { background: #f0f4fa; color: #5b6b82; border-bottom-color: var(--line); }
html[data-theme="light"] .rk-tbl-fixed td { border-bottom-color: #edf0f5; }
html[data-theme="light"] .rk-tbl-fixed tbody tr:hover { background: var(--hover-veil-soft); }
html[data-theme="light"] .rk-tbl-fixed .muted { color: #64707f; }

/* 指标口径小字（#7d8899 在深底上刚好，白底上偏虚）与品类明细表 */
html[data-theme="light"] .rep-note,
html[data-theme="light"] .sc-note,
html[data-theme="light"] .kv-note,
html[data-theme="light"] .cat-cap,
html[data-theme="light"] .radar-src { color: #64707f; }
html[data-theme="light"] .rep-note b,
html[data-theme="light"] .cat-cap b { color: #43566d; }
html[data-theme="light"] .kv-total { border-top-color: var(--line); }
html[data-theme="light"] .kv-total b { color: var(--text); }

html[data-theme="light"] .pie-legend li { color: var(--text-2); }
html[data-theme="light"] .pie-legend .pie-pct { color: var(--muted); }
html[data-theme="light"] .cat-tbl { color: var(--text); }
html[data-theme="light"] .cat-tbl th { background: #f0f4fa; color: #5b6b82; border-bottom-color: var(--line); }
html[data-theme="light"] .cat-tbl td { border-bottom-color: #edf0f5; }
html[data-theme="light"] .cat-tbl tbody tr:hover { background: var(--hover-veil-soft); }
html[data-theme="light"] .cat-tbl .cat-name { color: var(--text); }
html[data-theme="light"] .cat-share-bar { background: #e8eef7; }
html[data-theme="light"] .cat-share-bar i { background: linear-gradient(90deg, rgba(31, 111, 224, .55), #2f6bbd); }
html[data-theme="light"] .cat-share-n { color: #43566d; }
html[data-theme="light"] .cat-more summary { color: #175fc4; }

/* 雷达图右侧读数 */
html[data-theme="light"] .radar-row { border-bottom-color: #edf0f5; }
html[data-theme="light"] .radar-row .rl { color: var(--text-2); }
html[data-theme="light"] .radar-row .rv { color: var(--text); }
html[data-theme="light"] .radar-row .rv small { color: #64707f; }

/* ---- 6.2 member.css（会员中心：首页 / 资料 / 积分 / 订单 / 充值 / 邀请） ---- */

/* 身份条是 linear-gradient(120deg,#12203a,#0f1927) 的深蓝块，里面 .mc-id-name
   跟着 body 走 var(--text) —— 亮色下就是深字压深底，整条看不见。 */
html[data-theme="light"] .mc-ident {
    background: linear-gradient(120deg, #eef4fc, #f7fafc);
    border-color: var(--line);
}
/* 侧栏余额的高亮色 #4fd6c4 在白底上 1.8:1 */
html[data-theme="light"] .mc-nav-sum .mc-ns-row b.hi { color: #0a7f71; }
/* .mc-nav a:hover 是 rgba(255,255,255,.04)，白底上等于没有悬停反馈 */
html[data-theme="light"] .mc-nav a:hover { background: var(--hover-veil); color: var(--text); }
html[data-theme="light"] .mc-nav a.on { color: #175fc4; }

/* 余额大数字：.mc-card.pay .mc-card-big 是 #4fd6c4，白卡片上 1.8:1 —— 
   这是会员中心首页最大的一个数字，必须压到 #0a7f71（4.9:1）。 */
html[data-theme="light"] .mc-card.pay .mc-card-big { color: #0a7f71; }

/* 按钮 .mc-btn 的底 #16202f / 悬停 #1a2637 是深色按钮；亮色下改成白底细边 */
html[data-theme="light"] .mc-btn { background: #ffffff; border-color: var(--line); }
html[data-theme="light"] .mc-btn:hover { border-color: var(--line-strong); background: var(--hover-bg); }
/* 上面这条基础类（0,2,1）会压掉源文件里 .mc-btn-primary（0,1,0）的渐变底 ——
   而 .mc-btn-primary 的文字是 #fff，结果就是「白底白字」的充值按钮。
   凡是覆盖了基础类，就必须把同元素上的修饰类重新声明一遍，否则一定漏。 */
html[data-theme="light"] .mc-btn.mc-btn-primary {
    background: linear-gradient(135deg, var(--brand), #1c6fe0);
    border-color: transparent;
    color: #fff;
}
html[data-theme="light"] .mc-btn.mc-btn-primary:hover {
    background: var(--btn-primary-hover);
}
html[data-theme="light"] .mc-btn[disabled],
html[data-theme="light"] .mc-btn.is-off { background: #f0f4fa; color: #7b8794; }
html[data-theme="light"] .mc-btn[disabled]:hover { border-color: var(--line-soft); background: #f0f4fa; }

/* 提示条 / 套餐卡 / 状态胶囊：#0d141e / #101c2c 的深底，文字是浅色系 */
html[data-theme="light"] .mc-alert { background: #f6f9fd; }
html[data-theme="light"] .mc-alert.ok { background: rgba(10, 127, 113, .07); border-color: rgba(10, 127, 113, .28); color: #06663f; }
html[data-theme="light"] .mc-alert.warn { background: rgba(150, 86, 10, .07); border-color: rgba(150, 86, 10, .26); color: #8a5a00; }
html[data-theme="light"] .mc-alert.err { background: rgba(201, 48, 60, .07); border-color: rgba(201, 48, 60, .28); color: #a3242f; }
html[data-theme="light"] .mc-plan { background: #ffffff; border-color: var(--line-soft); }
html[data-theme="light"] .mc-plan.hot { background: #f3f8ff; border-color: rgba(31, 111, 224, .45); }
html[data-theme="light"] .mc-plan-pts { color: #0a7f71; }
html[data-theme="light"] .mc-chip { background: #f6f9fd; border-color: var(--line); }
html[data-theme="light"] .mc-chip.ok { border-color: rgba(10, 127, 113, .35); color: #06663f; }
html[data-theme="light"] .mc-chip.warn { border-color: rgba(150, 86, 10, .35); color: #8a5a00; }
html[data-theme="light"] .mc-chip.off { border-color: rgba(201, 48, 60, .35); color: #a3242f; }

html[data-theme="light"] .mc-row-main a:hover { color: #175fc4; }
/* 积分流水：源文件是「增绿减红」（不是涨跌），只压深不改语义 —— 
   #0ecb81→#067a54（5.4:1）、#f6465d→#d81f38（5.0:1）。 */
html[data-theme="light"] .mc-row-val.up { color: #067a54; }
html[data-theme="light"] .mc-row-val.down { color: #d81f38; }
html[data-theme="light"] .mc-empty a { color: #175fc4; }

/* 表单校验态与消息：边框只有 2:1，压到实色；文字从浅色系换深色系 */
html[data-theme="light"] .mc-field.is-bad .input,
html[data-theme="light"] .mc-field.is-bad .select { border-color: #c9303c; }
html[data-theme="light"] .mc-field.is-ok .input,
html[data-theme="light"] .mc-field.is-ok .select { border-color: #0a7f71; }
html[data-theme="light"] .mc-msg.ok { color: #06663f; }
html[data-theme="light"] .mc-msg.err { color: #a3242f; }
html[data-theme="light"] .mc-saved { color: #06663f; border-color: rgba(10, 127, 113, .35); background: rgba(10, 127, 113, .08); }
html[data-theme="light"] .mc-fail { color: #a3242f; border-color: rgba(201, 48, 60, .35); background: rgba(201, 48, 60, .08); }
html[data-theme="light"] .mc-avatar-opt:hover { border-color: var(--line-strong); }
html[data-theme="light"] .mc-avatar-opt .mc-av-none { background: #f0f4fa; }

/* 我的报告列表 */
html[data-theme="light"] .rpl-quota { background: #f6f9fd; }
html[data-theme="light"] .mrp-card:hover { border-color: var(--line-strong); }
html[data-theme="light"] .mrp-title a:hover { color: #175fc4; }
html[data-theme="light"] .mrp-bar { background: #e3eaf3; }
html[data-theme="light"] .mrp-metrics div { background: #f6f9fd; }

/* 邀请页：#4fd6c4 一共出现 11 次，是这一页的主色 —— 白底上统一压到品牌青 #0a7f71 */
html[data-theme="light"] .iv-hero-main p strong { color: #0a7f71; }
html[data-theme="light"] .iv-code {
    background: rgba(10, 127, 113, .07);
    border-color: rgba(10, 127, 113, .24);
    color: #0a7f71;
}
html[data-theme="light"] .iv-hint.is-ok { color: #0a7f71; }
html[data-theme="light"] .iv-hint.is-bad { color: var(--warn); }
html[data-theme="light"] .iv-kpi em { color: #0a7f71; }
html[data-theme="light"] .iv-tag.ok { background: rgba(10, 127, 113, .10); color: #0a7f71; }
html[data-theme="light"] .iv-tag.off { background: rgba(150, 86, 10, .10); color: #8a5a00; }
html[data-theme="light"] .iv-gain { color: #0a7f71; }
html[data-theme="light"] .iv-rules strong { color: #0a7f71; }
html[data-theme="light"] .iv-mini-s strong { color: #0a7f71; }
html[data-theme="light"] .iv-mini-c b { color: #0a7f71; }

/* ---- 6.3 profit.css（盈利测算 / 房租回本 / 菜单毛利） ----
   注意这个文件用了 --line-2 / --line-3 / --teal / --red 四个 app.css 里**不存在**的
   变量，全部落到 rgba(255,255,255,.1~.22) 的白色半透明兜底值 —— 白底上整条边线消失。
   这里一律写成实色，不再依赖兜底。 */

html[data-theme="light"] .pf-hero-chips span { background: #ffffff; }
html[data-theme="light"] .pf-ok { color: #0a7f71; }
html[data-theme="light"] .pf-bad { color: #a3242f; }
html[data-theme="light"] .pf-side::-webkit-scrollbar-thumb { background: var(--line-strong); }
html[data-theme="light"] .pf-quick { background: linear-gradient(180deg, #eef4fc, #ffffff); }
html[data-theme="light"] .pf-catmeta span { background: #f6f9fd; border-color: var(--line); }
html[data-theme="light"] .pf-catmeta b { color: #175fc4; }
html[data-theme="light"] .pf-dot-ok { background: #0a7f71; }
html[data-theme="light"] .pf-dot-bad { background: #c9303c; }

/* 四个状态徽标：浅色字 + 8~12% 淡底，白底上文字普遍 1.7~2.3:1 */
html[data-theme="light"] .pf-badge-ok { color: #0a7f71; background: rgba(10, 127, 113, .10); border-color: rgba(10, 127, 113, .26); }
html[data-theme="light"] .pf-badge-bad { color: #a3242f; background: rgba(201, 48, 60, .10); border-color: rgba(201, 48, 60, .26); }
html[data-theme="light"] .pf-badge-warn { color: #8a5a00; background: rgba(150, 86, 10, .10); border-color: rgba(150, 86, 10, .26); }

html[data-theme="light"] .pf-mode-btn.is-on { background: rgba(31, 111, 224, .12); color: #175fc4; }

/* KPI 左侧色条与数字：#4fd6c4 / #f3bb5b / #ff8a93 在白卡片上 1.7~2.3:1 */
html[data-theme="light"] .pf-kpi.is-ok::after { background: #0a7f71; }
html[data-theme="light"] .pf-kpi.is-warn::after { background: #b5761a; }
html[data-theme="light"] .pf-kpi.is-bad::after { background: #c9303c; }
html[data-theme="light"] .pf-kpi b.is-ok { color: #0a7f71; }
html[data-theme="light"] .pf-kpi b.is-warn { color: #8a5a00; }
html[data-theme="light"] .pf-kpi b.is-bad { color: #a3242f; }

/* 公式块 #0b1220 是整页最像「终端」的一处，白底上换成淡蓝底 */
html[data-theme="light"] .pf-formula {
    background: #f4f8fe;
    border-color: rgba(31, 111, 224, .28);
    color: #175fc4;
}
html[data-theme="light"] .pf-steps li::before { background: rgba(31, 111, 224, .12); color: #175fc4; }

html[data-theme="light"] .pf-bar { background: #e6edf6; }
html[data-theme="light"] .pf-invest-sum .pf-inv-refund b { color: #0a7f71; }
html[data-theme="light"] .pf-invest-sum .pf-inv-lost b { color: #a3242f; }
html[data-theme="light"] .pf-table-def td.pf-mono { color: #175fc4; }
html[data-theme="light"] .pf-cost-row .pf-cost-track { background: #e6edf6; }
html[data-theme="light"] .pf-cost-row.is-profit .pf-cost-name { color: #0a7f71; }

/* 三档风险横幅 */
html[data-theme="light"] .pf-risk-banner.lv-low { background: rgba(10, 127, 113, .08); border-color: rgba(10, 127, 113, .26); color: #06663f; }
html[data-theme="light"] .pf-risk-banner.lv-mid { background: rgba(150, 86, 10, .08); border-color: rgba(150, 86, 10, .26); color: #8a5a00; }
html[data-theme="light"] .pf-risk-banner.lv-high { background: rgba(201, 48, 60, .08); border-color: rgba(201, 48, 60, .26); color: #a3242f; }
html[data-theme="light"] .pf-risk-item { background: #f6f9fd; }
html[data-theme="light"] .pf-risk-item .pf-risk-band.b-low { color: #0a7f71; }
html[data-theme="light"] .pf-risk-item .pf-risk-band.b-mid { color: #8a5a00; }
html[data-theme="light"] .pf-risk-item .pf-risk-band.b-high { color: #a3242f; }
html[data-theme="light"] .pf-adv { background: #f6f9fd; }
html[data-theme="light"] .pf-adv.t-ok { border-left-color: #0a7f71; }
html[data-theme="light"] .pf-adv.t-warn { border-left-color: #b5761a; }
html[data-theme="light"] .pf-adv.t-bad { border-left-color: #c9303c; }

/* 点位三选一：--line-2 / --line-3 / --teal 三个变量不存在，兜底值全是白色半透明 */
html[data-theme="light"] .pf-pick-tab { border-color: var(--line); }
html[data-theme="light"] .pf-pick-tab:hover { border-color: var(--line-strong); color: var(--text); }
html[data-theme="light"] .pf-pick-tab.is-on {
    border-color: #0a7f71;
    color: #0a7f71;
    background: rgba(10, 127, 113, .10);
}
html[data-theme="light"] .pf-search-item {
    border-color: var(--line);
    background: #ffffff;
}
html[data-theme="light"] .pf-search-item:hover { border-color: var(--line-strong); }
html[data-theme="light"] .pf-search-item.is-on { border-color: #0a7f71; background: rgba(10, 127, 113, .10); }
html[data-theme="light"] .pf-search-item em { color: #0a7f71; }
html[data-theme="light"] .pf-mapbox { border-color: var(--line); }
/* 地图上的落点读数条：rgba(8,13,20,.72) 的墨块压在白地图上太重 */
html[data-theme="light"] .pf-map-tip {
    background: rgba(255, 255, 255, .93);
    color: var(--text-2);
    box-shadow: 0 1px 4px rgba(15, 23, 42, .12);
}

/* 悬浮保存条：rgba(10,15,23,.92) 在白底上是一条黑带，且盖在正文上 */
html[data-theme="light"] .pf-dock {
    background: rgba(255, 255, 255, .94);
    border-top-color: var(--line);
    box-shadow: 0 -6px 24px rgba(15, 23, 42, .06);
}
html[data-theme="light"] .pf-dock-info b.is-ok { color: #0a7f71; }
html[data-theme="light"] .pf-dock-info b.is-bad { color: #c9303c; }

/* ---- 6.4 tool-common.css（/tools/rent、/tools/menu 的共用零件） ---- */

/* 敏感度表：源文件注释写的是「回本变长 = 变差（红）」，与 A 股红涨绿跌同向，只压深 */
html[data-theme="light"] .pf-sens-up { color: #a3242f; }
html[data-theme="light"] .pf-sens-down { color: #0a7f71; }
html[data-theme="light"] .pf-sku-row { background: #f8fafd; }
html[data-theme="light"] .pf-sku-del:hover { color: #a3242f; border-color: rgba(201, 48, 60, .4); }
html[data-theme="light"] .pf-sku-add:hover { border-color: var(--brand); color: #175fc4; }
html[data-theme="light"] .pf-sku-sum .is-warn { color: #8a5a00; }
html[data-theme="light"] .pf-sku-sum .is-bad { color: #a3242f; }
html[data-theme="light"] .pf-tag { background: #f7fafd; border-color: var(--line); }
html[data-theme="light"] .pf-tag-t1 { color: #175fc4; border-color: rgba(31, 111, 224, .32); background: rgba(31, 111, 224, .10); }
html[data-theme="light"] .pf-tag-t2 { color: #0a7f71; border-color: rgba(10, 127, 113, .32); background: rgba(10, 127, 113, .10); }
html[data-theme="light"] .pf-tag-t3 { color: #8a5a00; border-color: rgba(150, 86, 10, .32); background: rgba(150, 86, 10, .10); }

/* ---- 6.5 report-rank.css（区域/商户排行榜） ----
   同样自带 .rk-light 亮色块（第 216–230 行）可直接对齐。 */

html[data-theme="light"] .rk-card-head h3::before { background: #0a7f71; }
html[data-theme="light"] .rk-empty { background: #f8fafd; }
html[data-theme="light"] .rk-peaks li { color: var(--text-2); border-bottom-color: rgba(15, 23, 42, .08); }
html[data-theme="light"] .rk-peaks b { color: #0a7f71; }

/* 榜单页签：#0a1019 的深底 + 选中态的 #17b8a6 */
html[data-theme="light"] .rb-tab { background: #f8fafd; border-color: var(--line); }
html[data-theme="light"] .rb-tab:hover { border-color: #0a7f71; color: var(--text); }
html[data-theme="light"] .rb-radio:focus-visible + .rb-tabs .rb-tab { outline-color: #0a7f71; }
html[data-theme="light"] #rbMonthly:checked ~ .rb-tabs label[for="rbMonthly"],
html[data-theme="light"] #rbRating:checked ~ .rb-tabs label[for="rbRating"],
html[data-theme="light"] #rbHot:checked ~ .rb-tabs label[for="rbHot"] {
    background: rgba(10, 127, 113, .10);
    border-color: rgba(10, 127, 113, .55);
    color: #0a7f71;
}
html[data-theme="light"] #rbMonthly:checked ~ .rb-tabs label[for="rbMonthly"] i,
html[data-theme="light"] #rbRating:checked ~ .rb-tabs label[for="rbRating"] i,
html[data-theme="light"] #rbHot:checked ~ .rb-tabs label[for="rbHot"] i { color: #0a7f71; }

html[data-theme="light"] .rb-table td { border-bottom-color: var(--line-soft); }
/* 前三名的金银铜：#ffd166 / #cfd8e3 / #d0a06a 在白底上 1.5~2.1:1，按同色相压深 */
html[data-theme="light"] .rb-table tbody tr:nth-child(1) .rb-c-rank { color: #8a5a00; }
html[data-theme="light"] .rb-table tbody tr:nth-child(2) .rb-c-rank { color: #64707f; }
html[data-theme="light"] .rb-table tbody tr:nth-child(3) .rb-c-rank { color: #8a6116; }
html[data-theme="light"] .rb-brand { color: #5b6b82; background: #eef2f7; border-color: #d9e2ee; }
html[data-theme="light"] .rb-heat-bar { background: #e6ebf1; }
html[data-theme="light"] .rb-note b { color: #8a5a00; }
/* 唯一一处 !important：源文件 report-rank.css:145 写的是
   `.rb-c-sales { color: #ffd166 !important; }`。!important 优先于任何特异性，
   常规声明无论加多少段 class 都盖不住它，只能同层 !important 抵消。
   这一处无解 —— 想彻底解决得改源文件（把 !important 去掉），但本轮禁止改它。 */
html[data-theme="light"] .rb-c-sales { color: #8a5a00 !important; }

/* ---- 6.6 news.css（资讯列表 / 资讯详情） ---- */

html[data-theme="light"] .nd-hot { color: #8a5a00; }
html[data-theme="light"] .nd-list a:hover { background: var(--hover-veil); color: var(--text); }
html[data-theme="light"] .nd-list a.on { color: #175fc4; }
html[data-theme="light"] .nd-toc .nd-list a.on { color: #175fc4; border-left-color: var(--brand); }
html[data-theme="light"] .nd-prose a { color: #175fc4; text-decoration-color: rgba(23, 95, 196, .35); }
html[data-theme="light"] .nd-prose a:hover { text-decoration-color: #175fc4; }
html[data-theme="light"] .nd-prose table th { background: #f0f4fa; color: var(--text-2); }
html[data-theme="light"] .nd-prose table tr:nth-child(even) td { background: rgba(15, 23, 42, .025); }
html[data-theme="light"] .nd-prose code { color: #0a6b4d; background: #f1f5f9; }
html[data-theme="light"] .nd-prose pre { background: #f6f8fb; border-color: var(--line-soft); }
html[data-theme="light"] .nd-pn-i:hover,
html[data-theme="light"] .nd-rel-card:hover { border-color: var(--line-strong); }

/* ---- 6.7 legal.css（服务协议 / 隐私政策） ---- */

/* #66768c 在 #f4f6fa 页底上 4.3:1，差一点点 —— 收到 --muted 的 5.0:1 */
html[data-theme="light"] .lg-toc-item.lv3 { color: #5b6b82; }
html[data-theme="light"] .lg-toc-item.on { color: #175fc4; }
html[data-theme="light"] .lg-body a { color: #175fc4; border-bottom-color: rgba(23, 95, 196, .32); }
html[data-theme="light"] .lg-body a:hover { border-bottom-color: rgba(23, 95, 196, .75); }
html[data-theme="light"] .lg-body code { background: #f1f5f9; color: #0a6b4d; }
html[data-theme="light"] .lg-body thead th { background: #f0f4fa; }
/* 1000px 以下的横向目录条：#22202f 半透明底，白底上是一片脏灰。
   必须跟着 legal.css 自己的断点走，否则桌面端侧栏会凭空多出一块底色。 */
@media (max-width: 1000px) {
    html[data-theme="light"] .lg-toc-nav .lg-toc-item { background: rgba(255, 255, 255, .92); }
}

/* ---- 6.8 conclusion.css（报告结论区 / 样例报告结论 / 打印版） ---- */

/* .cc 是 linear-gradient(180deg,#101826,#0c1220) 的深底，里面 .cc-verdict / .cc-k
   都取 var(--text) / var(--text-2) —— 亮色下是深字压深底，整块读不出来。 */
html[data-theme="light"] .cc {
    background: linear-gradient(180deg, #f7fafd, #ffffff);
    border-color: var(--line);
}
html[data-theme="light"] .cc-kpi { background: #f5f8fc; border-color: var(--line-soft); }
/* .cc-tone-*（0,1,0）挂在 .cc-kpi 元素本身上，会被上面那条 .cc-kpi（0,2,1）压掉。
   同特异性、排在后面 → 靠顺序拿回三档语义边（青 / 琥珀 / 红，都按白底可辨的实色重配）。 */
html[data-theme="light"] .cc-tone-pos { border-color: rgba(10, 127, 113, .40); }
html[data-theme="light"] .cc-tone-warn { border-color: rgba(150, 86, 10, .40); }
html[data-theme="light"] .cc-tone-neg { border-color: rgba(201, 48, 60, .40); }

/* ---- 6.9 market.css（报告市场，本轮新增） ----
   全文件 0 处硬编码色值：122 处颜色全部是 var(--xxx)，含 rgba 也走变量或纯数字透明度。
   因此亮色下自动跟随令牌，不需要任何覆盖 —— 这里只留一条注释做核查结论，不写规则。 */

/* ---- 6.10 report_show.php 页内 <style>（报告详情页顶部的只读/分享条） ----
   这两块是页面 <style> 里的深色件，用 var(--text-2) 之类令牌却写死了 #0d141e 的底，
   亮色主题下正好是「深字压深底」。它们排在 theme.css 之后，靠前缀拿到 0,2,x 赢。 */

html[data-theme="light"] .ro-banner {
    background: rgba(31, 111, 224, .07);
    border-color: rgba(31, 111, 224, .24);
    color: #175fc4;
}
html[data-theme="light"] .ro-banner b { color: var(--text); }
html[data-theme="light"] .share-box { background: #f7fafd; border-color: var(--line); }
html[data-theme="light"] .share-box .sb-h { color: var(--text-2); }
html[data-theme="light"] .share-box .sb-h small { color: var(--muted); }
html[data-theme="light"] .share-box input {
    background: #ffffff;
    border-color: var(--line);
    color: var(--text);
}
html[data-theme="light"] .share-box input:focus { border-color: rgba(31, 111, 224, .55); }
html[data-theme="light"] .share-box .sb-tip { color: var(--muted); }
html[data-theme="light"] .share-box .sb-ok { color: #0a7f71; }
/* 只读分享条里那个「选址工作台」链接写的是内联 style="color:#7db6ff"（report_show.php:87），
   内联样式只能被 !important 覆盖 —— 这是本轮第二处也是最后一处例外，
   同样属于「不改 PHP 就无解」。 */
html[data-theme="light"] .ro-banner a { color: #175fc4 !important; }
