/*
Theme Name: TREE NEWS Theme
Theme URI: https://treenews.cn
Author: TREE NEWS Team
Description: Tree News — Web3 与 AI 财经媒体主题（VI 绿色浅色设计系统）
Version: 3.59.0
Text Domain: treefinance-theme
*/

/* ═══════════════════════════════════════════
   DESIGN TOKENS — TREE NEWS VI (LIGHT)

   企业标准色四款，取自 VI 手册《TREE NEWS 3.1》「企业标准色」页，
   下面标了 VI 的即为规范原值，不得随意改动；其余为在此之上派生的
   界面用色（表面、分隔、状态），改派生值不影响品牌一致性。

     #A0EE04  品牌主绿      → --brand
     #75BA2A  品牌辅绿      → --brand-2
     #A0A0A0  标准灰        → --ink-4
     #E1E1E1  标准浅灰      → --line
   ═══════════════════════════════════════════ */

:root {
    /* Brand (VI) */
    --brand: #A0EE04;             /* VI 主绿：大面积图形 / 高亮 / 按钮底（配深色文字） */
    --brand-2: #75BA2A;           /* VI 辅绿：图标 / 描边 / 装饰 */
    --brand-text: #3F7A0A;        /* 文字级绿色（白底 ≥5:1，VI 主绿在白底上不达对比度） */
    --brand-tint: rgba(160, 238, 4, 0.12);
    --brand-tint-strong: rgba(160, 238, 4, 0.24);
    --brand-2-tint: rgba(117, 186, 42, 0.12);
    --on-brand: #182402;          /* 品牌底色上的深色文字 */

    /* 标志同款渐变：主绿 → 辅绿。标志、Banner、强调块共用一条，
       避免各处自行调角度与色值，出现「几种不一样的品牌绿」 */
    --brand-gradient: linear-gradient(135deg, #A0EE04, #75BA2A);
    --brand-wash: #EAF7D2;        /* 主绿淡化到可作大面积底色 */
    --brand-wash-2: #D9F2A8;      /* 同上，渐变的另一端 */

    /* Surfaces */
    --page: #FFFFFF;              /* 页面底（统一白背景） */
    /* 半透明面：页头等带毛玻璃的层，必须跟随主题，不能写死白色 */
    --surface-blur: rgba(255, 255, 255, 0.92);
    /* ── 卡片分层 ──
       两站都不用边框划分版块，而是让卡片底色与页面底色差一档：
       金色 #FCFCFC on #FFF（暗一档），链捕手 #1A1D22 on #111316（亮一档）。
       边框会把每个模块框成一个个方盒子，视觉噪音大；色差分层更安静，
       模块之间靠间距呼吸即可。 */
    --card: #FAFAF8;          /* 卡片底：比页面白暗一档 */
    --card-2: #F4F5F1;        /* 卡片内的次级块 */
    --card-radius: 10px;      /* 抄两站的量级：金色 8 / 链捕手 12，取中 */
    --card-pad: 14px 16px;
    --card-gap: 12px;         /* 版块之间靠间距分隔，不靠线 */
    --paper: #FFFFFF;             /* 卡片 */
    --paper-2: #FAFBF8;           /* 悬停 / 次级面 */
    --paper-3: #F1F3EE;          /* 深一级填充 */
    --panel: #F6F8F3;            /* 模块面板底（无边框分层） */
    --line-soft: rgba(26, 29, 31, 0.06); /* 面板内部分隔 */
    --hover-ink: rgba(26, 29, 31, 0.045); /* 灰底 hover */
    --row-hover: rgba(160, 238, 4, 0.18);  /* 列表项 hover 底：清晰可见的柔和品牌绿（替代过淡的 --panel/#EFF2EA）*/

    /* Text */
    --ink: #1A1D1F;
    --ink-2: #4E5459;
    --ink-3: #676E75;             /* 最浅的可读文字（白底 5.1:1，面板底 ≥4.5:1）：时间戳 / meta / 注释 */
    --ink-4: #A0A0A0;             /* VI 灰：仅占位符 / 禁用 / 装饰图标 / 边框，不许当正文色（白底只有 2.6:1） */

    /* Lines (VI grey) */
    --line: #E1E1E1;
    --line-2: #ECEEE8;

    /* Semantic */
    --up: #15803D;                /* 白底 4.9:1（原 #16A34A 只有 3.3，行情涨幅小字不达标） */
    --up-tint: rgba(22, 163, 74, 0.1);
    --down: #DC2626;
    --down-tint: rgba(220, 38, 38, 0.08);
    --info: #2563EB;
    --info-tint: rgba(37, 99, 235, 0.08);
    --warn: #B45309;
    --warn-tint: rgba(217, 119, 6, 0.1);

    /* Shadow */
    --shadow-sm: 0 1px 2px rgba(23, 28, 16, 0.05);
    --shadow-md: 0 4px 16px rgba(23, 28, 16, 0.07);
    --shadow-lg: 0 12px 40px rgba(23, 28, 16, 0.12);

    /* Radius —— 08-30 全站精修：原 2/3/4px 太尖，按钮标签都像方块；
       改成 6/8/12/16 四档，控件 sm、按钮与输入框 base、卡片 lg、弹层 xl */
    --radius-sm: 6px;
    --radius: 8px;
    --radius-lg: 12px;
    --radius-xl: 16px;
    --radius-full: 999px;

    /* Typography */
    --font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'PingFang SC',
                 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans SC', sans-serif;
    --font-display: var(--font-body);
    --font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', Menlo, monospace;

    /* ── 字阶（6 级）──
       改版前全站字号有十几个互不成比例的取值（11.5/12/12.5/13/13.5/14/14.5/15.5/16/16.5/17/17.5…），
       每加一个组件就多一个值。收敛成 6 级后，任何新组件都从这里挑，不再自行定义。
       标题不引入新字体族：五语种站（en/zh/ja/ko/vi）要覆盖就得加载多套中日韩字体，
       代价远大于收益。层级改用字重（600/700/800）与字距拉开。 */
    --fs-2xs:  11px;    /* 榜单序号、角标 —— 密集区专用，再大会撑开行高 */
    --fs-xs:   12px;    /* 标签、meta、时间戳 */
    --fs-sm:   13.5px;  /* 摘要、次要正文 */
    --fs-base: 15px;    /* 正文 */
    --fs-md:   16.5px;  /* 列表标题、卡片标题 */
    --fs-lg:   20px;    /* 区块标题 */
    --fs-xl:   28px;    /* 页面主标题 */

    --lh-tight: 1.35;   /* 标题 */
    --lh-snug:  1.5;    /* 列表项 */
    --lh-base:  1.7;    /* 正文 */

    /* ── 间距（4px 基准）──
       同样收敛：所有 margin/padding/gap 从这七个值里取。 */
    --sp-1: 4px;
    --sp-2: 8px;
    --sp-3: 12px;
    --sp-4: 16px;
    --sp-6: 24px;
    --sp-8: 32px;
    --sp-12: 48px;

    /* Layout — 整体宽度对齐金色财经（内容区 1170px + 两侧 24px 内距） */
    --container: 1218px;
    --container-narrow: 760px;
    /* 页头双行（R7）：第一行 LOGO+搜索，第二行菜单；≤768px 覆写两行的行高。
       行情跑马灯是页头的第三行，但只在有数据时渲染 —— 有它时 body.has-ticker
       把 --ticker-h 计入 --header-h（见 HEADER 段），这里的基准值是「无跑马灯」。
       全站吸顶组件（行情表头 / 融资筛选栏 / 知识区目录栏）与锚点 scroll-margin
       都以 --header-h 为偏移基准：少算跑马灯这一行，吸附位置就会钻进页头被盖住。
       右侧模块栏（热搜等）不吸顶（09-02），不吃这个变量。 */
    --header-top-h: 60px;
    --nav-h: 48px;
    --ticker-h: 35px;
    --header-h: calc(var(--header-top-h) + var(--nav-h));
    --section-gap: 32px;
    --page-top: 16px;   /* 内容区顶部与页头的统一间距（各列表/横幅页共用）*/

    /* Motion */
    --ease: cubic-bezier(0.25, 0.1, 0.25, 1);
    --ease-out: cubic-bezier(0, 0, 0.25, 1);
    --duration: 0.2s;
    --duration-slow: 0.4s;

    /* ── Legacy aliases（旧模板兼容，勿新增使用） ── */
    --gold-400: var(--brand-2);
    --gold-dim: var(--brand-tint);
    --accent-red: var(--down);
    --accent-red-dim: var(--down-tint);
    --border: var(--line);
    --border-subtle: var(--line-2);
    --bg-card: var(--paper);
    --text-primary: var(--ink);
    --text-secondary: var(--ink-2);
    --text-muted: var(--ink-3);
    --text-ghost: var(--ink-3);
    /* 下面五个在组件里已被引用但从未定义过（属性直接失效），补成现有令牌的别名 */
    --bg: var(--page);
    --surface: var(--paper);
    --surface-2: var(--paper-2);
    --ink-1: var(--ink);
    --danger: var(--down);

    color-scheme: light;
}

/* ═══════════════════════════════════════════
   暗色模式
   三种状态而不是两种：用户显式选了亮/暗时根元素有 data-theme，
   默认的「跟随系统」什么都不标 —— 大多数访客处在这个未标记状态，
   只能靠 prefers-color-scheme 区分。所以要写两遍：
     · @media 块负责「跟随系统」，用 :not([data-theme="light"]) 让显式选亮色能赢过深色系统
     · [data-theme="dark"] 负责「手动选暗色」，让它能赢过浅色系统
   两处都只重定义令牌，不碰任何组件规则 —— 组件全部走令牌，
   因此这一段之外的一万行 CSS 不需要为暗色改动。
   ═══════════════════════════════════════════ */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        color-scheme: dark;

        /* 品牌绿保持不变（VI 要求），但暗底上要换用更亮的文字级绿：
           #3F7A0A 在深底上对比度不足 2:1，读不清 */
        --brand-text: #A8DE5C;
        --brand-tint: rgba(160, 238, 4, 0.16);
        --brand-tint-strong: rgba(160, 238, 4, 0.28);
        --brand-2-tint: rgba(117, 186, 42, 0.18);
        --brand-wash: #1E2A10;
        --brand-wash-2: #2A3A16;

        /* 面：不用纯黑。纯黑配白字对比过强，长时间阅读疲劳，
           且遮不住图片边缘的暗部。用带一点绿味的深灰，与品牌同色系。 */
        --page:    #12150F;
        --surface-blur: rgba(18, 21, 15, 0.92);
        --card: #1A1F16;
        --card-2: #222819;
        --paper:   #191D15;
        --paper-2: #1F2419;
        --paper-3: #262C1F;
        --panel:   #1B2016;
        --line-soft: rgba(232, 237, 226, 0.07);
        --hover-ink: rgba(232, 237, 226, 0.06);
        --row-hover: rgba(160, 238, 4, 0.12);

        /* 字：暗底上不用纯白，降一档避免眩光 */
        --ink:   #E8EDE2;
        --ink-2: #AAB3A2;
        --ink-3: #838C7B;
        --ink-4: #5F675A;

        --line:   #2E352A;
        --line-2: #262C21;

        /* 语义色在深底上提亮，保证 ≥4.5:1 */
        --up:   #4ADE80;
        --up-tint: rgba(74, 222, 128, 0.14);
        --down: #F87171;
        --down-tint: rgba(248, 113, 113, 0.14);
        --info: #60A5FA;
        --info-tint: rgba(96, 165, 250, 0.14);
        --warn: #FBBF24;
        --warn-tint: rgba(251, 191, 36, 0.14);

        /* 深色下阴影几乎不可见，改用更深的投影拉开层次 */
        --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
        --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.45);
        --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.55);
    }
}

/* 注意：这一块必须与上面 @media 块逐项一致。之前这里漏了 --card / --card-2，
   导致手动切暗色时首页主列与侧栏卡片仍是浅色底、浅色字 */
:root[data-theme="dark"] {
    color-scheme: dark;

    --brand-text: #A8DE5C;
    --brand-tint: rgba(160, 238, 4, 0.16);
    --brand-tint-strong: rgba(160, 238, 4, 0.28);
    --brand-2-tint: rgba(117, 186, 42, 0.18);
    --brand-wash: #1E2A10;
    --brand-wash-2: #2A3A16;

    --page:    #12150F;
    --surface-blur: rgba(18, 21, 15, 0.92);
    --card: #1A1F16;
    --card-2: #222819;
    --paper:   #191D15;
    --paper-2: #1F2419;
    --paper-3: #262C1F;
    --panel:   #1B2016;
    --line-soft: rgba(232, 237, 226, 0.07);
    --hover-ink: rgba(232, 237, 226, 0.06);
    --row-hover: rgba(160, 238, 4, 0.12);

    --ink:   #E8EDE2;
    --ink-2: #AAB3A2;
    --ink-3: #838C7B;
    --ink-4: #5F675A;

    --line:   #2E352A;
    --line-2: #262C21;

    --up:   #4ADE80;
    --up-tint: rgba(74, 222, 128, 0.14);
    --down: #F87171;
    --down-tint: rgba(248, 113, 113, 0.14);
    --info: #60A5FA;
    --info-tint: rgba(96, 165, 250, 0.14);
    --warn: #FBBF24;
    --warn-tint: rgba(251, 191, 36, 0.14);

    --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
    --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.45);
    --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.55);
}

/* ═══════════════════════════════════════════
   RESET / BASE
   ═══════════════════════════════════════════ */

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html {
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    -webkit-text-size-adjust: 100%;
}

body {
    font-family: var(--font-body);
    background: var(--page);
    color: var(--ink);
    line-height: 1.65;
    font-size: var(--fs-md);
    min-height: 100dvh;
}

a {
    text-decoration: none;
    transition: color var(--duration) var(--ease);
    cursor: pointer;
}

/* 字色两条用 :where() 降到零优先级（09-01）：此前 a:hover 是 0-1-1，比组件自己的
   单类字色（0-1-0）还高，会把「自带底色的按钮型链接」的字色也劫持成 --brand-text ——
   暗色下它是浅绿，压在登录按钮的亮绿底上字直接糊掉（用户实测发现）。降权后：
   没声明过字色的普通文内链接照旧 hover 变绿（声明 > 继承），而任何组件只要自己
   声明了 color，hover 就不再被这条全局规则覆盖，各组件的交互态自己说了算。 */
:where(a) { color: inherit; }
:where(a:hover) { color: var(--brand-text); }

img { max-width: 100%; height: auto; display: block; }

button {
    font-family: inherit;
    cursor: pointer;
    border: none;
    background: none;
    color: inherit;
}

::selection { background: var(--brand); color: var(--on-brand); }

::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--line); border-radius: var(--radius-full); }
::-webkit-scrollbar-thumb:hover { background: var(--ink-4); }

/* Focus */
:focus-visible {
    outline: 2px solid var(--brand-2);
    outline-offset: 2px;
    border-radius: var(--radius-sm);
}

/* Skip link */
.skip-link {
    position: absolute;
    left: 12px;
    top: -48px;
    z-index: 2000;
    background: var(--paper);
    color: var(--ink);
    padding: 10px 16px;
    border-radius: var(--radius-sm);
    box-shadow: var(--shadow-md);
    font-size: var(--fs-base);
    transition: top var(--duration) var(--ease);
}
.skip-link:focus { top: 12px; }

/* ═══════════════════════════════════════════
   LAYOUT
   ═══════════════════════════════════════════ */

.container {
    max-width: var(--container);
    margin: 0 auto;
    padding: 0 24px;
}

.container-narrow {
    max-width: var(--container-narrow);
    margin: 0 auto;
    padding: 0 24px;
}

/* ═══════════════════════════════════════════
   HEADER
   ═══════════════════════════════════════════ */

.site-header {
    position: sticky;
    top: 0;
    z-index: 100;
    background: var(--surface-blur);
    backdrop-filter: saturate(1.4) blur(12px);
    -webkit-backdrop-filter: saturate(1.4) blur(12px);
    border-bottom: 1px solid var(--line);
}

/* 行情跑马灯占页头第三行，只在有数据时渲染（functions.php 同口径挂 has-ticker）。
   必须在 body 上重新声明 --header-h：CSS 变量在声明处求值，只覆写 --ticker-h
   改不了 :root 上已算好的继承值。main.js 还会把页头实测高度写回 body 内联
   变量兜底（字体缩放、窄屏换行等 CSS 估不到的情况，内联样式优先于本条）。 */
body.has-ticker {
    --header-h: calc(var(--header-top-h) + var(--nav-h) + var(--ticker-h));
}

.header-inner {
    max-width: var(--container);
    margin: 0 auto;
    padding: 0 24px;
    display: flex;
    align-items: center;
    gap: 32px;
}

/* 第一行：LOGO + 宽搜索条 + 快捷入口（R7 / R11） */
.header-top { height: var(--header-top-h); gap: 20px; }

/* 第二行：主导航（R7） */
.header-nav-row {
    height: var(--nav-h);
    gap: 0;
}

/* 常驻宽搜索条（R11）：白底描边胶囊 + 品牌搜索按钮（参考金色财经） */
.header-search {
    flex: 1;
    display: flex;
    align-items: center;
    gap: 8px;
    max-width: 560px;
    height: 44px;
    padding: 4px 5px 4px 18px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.header-search:focus-within {
    border-color: var(--brand-2);
    box-shadow: 0 0 0 3px var(--brand-tint);
}

.header-search-input {
    flex: 1;
    min-width: 0;
    border: none;
    background: none;
    font-size: var(--fs-base);
    color: var(--ink);
    outline: none;
}

.header-search-input::placeholder { color: var(--ink-3); }

.header-search-btn {
    align-self: stretch;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
    padding: 0 18px;
    border: 0;
    border-radius: var(--radius-full);
    background: var(--brand);
    color: var(--on-brand, #0b1a00);
    font-size: var(--fs-sm);
    font-weight: 700;
    cursor: pointer;
    transition: filter var(--duration) var(--ease);
}
.header-search-btn:hover { filter: brightness(.96); }
.header-search-btn svg { display: block; }

/* 顶部联系我们（R9） */
.header-contact {
    display: flex;
    align-items: center;
    gap: 6px;
    height: 36px;
    padding: 0 12px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-sm);
    font-weight: 500;
    color: var(--ink-2);
    white-space: nowrap;
    transition: all var(--duration) var(--ease);
}

.header-contact:hover {
    color: var(--ink);
    background: var(--paper-3);
}

/* 顶部下载图标（R39）：仅移动端出现，桌面端由右下悬浮窗承担 */
.header-dl-link { display: none; }
.header-dl-link:hover { color: var(--ink); background: var(--paper-3); }

/* Logo */
.site-logo {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
    line-height: 1;
}

/* 标志（VI 矢量原稿内联）。宽度按变体的固有比例自适应，给高度即可。
   字标取 currentColor，所以只要给 .site-logo 设文字色就能整体换色
   （深色底反白同理）。 */
.site-logo .logo-lockup {
    display: block;
    height: 30px;
    width: auto;
    color: var(--ink);
    transition: opacity var(--duration) var(--ease);
}

.site-logo:hover .logo-lockup { opacity: 0.82; }

/* 五语言统一用的英文组合横向约 8:1，比通用高度压低一档，视觉重量才不过大 */
.site-logo .logo-lockup-en { height: 25px; }

/* 纯符号变体只在窄屏页头出现（见 768px 断点），桌面端隐藏 */
.site-logo .logo-lockup-mark { display: none; height: 28px; }

/* Nav — 菜单行平铺整行（items 均匀分布），字号加大 */
/* ── 侧栏条目的可点击反馈 ──
   这三个模块改造前是纯文字块，读者不知道能点。补上 hover 态：
   整行有底色变化 + 标题变品牌色，与其余可点模块保持一致的手感。 */
.bigevents-item { border-radius: var(--radius-sm); transition: background var(--duration) var(--ease); }
.bigevents-item:hover { background: var(--row-hover); }
.bigevents-title { text-decoration: none; }
.bigevents-item:hover .bigevents-title { color: var(--brand-text); }

/* 后台没填链接的条目是纯文字，hover 的高亮会假装它能点开 */
.bigevents-item--plain,
.bigevents-item--plain:hover { background: transparent; }
.bigevents-item--plain:hover .bigevents-title { color: var(--ink-2); }

.sidecal-link {
    display: grid;
    grid-template-columns: 40px minmax(0, 1fr);
    gap: 10px;
    align-items: baseline;
    text-decoration: none;
    color: inherit;
    width: 100%;
}
.sidecal-item { border-radius: var(--radius-sm); transition: background var(--duration) var(--ease); }
.sidecal-item:hover { background: var(--row-hover); }
.sidecal-item:hover .sidecal-title { color: var(--brand-text); }

/* 日历页没建起来时条目不可点 */
.sidecal-item--plain,
.sidecal-item--plain:hover { background: transparent; }
.sidecal-item--plain:hover .sidecal-title { color: inherit; }
.sidecal-item--plain .sidecal-link { cursor: default; }

.sec-link { display: block; text-decoration: none; color: inherit; }
.sec-item { border-radius: var(--radius-sm); transition: background var(--duration) var(--ease); }
.sec-item:hover { background: var(--row-hover); }
.sec-item:hover .sec-name { color: var(--brand-text); }

/* 上游没给披露链接的事件不可点，hover 的高亮与变色会假装它能点开，一并去掉 */
.sec-item--plain,
.sec-item--plain:hover { background: transparent; }
.sec-item--plain:hover .sec-name { color: var(--ink); }
.sec-item--plain .sec-link { cursor: default; }

/* ── 安全事件（侧栏） ── */
.sec-total {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    padding-block: var(--sp-2);
    border-bottom: 1px solid var(--line-soft);
    margin-bottom: var(--sp-2);
}
.sec-total b {
    color: var(--down);
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    margin-left: var(--sp-1);
}

.sec-list { list-style: none; margin: 0; padding: 0; }

.sec-item {
    padding-block: var(--sp-2);
    border-bottom: 1px solid var(--line-soft);
}
.sec-item:last-child { border-bottom: none; }

.sec-name {
    display: block;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink);
    line-height: var(--lh-snug);
}

.sec-meta {
    display: flex;
    align-items: center;
    gap: var(--sp-2);
    margin-top: 2px;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.sec-amount {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    color: var(--down);
    font-weight: 600;
}

/* 手法名多为英文长词，窄侧栏里必须能截断，否则会把金额和日期挤出去 */
.sec-tech {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.sec-date { font-family: var(--font-mono); flex-shrink: 0; }

.sec-attrib {
    margin: var(--sp-2) 0 0;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}
.sec-attrib a { color: inherit; text-decoration: none; }
.sec-attrib a:hover { color: var(--brand-text); text-decoration: underline; }

/* ── 广告位 ──
   与内容卡明确区分：始终带「广告」角标，这是合规要求也是对读者的基本诚实。
   没有可投广告时整块不渲染，所以这里不需要空态样式。 */
.tf-ad {
    position: relative;
    display: block;
    margin: var(--sp-4) 0;
    border: 1px solid var(--line-2);
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--paper);
    line-height: 0;
}

.tf-ad img { width: 100%; height: auto; display: block; }

.tf-ad-text {
    display: block;
    padding: var(--sp-4);
    font-size: var(--fs-sm);
    line-height: 1.55;
    color: var(--ink-2);
}

.tf-ad-label {
    position: absolute;
    right: 6px;
    bottom: 6px;
    padding: 1px 6px;
    font-size: var(--fs-2xs);
    line-height: 1.6;
    color: var(--ink-3);
    background: var(--surface-blur);
    border-radius: var(--radius-sm);
    letter-spacing: .04em;
}

/* ── 深色模式切换按钮 ──
   两个图标叠在同一位置，靠当前主题决定显示哪个：亮色下显示月亮（点了会变暗），
   暗色下显示太阳。图标表示「点击后会切到什么」，不是「当前是什么」。 */
.theme-toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    padding: 0;
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    background: transparent;
    color: var(--ink-2);
    cursor: pointer;
    flex-shrink: 0;
    transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

.theme-toggle:hover { color: var(--ink); border-color: var(--ink-3); }
.theme-toggle:focus-visible { outline: 2px solid var(--brand-text); outline-offset: 2px; }

/* 默认（亮色 / 未选）显示月亮 */
.theme-toggle .theme-icon-sun { display: none; }
.theme-toggle .theme-icon-moon { display: block; }

/* 跟随系统且系统为暗 → 显示太阳 */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .theme-toggle .theme-icon-sun { display: block; }
    :root:not([data-theme="light"]) .theme-toggle .theme-icon-moon { display: none; }
}

/* 手动选暗色 → 显示太阳（要能盖过上面的 media 规则） */
:root[data-theme="dark"] .theme-toggle .theme-icon-sun { display: block; }
:root[data-theme="dark"] .theme-toggle .theme-icon-moon { display: none; }

/* 手动选亮色 → 强制月亮，即使系统是暗色 */
:root[data-theme="light"] .theme-toggle .theme-icon-sun { display: none; }
:root[data-theme="light"] .theme-toggle .theme-icon-moon { display: block; }

@media (max-width: 768px) {
    .theme-toggle { width: 30px; height: 30px; }
}

/* ══════════════════════════════════════════════
   行情跑马灯（常驻页头）
   两组相同内容首尾相接做无缝循环：轨道平移一组宽度（-50%）后回到起点，
   因为第二组与第一组完全一致，归零瞬间画面不变，看不出跳变。
   ══════════════════════════════════════════════ */
.market-ticker {
    /* 定高到 --ticker-h：这一行计入 --header-h（sticky 偏移基准），
       高度若随内容浮动，全站侧栏的吸附位置就会跟着算错 */
    height: var(--ticker-h);
    border-top: 1px solid var(--line-2);
    background: var(--paper);
    overflow: hidden;
    position: relative;
}

/* 两端渐隐，让条目滚入/滚出时不是被硬切断 */
.market-ticker::before,
.market-ticker::after {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    width: 40px;
    z-index: 2;
    pointer-events: none;
}
.market-ticker::before { left: 0;  background: linear-gradient(90deg, var(--paper), transparent); }
.market-ticker::after  { right: 0; background: linear-gradient(270deg, var(--paper), transparent); }

.market-ticker-track {
    display: flex;
    align-items: center;
    height: 100%;
    width: max-content;
    /* 每个币约 4s，条目越多滚得越久，单币速度恒定 */
    animation: tf-ticker-scroll calc(var(--tf-ticker-count, 12) * 4s) linear infinite;
}

.market-ticker:hover .market-ticker-track { animation-play-state: paused; }

@keyframes tf-ticker-scroll {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
}

.ticker-item {
    display: inline-flex;
    align-items: baseline;
    gap: 7px;
    padding: 7px 16px;
    font-size: var(--fs-xs);
    white-space: nowrap;
    border-right: 1px solid var(--line-2);
    color: var(--ink-2);
    text-decoration: none;
}

a.ticker-item:hover { background: var(--line-2); }

.ticker-sym {
    font-weight: 700;
    color: var(--ink);
    letter-spacing: .02em;
}

.ticker-price {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    color: var(--ink-2);
}

.ticker-chg {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-size: var(--fs-xs);
    font-weight: 600;
}

.ticker-chg.is-up   { color: var(--up); }
.ticker-chg.is-down { color: var(--down); }
.ticker-chg.is-flat { color: var(--ink-3); }

/* 动效敏感用户：停掉滚动，改为可横向拖动查看 */
@media (prefers-reduced-motion: reduce) {
    .market-ticker { overflow-x: auto; }
    .market-ticker-track { animation: none; }
}

@media (max-width: 768px) {
    .ticker-item { padding: 6px 12px; font-size: var(--fs-xs); }
}

.main-nav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    gap: 4px;
    height: 100%;
}

.main-nav a {
    position: relative;
    display: flex;
    align-items: center;
    gap: 6px;
    height: var(--nav-h);
    padding: 0 16px;
    font-size: var(--fs-md);
    font-weight: 500;
    color: var(--ink-2);
}

.main-nav a:hover { color: var(--ink); }

/* 导航图标：随链接色（currentColor），默认略淡，hover/激活跟随文字 */
.nav-ico { display: inline-flex; align-items: center; opacity: .82; }
.nav-ico svg { display: block; }
.main-nav a:hover .nav-ico,
.main-nav a.active .nav-ico { opacity: 1; }

/* 「发现」下拉（R8）：<details> 无 JS 也可展开；桌面端浮层，移动端抽屉内展开。
   flex-shrink:0 必须有：窄屏导航行溢出时 <details> 不像 <a> 有断点规则兜底，
   被压缩后 CJK 文字会逐字竖排 */
.nav-discover { position: relative; flex-shrink: 0; }

.nav-discover > summary {
    display: flex;
    align-items: center;
    gap: 5px;
    height: var(--nav-h);
    padding: 0 18px;
    font-size: var(--fs-md);
    font-weight: 500;
    color: var(--ink-2);
    cursor: pointer;
    list-style: none;
    user-select: none;
    white-space: nowrap;
}

.nav-discover > summary::-webkit-details-marker { display: none; }
.nav-discover > summary:hover { color: var(--ink); }
.nav-discover[open] > summary { color: var(--ink); font-weight: 600; }

.nav-discover-caret {
    font-size: var(--fs-2xs);
    color: var(--ink-3);
    transition: transform var(--duration) var(--ease);
}

.nav-discover[open] .nav-discover-caret { transform: rotate(180deg); }

.nav-discover-menu {
    position: absolute;
    top: calc(var(--nav-h) + 4px);
    left: 0;
    z-index: 110;
    min-width: 240px;
    padding: 8px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    box-shadow: var(--shadow-md);
}

/* 选择器带上 .main-nav 抬高优先级：菜单条目也是 .main-nav 里的 <a>，
   会被「.main-nav a」的固定行高与居中规则命中，两行内容就会互相叠压 */
.main-nav .nav-discover-item {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 1px;
    height: auto;
    padding: 9px 12px;
    border-radius: var(--radius-sm);
    transition: background var(--duration) var(--ease);
}

a.nav-discover-item:hover { background: var(--paper-3); }

.nav-discover-label {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink);
}

.nav-discover-desc {
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

/* 未建页面的入口：置灰 + 「即将上线」角标 */
.nav-discover-item.is-soon { cursor: default; }
.nav-discover-item.is-soon .nav-discover-label { color: var(--ink-3); }

.nav-discover-soon {
    font-style: normal;
    font-size: var(--fs-2xs);
    font-weight: 600;
    padding: 1px 7px;
    border-radius: var(--radius-full);
    background: var(--paper-3);
    color: var(--ink-3);
}

/* 快讯是 7×24 实时流，导航上给一个在线指示点 */
.nav-live-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--down);
    box-shadow: 0 0 0 0 var(--down-tint);
    animation: tf-live-pulse 2s var(--ease) infinite;
}

@keyframes tf-live-pulse {
    0%   { box-shadow: 0 0 0 0 rgba(220, 38, 38, 0.5); }
    70%  { box-shadow: 0 0 0 5px rgba(220, 38, 38, 0); }
    100% { box-shadow: 0 0 0 0 rgba(220, 38, 38, 0); }
}

/* 抽屉内的语言与账户入口：仅移动端出现 */
.nav-drawer-extra { display: none; }

.main-nav a.active {
    color: var(--ink);
    font-weight: 700;
}

.main-nav a.active::after {
    content: '';
    position: absolute;
    left: 14px;
    right: 14px;
    bottom: 0;
    height: 3px;
    border-radius: 3px 3px 0 0;
    background: var(--brand);
}

/* Header actions */
.header-actions {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-left: auto;
}

.search-toggle,
.header-x-link {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: var(--radius-sm);
    color: var(--ink-2);
    transition: all var(--duration) var(--ease);
}

.search-toggle:hover,
.header-x-link:hover {
    color: var(--ink);
    background: var(--paper-3);
}

/* 桌面端有常驻宽搜索条（R11），放大镜按钮只在移动端出现（弹出全屏搜索） */
.search-toggle { display: none; }

/* Language switcher */
.lang-switcher {
    display: flex;
    align-items: center;
    background: var(--paper-3);
    border-radius: var(--radius-full);
    padding: 3px;
    margin-left: 4px;
}

.lang-switcher a {
    padding: 4px 12px;
    font-size: var(--fs-xs);
    font-weight: 600;
    white-space: nowrap;
    color: var(--ink-3);
    border-radius: var(--radius-full);
    transition: all var(--duration) var(--ease);
}

.lang-switcher a:hover { color: var(--ink); }

.lang-switcher a.active {
    background: var(--paper);
    color: var(--ink);
    box-shadow: var(--shadow-sm);
}

/* 语言下拉（五语言，<details> 实现，无 JS 依赖） */
.lang-dropdown {
    position: relative;
    display: inline-block;
    padding: 0;
    background: transparent;
}
.lang-dropdown > summary {
    list-style: none;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 5px 12px;
    font-size: var(--fs-xs);
    font-weight: 600;
    white-space: nowrap;
    color: var(--ink-2);
    background: var(--paper-3);
    border-radius: var(--radius-full);
    transition: color var(--duration) var(--ease);
}
.lang-dropdown > summary::-webkit-details-marker { display: none; }
.lang-dropdown > summary:hover { color: var(--ink); }
.lang-dropdown .lang-caret { font-size: var(--fs-2xs); opacity: .7; transition: transform var(--duration) var(--ease); }
.lang-dropdown[open] .lang-caret { transform: rotate(180deg); }
.lang-dropdown .lang-menu {
    position: absolute;
    right: 0;
    top: calc(100% + 6px);
    min-width: 132px;
    padding: 6px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    box-shadow: var(--shadow-md, 0 8px 24px rgba(0,0,0,.12));
    z-index: 200;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.lang-dropdown .lang-menu a {
    padding: 7px 12px;
    font-size: var(--fs-sm);
    font-weight: 500;
    white-space: nowrap;
    color: var(--ink-2);
    border-radius: var(--radius-sm, 6px);
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}
.lang-dropdown .lang-menu a:hover { background: var(--paper-3); color: var(--ink); }
.lang-dropdown .lang-menu a.active { color: var(--ink); font-weight: 700; }

/* 账户入口（PRD §4.5：登录非浏览前提，仅作为收藏/评论/推送的入口） */
.header-login {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 34px;
    padding: 0 14px;
    margin-left: 4px;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--on-brand);
    background: var(--brand);
    border-radius: var(--radius-full);
    white-space: nowrap;
    transition: filter var(--duration) var(--ease);
}

.header-login:hover { filter: brightness(0.94); }

.user-menu { position: relative; margin-left: 4px; }

.user-menu-trigger {
    display: flex;
    align-items: center;
    gap: 4px;
    height: 34px;
    padding: 0 8px 0 4px;
    border-radius: var(--radius-full);
    color: var(--ink-3);
    cursor: pointer;
    list-style: none;
    transition: background var(--duration) var(--ease);
}

.user-menu-trigger::-webkit-details-marker { display: none; }
.user-menu-trigger:hover { background: var(--paper-3); }
.user-menu[open] .user-menu-trigger { background: var(--paper-3); }

.user-menu-trigger img {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    display: block;
}

.user-menu-panel {
    position: absolute;
    top: calc(100% + 8px);
    right: 0;
    min-width: 208px;
    padding: 6px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    box-shadow: var(--shadow-lg);
    z-index: 120;
}

.user-menu-head {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 8px 12px 10px;
    border-bottom: 1px solid var(--line-soft);
    margin-bottom: 4px;
}

.user-menu-name { font-size: var(--fs-sm); font-weight: 700; color: var(--ink); }

.user-menu-role {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.user-menu-panel a {
    display: block;
    padding: 8px 12px;
    font-size: var(--fs-sm);
    color: var(--ink-2);
    border-radius: var(--radius-sm);
}

.user-menu-panel a:hover { background: var(--paper-3); color: var(--ink); }
.user-menu-panel .user-menu-signout { color: var(--ink-3); }

/* Mobile toggle */
.mobile-nav-toggle {
    display: none;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--radius-sm);
    color: var(--ink);
}

.mobile-nav-toggle:hover { background: var(--paper-3); }
.mobile-nav-toggle .icon-menu,
.mobile-nav-toggle .icon-close { display: flex; }
.mobile-nav-toggle .icon-close { display: none; }
.mobile-nav-toggle.active .icon-menu { display: none; }
.mobile-nav-toggle.active .icon-close { display: flex; }

/* ═══════════════════════════════════════════
   SEARCH OVERLAY
   ═══════════════════════════════════════════ */

.search-overlay {
    position: fixed;
    inset: 0;
    z-index: 1000;
    /* 0.45 时浅色页面透上来，浮层里的白色小字（提示与热词标签）读不清；
       加到 0.62 才让遮罩自己主导底色 */
    background: rgba(23, 28, 16, 0.62);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--duration) var(--ease), visibility var(--duration);
}

.search-overlay.active { opacity: 1; visibility: visible; }

.search-overlay-inner {
    max-width: 640px;
    margin: 0 auto;
    padding: 15vh 24px 0;
    position: relative;
    transform: translateY(-12px);
    transition: transform var(--duration-slow) var(--ease-out);
}

.search-overlay.active .search-overlay-inner { transform: translateY(0); }

.search-close {
    position: absolute;
    top: -56px;
    right: 24px;
    top: calc(15vh - 64px);
    width: 40px;
    height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    border-radius: var(--radius-full);
    transition: background var(--duration) var(--ease);
}

.search-close:hover { background: rgba(255, 255, 255, 0.15); }

.search-input-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
    background: var(--paper);
    border: 2px solid transparent;
    border-radius: var(--radius-lg);
    padding: 6px 20px;
    box-shadow: var(--shadow-lg);
    transition: border-color var(--duration) var(--ease);
}

.search-input-wrap:focus-within { border-color: var(--brand); }

.search-icon { display: flex; color: var(--ink-3); flex-shrink: 0; }
.search-input-wrap:focus-within .search-icon { color: var(--brand-text); }

.search-input {
    flex: 1;
    border: none;
    background: none;
    font-family: inherit;
    font-size: var(--fs-lg);
    color: var(--ink);
    padding: 12px 0;
    outline: none;
}

.search-input::placeholder { color: var(--ink-4); }

.search-hint {
    margin-top: 14px;
    text-align: center;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: rgba(255, 255, 255, 0.7);
    letter-spacing: 0.06em;
}

/* 浮层里的热词（移动端唯一的热搜露出：小屏没有侧栏，也没有那条宽搜索框）。
   浮层压在深色遮罩上，这里的颜色不走明暗令牌，直接按遮罩配白系。 */
.search-hot { margin-top: 24px; }

.search-hot-label {
    display: block;
    margin-bottom: 10px;
    text-align: center;
    font-size: var(--fs-xs);
    letter-spacing: 0.06em;
    color: rgba(255, 255, 255, 0.82);
}

.search-hot-list {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
}

/* 词块用不透明的纸底：半透明白块压在遮罩上，词与热度说明都读不清 */
.search-hot-item {
    display: inline-flex;
    align-items: baseline;
    gap: 6px;
    padding: 7px 12px;
    border-radius: var(--radius);
    background: var(--paper);
    border: 1px solid var(--line-soft);
    color: var(--ink-2);
    transition: background var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

.search-hot-item:hover,
.search-hot-item:focus-visible {
    background: var(--row-hover);
    border-color: var(--brand);
}

.search-hot-term { font-size: var(--fs-sm); font-weight: 600; color: var(--ink); }

.search-hot-note {
    font-size: var(--fs-2xs);
    color: var(--ink-3);
    font-variant-numeric: tabular-nums;
}

/* 首页币价跑马灯已按 R14 下线，相关样式随之移除 */

/* ═══════════════════════════════════════════
   共享组件：分区标题 / 标签 / 按钮
   ═══════════════════════════════════════════ */

.section-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
    padding-bottom: 8px;
    border-bottom: 1px solid var(--line);
}

.section-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--fs-md);
    font-weight: 800;
    letter-spacing: 0.01em;
    color: var(--ink);
}

.section-title .icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: var(--radius-sm);
    background: var(--brand-tint);
    color: var(--brand-text);
    flex-shrink: 0;
}

.section-title .icon svg { display: block; }

.section-link {
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-3);
    display: inline-flex;
    align-items: center;
    gap: 4px;
}

.section-link:hover { color: var(--brand-text); }

/* Category tags */
.news-category-tag,
.af-cat-tag,
.sidebar-cat-tag {
    display: inline-flex;
    align-items: center;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    padding: 3px 8px;
    border-radius: var(--radius-sm);
    background: var(--paper-3);
    color: var(--ink-2);
    line-height: 1.4;
    white-space: nowrap;
}

.news-category-tag.rwa,
.af-cat-tag.rwa {
    background: var(--brand-tint);
    color: var(--brand-text);
}

.af-cat-tag.crypto { background: var(--info-tint); color: var(--info); }
.af-cat-tag.macro { background: var(--warn-tint); color: var(--warn); }

/* ═══════════════════════════════════════════
   首页 — 焦点区（大图卡 + 右侧标题列表）
   ═══════════════════════════════════════════ */

.hero-card {
    position: relative;
    display: block;
    border-radius: var(--radius-lg);
    overflow: hidden;
    background: var(--panel);
    transition: transform var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.hero-card:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
}

/* 09-02：整体压扁一档（336 → 280），banner 不再占掉大半个首屏 */
.hero-card-lg { min-height: 280px; }

.hero-cover {
    position: absolute;
    inset: 0;
}

.hero-cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.hero-card:hover .hero-cover img { transform: scale(1.03); }

/* 无封面的轮播位：整卡铺深色，标题当主视觉。
   照搬有图版式的话，上半截是浅色面板、下半截是给图片准备的渐变，
   读者只会以为图没加载出来 —— 抓不到真图是常态，这一格得自己立得住。 */
.hero-card-plain {
    background: linear-gradient(152deg, #1c2712 0%, #121a0a 52%, #0c1006 100%);
}

.hero-card-plain .hero-body {
    top: 0;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 22px;
    background: none;
}

.hero-card-plain .hero-title {
    font-size: var(--fs-xl);
    line-height: 1.3;
}

.hero-card .hero-body {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    padding: 44px 22px 18px;
    background: linear-gradient(180deg, transparent, rgba(12, 16, 6, 0.72) 46%, rgba(12, 16, 6, 0.9));
    color: #fff;
    z-index: 1;
}

.hero-meta {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 8px;
}

.hero-tag {
    display: inline-flex;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    background: var(--brand);
    color: var(--on-brand);
    padding: 3px 8px;
    border-radius: var(--radius-sm);
}

/* 主编推荐角标：与分类标签区分开——分类是内容属性，这条是编辑部的判断 */
.hero-pick {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.06em;
    padding: 3px 8px;
    border-radius: var(--radius-sm);
    background: rgba(255, 255, 255, 0.92);
    color: #1b2a0c;
}

.hero-pick::before {
    content: "★";
    font-size: var(--fs-2xs);
    line-height: 1;
}

.hero-time {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: rgba(255, 255, 255, 0.75);
}

.hero-title {
    font-size: var(--fs-lg);
    font-weight: 800;
    line-height: 1.4;
    color: #fff;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.hero-excerpt {
    margin-top: 8px;
    font-size: var(--fs-sm);
    line-height: 1.6;
    color: rgba(255, 255, 255, 0.82);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.hero-card:hover .hero-title { color: var(--brand); }

/* 右侧紧凑标题列表（ChainCatcher 式） */

.hero-item-tag {
    display: inline-flex;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    background: var(--brand-tint);
    color: var(--brand-text);
    padding: 2px 7px;
    border-radius: var(--radius-sm);
}

.hero-item-time {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* ═══════════════════════════════════════════
   首页 — 两栏主栅格（内容流 / 侧栏，约 2:1，R4）
   ═══════════════════════════════════════════ */

.home-layout { padding: 8px 0 var(--section-gap); }

/* 首页严格 2:1 两栏（含顶部 Banner 在内整页同栅格） */
.home-grid {
    display: grid;
    grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
    gap: 14px;
    align-items: start;
}

.home-main {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--card-gap);
}

/* ── 主列版块统一成卡片 ──
   改前主列各版块是裸的：区块之间只有 margin，边界靠标题文字暗示，
   和右侧带底色的侧栏卡片放在一起显得散。两站的主列同样是卡片化的
   （链捕手 12px 圆角块、金色 8px），所以这里统一给外壳。
   快讯流内部仍用细分隔线区分条目 —— 那是「行」不是「块」，
   去掉会让二十条快讯糊成一片。 */
.home-news,
.home-main > .home-section {
    background: var(--card);
    border-radius: var(--card-radius);
    padding: var(--card-pad);
    margin-top: 0;
}

/* Hero 轮播自带整图，不套底色，否则图外会露出一圈色边 */
.home-main > .hero-carousel {
    border-radius: var(--card-radius);
    overflow: hidden;
}

/* 右侧模块栏（热搜等）09-02 拍板：全站统一不吸顶，跟随页面滚动 ——
   此前首页吸顶、详情页跟随，行为不一致；原「滚到栏底后吸附」JS 已退役 */
.home-sidebar {
    display: flex;
    flex-direction: column;
    gap: var(--card-gap);
}

/* ── 查看更多（R1/R2）：截断列表底部的跳转按钮 ── */
.news-view-more {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    padding: 18px 0 6px;
}

/* display:flex 的权重高过 UA 表里 [hidden] 的 display:none，不显式补一条，
   JS 里的 wrap.hidden = true 就是不生效的（空分类照样出「查看更多」） */
.news-view-more[hidden] { display: none; }

.view-more-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 8px 26px;
    border-radius: var(--radius-sm);
    border: 1px solid var(--line);
    background: var(--paper);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    transition: all var(--duration) var(--ease);
}

.view-more-btn:hover {
    color: var(--ink);
    border-color: var(--brand);
    background: var(--brand-tint);
}

/* ── 编辑部观察（事件聚合）：一个判断性标题下挂同一件事的几条快讯/文章 ──
   类名用 ew-（editors' watch）前缀：.story-* 已被列表页的文章卡占用（见下方 .story-card），
   同名会被后面的定义覆盖，事件卡会退化成两列图文卡布局。 */
.home-stories { margin-top: 20px; }

.ew-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
}

.ew-card {
    background: var(--panel);
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    padding: 14px 16px;
    min-width: 0;
}

.ew-headline {
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: 1.4;
    color: var(--ink);
    margin: 0;
}

.ew-summary {
    margin: 4px 0 0;
    font-size: var(--fs-xs);
    color: var(--ink-3);
    line-height: 1.5;
}

.ew-items {
    list-style: none;
    margin: 10px 0 0;
    padding: 0;
    border-top: 1px solid var(--line-soft);
}

.ew-item {
    position: relative;
    padding: 7px 0 7px 14px;
    font-size: var(--fs-sm);
    line-height: 1.5;
    border-bottom: 1px solid var(--line-soft);
}

.ew-item:last-child { border-bottom: none; }

/* 时间轴点：快讯用品牌绿实心，文章用描边，一眼区分碎片与长文 */
.ew-item::before {
    content: "";
    position: absolute;
    left: 2px;
    top: 14px;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--brand-2);
}

.ew-item.is-article::before {
    background: transparent;
    border: 1.5px solid var(--brand-2);
    top: 13px;
}

.ew-item a {
    color: var(--ink-2);
    display: block;
}

.ew-item a:hover { color: var(--brand-text); }

@media (max-width: 860px) {
    .ew-grid { grid-template-columns: minmax(0, 1fr); }
    /* 09-02 压缩：手机上观察卡平均 ~290px/张，标题与摘要不限行会被长文案撑高。
       限行后四张卡总高可控，条目仍是主要可读内容。 */
    .ew-card { padding: 12px 14px; }
    .ew-headline {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .ew-summary {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .ew-items { margin-top: 8px; }
    .ew-item { padding: 6px 0 6px 13px; font-size: var(--fs-xs); }
}

/* ── 深度文章板块（R2/R5）：图文卡列表 ── */
.home-deep { margin-top: 16px; }

.deep-list {
    display: flex;
    flex-direction: column;
}

.deep-card {
    display: grid;
    grid-template-columns: 200px minmax(0, 1fr);   /* 图在左（金色财经式）；无图退单列见文件末尾「列表图文卡」 */
    gap: 20px;
    padding: 14px 4px;
    border-bottom: 1px solid var(--line-soft);
    transition: background var(--duration) var(--ease);
}

.deep-card:hover { background: var(--row-hover); border-radius: var(--radius); }
.deep-card:last-child { border-bottom: none; }

.deep-card-body { display: flex; flex-direction: column; min-width: 0; }

.deep-card-title {
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1.4;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color var(--duration) var(--ease);
}

.deep-card:hover .deep-card-title { color: var(--brand-text); }

.deep-card-excerpt {
    margin-top: 6px;
    font-size: var(--fs-sm);
    line-height: 1.6;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.deep-card-meta {
    margin-top: auto;
    padding-top: 10px;
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.deep-card-author { font-weight: 600; color: var(--ink-2); }

.deep-card-thumb {
    width: 200px;
    height: 125px;
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--panel);
}

.deep-card-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.deep-card:hover .deep-card-thumb img { transform: scale(1.04); }

/* ── 专栏板块（R3）：两列卡片 ── */
.home-columns { margin-top: 16px; }

.home-column-name {
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--ink);
}

.home-column-card:hover .home-column-name { color: var(--brand-text); }

/* ── 大树热搜（R10）── */
.hotsearch-list {
    display: flex;
    flex-direction: column;
    padding: 4px 0 8px;
}

.hotsearch-item {
    display: flex;
    /* 词下面多了一行元信息与热度条，序号要跟词齐头而不是整块居中 */
    align-items: flex-start;
    gap: 12px;
    padding-block: 8px;
    border-radius: var(--radius-sm);
    transition: background var(--duration) var(--ease);
}

.hotsearch-item:hover { background: var(--row-hover); }

.hotsearch-rank {
    width: 18px;
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    text-align: left;
    color: var(--ink-3);
}

.hotsearch-rank.top { color: var(--down); }

.hotsearch-term {
    font-size: var(--fs-sm);
    font-weight: 500;
    color: var(--ink-2);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.hotsearch-item:hover .hotsearch-term { color: var(--ink); }

/* ── 活动大图卡（R5/R6）：侧栏首场活动海报 ── */
.event-feature {
    display: block;
    margin: 4px 0 10px;
    border-radius: var(--radius);
    overflow: hidden;
    border: 1px solid var(--line-soft);
    transition: box-shadow var(--duration) var(--ease);
}

.event-feature:hover { box-shadow: var(--shadow-md); }

.event-feature-poster {
    position: relative;
    display: block;
    aspect-ratio: 16 / 9;
    background: var(--panel);
}

.event-feature-poster img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.event-feature-status {
    position: absolute;
    top: 10px;
    left: 10px;
    padding: 3px 10px;
    border-radius: var(--radius-full);
    font-size: var(--fs-2xs);
    font-weight: 700;
    background: rgba(0, 0, 0, 0.62);
    color: #fff;
    backdrop-filter: blur(4px);
}

.event-feature-status.live { background: var(--down); }
.event-feature-status.soon { background: var(--brand); color: var(--on-brand); }

.event-feature-body {
    display: flex;
    flex-direction: column;
    gap: 3px;
    padding: 10px 12px 12px;
}

.event-feature-name {
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.event-feature:hover .event-feature-name { color: var(--brand-text); }

.event-feature-meta {
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

/* ═══════════════════════════════════════════
   快讯流（Timeline）
   ═══════════════════════════════════════════ */

.news-filter-bar {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 14px;
    flex-wrap: wrap;
}

.news-filter-tab {
    display: inline-flex;
    align-items: center;
    padding: 5px 14px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    background: var(--panel);
    transition: all var(--duration) var(--ease);
    min-height: 30px;
}

.news-filter-tab:hover { color: var(--ink); background: var(--paper-3); }

.news-filter-tab.active {
    background: var(--brand);
    color: var(--on-brand);
    font-weight: 700;
}

/* 日期分隔 */
.news-date-separator {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 12px 0 6px;
}

.news-date-separator:first-child { margin-top: 0; }

.news-date-line { flex: 1; height: 1px; background: var(--line-2); }

.news-date-label {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--ink-3);
    padding: 0 4px;
}

/* 快讯条目 — 时间轴 + 整卡可点 */
.news-list { position: relative; }

.news-item {
    position: relative;
    display: grid;
    grid-template-columns: 54px minmax(0, 1fr);
    gap: 11px;
    padding: 10px 12px 10px 0;
    margin-bottom: 2px;
    border-radius: var(--radius);
    transition: background var(--duration) var(--ease);
    cursor: pointer;
}

.news-item:hover { background: var(--row-hover); }

/* 整卡可点：标题链接铺满整个条目；摘要内的链接仍可单独点击 */
.news-item-title a::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 1;
    border-radius: var(--radius);
}

.news-item-body a,
.news-source a {
    position: relative;
    z-index: 2;
}

/* 时间列左对齐：时间恒为 5 字符等宽，右对齐时整列会比版块标题、筛选标签
   晚 8~18px 起步（列宽减去字宽的余量），快讯卡里因此多出一条歪掉的竖线。
   靠左后时间与卡片其余内容共用同一条左基线；圆点仍钉在列右缘的时间轴上。 */
.news-time {
    display: flex;
    align-items: flex-start;
    justify-content: flex-start;
    gap: 8px;
    padding-top: 3px;
    position: relative;
}

.news-time-text {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-3);
    line-height: 1.8;
}

/* 圆点精确压在内容区左侧竖线上：
   时间列 54px + 列距 13px → 竖线中心 x≈67.5；点宽 7px → right = -(13 + 4) */
.news-time-dot {
    position: absolute;
    right: -17px;
    top: 10px;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--brand-2);
    /* 描边遮住时间轴竖线，必须跟随页面底色，暗色下不能是白圈 */
    box-shadow: 0 0 0 3px var(--page);
    z-index: 1;
}

.news-item-content {
    padding-left: 20px;
    border-left: 2px solid var(--line);
    min-width: 0;
}

.news-item-title {
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1.55;
    letter-spacing: 0.01em;
    color: var(--ink);
    transition: color var(--duration) var(--ease);
}

.news-item:hover .news-item-title { color: var(--brand-text); }

.news-item-body {
    margin-top: 7px;
    font-size: var(--fs-base);
    line-height: 1.75;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.news-item-body p { margin: 0 0 8px; }
.news-item-body p:last-child { margin-bottom: 0; }
.news-item-body a { color: var(--brand-text); }
.news-item-body a:hover { text-decoration: underline; }

/* ══════════════════════════════════════════════
   高密度快讯流（.is-compact）
   对标两站首页的信息密度：一屏能扫到的条目数比可读性优先的排版多约四成。
   做法是压缩而不是删除 —— 标题降一档字号并单行截断、摘要收到一行、
   行距与内边距同步收紧。信息层级不变，只是每条占的垂直空间小了。
   ══════════════════════════════════════════════ */
.news-list.is-compact .news-item {
    padding: 7px 12px 7px 0;
    margin-bottom: 0;
    border-bottom: 1px solid var(--line-2);
    border-radius: 0;
}

.news-list.is-compact .news-item:last-child { border-bottom: none; }

.news-list.is-compact .news-item-title {
    font-size: var(--fs-base);
    font-weight: 600;
    line-height: 1.45;
    /* 单行截断：标题长短不一时，参差的行数会让整列节奏散掉 */
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* 摘要默认收起——这是密度的主要来源（每条省掉约 23px）。
   保留为可切换而不是直接删掉：重度读者要扫标题，偶尔来的读者需要上下文，
   两种需求都真实存在，交给读者自己选（金色的「只看标题」是同一个开关的反向）。 */
.news-list.is-compact .news-item-body { display: none; }

.news-list.is-compact.show-summary .news-item-body {
    display: -webkit-box;
    margin-top: 3px;
    font-size: var(--fs-sm);
    line-height: 1.55;
    color: var(--ink-3);
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* 摘要开关：贴在频道 Tab 行的右端。
   Tab 组单独包一层并允许换行，开关不参与换行永远留在右侧 —— 否则 wrap 容器里的
   auto margin 会把开关整个挤到下一行。 */
.news-filter-bar.has-toggle {
    flex-wrap: nowrap;
    align-items: flex-start;
    gap: 12px;
}

.news-filter-tabs {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
    min-width: 0;
    /* 频道多时横向滚动而不是换行：换行会让 Tab 栏忽高忽低、下方内容跟着跳，
       滚动则高度恒定 —— 金色 12 个频道也是这个做法 */
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
    -ms-overflow-style: none;
}

.news-filter-tabs::-webkit-scrollbar { display: none; }
.news-filter-tabs .news-filter-tab { flex-shrink: 0; }

.tf-summary-toggle {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 10px;
    font-family: inherit;
    font-size: var(--fs-xs);
    color: var(--ink-3);
    background: transparent;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-full);
    cursor: pointer;
    white-space: nowrap;
    transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

.tf-summary-toggle:hover { color: var(--ink-2); border-color: var(--line); }
.tf-summary-toggle[aria-pressed="true"] { color: var(--brand-text); border-color: var(--brand-text); }

.tf-summary-toggle svg { flex-shrink: 0; }

@media (max-width: 640px) {
    .tf-summary-toggle .tf-toggle-label { display: none; }
}

.news-list.is-compact .news-item-meta {
    margin-top: 4px;
    gap: 8px;
}

.news-list.is-compact .news-time-text { font-size: var(--fs-xs); line-height: 1.5; }
.news-list.is-compact .news-time { padding-top: 1px; }
.news-list.is-compact .news-time-dot { top: 6px; }

/* 情绪票数：紧跟在来源之后，用全站涨跌色，扫视时能直接读出多空分歧 */

/* 首页频道 Tab 用 button（纯前端筛选），补齐 a 标签自带的重置 */
/* ── 首页深度文章的分类 Tab（08-31）──
   贴在板块标题与列表之间。分类多时横向滚动而不是换行：换行会把板块头顶开两行，
   标题与第一张卡之间空出一大段。左侧悬浮条只在 ≥1360px 且滚过首屏才出现，
   这条 Tab 补的正是它够不着的场景（窄屏 / 刚进站）。 */
.deep-filter-bar {
    margin: -2px 0 14px;
    padding-bottom: 10px;
    border-bottom: 1px solid var(--line-2);
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
}

.deep-filter-bar::-webkit-scrollbar { display: none; }
.deep-filter-bar .news-filter-tabs { flex-wrap: nowrap; }

/* 首页频道 Tab 用 button（纯前端筛选），补齐 a 标签自带的重置。
   background 必须排除 .active：这条选择器特异性 (0,2,1) 高于
   .news-filter-tab.active (0,2,0)，不排除就会把选中态的品牌绿底抹掉，
   导致深色文字落在透明底上、对比度掉到 1.13。 */
.news-filter-bar button.news-filter-tab {
    border: none;
    font-family: inherit;
    cursor: pointer;
}

.news-filter-bar button.news-filter-tab:not(.active) {
    background: transparent;
}

/* 被筛掉的条目连同它上方的日期分隔一起隐藏，避免留下空日期头 */
.news-item.is-filtered,
.news-date-separator.is-filtered { display: none; }

.news-item-meta {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 9px;
    flex-wrap: wrap;
}

.news-source svg { flex-shrink: 0; color: var(--ink-4); }

/* 重点快讯：仅以品牌色时间轴标记，不用底色干扰阅读 */
.news-item.tf-highlight .news-item-content { border-left: 2px solid var(--brand); padding-left: 19px; }
.news-item.tf-highlight .news-time-dot { background: var(--brand); }

/* 新推送条目动画 */
.news-item.new-item {
    animation: tf-slide-in 0.5s var(--ease-out);
}

@keyframes tf-slide-in {
    from { opacity: 0; transform: translateY(-8px); background: var(--brand-tint-strong); }
    to { opacity: 1; transform: translateY(0); }
}

/* 加载更多 */

@keyframes tf-pulse {
    0%, 100% { opacity: 0.25; transform: scale(0.85); }
    50% { opacity: 1; transform: scale(1); }
}

/* ═══════════════════════════════════════════
   侧栏模块
   ═══════════════════════════════════════════ */

.sidebar-section {
    background: var(--card);
    border: none;                      /* 两站都不给版块描边 */
    border-radius: var(--card-radius);
    padding: var(--card-pad);
}

.sidebar-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 8px;
    padding-bottom: 7px;
    border-bottom: 1px solid var(--line-soft);
}

.sidebar-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--ink);
}

.sidebar-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 5px;
    background: var(--brand-tint);
    color: var(--brand-text);
    flex-shrink: 0;
}

/* ── 侧栏行的左基线 ──
   这些模块是不同时期加的，每个都自己补过一层横向内边距（0 / 8 / 12 / 14 / 18px），
   于是同一列卡片里：热搜的序号、日历的日期、大事件的时间、融资的公司名
   各自从不同的竖线起步 —— 截图里那条红线量的就是这个。

   统一成一条规则：**行内容一律贴卡片内容边**，也就是版块图标与标题分隔线的起点，
   整列侧栏因此只有一条左基线；悬停底色与行分隔线则统一向两侧各溢出 --rail-bleed，
   底色不至于紧贴文字，分隔线又和标题下那根同宽。

   所以下面各模块的行只写 padding-block（纵向），横向留给这里，
   任何一处写回 padding 简写都会把基线再次带偏。 */
/* 只有「自带内边距的卡片」才开这条溢出；缺省 0 保证同名的行
   出现在别的容器里（如专栏页 .colp-card 之外）时不会被拽出边界。 */
.sidebar-section,
.follow-card,
.tf-sidebar-card,
.colp-card { --rail-bleed: 8px; }

.sidebar-header,
.tf-sidebar-card-title,
.bigevents-item,
.hot-article-item,
.hotsearch-item,
.sidecal-item,
.colp-other,
.sec-total,
.sec-item,
.funding-item,
.event-item,
.feat-article-item,
.sidebar-article-item,
.pulse-fng,
.pulse-flows {
    margin-inline: calc(var(--rail-bleed, 0px) * -1);
    padding-inline: var(--rail-bleed, 0px);
}

/* 热门/深度文章列表 */
.sidebar-articles {
    display: flex;
    flex-direction: column;
    counter-reset: hot-rank;
}

/* 侧栏榜单：条目多、每条只需读标题，行高 11→7 让榜单一屏放得下 */
.sidebar-article-item {
    display: block;
    padding-block: 7px;
    border-bottom: 1px solid var(--line-soft);
}

.sidebar-article-item:last-child { border-bottom: none; padding-bottom: 2px; }

.sidebar-article-item.featured { padding-top: 0; }

.sidebar-article-cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.sidebar-article-item:hover .sidebar-article-cover img { transform: scale(1.03); }

/* 非首条：序号排行样式 */
.sidebar-article-item:not(.featured) .sidebar-article-body {
    display: grid;
    grid-template-columns: 22px minmax(0, 1fr);
    gap: 8px;
    align-items: start;
}

.sidebar-article-item:not(.featured) .sidebar-article-body::before {
    counter-increment: hot-rank;
    content: counter(hot-rank);
    font-family: var(--font-mono);
    font-size: var(--fs-base);
    font-weight: 800;
    font-style: italic;
    color: var(--ink-3);
    line-height: 1.4;
}

.sidebar-article-item:nth-child(2) .sidebar-article-body::before { color: var(--brand-text); }
.sidebar-article-item:nth-child(3) .sidebar-article-body::before { color: var(--brand-2); }

.sidebar-article-title {
    font-size: var(--fs-sm);
    font-weight: 600;
    line-height: 1.5;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color var(--duration) var(--ease);
}

.sidebar-article-item.featured .sidebar-article-title { font-size: var(--fs-base); font-weight: 700; }

.sidebar-article-item:hover .sidebar-article-title { color: var(--brand-text); }

.sidebar-article-date {
    display: inline-block;
    margin-top: 4px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* 项目库入口（首页侧栏「查看全部」CTA） */

/* ═══════════════════════════════════════════
   右栏 — 活动日历
   ═══════════════════════════════════════════ */

.event-list { display: flex; flex-direction: column; }

.event-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding-block: 9px;
    border-bottom: 1px solid var(--line-soft);
}

.event-item:last-child { border-bottom: none; }

.event-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: var(--radius);
    background: var(--paper);
    flex-shrink: 0;
}

.event-date-month {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--brand-text);
}

.event-date-day {
    font-family: var(--font-mono);
    font-size: var(--fs-md);
    font-weight: 800;
    color: var(--ink);
    line-height: 1.1;
}

.event-info { min-width: 0; }

.event-name {
    font-size: var(--fs-sm);
    font-weight: 700;
    line-height: 1.4;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color var(--duration) var(--ease);
}

.event-item:hover .event-name { color: var(--brand-text); }

.event-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 3px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.event-loc-tag {
    display: inline-flex;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.05em;
    padding: 1px 7px;
    border-radius: var(--radius-sm);
    background: var(--info-tint);
    color: var(--info);
}

.event-loc-tag.online { background: var(--brand-tint); color: var(--brand-text); }

/* ═══════════════════════════════════════════
   右栏 — 融资速递
   ═══════════════════════════════════════════ */

.funding-list { display: flex; flex-direction: column; }

.funding-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding-block: 9px;
    border-bottom: 1px solid var(--line-soft);
}

.funding-item:last-child { border-bottom: none; }

.funding-left { min-width: 0; }

.funding-name {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
}

.funding-round {
    display: inline-flex;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.04em;
    padding: 1px 7px;
    border-radius: var(--radius-sm);
    background: var(--paper);
    color: var(--ink-2);
    white-space: nowrap;
}

.funding-investor {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    margin-top: 3px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.funding-amount {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 800;
    color: var(--brand-text);
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}

/* 侧栏融资条自 R35 起可点进详情 */
a.funding-item { border-radius: var(--radius-sm); transition: background var(--duration) var(--ease); }
a.funding-item:hover { background: var(--hover-ink); }
a.funding-item:hover .funding-name { color: var(--brand-text); }

/* ═══════════════════════════════════════════
   融资速递（R35）— 列表页与详情页
   ═══════════════════════════════════════════ */

.tf-detail-crumb {
    display: flex;
    align-items: center;
    gap: 7px;
    margin: 4px 0 14px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.tf-detail-crumb a { color: var(--ink-3); }
.tf-detail-crumb a:hover { color: var(--brand-text); }

/* ── 融资速递页（08-31 表格化；09-01 对齐 RootData 现版整页版式）──
   布局：左筛选栏（sticky，赛道 / 金额档 / 轮次三组，<details> 可折叠）+ 全宽表。
   表格六列一行，列宽用 grid 固定，行内不做二次换行 —— 逐行扫的表格靠列对齐读，
   一旦某列自己折行，整表的纵向节奏就散了。估值 / 投资方两列在整页无数据时
   由模板整列去掉，这里用表容器上的 .no-val / .no-inv 修饰类同步收窄栅格。
   窄屏（<900px）筛选组退成横滑芯片行、整表折叠成卡片：每格自带 .tf-fd-label。 */
.tf-fdx {
    display: grid;
    grid-template-columns: 232px minmax(0, 1fr);
    gap: 28px;
    align-items: start;
}

/* ── 左筛选栏 ── */
.tf-fdx-side {
    position: sticky;
    top: calc(var(--header-h) + 16px);
    display: flex;
    flex-direction: column;
    gap: 14px;
    /* 比视口高时自己滚，别把 sticky 顶失效 */
    max-height: calc(100dvh - var(--header-h) - 32px);
    overflow-y: auto;
}

.tf-fdx-search { width: 100%; }

.tf-fdx-group {
    border: 1px solid var(--line-soft);
    border-radius: var(--radius-md);
    background: var(--card);
    padding: 4px 12px 6px;
}

.tf-fdx-group summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 8px 0;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
    cursor: pointer;
    list-style: none;
    user-select: none;
}

.tf-fdx-group summary::-webkit-details-marker { display: none; }

/* 折叠箭头：细 chevron，展开时翻转（对齐 RootData 的组折叠） */
.tf-fdx-group summary::after {
    content: '';
    width: 7px;
    height: 7px;
    border-right: 1.6px solid var(--ink-3);
    border-bottom: 1.6px solid var(--ink-3);
    transform: rotate(45deg);
    transition: transform var(--duration) var(--ease);
}

.tf-fdx-group[open] summary::after { transform: rotate(225deg); }

.tf-fdx-opts {
    display: flex;
    flex-direction: column;
    padding-bottom: 4px;
}

.tf-fdx-opt {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 5px 8px;
    margin: 0 -8px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-xs);
    color: var(--ink-2);
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-fdx-opt:hover { background: var(--hover-ink); color: var(--ink); }

.tf-fdx-opt.is-active {
    background: var(--brand-tint);
    color: var(--brand-text);
    font-weight: 700;
}

.tf-fdx-opt em {
    font-style: normal;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.tf-fdx-opt.is-active em { color: var(--brand-text); }

/* ── 概览两卡：融资趋势 + 轮次分布 ── */
.tf-fdx-charts {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    margin-bottom: 18px;
}

.tf-fdx-chart-card {
    border: 1px solid var(--line-soft);
    border-radius: var(--radius-md);
    background: var(--card);
    padding: 14px 16px;
}

.tf-fdx-trend {
    display: block;
    width: 100%;
    height: 96px;
}

.tf-fdx-trend rect { fill: var(--brand); }
.tf-fdx-trend text { fill: var(--ink-3); font-size: 9px; font-family: var(--font-mono); }

.tf-fdx-dist {
    list-style: none;
    margin: 4px 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.tf-fdx-dist li {
    display: flex;
    align-items: center;
    gap: 10px;
}

.tf-fdx-dist-name {
    flex: none;
    width: 84px;
    font-size: var(--fs-xs);
    color: var(--ink-2);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tf-fdx-dist-bar {
    flex: 1;
    height: 8px;
    border-radius: 4px;
    background: var(--hover-ink);
    overflow: hidden;
}

.tf-fdx-dist-bar i {
    display: block;
    height: 100%;
    border-radius: 4px;
    background: var(--brand);
}

.tf-fdx-dist-n {
    flex: none;
    min-width: 20px;
    text-align: right;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* ── 计数行右侧的「清除筛选」与领投注脚 ── */
.tf-fdx-clear {
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.tf-fdx-clear:hover { color: var(--brand-text); }

.tf-fdx-footnote {
    margin: 8px 0 0;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* ── 列头排序 ── */
.tf-fdx-sort-col {
    color: inherit;
    display: inline-flex;
    align-items: center;
    gap: 3px;
}

.tf-fdx-sort-col:hover { color: var(--brand-text); }

.tf-fdx-sort-icon {
    font-size: 10px;
    color: var(--ink-3);
}

.tf-fdx-sort-icon.is-on { color: var(--brand-text); }

/* ── 表格 ── */
.tf-fd-table { display: flex; flex-direction: column; }

.tf-fd-head,
.tf-fd-row {
    display: grid;
    grid-template-columns: minmax(0, 2fr) 96px 110px 110px minmax(0, 1.5fr) 84px;
    align-items: center;
    gap: 14px;
}

.tf-fd-table.no-val .tf-fd-head,
.tf-fd-table.no-val .tf-fd-row { grid-template-columns: minmax(0, 2fr) 96px 110px minmax(0, 1.5fr) 84px; }
.tf-fd-table.no-inv .tf-fd-head,
.tf-fd-table.no-inv .tf-fd-row { grid-template-columns: minmax(0, 2.4fr) 96px 110px 110px 84px; }
.tf-fd-table.no-val.no-inv .tf-fd-head,
.tf-fd-table.no-val.no-inv .tf-fd-row { grid-template-columns: minmax(0, 2.4fr) 96px 110px 84px; }

.tf-fd-head {
    padding: 0 10px 9px;
    margin: 0 -10px;
    border-bottom: 1px solid var(--line);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-fd-row {
    /* 行高对齐 RootData 的紧凑密度：简介行已撤，9px 上下即可站稳 40px 图标 */
    padding: 9px 10px;
    margin: 0 -10px;
    border-bottom: 1px solid var(--line-soft);
    border-radius: var(--radius-sm);
    transition: background var(--duration) var(--ease);
}

.tf-fd-row:hover { background: var(--hover-ink); }
.tf-fd-row:last-child { border-bottom: none; }

.tf-fd-col-num { text-align: right; }
.tf-fd-col-date { text-align: right; }

/* 项目列：图标 + 名称 + 一句话 + 赛道 */
.tf-fd-cell-project {
    display: flex;
    align-items: center;
    gap: 12px;
    min-width: 0;
}

.tf-fd-row-logo {
    flex: none;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--radius-sm);
    background: var(--paper);
    border: 1px solid var(--line-soft);
    overflow: hidden;
}

.tf-fd-row-logo img { width: 100%; height: 100%; object-fit: cover; }

/* 无图标退首字母色块，与全站占位口径一致（不引入任何外部图片） */
.tf-fd-row-logo.is-ph {
    background: var(--brand-tint);
    color: var(--brand-text);
    font-weight: 800;
    font-size: var(--fs-base);
}

.tf-fd-row-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }

.tf-fd-row-name {
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--ink);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.tf-fd-row:hover .tf-fd-row-name { color: var(--brand-text); }

.tf-fd-row-sector {
    align-self: flex-start;
    margin-top: 2px;
    padding: 1px 6px;
    border-radius: var(--radius-sm);
    background: var(--hover-ink);
    font-size: var(--fs-2xs);
    color: var(--ink-2);
}

/* 轮次：纯文本（09-01 去掉徽章底色，对齐 RootData —— 整列都是徽章时反而没了层次） */
.tf-fd-row-round {
    display: inline-block;
    max-width: 100%;
    font-size: var(--fs-xs);
    font-style: normal;
    color: var(--ink-2);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.tf-fd-cell-amount strong {
    font-family: var(--font-mono);
    font-size: var(--fs-md);
    font-weight: 800;
    color: var(--brand-text);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.tf-fd-cell-val {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    color: var(--ink-2);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.tf-fd-cell-date {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    white-space: nowrap;
}

.tf-fd-nil { color: var(--ink-3); }

/* 投资方：领投加重，其余常规，超出三家折成 +N */
.tf-fd-inv-list {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px 6px;
    min-width: 0;
}

.tf-fd-inv {
    font-size: var(--fs-xs);
    color: var(--ink-2);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 100%;
}

.tf-fd-inv.is-lead { font-weight: 700; color: var(--ink); }

.tf-fd-inv-more {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* 行内标签只在折叠成卡片时出现 */
.tf-fd-label { display: none; }

/* 计数 + 排序切换 */
.tf-fd-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 4px;
}

/* 窄屏：布局收成单列，筛选组退到表格上方；整表折叠成卡片，每格自带标签 */
@media (max-width: 1000px) {
    .tf-fdx { grid-template-columns: minmax(0, 1fr); gap: 16px; }

    .tf-fdx-side {
        position: static;
        max-height: none;
        overflow: visible;
        gap: 10px;
    }

    /* 组内选项从纵向列表退成横滑一行，三组全开也不至于把表格顶出首屏 */
    .tf-fdx-opts {
        flex-direction: row;
        overflow-x: auto;
        gap: 6px;
        padding-bottom: 8px;
        scrollbar-width: none;
    }

    .tf-fdx-opts::-webkit-scrollbar { display: none; }

    .tf-fdx-opt {
        flex: none;
        margin: 0;
        padding: 4px 10px;
        border: 1px solid var(--line-soft);
        white-space: nowrap;
    }

    .tf-fdx-opt.is-active { border-color: transparent; }

    .tf-fdx-charts { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 900px) {
    .tf-fd-head { display: none; }

    .tf-fd-head,
    .tf-fd-row,
    .tf-fd-table.no-val .tf-fd-head,
    .tf-fd-table.no-val .tf-fd-row,
    .tf-fd-table.no-inv .tf-fd-head,
    .tf-fd-table.no-inv .tf-fd-row,
    .tf-fd-table.no-val.no-inv .tf-fd-head,
    .tf-fd-table.no-val.no-inv .tf-fd-row {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 6px 12px;
        padding: 13px 10px;
    }

    .tf-fd-cell-project { grid-column: 1 / -1; }

    .tf-fd-cell-round {
        grid-column: 1;
        justify-self: start;
    }

    .tf-fd-cell-amount {
        grid-column: 2;
        text-align: right;
    }

    .tf-fd-cell-val,
    .tf-fd-cell-inv {
        grid-column: 1 / -1;
        display: flex;
        align-items: baseline;
        gap: 8px;
        text-align: left;
    }

    .tf-fd-cell-date {
        grid-column: 1 / -1;
        text-align: left;
    }

    .tf-fd-label {
        display: inline;
        flex: none;
        font-size: var(--fs-2xs);
        font-weight: 700;
        letter-spacing: 0.04em;
        text-transform: uppercase;
        color: var(--ink-3);
    }

    /* 金额那格的标签在窄屏也不出现：数字本身够醒目，标签只会挤掉一行 */
    .tf-fd-cell-amount .tf-fd-label { display: none; }
}

/* ── 详情要点卡 ── */
.tf-fd-hero {
    display: flex;
    align-items: center;
    gap: 18px;
    padding: 22px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
}

.tf-fd-hero-logo {
    width: 64px;
    height: 64px;
    border-radius: var(--radius-sm);
    overflow: hidden;
    flex-shrink: 0;
    border: 1px solid var(--line-soft);
}

.tf-fd-hero-logo img { width: 100%; height: 100%; object-fit: cover; }

.tf-fd-hero-body { flex: 1; min-width: 0; }

.tf-fd-name { font-size: var(--fs-xl); font-weight: 800; color: var(--ink); margin: 0 0 8px; }

.tf-fd-tags { display: flex; flex-wrap: wrap; gap: 7px; }

.tf-fd-tag {
    font-size: var(--fs-xs);
    font-weight: 600;
    padding: 3px 9px;
    border-radius: var(--radius-sm);
    background: var(--bg);
    color: var(--ink-2);
    border: 1px solid var(--line-soft);
}

.tf-fd-tag-round { background: var(--brand-tint); color: var(--brand-text); border-color: transparent; }

.tf-fd-date { margin: 8px 0 0; font-size: var(--fs-xs); color: var(--ink-3); }

.tf-fd-hero-amount {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 3px;
    flex-shrink: 0;
}

.tf-fd-amount-label {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-fd-amount-value {
    font-family: var(--font-mono);
    font-size: var(--fs-xl);
    font-weight: 800;
    color: var(--brand-text);
    font-variant-numeric: tabular-nums;
}

/* ── 详情结构化字段 ── */
.tf-fd-facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 1px;
    margin-top: 16px;
    background: var(--line-soft);
    border: 1px solid var(--line-soft);
    border-radius: var(--radius);
    overflow: hidden;
}

.tf-fd-fact { display: flex; flex-direction: column; gap: 5px; padding: 14px 16px; background: var(--paper); }
.tf-fd-fact-wide { grid-column: 1 / -1; }

.tf-fd-fact-label {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-fd-fact-value { font-size: var(--fs-base); font-weight: 600; color: var(--ink); }

.tf-fd-investor {
    display: inline-block;
    margin: 3px 6px 0 0;
    padding: 3px 9px;
    border-radius: var(--radius-sm);
    background: var(--bg);
    border: 1px solid var(--line-soft);
    font-size: var(--fs-xs);
    font-weight: 500;
}

.tf-fd-content { margin-top: 22px; }
.tf-fd-actions { margin-top: 20px; }
.tf-fd-source { margin-top: 16px; font-size: var(--fs-xs); color: var(--ink-3); }

/* 项目背景（RootData 补全）：与本轮字段用一条分隔线隔开，
   读者一眼能看出「累计融资 / 历史投资方」不是这一轮的数字 */
.tf-fd-bg { margin-top: 30px; padding-top: 24px; border-top: 1px solid var(--line-soft); }

.tf-fd-bg-title {
    margin: 0;
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--ink);
}

.tf-fd-bg-liner { margin: 8px 0 0; font-size: var(--fs-base); color: var(--ink-2); line-height: 1.65; }
.tf-fd-bg-count { font-family: var(--font-mono); color: var(--ink-3); }
.tf-fd-bg-credit { margin-top: 12px; font-size: var(--fs-xs); color: var(--ink-3); }

@media (max-width: 768px) {
    .tf-fd-hero { flex-wrap: wrap; gap: 14px; padding: 16px; }
    .tf-fd-name { font-size: var(--fs-lg); }
    .tf-fd-hero-amount { align-items: flex-start; width: 100%; }
    .tf-fd-amount-value { font-size: var(--fs-lg); }
    .tf-fd-row { grid-template-columns: 40px minmax(0, 1fr); gap: 10px; }
    .tf-fd-row-logo { width: 40px; height: 40px; }

    /* 数据格手机双列（09-02）：auto-fit 200px 在 390px 只能落一列，
       领投/估值/赛道这类短字段两列正好，跟投方等长字段仍整行 */
    .tf-fd-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .tf-fd-fact { padding: 11px 13px; }
    .tf-fd-fact-label { font-size: 10.5px; }
    .tf-fd-fact-value { font-size: var(--fs-sm); }
}

/* ═══════════════════════════════════════════
   中栏 — 精选深度横卡（左文右图，整卡可点）
   ═══════════════════════════════════════════ */

.story-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.story-card:hover .story-thumb img { transform: scale(1.04); }

/* 24h 涨幅榜已按 R14 下线（首页不再出现币价列表），相关样式随之移除 */

/* ═══════════════════════════════════════════
   右栏 — 精选文章（图文列表）
   ═══════════════════════════════════════════ */

.feat-articles { display: flex; flex-direction: column; }

.feat-article-item {
    display: grid;
    grid-template-columns: 88px minmax(0, 1fr);   /* 图在左；无图退单列见文件末尾「列表图文卡」 */
    gap: 12px;
    align-items: start;
    padding-block: 10px;
    border-bottom: 1px solid var(--line-soft);
}

.feat-article-thumb {
    width: 88px;
    aspect-ratio: 4 / 3;
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--panel);
}

.feat-article-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.feat-article-item:hover .feat-article-thumb img { transform: scale(1.05); }

.feat-article-item:first-child { padding-top: 2px; }
.feat-article-item:last-child { border-bottom: none; padding-bottom: 4px; }

.feat-article-title {
    font-size: var(--fs-sm);
    font-weight: 600;
    line-height: 1.5;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color var(--duration) var(--ease);
}

.feat-article-item:hover .feat-article-title { color: var(--brand-text); }

.feat-article-date {
    display: inline-block;
    margin-top: 5px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* ═══════════════════════════════════════════
   右栏 — 关注我们
   ═══════════════════════════════════════════ */

.follow-card {
    background: linear-gradient(135deg, rgba(160, 238, 4, 0.14), rgba(117, 186, 42, 0.08));
    border-radius: var(--card-radius);
    padding: var(--card-pad);
}

.follow-card-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 6px;
}

.follow-card-desc {
    font-size: var(--fs-xs);
    line-height: 1.6;
    color: var(--ink-2);
    margin-bottom: 12px;
}

/* 账号数量由后台配置决定（1~4 个），所以按钮要能换行：
   两列排布，落单的一个占满整行。 */
.follow-card-actions { display: flex; flex-wrap: wrap; gap: 8px; }

.follow-btn {
    flex: 1 1 calc(50% - 4px);
    min-width: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    min-height: 38px;
    padding: 8px 12px;
    border-radius: var(--radius);
    font-size: var(--fs-sm);
    font-weight: 700;
    background: var(--ink);
    color: var(--paper);   /* 暗色下 --ink 变浅，字色必须跟着反转，不能写死白 */
    transition: all var(--duration) var(--ease);
}

.follow-btn:hover { background: var(--ink-2); color: var(--paper); box-shadow: var(--shadow-sm); }

/* 次要按钮：首个账号用主色实心，其余用描边，避免一排全是深色块 */
.follow-btn.is-alt { background: var(--paper); color: var(--ink); border: 1px solid var(--line); }
.follow-btn.is-alt:hover { border-color: var(--brand-2); color: var(--brand-text); }

/* 按钮里的账号名可能比按钮宽（「微信公众号」「LinkedIn」），截断而不是撑破卡片 */
.follow-btn span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ═══════════════════════════════════════════
   快讯归档页
   ═══════════════════════════════════════════ */

.news-feed { padding: var(--page-top) 0 var(--section-gap); }

/* 快讯归档页容器宽度与全站一致（沿用默认 --container） */

/* ═══════════════════════════════════════════
   深度文章（af-*）
   ═══════════════════════════════════════════ */

.articles-feed-section { padding: var(--page-top) 0 var(--section-gap); }

/* 文章归档页容器宽度与全站一致（沿用默认 --container） */

.af-filter-bar {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 24px;
    /* 分类多时横向滚动而不是换行（与快讯页 .news-filter-tabs 同一做法）：
       窄屏换行会堆成两三行，Tab 栏忽高忽低、下方列表跟着跳；滚动则高度恒定 */
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
    -ms-overflow-style: none;
}

.af-filter-bar::-webkit-scrollbar { display: none; }

.af-filter-tab {
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    white-space: nowrap;
    padding: 7px 16px;
    min-height: 34px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    background: var(--panel);
    transition: all var(--duration) var(--ease);
}

.af-filter-tab:hover { color: var(--ink); background: var(--paper-3); }

.af-filter-tab.active {
    background: var(--brand);
    color: var(--on-brand);
    font-weight: 700;
}

/* 置顶 */
/* 文章列表顶部的推荐位：竖版海报卡横排（08-31，仿金色财经「精选专题」）。
   整卡是配图，标题白字压在图底 —— 白字压图必须自带底衬，否则遇到浅色海报就读不出来，
   所以 ::after 常驻一层从下往上的黑色渐变，不随主题变（它盖的是图片，不是页面底色）。 */
.af-pinned-section {
    margin-bottom: 28px;
    padding: 0;
}

.af-pinned-label {
    display: flex;
    align-items: center;
    gap: 7px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--brand-text);
    margin-bottom: 12px;
}

.af-pin-icon { display: inline-flex; color: var(--brand-text); }

.af-pinned-list {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px;
}

.af-poster {
    position: relative;
    display: block;
    aspect-ratio: 3 / 4;
    border-radius: var(--radius-md);
    overflow: hidden;
    background: var(--panel);
    transition: transform var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.af-poster:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
}

.af-poster-cover {
    position: absolute;
    inset: 0;
    display: block;
}

.af-poster-cover img,
.af-poster-cover .tf-ph {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* 底衬：给白字兜底，深浅主题下都一样（它压在图片上） */
.af-poster::after {
    content: '';
    position: absolute;
    inset: 32% 0 0;
    background: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.55) 55%, rgba(0, 0, 0, 0.88));
    pointer-events: none;
}

.af-poster-body {
    position: absolute;
    inset: auto 0 0;
    z-index: 1;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 7px;
    padding: 14px;
}

.af-poster-tag {
    padding: 2px 8px;
    border-radius: var(--radius-sm);
    background: rgba(255, 255, 255, 0.18);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: #fff;
}

.af-poster-title {
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1.45;
    color: #fff;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

@media (max-width: 900px) {
    .af-pinned-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 520px) {
    .af-pinned-list { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
    .af-poster-title { font-size: var(--fs-sm); -webkit-line-clamp: 2; }
    .af-poster-body { padding: 11px; }
}

/* 日期分隔（文章流） */
.af-date-sep {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 26px 0 12px;
}

.af-date-sep:first-child { margin-top: 0; }

.af-date-line { flex: 1; height: 1px; background: var(--line); }

.af-date-label {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-3);
    background: var(--paper-3);
    padding: 4px 14px;
    border-radius: var(--radius-full);
}

/* 文章条目 */
.af-feed { max-width: 860px; }

.af-item {
    background: transparent;
    border-radius: 0;
    border-bottom: 1px solid var(--line-2);
    margin-bottom: 0;
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease);
}

.af-item:hover { background: var(--row-hover); }

/* 深度文章列表：比快讯稍松（摘要是深度内容的价值所在，不能砍成一行），
   但同样收紧一档 —— 内边距 12→9、标题与摘要各降半档、摘要 3 行收到 2 行。 */
.af-item-link { display: block; padding: 9px 4px; }

.af-item-top {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 6px;
}

/* 紧跟在「来源 ·」后面，不贴右 —— 去掉图片列之后正文占满整行，
   贴右会把分隔符和时间拉开一整屏，与其它列表的 meta 行也不是一个排法 */
.af-time {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.af-item-title {
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1.42;
    color: var(--ink);
    transition: color var(--duration) var(--ease);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.af-item:hover .af-item-title { color: var(--brand-text); }

.af-item-excerpt {
    margin-top: 5px;
    font-size: var(--fs-sm);
    line-height: 1.6;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ═══════════════════════════════════════════
   项目库（tf-db-*）
   ═══════════════════════════════════════════ */

.tf-db-section { padding: var(--page-top) 0 var(--section-gap); }

.tf-db-search {
    width: 100%;
    height: 44px;
    padding: 0 16px 0 42px;
    font-family: inherit;
    font-size: var(--fs-base);
    color: var(--ink);
    background: var(--panel);
    border-radius: var(--radius);
    outline: none;
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.tf-db-search:focus {
    border-color: var(--brand-2);
    box-shadow: 0 0 0 3px var(--brand-tint);
}

.tf-db-search::placeholder { color: var(--ink-4); }

.tf-db-filter-tab.active {
    background: var(--brand);
    color: var(--on-brand);
    font-weight: 700;
}

.tf-db-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 16px;
}

.tf-db-card-logo img { width: 100%; height: 100%; object-fit: cover; }

.tf-db-card-logo-placeholder span {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--brand-text);
}

.tf-db-empty {
    text-align: center;
    padding: 80px 24px;
    color: var(--ink-3);
}

.tf-db-empty h2 { font-size: var(--fs-lg); color: var(--ink); margin-bottom: 8px; }

/* ═══════════════════════════════════════════
   项目详情（tf-detail-*）
   ═══════════════════════════════════════════ */

.tf-detail-section { padding: 28px 0 var(--section-gap); }

.tf-detail-breadcrumb { margin-bottom: 20px; }

.tf-detail-breadcrumb a {
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-3);
}

.tf-detail-breadcrumb a:hover { color: var(--brand-text); }

.tf-detail-logo img { width: 100%; height: 100%; object-fit: cover; }

.tf-detail-logo-placeholder span {
    font-family: var(--font-mono);
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--brand-text);
}

.tf-detail-asset-badge {
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--brand-text);
    background: var(--brand-tint);
    padding: 3px 10px;
    border-radius: var(--radius-full);
}

/* 主按钮（08-30 精修）：圆角走 --radius，非 primary 的默认态给一圈描边当次级按钮，
   悬停抬起 1px 并带品牌色投影，按下回落；焦点环与全站一致。 */
.tf-detail-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    padding: 9px 18px;
    min-height: 38px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    color: var(--ink);
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: 1.2;
    white-space: nowrap;
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease),
                border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease),
                transform var(--duration) var(--ease), filter var(--duration) var(--ease);
}
.tf-detail-btn:hover {
    border-color: var(--brand-2);
    color: var(--brand-text);
    background: var(--brand-tint);
    transform: translateY(-1px);
    box-shadow: var(--shadow-sm);
}
.tf-detail-btn:active { transform: translateY(0); box-shadow: none; }
.tf-detail-btn:disabled,
.tf-detail-btn[aria-disabled="true"] { opacity: .5; cursor: not-allowed; transform: none; box-shadow: none; }

.tf-detail-btn.primary {
    border-color: transparent;
    background: var(--brand);
    color: var(--on-brand);
}
.tf-detail-btn.primary:hover {
    border-color: transparent;
    background: var(--brand);
    color: var(--on-brand);
    filter: brightness(1.04);
    box-shadow: 0 6px 18px rgba(160, 238, 4, 0.28), var(--shadow-sm);
}
.tf-detail-btn.primary:active { filter: brightness(0.96); box-shadow: none; }

.tf-detail-social {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: var(--radius-sm);
    color: var(--ink-2);
    background: var(--paper-3);
    transition: all var(--duration) var(--ease);
}

.tf-detail-social:hover { background: var(--brand-tint); color: var(--brand-text); }

/* 指标横幅 */

/* 详情栅格 */
.tf-detail-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 320px;
    gap: 24px;
    align-items: start;
}

.tf-detail-main { display: flex; flex-direction: column; gap: 16px; min-width: 0; }

.tf-detail-module {
    background: var(--panel);
    border-radius: var(--radius-lg);
    padding: 20px 22px;
}

.tf-module-title {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: var(--fs-md);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 14px;
}

.tf-module-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: var(--radius-sm);
    background: var(--brand-tint);
    color: var(--brand-text);
    flex-shrink: 0;
}

.tf-module-body { font-size: var(--fs-base); color: var(--ink-2); }

.tf-detail-table tr { border-bottom: 1px solid var(--line-soft); }
.tf-detail-table tr:last-child { border-bottom: none; }

.tf-detail-table td { padding: 10px 0; font-size: var(--fs-base); color: var(--ink); }

.tf-detail-table code,
.tf-address {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    background: var(--paper-3);
    padding: 2px 8px;
    border-radius: var(--radius-sm);
    color: var(--ink-2);
    word-break: break-all;
}

/* 社交卡片 */

.tf-social-link-card svg { grid-row: span 2; color: var(--ink-2); }

/* 团队 */

.tf-team-avatar span {
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--brand-text);
}

/* 详情侧栏：与其他右侧栏同口径不吸顶（09-02） */
.tf-detail-sidebar {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.tf-sidebar-card {
    background: var(--panel);
    border-radius: var(--radius-lg);
    padding: 18px;
}

.tf-sidebar-card-title {
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 12px;
    padding-bottom: 10px;
    border-bottom: 1px solid var(--line-soft);
}

.tf-sidebar-dl { display: flex; flex-direction: column; gap: 0; }

.tf-sidebar-dl dt {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    margin-top: 10px;
}

.tf-sidebar-dl dd { font-size: var(--fs-sm); font-weight: 600; color: var(--ink); margin-top: 2px; }

.tf-investor-pill.lead {
    background: var(--brand-tint);
    color: var(--brand-text);
}

.tf-investor-pill small {
    font-size: var(--fs-2xs);
    font-weight: 800;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--brand-text);
}

/* 相关新闻 */
.tf-related-news-section {
    margin-top: 32px;
    background: var(--panel);
    border-radius: var(--radius-lg);
    padding: 20px 22px;
}

.tf-related-count {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--brand-text);
    background: var(--brand-tint);
    padding: 1px 9px;
    border-radius: var(--radius-full);
}

.tf-related-news-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 12px;
}

.tf-related-news-card {
    display: flex;
    flex-direction: column;
    gap: 8px;
    background: var(--paper);
    border-radius: var(--radius);
    padding: 14px 16px;
    transition: all var(--duration) var(--ease);
}

.tf-related-news-card:hover { box-shadow: var(--shadow-sm); }

.tf-related-news-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.tf-related-news-type {
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--brand-text);
}

.tf-related-news-time {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.tf-related-news-title {
    font-size: var(--fs-sm);
    font-weight: 600;
    line-height: 1.5;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.tf-related-news-bottom {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: auto;
}

.tf-related-news-cat.rwa { background: var(--brand-tint); color: var(--brand-text); }

.tf-related-news-source { font-size: var(--fs-2xs); color: var(--ink-3); }

/* ═══════════════════════════════════════════
   快讯详情
   ═══════════════════════════════════════════ */

.single-post-meta .meta-item {
    display: inline-flex;
    align-items: center;
    gap: 5px;
}

/* 来源标注（R45：不外跳，只显示来源） */

.source-link {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    margin-top: 24px;
    padding: 9px 18px;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--brand-text);
    background: var(--brand-tint);
    border-radius: var(--radius);
    transition: background var(--duration) var(--ease);
}

.source-link:hover { background: var(--brand-tint-strong); color: var(--brand-text); }

/* 相关币种行情 */
.news-coin-charts {
    margin-top: 36px;
    background: var(--panel);
    border-radius: var(--radius-lg);
    padding: 18px 20px;
}

.news-coin-charts-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 14px;
}

.news-coin-charts-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border-radius: var(--radius-sm);
    background: var(--brand-tint);
    color: var(--brand-text);
}

.news-coin-charts-title { font-size: var(--fs-base); font-weight: 800; color: var(--ink); }

.news-coin-charts-footer { margin-top: 10px; }

.news-coin-charts-footer a {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* 分享操作条 */

.share-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: var(--radius-sm);
    color: var(--ink-2);
    background: var(--paper-3);
    transition: all var(--duration) var(--ease);
}

.share-btn:hover { background: var(--brand-tint); color: var(--brand-text); }

.news-card-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 9px 18px;
    min-height: 38px;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--on-brand);
    background: var(--brand);
    border-radius: var(--radius);
    transition: all var(--duration) var(--ease);
}

.news-card-btn:hover { filter: brightness(0.94); box-shadow: var(--shadow-sm); }

/* 返回链接 */
.back-link {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.back-link:hover { color: var(--brand-text); }

/* 卡片弹窗 */
.card-modal-overlay {
    position: fixed;
    inset: 0;
    z-index: 1100;
    background: rgba(23, 28, 16, 0.55);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    display: none;
    align-items: flex-start;
    justify-content: center;
    overflow-y: auto;
    padding: 40px 16px;
}

.card-modal-overlay.active { display: flex; }

.card-modal-content {
    position: relative;
    max-width: 420px;
    width: 100%;
}

.card-modal-close {
    position: absolute;
    top: -36px;
    right: 0;
    color: #fff;
    font-size: var(--fs-lg);
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
}

.card-modal-close:hover { background: rgba(255, 255, 255, 0.15); }

.news-card-image {
    width: 100%;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
}

.card-modal-actions { margin-top: 16px; display: flex; justify-content: center; }

.card-download-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 22px;
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--on-brand);
    background: var(--brand);
    border-radius: var(--radius);
}

.card-download-btn:hover { filter: brightness(0.94); }

.card-mobile-hint {
    display: none;
    align-items: center;
    gap: 8px;
    color: rgba(255, 255, 255, 0.85);
    font-size: var(--fs-sm);
}

/* ═══════════════════════════════════════════
   文章详情 — 两栏杂志式
   ═══════════════════════════════════════════ */

.article-layout { padding: 28px 0 var(--section-gap); }

.article-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 316px;
    gap: 40px;
    align-items: start;
    max-width: 1200px;
    margin: 0 auto;
}

.article-main { min-width: 0; }

.article-breadcrumb { margin-bottom: 18px; }

.article-header { margin-bottom: 24px; }

.article-title {
    font-size: var(--fs-xl);
    font-weight: 800;
    line-height: 1.42;
    letter-spacing: 0.005em;
    color: var(--ink);
    margin: 12px 0 16px;
}

.article-meta {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    font-size: var(--fs-sm);
    color: var(--ink-3);
}

.article-meta .meta-dot { color: var(--line); }

.article-cover {
    border-radius: var(--radius-lg);
    overflow: hidden;
    margin-bottom: 28px;
}

.article-cover img { width: 100%; display: block; }

.article-lede {
    font-size: var(--fs-md);
    line-height: 1.8;
    color: var(--ink-2);
    background: var(--panel);
    border-left: 3px solid var(--brand);
    border-radius: 0 var(--radius) var(--radius) 0;
    padding: 16px 20px;
    margin-bottom: 28px;
}

/* ── 快讯情绪投票（利好 / 利空） ──
   复用全站涨跌色 --up / --down，让「利好=绿、利空=红」与行情区的语义一致。 */

.news-vote.is-busy { opacity: .6; pointer-events: none; }

.news-vote-total b { color: var(--ink-2); font-weight: 600; }

/* 分歧条：绿色宽度即利好占比，无票时 JS 给 50% */

.news-vote-btn {
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    padding: 9px 12px;
    font-size: var(--fs-sm);
    font-weight: 600;
    font-family: inherit;
    color: var(--ink-2);
    background: transparent;
    border: 1px solid var(--line-2);
    border-radius: var(--radius);
    cursor: pointer;
    transition: background .15s ease, border-color .15s ease, color .15s ease;
}

.news-vote-btn.is-up:hover,
.news-vote-btn.is-up.is-active { color: var(--up); border-color: var(--up); background: var(--up-tint); }

.news-vote-btn.is-down:hover,
.news-vote-btn.is-down.is-active { color: var(--down); border-color: var(--down); background: var(--down-tint); }

.news-vote-btn:focus-visible { outline: 2px solid var(--up); outline-offset: 2px; }

/* 分享条 */
.article-share {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin-top: 36px;
    padding: 16px 0;
    border-top: 1px solid var(--line-2);
    border-bottom: 1px solid var(--line-2);
}

.article-share .news-card-btn { margin-left: auto; }

.article-share-label {
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-3);
    margin-right: 6px;
}

/* 底部：相关阅读 */
.article-related { margin-top: 36px; }

.article-section-title {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: var(--fs-md);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 14px;
}

.article-section-title::before {
    content: '';
    width: 4px;
    height: 16px;
    border-radius: 2px;
    background: var(--brand);
}

.related-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
}

.related-card {
    display: flex;
    flex-direction: column;
    background: var(--panel);
    border-radius: var(--radius);
    overflow: hidden;
    transition: background var(--duration) var(--ease);
}

.related-card:hover { background: var(--paper-3); }

/* 顶图：相关阅读优先挑有真图的文章（见 single-tf_article.php），
   挑不满时剩下的卡出品牌占位卡（.tf-ph），这一层始终存在 */
.related-card-thumb {
    aspect-ratio: 16 / 9;
    overflow: hidden;
    background: var(--paper-3);
}

.related-card-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.related-card:hover .related-card-thumb img { transform: scale(1.04); }

.related-card-body { padding: 12px 14px 14px; }

.related-card-title {
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: 1.5;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color var(--duration) var(--ease);
}

.related-card:hover .related-card-title { color: var(--brand-text); }

.related-card-meta {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 7px;
}

/* 底部：最新快讯精简列表 */
.article-newslist { margin-top: 36px; }

/* 时间列自适应：time_ago 超过 7 天会退回完整日期（如「2026年8月8日」），
   定宽 76px 放不下会折行 */
.mini-news-item {
    display: grid;
    grid-template-columns: max-content minmax(0, 1fr);
    gap: 12px;
    /* 收紧到 7px：相关快讯是「顺手再看几条」的入口，一屏能列全比每条舒展更有用 */
    padding: 7px 0;
    border-bottom: 1px solid var(--line-2);
}

.mini-news-item:last-child { border-bottom: none; }

.mini-news-time {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: var(--ink-3);
    padding-top: 2px;
    white-space: nowrap;
}

.mini-news-title {
    font-size: var(--fs-base);
    font-weight: 600;
    line-height: 1.5;
    color: var(--ink);
    transition: color var(--duration) var(--ease);
    /* 单行截断，让这一列的节奏保持整齐 */
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.mini-news-item:hover .mini-news-title { color: var(--brand-text); }

/* ── 侧栏：与其他右侧栏同口径不吸顶（09-02） ── */
.article-aside {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

/* 来源 / 作者卡 */
.author-card {
    background: var(--panel);
    border-radius: var(--radius-lg);
    padding: 18px;
}

.author-card-top {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 10px;
}

.author-avatar {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--brand), var(--brand-2));
    color: var(--on-brand);
    font-size: var(--fs-md);
    font-weight: 800;
    flex-shrink: 0;
}

.author-name { font-size: var(--fs-base); font-weight: 800; color: var(--ink); }

.author-role {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    margin-top: 1px;
}

/* 风险提示（08-26）：常驻一行改为悬浮/点按才展开的小标签 */
.tf-risk {
    position: relative;
    display: inline-flex;
    margin-top: 10px;
    outline: none;
}

.tf-risk-label {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 9px;
    border: 1px dashed var(--line);
    border-radius: 999px;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
    cursor: help;
    transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

.tf-risk:hover .tf-risk-label,
.tf-risk:focus-within .tf-risk-label { color: var(--ink); border-color: var(--ink-4); }

.tf-risk-tip {
    position: absolute;
    left: 0;
    bottom: calc(100% + 8px);
    z-index: 6;
    width: min(280px, 72vw);
    padding: 10px 12px;
    border-radius: var(--radius);
    background: var(--ink);
    color: var(--paper);
    font-size: var(--fs-xs);
    line-height: 1.6;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
    opacity: 0;
    visibility: hidden;
    transform: translateY(4px);
    transition: opacity var(--duration) var(--ease), transform var(--duration) var(--ease), visibility 0s linear var(--duration);
}

.tf-risk-tip::after {
    content: '';
    position: absolute;
    left: 16px;
    top: 100%;
    border: 6px solid transparent;
    border-top-color: var(--ink);
}

.tf-risk:hover .tf-risk-tip,
.tf-risk:focus-within .tf-risk-tip {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
    transition-delay: 0s;
}

/* 风险提示的文章底部居中位（09-02）：提示框改为居中弹出、放宽宽度，正文左对齐 */
.tf-risk-bottom {
    margin-top: 28px;
    text-align: center;
}

.tf-risk-bottom .tf-risk-tip {
    left: 50%;
    transform: translate(-50%, 4px);
    width: min(640px, 86vw);
    text-align: left;
}

.tf-risk-bottom .tf-risk-tip::after {
    left: 50%;
    margin-left: -6px;
}

.tf-risk-bottom .tf-risk:hover .tf-risk-tip,
.tf-risk-bottom .tf-risk:focus-within .tf-risk-tip { transform: translate(-50%, 0); }

/* 报道体前缀（08-26）：每条快讯以「TREE NEWS 报道」起头；09-02 起深度文章（专栏稿除外）同口径 */
.news-dateline {
    font-weight: 700;
    color: var(--brand-text);
}

/* 「原文」按钮：正文不写来源名，这是唯一的来源出口 */
.source-line-wrap { margin: 0; }

/* 趋势话题 chips */
.topic-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.topic-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 6px 13px;
    border-radius: var(--radius-sm);
    background: var(--paper);
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--ink-2);
    transition: all var(--duration) var(--ease);
}

.topic-chip::before { content: '#'; color: var(--brand-2); font-weight: 800; }

.topic-chip:hover { background: var(--brand-tint); color: var(--brand-text); }

/* ═══════════════════════════════════════════
   文章详情（旧窄栏，快讯详情复用）
   ═══════════════════════════════════════════ */

/* 正文排版 */
.entry-content { font-size: var(--fs-md); line-height: 1.85; color: var(--ink); }

.entry-content p { margin-bottom: 1.1em; }

.entry-content h2 {
    font-size: var(--fs-lg);
    font-weight: 800;
    margin: 1.8em 0 0.7em;
    padding-left: 12px;
    border-left: 4px solid var(--brand);
    line-height: 1.45;
}

.entry-content h3 { font-size: var(--fs-lg); font-weight: 700; margin: 1.5em 0 0.6em; }

.entry-content a { color: var(--brand-text); text-decoration: underline; text-underline-offset: 3px; }

.entry-content img { border-radius: var(--radius); margin: 1.2em 0; }

.entry-content blockquote {
    margin: 1.2em 0;
    padding: 12px 18px;
    background: var(--paper-2);
    border-left: 4px solid var(--brand-2);
    border-radius: 0 var(--radius) var(--radius) 0;
    color: var(--ink-2);
}

.entry-content ul, .entry-content ol { margin: 0 0 1.1em 1.4em; }
.entry-content li { margin-bottom: 0.4em; }

.entry-content code {
    font-family: var(--font-mono);
    font-size: 0.88em;
    background: var(--paper-3);
    padding: 2px 6px;
    border-radius: var(--radius-sm);
}

.entry-content pre {
    background: #1D2118;
    color: #E8F5D0;
    padding: 16px 20px;
    border-radius: var(--radius);
    overflow-x: auto;
    margin: 1.2em 0;
}

.entry-content pre code { background: none; padding: 0; color: inherit; }

.entry-content table {
    width: 100%;
    border-collapse: collapse;
    margin: 1.2em 0;
    font-size: var(--fs-base);
}

.entry-content th, .entry-content td {
    border: 1px solid var(--line);
    padding: 8px 12px;
    text-align: left;
}

.entry-content th { background: var(--paper-2); font-weight: 700; }

/* ═══════════════════════════════════════════
   搜索结果页
   ═══════════════════════════════════════════ */

.search-results-page { padding: 40px 0 var(--section-gap); }

.search-results-header { margin-bottom: 28px; }

.search-results-header h1 {
    display: flex;
    align-items: center;
    gap: 12px;
    font-size: var(--fs-xl);
    font-weight: 800;
    color: var(--ink);
}

.search-results-header h1 .icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: var(--radius);
    background: var(--brand-tint);
    color: var(--brand-text);
}

.search-query-display {
    margin-top: 10px;
    font-size: var(--fs-base);
    color: var(--ink-2);
}

.search-query-display span { color: var(--brand-text); font-weight: 700; }

.search-results-count {
    margin-top: 4px;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.search-result-section { margin-bottom: 36px; }

.search-result-section-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--fs-md);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 14px;
    padding-bottom: 10px;
    border-bottom: 2px solid var(--brand);
}

.search-result-item {
    background: var(--panel);
    border-radius: var(--radius-lg);
    margin-bottom: 10px;
    transition: all var(--duration) var(--ease);
}

.search-result-item:hover { background: var(--row-hover); }

.search-result-item > a { display: block; padding: 16px 20px; }

.search-result-title {
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: 1.5;
    color: var(--ink);
    margin-top: 8px;
}

.search-result-item a:hover .search-result-title { color: var(--brand-text); }

.search-result-meta {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.search-result-type {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    background: var(--brand-tint);
    color: var(--brand-text);
    padding: 2px 8px;
    border-radius: var(--radius-sm);
}

.search-result-type.news { background: var(--info-tint); color: var(--info); }
.search-result-type.cat { background: var(--paper-3); color: var(--ink-2); }

.search-result-date {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.search-result-excerpt {
    margin-top: 6px;
    font-size: var(--fs-sm);
    line-height: 1.65;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* 注意：WP 会给无结果搜索页的 <body> 加 .search-no-results class，
   选择器必须限定在页面容器内，否则会污染整个 body */
.search-results-page .search-no-results {
    text-align: center;
    padding: 80px 24px;
}

.search-results-page .search-no-results h2 { font-size: var(--fs-lg); color: var(--ink); margin-bottom: 8px; }
.search-results-page .search-no-results p { font-size: var(--fs-base); color: var(--ink-3); }

/* 搜索：项目卡片 */

.search-project-logo img { width: 100%; height: 100%; object-fit: cover; }

.search-project-logo-ph span {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--brand-text);
}

/* ═══════════════════════════════════════════
   分页
   ═══════════════════════════════════════════ */

.pagination {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin-top: 36px;
    flex-wrap: wrap;
}

.pagination .page-numbers {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 38px;
    height: 38px;
    padding: 0 10px;
    border-radius: var(--radius-sm);
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    background: var(--panel);
    transition: all var(--duration) var(--ease);
}

.pagination .page-numbers:hover { background: var(--paper-3); color: var(--ink); }

.pagination .page-numbers.current {
    background: var(--brand);
    color: var(--on-brand);
}

.pagination .page-numbers.dots { border: none; background: none; }

/* ═══════════════════════════════════════════
   FOOTER
   ═══════════════════════════════════════════ */

.site-footer {
    background: var(--paper);
    border-top: 1px solid var(--line);
    margin-top: 24px;
}

/* 品牌栏定宽而不是按比例：比例列会随容器缩水，把链接区压到差几个像素
   排不下最后一栏，于是那栏单独掉到第二行 */
.footer-grid {
    display: grid;
    grid-template-columns: minmax(0, 268px) minmax(0, 1fr);
    gap: 40px;
    padding: 32px 0 24px;
}

.footer-brand-logo {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 14px;
    color: var(--ink);          /* 标志字标取 currentColor，随页脚文字色走 */
}

.footer-brand-logo .footer-lockup {
    display: block;
    height: 34px;
    width: auto;
}

/* 英文组合横向更长，页脚同样压低一档保持视觉重量一致 */
.footer-brand-logo .footer-lockup.logo-lockup-en { height: 28px; }

.footer-brand-desc {
    font-size: var(--fs-sm);
    line-height: 1.7;
    color: var(--ink-2);
    max-width: 340px;
}

.footer-social { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }

.footer-social-link {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 7px 14px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
    background: var(--paper-3);
    border-radius: var(--radius);
    transition: all var(--duration) var(--ease);
}

.footer-social-link:hover { background: var(--brand-tint); color: var(--brand-text); }

/* 三端下载：未配置商店链接时整块不渲染 */
.footer-apps { margin-top: 20px; }

.footer-apps-label {
    display: block;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ink-3);
    margin-bottom: 8px;
}

.footer-apps-row { display: flex; flex-wrap: wrap; gap: 8px; }

/* 商店徽章（08-26）：黑底圆角 + 商店图标 + 两行字，三枚等高 */
.tf-store-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    height: 40px;
    padding: 0 12px 0 10px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: var(--radius);
    background: #0b0f0a;
    color: #fff;
    line-height: 1.1;
    transition: border-color var(--duration) var(--ease), background var(--duration) var(--ease);
}

.tf-store-badge span { display: flex; flex-direction: column; gap: 1px; }
.tf-store-badge small { font-size: 9px; letter-spacing: 0.04em; text-transform: uppercase; opacity: 0.7; }
.tf-store-badge b { font-size: var(--fs-sm); font-weight: 700; white-space: nowrap; }
.tf-store-badge:hover { border-color: var(--brand); background: #141a12; color: #fff; }

/* 合规链接栏会随信息页是否已发布而增减，列数由模板写进 --footer-cols：
   按实际栏数等分，宽屏永远一行，不会有半栏掉到下面 */
.footer-links {
    display: grid;
    grid-template-columns: repeat(var(--footer-cols, 5), minmax(0, 1fr));
    gap: 26px 18px;
    align-items: start;
}

.footer-col h4 {
    font-size: var(--fs-sm);
    font-weight: 800;
    letter-spacing: 0.04em;
    color: var(--ink);
    margin-bottom: 14px;
}

.footer-col ul { list-style: none; }

.footer-col li { margin-bottom: 10px; }

.footer-col a { font-size: var(--fs-sm); color: var(--ink-2); }

.footer-col a:hover { color: var(--brand-text); }

/* 五栏在 1080 以下会被品牌栏挤窄到条目频繁折行，早一步把品牌区放上去独占一行 */
@media (max-width: 1080px) {
    .footer-grid { grid-template-columns: 1fr; gap: 28px; padding: 32px 0 26px; }
    .footer-brand-desc { max-width: 62ch; }   /* 通栏后限制行长，别拉成一条长句 */
    .footer-brand-logo { margin-bottom: 12px; }
}

/* 手机：等分五栏会窄到每个词都换行，改回按最小宽度自动折成两栏 */
@media (max-width: 768px) {
    .footer-links { grid-template-columns: repeat(auto-fit, minmax(132px, 1fr)); gap: 22px 16px; }
}

/* ═══════════════════════════════════════════
   专栏 COLUMNS
   ═══════════════════════════════════════════ */

.columns-page { padding: var(--page-top) 0 64px; }

.cx-card-name a:hover { color: var(--brand-text); }

.cx-card-list li + li { border-top: 1px solid var(--line-soft); }

.cx-card-list a {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 8px 0;
}

.cx-card-list a:hover .cx-item-title { color: var(--brand-text); }

.cx-card-empty, .cx-empty {
    font-size: var(--fs-sm);
    color: var(--ink-3);
    padding: 10px 0 14px;
}

/* ═══════════════════════════════════════════
   全球活动 EVENTS
   版式复用项目库的 .tf-db-*，这里只补活动特有的日期块与状态标
   ═══════════════════════════════════════════ */

/* 日期块占项目 logo 的位置，尺寸与 .tf-db-card-logo 一致 */
.tf-ev-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 1px;
    background: var(--brand-tint);
}

.tf-ev-date-month {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.06em;
    color: var(--brand-text);
}

.tf-ev-date-day {
    font-size: var(--fs-md);
    font-weight: 800;
    line-height: 1;
    color: var(--brand-text);
    font-variant-numeric: tabular-nums;
}

.tf-ev-status {
    flex-shrink: 0;
    padding: 3px 10px;
    font-size: var(--fs-xs);
    font-weight: 700;
    white-space: nowrap;
    border-radius: var(--radius-full);
    background: var(--paper-3);
    color: var(--ink-3);
}

.tf-ev-status-open { background: var(--brand-tint); color: var(--brand-text); }
.tf-ev-status-soon { background: var(--warn-tint); color: var(--warn); }
.tf-ev-status-live { background: var(--down-tint); color: var(--down); }

/* 没有报名链接的活动卡片不可点，不做悬停位移，避免看起来像链接 */
.tf-db-card.is-static { cursor: default; }
.tf-db-card.is-static:hover { transform: none; background: var(--panel); }
.tf-db-card.is-static:hover .tf-db-card-name { color: var(--ink); }

.tf-ev-no-match { text-align: center; }

/* ── 活动详情页：大号日期块 + 报名表单 ── */
.tf-ev-date-lg { gap: 2px; }
.tf-ev-date-lg .tf-ev-date-month { font-size: var(--fs-2xs); }
.tf-ev-date-lg .tf-ev-date-day { font-size: var(--fs-xl); }

.tf-ev-field { display: block; margin-bottom: 12px; }

.tf-ev-field span {
    display: block;
    margin-bottom: 4px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
}

/* radio/checkbox 要排除：它们是行内小控件，width:100% 会把
   旁边的文字标签挤到逐字换行 */
.tf-ev-field input:not([type="radio"]):not([type="checkbox"]),
.tf-ev-field textarea {
    width: 100%;
    padding: 8px 10px;
    font-size: var(--fs-base);
    font-family: inherit;
    color: var(--ink);
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    transition: border-color var(--duration) var(--ease);
}

/* select 与 file 走同一套外观，表单里不出现三种控件风格。
   08-30：select 去掉系统原生外观（appearance:auto 在 macOS 上会比 input 高 2px、
   箭头和字号也各系统不一），自绘一枚 chevron 放右侧，高度与 input 完全对齐；
   弹出的选项列表由根上的 color-scheme 决定明暗，不会在暗色下弹出白底。 */
.tf-ev-field select {
    width: 100%;
    padding: 8px 32px 8px 10px;
    font-size: var(--fs-base);
    font-family: inherit;
    line-height: normal;
    color: var(--ink);
    background-color: var(--paper);
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23676E75' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 9px center;
    background-size: 16px 16px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    -webkit-appearance: none;
       -moz-appearance: none;
            appearance: none;
    cursor: pointer;
    transition: border-color var(--duration) var(--ease);
}
.tf-ev-field select::-ms-expand { display: none; }
/* 暗色下 chevron 换成暗色字色（--ink-3），两种进入暗色的路径都要写 */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .tf-ev-field select {
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23838C7B' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
    }
}
:root[data-theme="dark"] .tf-ev-field select {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23838C7B' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
}

.tf-ev-field input[type="file"] {
    padding: 7px 10px;
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

.tf-ev-field input:not([type="radio"]):not([type="checkbox"]):hover,
.tf-ev-field textarea:hover,
.tf-ev-field select:hover { border-color: var(--ink-4); }

/* 聚焦：品牌色描边 + 3px 柔光环（08-30），代替单薄的 1px 变色 */
.tf-ev-field input:focus,
.tf-ev-field textarea:focus,
.tf-ev-field select:focus {
    outline: none;
    border-color: var(--brand-2);
    box-shadow: 0 0 0 3px var(--brand-tint);
}
.tf-ev-field input::placeholder,
.tf-ev-field textarea::placeholder { color: var(--ink-3); opacity: 1; }

/* 字段下方的一句说明（尺寸建议、格式示例等） */
.tf-ev-field-hint {
    display: block;
    margin-top: 4px;
    font-size: var(--fs-xs);
    font-style: normal;
    line-height: 1.55;
    color: var(--ink-3);
}
.tf-ev-field-hint.is-err { color: var(--down); }

.tf-ev-reg-msg {
    margin: 10px 0 0;
    padding: 8px 10px;
    font-size: var(--fs-sm);
    border-radius: var(--radius);
}
.tf-ev-reg-msg.is-ok  { background: var(--brand-tint); color: var(--brand-text); }
.tf-ev-reg-msg.is-err { background: var(--down-tint);  color: var(--down); }

.tf-ev-reg-note {
    margin: 10px 0 0;
    font-size: var(--fs-xs);
    line-height: 1.6;
    color: var(--ink-3);
}

/* 会务/办会入口（R26/R27） */
.tf-ev-cta-row {
    display: flex;
    gap: 10px;
    margin-top: 14px;
    flex-wrap: wrap;
}

/* 地图找会（R28） */

.tf-ev-map-section { margin: 0 0 20px; }

.tf-ev-map-canvas {
    height: 420px;
    border-radius: var(--radius-lg);
    border: 1px solid var(--line);
    overflow: hidden;
    background: var(--paper-3);
    z-index: 1;           /* Leaflet 内部 z-index 较高，圈住避免盖过吸顶页头 */
    position: relative;
}

.tf-ev-map-hint {
    margin: 8px 2px 0;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

/* ── 大树会务 / 我要办会（R26/R27）── */
/* 大树会务（08-31 按客户设计稿整页重排）
   Hero 是深色品牌区，其下六段共用 .tf-svc-section 的节奏（kicker + 标题 + 内容）。 */
.tf-svc-hero {
    position: relative;
    padding: 30px 0 34px;
    margin-bottom: 8px;
    /* 与列表页 Banner 同一款品牌深绿底 —— 不用 --brand-gradient：
       那是标志用的亮绿渐变（#A0EE04→#75BA2A），白字压上去读不出来。 */
    background: linear-gradient(120deg, #10140A 0%, #182010 55%, #10140A 100%);
    border-radius: var(--radius-lg);
    overflow: hidden;
}

/* 右上角的品牌光晕，与列表页 Banner 同款 */
.tf-svc-hero::after {
    content: '';
    position: absolute;
    right: -60px;
    top: -80px;
    width: 320px;
    height: 320px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(160, 238, 4, 0.22), transparent 65%);
    pointer-events: none;
}

.tf-svc-hero > .container { position: relative; z-index: 1; }

/* 深色 Hero 上的字一律走固定的浅色，不跟主题走 —— 底是品牌深绿渐变，
   跟着 --ink 走会在浅色模式下变成深字压深底。 */
.tf-svc-hero .tf-svc-title { color: #fff; }
.tf-svc-hero .tf-svc-back  { color: rgba(255, 255, 255, 0.62); }
.tf-svc-hero .tf-svc-back:hover { color: #fff; }
.tf-svc-hero .tf-svc-sub,
.tf-svc-hero .tf-svc-lead { color: rgba(255, 255, 255, 0.82); }

.tf-svc-eyebrow {
    display: block;
    margin-bottom: 8px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.18em;
    color: var(--brand);
}

.tf-svc-tagline {
    margin-top: 8px;
    font-size: var(--fs-sm);
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--brand);
}

.tf-svc-lead {
    margin-top: 12px;
    max-width: 720px;
    font-size: var(--fs-sm);
    line-height: 1.8;
}

.tf-svc-lead.is-strong { font-weight: 700; color: #fff; }

.tf-svc-hero-cta {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 20px;
}

/* ── 分节骨架：kicker → 标题 → 副标题 → 内容 ── */
.tf-svc-section { margin-top: 46px; }
.tf-svc-section:first-child { margin-top: 26px; }

.tf-svc-kicker {
    display: block;
    margin-bottom: 10px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.18em;
    color: var(--ink-3);
}

.tf-svc-h2 {
    margin: 0;
    font-size: var(--fs-xl);
    font-weight: 800;
    letter-spacing: -0.01em;
    color: var(--ink);
}

.tf-svc-h2-sub {
    margin: 8px 0 0;
    font-size: var(--fs-sm);
    color: var(--ink-3);
}

.tf-svc-note {
    margin-top: 16px;
    font-size: var(--fs-sm);
    color: var(--ink-3);
}

/* ── WHY NOW：三个判断 ── */
.tf-svc-shifts {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 22px;
}

.tf-svc-shift {
    padding: 20px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-svc-shift-no {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--brand-text);
}

.tf-svc-shift-title {
    margin: 10px 0 8px;
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1.45;
    color: var(--ink);
}

.tf-svc-shift-desc {
    margin: 0;
    font-size: var(--fs-sm);
    line-height: 1.75;
    color: var(--ink-2);
}

/* ── FULL SERVICE：会前 / 会中 / 会后 ── */
.tf-svc-phases {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 22px;
}

.tf-svc-phase {
    padding: 20px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-svc-phase-tag {
    display: inline-block;
    padding: 2px 9px;
    border-radius: var(--radius-sm);
    background: var(--brand-tint);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.1em;
    color: var(--brand-text);
}

.tf-svc-phase-name {
    margin: 12px 0 10px;
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
}

.tf-svc-phase-list {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.tf-svc-phase-list li {
    position: relative;
    padding-left: 16px;
    font-size: var(--fs-sm);
    line-height: 1.6;
    color: var(--ink-2);
}

/* 圆点用伪元素而不是 list-style：这样点的颜色与位置都能对齐品牌色 */
.tf-svc-phase-list li::before {
    content: '';
    position: absolute;
    left: 2px;
    top: 8px;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--brand-2);
}

/* ── EVENT TYPES：九类活动 ── */
.tf-svc-types {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 22px;
}

.tf-svc-type {
    display: flex;
    flex-direction: column;
    padding: 20px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-svc-type-head {
    display: flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 10px;
}

.tf-svc-type-no {
    flex: none;
    padding: 1px 6px;
    border-radius: var(--radius-sm);
    background: var(--brand-tint);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: var(--brand-text);
}

.tf-svc-type-name {
    margin: 0;
    font-size: var(--fs-md);
    font-weight: 700;
    color: var(--ink);
}

.tf-svc-type-desc {
    margin: 0 0 14px;
    font-size: var(--fs-sm);
    line-height: 1.75;
    color: var(--ink-2);
}

/* 适合 / 规模 / 重点：定义列表，标签一列固定宽，值一列自适应 */
.tf-svc-type-facts {
    margin: auto 0 0;
    padding-top: 12px;
    border-top: 1px solid var(--line-soft);
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.tf-svc-type-facts > div {
    display: grid;
    grid-template-columns: 42px minmax(0, 1fr);
    gap: 8px;
}

.tf-svc-type-facts dt {
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: var(--ink-3);
    padding-top: 1px;
}

.tf-svc-type-facts dd {
    margin: 0;
    font-size: var(--fs-xs);
    line-height: 1.6;
    color: var(--ink-2);
}

.tf-svc-extras {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 18px;
    padding-top: 16px;
    border-top: 1px solid var(--line-soft);
}

.tf-svc-extras-label {
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--ink-3);
}

.tf-svc-extra {
    padding: 4px 11px;
    border: 1px solid var(--line);
    border-radius: var(--radius-sm);
    font-size: var(--fs-xs);
    color: var(--ink-2);
}

/* ── RESOURCES：六个数字 ── */
.tf-svc-resources {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 22px;
}

.tf-svc-resource {
    display: flex;
    flex-direction: column;
    gap: 3px;
    padding: 18px 20px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-svc-resource-v {
    font-family: var(--font-mono);
    font-size: var(--fs-2xl, 28px);
    font-weight: 800;
    line-height: 1.15;
    color: var(--brand-text);
}

.tf-svc-resource-n { font-size: var(--fs-sm); font-weight: 700; color: var(--ink); }
.tf-svc-resource-d { font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.6; }

.tf-svc-form-alt {
    margin: 14px 0 0;
    font-size: var(--fs-sm);
    color: var(--ink-3);
}

.tf-svc-form-alt a { color: var(--brand-text); font-weight: 600; }

@media (max-width: 980px) {
    .tf-svc-shifts,
    .tf-svc-phases,
    .tf-svc-types,
    .tf-svc-resources { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 640px) {
    .tf-svc-hero { padding: 22px 0 26px; border-radius: var(--radius); }
    .tf-svc-shifts,
    .tf-svc-phases,
    .tf-svc-types,
    .tf-svc-resources { grid-template-columns: minmax(0, 1fr); }
    .tf-svc-section { margin-top: 34px; }
}

.tf-svc-back {
    display: inline-block;
    margin-bottom: 16px;
    font-size: var(--fs-sm);
    color: var(--ink-3);
}

.tf-svc-back:hover { color: var(--ink); }

.tf-svc-title {
    font-size: var(--fs-xl);
    font-weight: 800;
    letter-spacing: -0.01em;
    color: var(--ink);
}

.tf-svc-sub {
    margin-top: 10px;
    max-width: 620px;
    font-size: var(--fs-base);
    line-height: 1.7;
    color: var(--ink-2);
}

.tf-svc-body { padding: 16px 0 var(--section-gap); }

.tf-svc-form-card {
    max-width: 860px;
    margin-left: auto;
    margin-right: auto;
    margin-top: 24px;
    padding: 24px 28px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    box-shadow: var(--shadow-sm);
}

.tf-svc-form-title {
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
    margin-top: 22px;
}

.tf-svc-form-card .tf-svc-form-title:first-child { margin-top: 0; }

.tf-svc-form-sub {
    margin: 6px 0 4px;
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

.tf-lead-form { margin-top: 14px; }

.tf-lead-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 0 14px;
}

.tf-lead-format { border: none; padding: 0; margin: 0 0 14px; }

/* 联系方式「类型 + 账号」（08-26）：下拉窄、输入框吃满 */
.tf-ev-field .tf-lead-contact { display: flex; gap: 8px; }   /* 盖过 .tf-ev-field span 的 display:block */
.tf-ev-field .tf-lead-contact select { flex: 0 0 auto; width: auto; min-width: 128px; }
.tf-ev-field .tf-lead-contact input { flex: 1 1 auto; min-width: 0; }

.tf-lead-format-opts {
    display: flex;
    gap: 18px;
    margin-top: 6px;
    flex-wrap: wrap;
}

.tf-lead-format-opts label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: var(--fs-sm);
    color: var(--ink-2);
    cursor: pointer;
}

.tf-lead-submit { min-width: 180px; }

.tf-svc-crosslink {
    margin-top: 18px;
    font-size: var(--fs-sm);
    color: var(--ink-2);
    text-align: center;
}

.tf-svc-crosslink a { color: var(--brand-text); font-weight: 600; }

/* 表单双列在窄屏一律塌成单列：办会与专栏申请的字段名较长，
   两列在 700px 上下就已经开始截断，断点跟随全站的 768px */
@media (max-width: 768px) {

    .tf-lead-row { grid-template-columns: 1fr; }
    .tf-svc-form-card { padding: 20px 16px; }
    .tf-ev-map-canvas { height: 320px; }
}

/* ── 关于我们页（template-about.php，09-04 按客户 v3 文案稿整页重排）──
   Hero 沿用会务页的品牌深绿区，右侧一枚棱镜折射 SVG（稿子的「光学意象」）；
   其下各段复用 .tf-svc-section 骨架与三个转向的卡片。本页新增的只有：
   数据卡（12 格、满意度放大配浅绿底）、业务八块两列、深绿引导条、伙伴胶囊墙、官方渠道表。
   全部走令牌，明暗自动换；深底上的字与会务 Hero 一样固定浅色。 */
.tf-about-hero {
    position: relative;
    isolation: isolate;
    padding: 40px 0 44px;
    margin-bottom: 8px;
    background: linear-gradient(120deg, #10140A 0%, #182010 55%, #10140A 100%);
    border-radius: var(--radius-lg);
    overflow: hidden;
}

.tf-about-hero::after {
    content: '';
    position: absolute;
    right: -60px;
    top: -80px;
    width: 360px;
    height: 360px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(160, 238, 4, 0.22), transparent 65%);
    pointer-events: none;
}

.tf-about-hero > .container {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: 32px;
    align-items: center;
}

.tf-about-title {
    margin: 0;
    font-size: 34px;
    font-weight: 800;
    letter-spacing: -0.01em;
    line-height: 1.25;
    color: #fff;
}

.tf-about-tagline {
    margin: 10px 0 0;
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--brand);
}

.tf-about-sub {
    margin: 6px 0 0;
    font-size: var(--fs-lg);
    font-weight: 700;
    color: #fff;
}

.tf-about-lead {
    margin: 14px 0 0;
    max-width: 640px;
    font-size: var(--fs-sm);
    line-height: 1.85;
    color: rgba(255, 255, 255, 0.82);
}

.tf-about-lead.is-strong { color: #fff; }

.tf-about-prism {
    width: 100%;
    max-width: 380px;
    height: auto;
    justify-self: end;
}

/* ── 数据：12 格，满意度那格放大配浅绿底 ── */
.tf-about-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 14px;
    margin-top: 22px;
}

.tf-about-stat {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 18px 20px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-about-stat-v {
    font-family: var(--font-mono);
    font-size: 28px;
    font-weight: 800;
    line-height: 1.15;
    color: var(--brand-text);
}

.tf-about-stat-n {
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
}

.tf-about-stat.is-featured {
    background: var(--brand-wash);
    border-color: var(--brand-2);
}

.tf-about-stat.is-featured .tf-about-stat-v { font-size: 40px; }

.tf-about-stat.is-featured .tf-about-stat-v small {
    margin-left: 4px;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink-3);
}

.tf-about-stat.is-featured .tf-about-stat-n { font-weight: 700; color: var(--ink); }

.tf-about-stat-note { max-width: 720px; }

.tf-about-network {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 10px;
    margin: 10px 0 0;
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

.tf-about-network-label { font-weight: 700; color: var(--ink); }
.tf-about-network-sep   { color: var(--ink-3); }

/* ── 核心业务：八块两列，序号方块在左 ── */
.tf-about-biz {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
    margin-top: 22px;
}

.tf-about-biz-item {
    display: flex;
    gap: 14px;
    padding: 20px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-about-biz-no {
    flex: none;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: var(--radius);
    background: var(--brand-tint);
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--brand-text);
}

.tf-about-biz-text { min-width: 0; }

.tf-about-biz-name {
    margin: 5px 0 6px;
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1.4;
    color: var(--ink);
}

.tf-about-biz-desc {
    margin: 0;
    font-size: var(--fs-sm);
    line-height: 1.75;
    color: var(--ink-2);
}

/* ── 活动引导条：深绿渐变横条，左文右按钮 ── */
.tf-about-cta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 20px;
    margin-top: 46px;
    padding: 26px 30px;
    border-radius: var(--radius-lg);
    background: linear-gradient(110deg, #16240C 0%, #2C4A14 60%, #3F7A0A 100%);
    color: #fff;
}

.tf-about-cta-text {
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 0;
}

.tf-about-cta-text strong { font-size: var(--fs-lg); font-weight: 800; line-height: 1.4; }
.tf-about-cta-text span   { font-size: var(--fs-sm); color: rgba(255, 255, 255, 0.78); }

.tf-about-cta-btns {
    flex: none;
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

/* 深底上的次要按钮：与列表 Banner 的描边款同款 */
.tf-about-cta .tf-banner-btn-ghost {
    border-color: rgba(246, 248, 242, 0.32);
    color: #F6F8F2;
    background: transparent;
}

.tf-about-cta .tf-banner-btn-ghost:hover { border-color: #A0EE04; color: #A0EE04; }

/* ── 合作伙伴：绿框胶囊墙（版式对齐刊例的 Logo 拼图，六列）。
   有 Logo 文件（assets/img/partners/{key}.*）的格出图，没有的出名称。 ── */
.tf-about-logos-group { margin-top: 22px; }
.tf-about-logos-group + .tf-about-logos-group { margin-top: 30px; }

.tf-about-logos-title {
    margin: 0 0 12px;
    font-size: var(--fs-md);
    font-weight: 700;
    color: var(--brand-text);
}

.tf-about-logos {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 12px;
}

.tf-about-logo-inner {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 64px;
    padding: 0 14px;
    border: 2px solid var(--brand-2);
    border-radius: var(--radius-full);
    background: var(--paper);
    color: var(--ink);
    text-decoration: none;
    text-align: center;
    transition: border-color .15s ease, box-shadow .15s ease, transform .15s ease;
}

a.tf-about-logo-inner:hover {
    border-color: var(--brand);
    box-shadow: var(--shadow-sm);
    transform: translateY(-1px);
}

.tf-about-logo-inner img {
    display: block;
    max-height: 36px;
    max-width: 100%;
    width: auto;
    object-fit: contain;
}

.tf-about-logo-name {
    font-size: var(--fs-xs);
    font-weight: 700;
    line-height: 1.3;
    overflow-wrap: anywhere;
}

/* 彩色 Logo 是按白底出的，暗色下胶囊保持白底，不让品牌图压在深色上 */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .tf-about-logo.has-img .tf-about-logo-inner { background: #fff; }
}
:root[data-theme="dark"] .tf-about-logo.has-img .tf-about-logo-inner { background: #fff; }

/* ── 官方渠道验证 ── */
.tf-about-channels {
    margin-top: 22px;
    padding: 22px 24px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-about-channel-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px 24px;
}

.tf-about-channel {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 0;
    font-size: var(--fs-sm);
}

.tf-about-channel-icon {
    flex: none;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: var(--radius);
    background: var(--brand-tint);
    color: var(--brand-text);
}

.tf-about-channel-name { flex: none; font-weight: 600; color: var(--ink-2); }

.tf-about-channel-value {
    min-width: 0;
    font-family: var(--font-mono);
    font-weight: 700;
    color: var(--ink);
    overflow-wrap: anywhere;
}

a.tf-about-channel-value { color: var(--brand-text); }
a.tf-about-channel-value:hover { text-decoration: underline; }

.tf-about-channel-warn {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin: 16px 0 0;
    padding: 12px 14px;
    border-radius: var(--radius);
    background: var(--brand-tint);
    font-size: var(--fs-sm);
    font-weight: 600;
    line-height: 1.6;
    color: var(--ink);
}

.tf-about-channel-warn svg { flex: none; margin-top: 3px; color: var(--brand-text); }

.tf-about-contact-link { text-align: left; }

/* 会务页案例区是关于我们页「查看活动案例」的锚点：吸顶页头下留出位置 */
#tf-svc-cases { scroll-margin-top: calc(var(--header-h, 64px) + 16px); }

@media (max-width: 980px) {
    .tf-about-hero > .container { grid-template-columns: minmax(0, 1fr); }
    .tf-about-prism { display: none; }
    .tf-about-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .tf-about-logos { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

@media (max-width: 640px) {
    .tf-about-hero { padding: 26px 0 30px; border-radius: var(--radius); }
    .tf-about-title { font-size: 26px; }
    .tf-about-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
    .tf-about-stat { padding: 14px; }
    .tf-about-stat-v { font-size: 24px; }
    .tf-about-stat.is-featured { grid-column: span 2; }
    .tf-about-stat.is-featured .tf-about-stat-v { font-size: 34px; }
    .tf-about-biz { grid-template-columns: minmax(0, 1fr); }
    .tf-about-biz-item { padding: 16px; }
    .tf-about-cta { flex-direction: column; align-items: flex-start; margin-top: 34px; padding: 20px 18px; }
    .tf-about-logos { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    .tf-about-logo-inner { height: 56px; padding: 0 10px; }
    .tf-about-channels { padding: 16px; }
    .tf-about-channel-list { grid-template-columns: minmax(0, 1fr); }
    .tf-about-channel { flex-wrap: wrap; }
}

/* ── 联系我们页（template-contact.php）──
   08-30 精修：页头加品牌光晕；左栏分「联系渠道 / 直接联系 / 关注我们」三组，
   组标题统一带品牌色小竖条；渠道行悬停时图标加深；直接联系每行 = 平台色方图标 +
   名称/账号 + 操作区（有链接的「发消息 ↗」品牌芯片为主、复制退为图标按钮，微信没有
   网页协议就「复制微信号」为主）；复制成功用气泡提示，不改按钮宽度。全部走令牌，
   明暗自动换；平台色（微信绿 / TG 蓝 / WhatsApp 绿）是各家固定值，两套主题共用。 */
.tf-contact-hero {
    position: relative;
    isolation: isolate;
    padding: 30px 0 10px;
}
.tf-contact-hero::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(640px 240px at 8% -20%, var(--brand-tint), rgba(160, 238, 4, 0) 70%),
        radial-gradient(480px 140px at 62% 40%, var(--brand-2-tint), rgba(117, 186, 42, 0) 70%);
    /* 光晕只能在区块内画，向下渐隐兜底，免得椭圆越出底边在暗色下留一条硬边 */
    -webkit-mask-image: linear-gradient(180deg, #000 55%, transparent);
            mask-image: linear-gradient(180deg, #000 55%, transparent);
}
.tf-contact-hero .tf-svc-title {
    display: inline-flex;
    align-items: center;
    gap: 12px;
}
.tf-contact-hero .tf-svc-title::before {
    content: '';
    width: 5px;
    height: 0.8em;
    border-radius: 2px;
    background: linear-gradient(180deg, var(--brand), var(--brand-2));
}

.tf-contact-layout {
    display: grid;
    grid-template-columns: minmax(0, 364px) minmax(0, 1fr);
    gap: 22px;
    align-items: start;
}

/* 表单卡在网格列内，取消 svc 表单的居中窄宽 */
.tf-contact-form-card {
    max-width: none;
    margin: 0;
    margin-top: 0;
}
.tf-contact-form-card .tf-lead-form { scroll-margin-top: 140px; }
.tf-contact-form-card .tf-lead-submit {
    gap: 8px;
    min-width: 160px;
    justify-content: center;
}

.tf-contact-aside {
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    box-shadow: var(--shadow-sm);
    padding: 4px 18px 6px;
}

/* 分组：标题带品牌色小竖条，组与组之间一条细线 */
.tf-contact-group {
    padding: 16px 0 14px;
    border-top: 1px solid var(--line);
}
.tf-contact-group:first-child { border-top: none; }

.tf-contact-group-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 10px;
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-3);
}
.tf-contact-group-title::before {
    content: '';
    width: 3px;
    height: 12px;
    border-radius: 1px;
    background: var(--brand-2);
}

/* 联系渠道（邮箱三条） */
.tf-contact-channels { list-style: none; margin: 0; padding: 0; }

.tf-contact-channel {
    display: flex;
    gap: 12px;
    padding: 12px 0;
}
.tf-contact-channel + .tf-contact-channel { border-top: 1px dashed var(--line); }

.tf-contact-channel-icon {
    flex: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: var(--radius-lg);
    background: var(--brand-tint);
    color: var(--brand-text);
    transition: background var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.tf-contact-channel:hover .tf-contact-channel-icon {
    background: var(--brand-tint-strong);
    transform: translateY(-1px);
}

.tf-contact-channel-body { min-width: 0; }

.tf-contact-channel-label {
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: 1.4;
    color: var(--ink);
}

.tf-contact-channel-desc {
    margin-top: 2px;
    font-size: var(--fs-sm);
    line-height: 1.6;
    color: var(--ink-2);
}

.tf-contact-channel-link {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin-top: 6px;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--brand-text);
    word-break: break-all;
}
.tf-contact-channel-link svg { flex: none; opacity: 0.8; }
.tf-contact-channel-link:hover { text-decoration: underline; text-underline-offset: 3px; }
.tf-contact-channel-link.is-form { color: var(--ink-2); }
.tf-contact-channel-link.is-form:hover { color: var(--brand-text); }

/* 直接联系：微信号 / Telegram / WhatsApp（08-31 统一）
   三行同一套网格：34px 平台色图标 | 名称 + 账号 | 30px 复制钮。
   有直达链接的账号本身是链接（尾随 ↗），没有的就是文本；右侧只有复制钮，宽度一致。 */
.tf-contact-im-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.tf-contact-im-item {
    --im: var(--brand-2);
    --im-tint: var(--brand-2-tint);
    position: relative;
    display: grid;
    grid-template-columns: 34px minmax(0, 1fr) 30px;
    align-items: center;
    gap: 12px;
    padding: 10px 10px 10px 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper-2, var(--paper));
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.tf-contact-im-item:hover {
    border-color: var(--im);
    box-shadow: var(--shadow-sm), 0 0 0 3px var(--im-tint);
    transform: translateY(-1px);
}
.tf-contact-im-wechat   { --im: #07C160; --im-tint: rgba(7, 193, 96, 0.14); }
.tf-contact-im-telegram { --im: #229ED9; --im-tint: rgba(34, 158, 217, 0.14); }
.tf-contact-im-whatsapp { --im: #25D366; --im-tint: rgba(37, 211, 102, 0.14); }

.tf-contact-im-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: var(--radius);
    background: var(--im);
    color: #fff;
    box-shadow: 0 0 0 4px var(--im-tint);
}

.tf-contact-im-body {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.tf-contact-im-name {
    font-size: var(--fs-xs);
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--ink-3);
}

.tf-contact-im-value {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    max-width: 100%;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
}
.tf-contact-im-value > span {
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.tf-contact-im-value svg { flex: none; opacity: 0.6; }
a.tf-contact-im-value { color: var(--brand-text); }
a.tf-contact-im-value:hover > span { text-decoration: underline; text-underline-offset: 3px; }
a.tf-contact-im-value:hover svg { opacity: 1; }

/* 复制钮：30px 图标按钮，成功后换对勾并在上方冒「已复制」气泡，宽度不变 */
.tf-contact-im-copy {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    padding: 0;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    color: var(--ink-2);
    font: inherit;
    cursor: pointer;
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}
.tf-contact-im-copy:hover {
    color: var(--brand-text);
    border-color: var(--brand-2);
    background: var(--brand-tint);
}
.tf-contact-im-copy .ic-check { display: none; }
.tf-contact-im-copy.is-copied .ic-copy { display: none; }
.tf-contact-im-copy.is-copied .ic-check { display: inline-flex; }
.tf-contact-im-copy.is-copied {
    color: var(--up);
    border-color: var(--up);
    background: var(--paper);
}
.tf-contact-im-copy.is-copied::after {
    content: attr(data-copied);
    position: absolute;
    left: 50%;
    bottom: calc(100% + 7px);
    transform: translateX(-50%);
    padding: 4px 8px;
    border-radius: var(--radius-sm);
    background: var(--ink);
    color: var(--paper);
    font-size: var(--fs-xs);
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
    box-shadow: var(--shadow-md);
    pointer-events: none;
    animation: tf-im-tip .18s var(--ease);
}
.tf-contact-im-copy.is-copied::before {
    content: '';
    position: absolute;
    left: 50%;
    bottom: calc(100% + 3px);
    transform: translateX(-50%);
    border: 4px solid transparent;
    border-top-color: var(--ink);
    pointer-events: none;
}
@keyframes tf-im-tip {
    from { opacity: 0; transform: translate(-50%, 4px); }
    to   { opacity: 1; transform: translate(-50%, 0); }
}

/* 客服二维码在联系页里跟在直接联系后面，去掉通用块的外边距 */
.tf-contact-aside .tf-support-qr { margin: 10px 0 0; }

/* 关注我们 */
.tf-contact-social-icons { display: flex; flex-wrap: wrap; gap: 8px; }

.tf-contact-social-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    border: 1px solid var(--line);
    color: var(--ink-2);
    transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease), background var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.tf-contact-social-icon:hover {
    color: var(--brand-text);
    border-color: var(--brand-2);
    background: var(--brand-tint);
    transform: translateY(-1px);
}

/* 回复时效：小时钟 + 浅底条 */
.tf-contact-note {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 4px 0 10px;
    padding: 9px 12px;
    border-radius: var(--radius);
    background: var(--paper-2, var(--paper));
    font-size: var(--fs-sm);
    color: var(--ink-2);
}
.tf-contact-note svg { flex: none; color: var(--brand-text); }

@media (max-width: 860px) {
    .tf-contact-layout { grid-template-columns: 1fr; }
    .tf-contact-hero { padding-top: 22px; }
}

/* ── App 下载页（R36 / R48 改版）──
   首屏恒为深色：这是全站唯一一处不跟随主题的版块。下载页要卖的是「产品长什么样」，
   深底才压得住机身与屏幕内容；跟随浅色主题的话手机截图会糊在白底上失去存在感。
   深色值是本地常量，不复用 --page/--paper，免得主题切换把首屏拆散。 */
.tf-app-hero {
    position: relative;
    overflow: hidden;
    isolation: isolate;
    padding: clamp(48px, 7vw, 88px) 0 clamp(56px, 7vw, 96px);
    background: #0A0D09;
    color: #fff;
}

/* 背景三层：两团品牌绿光晕 + 一层细网格，纯 CSS，不引入位图 */
.tf-app-hero-bg {
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
}

.tf-app-glow {
    position: absolute;
    border-radius: 50%;
    filter: blur(90px);
}

.tf-app-glow-1 {
    top: -18%;
    left: -8%;
    width: 46%;
    height: 62%;
    background: rgba(160, 238, 4, 0.16);
}

.tf-app-glow-2 {
    right: -14%;
    bottom: -30%;
    width: 54%;
    height: 78%;
    background: rgba(117, 186, 42, 0.13);
}

/* 命名别撞 .tf-app-grid（卡片区的网格容器）：同名会把 inset:0 套到卡片容器上 */
.tf-app-mesh {
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(rgba(255, 255, 255, 0.022) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255, 255, 255, 0.022) 1px, transparent 1px);
    background-size: 64px 64px;
    /* 网格只在左上角隐约可见，往外淡出，避免整屏变成方格纸 */
    -webkit-mask-image: radial-gradient(90% 75% at 22% 0%, #000 0%, transparent 70%);
    mask-image: radial-gradient(90% 75% at 22% 0%, #000 0%, transparent 70%);
}

.tf-app-hero-inner {
    display: grid;
    grid-template-columns: minmax(0, 1.02fr) minmax(0, 1fr);
    align-items: center;
    gap: clamp(24px, 4vw, 56px);
}

/* 取不到真实内容时机身整块不渲染，首屏退化成单列居中 */
.tf-app-hero-inner.is-solo {
    grid-template-columns: minmax(0, 640px);
    justify-content: center;
    text-align: center;
}

.tf-app-hero-inner.is-solo .tf-app-cta,
.tf-app-hero-inner.is-solo .tf-app-facts { justify-content: center; }
.tf-app-hero-inner.is-solo .tf-app-scan { justify-content: center; }

.tf-app-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 5px 12px;
    border: 1px solid rgba(160, 238, 4, 0.28);
    border-radius: var(--radius-full);
    background: rgba(160, 238, 4, 0.08);
    font-size: var(--fs-xs);
    font-weight: 600;
    letter-spacing: 0.04em;
    color: #C8F27A;
}

.tf-app-eyebrow-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--brand);
    box-shadow: 0 0 0 3px rgba(160, 238, 4, 0.18);
}

.tf-app-lockup { margin: 22px 0 18px; }

/* 字标输出 currentColor，深底上直接反白，不另存反白版 */
.tf-app-lockup .tf-app-logo {
    height: 34px;
    width: auto;
    color: #fff;
}

.tf-app-title {
    margin: 0;
    /* 上限压到 44px：CJK 字面比拉丁大一圈，50px 时模板里的 <br> 之后还会二次折行 */
    font-size: clamp(28px, 3.4vw, 44px);
    font-weight: 800;
    line-height: 1.2;
    letter-spacing: -0.02em;
    color: #fff;
}

.tf-app-sub {
    margin: 18px 0 0;
    max-width: 30em;
    font-size: clamp(15px, 1.2vw, 17px);
    line-height: var(--lh-base);
    color: rgba(255, 255, 255, 0.62);
}

.is-solo .tf-app-sub { margin-left: auto; margin-right: auto; }

/* ── 商店按钮 ── */
.tf-app-cta {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 30px;
}

.tf-app-store {
    display: inline-flex;
    align-items: center;
    gap: 11px;
    min-width: 186px;
    padding: 11px 20px;
    border-radius: var(--radius-lg);
    transition: transform var(--duration) var(--ease), box-shadow var(--duration) var(--ease), filter var(--duration) var(--ease);
}

.tf-app-store-icon { width: 24px; height: 24px; flex-shrink: 0; }

.tf-app-store-text {
    display: flex;
    flex-direction: column;
    line-height: 1.2;
    text-align: left;
}

.tf-app-store-text small {
    font-size: 11px;
    opacity: 0.68;
}

.tf-app-store-text strong {
    font-size: var(--fs-md);
    font-weight: 700;
    letter-spacing: -0.01em;
}

.tf-app-store.is-ios {
    background: #fff;
    color: #10130E;
}

.tf-app-store.is-android {
    background: var(--brand-gradient);
    color: var(--on-brand);
}

a.tf-app-store:hover {
    transform: translateY(-2px);
    box-shadow: 0 10px 26px rgba(0, 0, 0, 0.35);
}

/* 未配置商店链接：保留按钮形态但明确是「即将上线」，不给死链 */
.tf-app-store.is-soon {
    background: rgba(255, 255, 255, 0.07);
    border: 1px solid rgba(255, 255, 255, 0.14);
    color: rgba(255, 255, 255, 0.72);
    cursor: default;
}

.tf-app-store.is-soon .tf-app-store-icon { opacity: 0.6; }

/* ── 扫码块 ── */
.tf-app-scan {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 26px;
}

.tf-app-qr {
    width: 92px;
    height: 92px;
    padding: 7px;
    flex-shrink: 0;
    border-radius: var(--radius);
    background: #fff;
}

.tf-app-qr svg { width: 100%; height: 100%; display: block; }

.tf-app-scan-text {
    display: flex;
    flex-direction: column;
    gap: 3px;
    font-size: var(--fs-xs);
    color: rgba(255, 255, 255, 0.5);
}

.tf-app-scan-text strong {
    font-size: var(--fs-sm);
    font-weight: 600;
    color: rgba(255, 255, 255, 0.9);
}

.tf-app-facts {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 20px;
    margin: 26px 0 0;
    padding: 0;
    list-style: none;
    font-size: var(--fs-xs);
    color: rgba(255, 255, 255, 0.45);
}

.tf-app-facts li {
    display: flex;
    align-items: center;
    gap: 8px;
}

.tf-app-facts li::before {
    content: '';
    width: 4px;
    height: 4px;
    border-radius: 50%;
    background: var(--brand-2);
}

/* ── 机身预览 ──
   屏内是站点真实数据（最新快讯 + 行情快照），不是示意图；
   两台机身分别承担「快讯」与「行情」两块能力。 */
.tf-app-visual {
    display: flex;
    justify-content: center;
    align-items: center;
}

.tf-app-visual-stage {
    position: relative;
    width: 100%;
    max-width: 460px;
    height: 540px;
}

.tf-phone {
    position: absolute;
    width: 250px;
    height: 508px;
    padding: 9px;
    border-radius: 38px;
    /* 机身必须实色：半透明会让首屏的网格与光晕透过来，看着像玻璃片而不是手机 */
    background: linear-gradient(155deg, #4A5147 0%, #2A2F2900 34%, #171B16 100%), #262B24;
    /* 三层：外描边把机身从深底里剥出来，内描边是屏幕与边框的接缝，再加落影 */
    box-shadow:
        0 0 0 1px rgba(255, 255, 255, 0.16),
        0 0 0 1px rgba(0, 0, 0, 0.5) inset,
        0 34px 80px rgba(0, 0, 0, 0.62);
}

.tf-phone-back {
    top: 0;
    left: 0;
    transform: rotate(-9deg) scale(0.9);
    transform-origin: bottom left;
    opacity: 0.94;
}

.tf-phone-front {
    top: 34px;
    right: 0;
    transform: rotate(4deg);
    z-index: 2;
}

.tf-phone-screen {
    display: flex;
    flex-direction: column;
    height: 100%;
    overflow: hidden;
    border-radius: 30px;
    background: #0D110C;
    color: #fff;
}

.tf-phone-status {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 11px 16px 6px;
    font-size: 10px;
    font-weight: 700;
    color: rgba(255, 255, 255, 0.75);
}

.tf-phone-status-icons {
    width: 34px;
    height: 6px;
    border-radius: 2px;
    background: rgba(255, 255, 255, 0.22);
}

.tf-phone-head {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px 10px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.07);
}

.tf-phone-mark { display: flex; }
.tf-phone-mark .tf-phone-mark-svg { height: 17px; width: auto; }

.tf-phone-head-title {
    font-size: 11px;
    font-weight: 800;
    letter-spacing: 0.06em;
    color: #fff;
}

.tf-phone-ticker {
    display: flex;
    gap: 10px;
    padding: 7px 14px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.06);
    background: rgba(255, 255, 255, 0.02);
    font-size: 9px;
    white-space: nowrap;
    overflow: hidden;
}

.tf-phone-ticker-item { display: inline-flex; gap: 4px; }
.tf-phone-ticker-item b { color: rgba(255, 255, 255, 0.78); font-weight: 700; }
.tf-phone-ticker-item i { font-style: normal; }

.tf-phone-feed {
    flex: 1;
    padding: 4px 14px;
    overflow: hidden;
}

.tf-phone-item {
    display: flex;
    gap: 8px;
    padding: 9px 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}

.tf-phone-item-time {
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: 9px;
    line-height: 1.5;
    color: var(--brand);
}

.tf-phone-item-title {
    font-size: 9.5px;
    line-height: 1.5;
    color: rgba(255, 255, 255, 0.82);
    /* 屏幕高度有限：超过三行截断，保证最后一条不被切一半 */
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.tf-phone-tabs {
    display: flex;
    justify-content: space-around;
    align-items: center;
    padding: 10px 18px 14px;
    border-top: 1px solid rgba(255, 255, 255, 0.07);
}

.tf-phone-tabs span {
    width: 18px;
    height: 4px;
    border-radius: 2px;
    background: rgba(255, 255, 255, 0.16);
}

.tf-phone-tabs span.is-on { background: var(--brand); }

.tf-phone-coins { padding: 4px 14px; }

/* 三列定宽而不是 flex + margin-auto：价格字宽不一（$77,269 / $2,426），
   靠自动边距会让右缘参差，行情表最忌讳这个 */
.tf-phone-coin {
    display: grid;
    grid-template-columns: 1fr auto 46px;
    align-items: center;
    gap: 8px;
    padding: 11px 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.05);
    font-size: 10px;
}

.tf-phone-coin-sym {
    font-weight: 700;
    color: rgba(255, 255, 255, 0.88);
}

.tf-phone-coin-price {
    font-family: var(--font-mono);
    text-align: right;
    color: rgba(255, 255, 255, 0.62);
}

.tf-phone-coin-chg {
    text-align: right;
    font-family: var(--font-mono);
    font-weight: 600;
}

.tf-phone-coin-chg.is-up,
.tf-phone-ticker-item i.is-up { color: #4ADE80; }

.tf-phone-coin-chg.is-down,
.tf-phone-ticker-item i.is-down { color: #F87171; }

/* ── 能力卡片区（跟随主题）── */
.tf-app-features { padding: clamp(40px, 5vw, 64px) 0 var(--section-gap); }

.tf-app-sec-title {
    margin: 0 0 22px;
    font-size: var(--fs-lg);
    font-weight: 700;
    color: var(--ink);
}

.tf-app-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 14px;
}

.tf-app-card {
    padding: 22px 20px 24px;
    border: 1px solid var(--line-2);
    border-radius: var(--card-radius);
    background: var(--paper);
    transition: transform var(--duration) var(--ease), border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.tf-app-card:hover {
    transform: translateY(-3px);
    border-color: var(--brand-2);
    box-shadow: var(--shadow-md);
}

.tf-app-card-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    margin-bottom: 14px;
    border-radius: var(--radius-lg);
    background: var(--brand-tint);
    color: var(--brand-text);
}

.tf-app-card-name {
    margin: 0 0 7px;
    font-size: var(--fs-md);
    font-weight: 700;
    color: var(--ink);
}

.tf-app-card-desc {
    margin: 0;
    font-size: var(--fs-sm);
    line-height: var(--lh-base);
    color: var(--ink-3);
}

@media (max-width: 1080px) {
    .tf-app-visual-stage { max-width: 400px; height: 470px; }
    .tf-phone { width: 218px; height: 442px; border-radius: 32px; }
    .tf-phone-screen { border-radius: 25px; }
}

@media (max-width: 940px) {
    /* 单列：文案在上、机身在下，机身缩到不抢版面 */
    .tf-app-hero-inner {
        grid-template-columns: minmax(0, 1fr);
        justify-items: center;
        text-align: center;
    }

    .tf-app-copy { max-width: 560px; }
    .tf-app-sub { margin-left: auto; margin-right: auto; }
    .tf-app-cta,
    .tf-app-scan,
    .tf-app-facts { justify-content: center; }

    .tf-app-visual-stage { max-width: 380px; height: 430px; }
    .tf-phone { transform-origin: center; }
    .tf-phone-back { transform: rotate(-8deg) scale(0.84); left: -8px; }
    .tf-phone-front { transform: rotate(3deg) scale(0.92); }

    .tf-app-grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 640px) {
    .tf-app-hero { padding-top: 36px; }
    .tf-app-store { flex: 1 1 100%; justify-content: center; min-width: 0; }
    /* 手机上扫自己屏幕没有意义，扫码块整块收起 */
    .tf-app-scan { display: none; }
    .tf-app-facts { gap: 6px 14px; }

    /* 高度要盖住 442px 机身 ×0.86 的实高，否则 hero 的 overflow:hidden 会切掉底边 */
    .tf-app-visual-stage { max-width: 300px; height: 390px; }
    /* 小屏只留前置机身，两台叠在一起会互相压住内容 */
    .tf-phone-back { display: none; }
    .tf-phone-front {
        top: 0;
        right: auto;
        left: 50%;
        transform: translateX(-50%) rotate(0deg) scale(0.86);
        transform-origin: top center;
    }

    .tf-app-grid { grid-template-columns: 1fr; }
}

/* ── 桌面右下悬浮下载窗（R37）── */
.tf-dl-float {
    position: fixed;
    right: 22px;
    bottom: 22px;
    z-index: 90;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-md);
    animation: tf-fade-up 0.4s var(--ease-out) both;
}

.tf-dl-float-close {
    position: absolute;
    top: -9px;
    right: -9px;
    width: 22px;
    height: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--ink);
    color: var(--paper);
    z-index: 2;
}

.tf-dl-float-qr {
    display: block;
    width: 104px;
    height: 104px;
    padding: 6px;
    background: #fff;
    border: 1px solid var(--line-soft);
    border-radius: var(--radius);
}

.tf-dl-float-qr svg { width: 100%; height: 100%; display: block; }

.tf-dl-float-text strong {
    font-size: var(--fs-xs);
    color: var(--ink);
}

/* 悬浮窗只在桌面出现；移动端由底部下载条承担 */
@media (max-width: 1080px) {
    .tf-dl-float { display: none; }
}

/* ── 移动端底部固定下载条（R40）── */
.tf-dl-bar {
    display: none;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 95;
    align-items: center;
    gap: 10px;
    padding: 10px 14px calc(10px + env(safe-area-inset-bottom, 0px));
    background: var(--surface-blur);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    border-top: 1px solid var(--line);
    box-shadow: 0 -4px 18px rgba(0, 0, 0, 0.07);
}

.tf-dl-bar-mark {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: var(--radius);
    background: var(--brand-tint);
    flex-shrink: 0;
}

/* 下载条里的官方标志（09-02 起用 VI 矢量原稿） */
.tf-dl-bar-mark .tf-dl-bar-logo { width: 22px; height: auto; }

.tf-dl-bar-text {
    flex: 1;
    min-width: 0;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.tf-dl-bar-btn {
    flex-shrink: 0;
    padding: 8px 16px;
    border-radius: var(--radius-full);
    background: var(--brand);
    color: var(--on-brand);
    font-size: var(--fs-sm);
    font-weight: 700;
}

.tf-dl-bar-close {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    color: var(--ink-3);
}

@media (max-width: 768px) {
    .tf-dl-bar[hidden] { display: none; }
    .tf-dl-bar:not([hidden]) { display: flex; }
}

/* ── 首访订阅弹窗（R44）/ 登录浮窗共用骨架 ──
   居中用 flex 而非 transform：tf-fade-up 动画 fill 模式会覆盖面板自身的
   transform，绝对定位 + translate(-50%,-50%) 的居中方案会失效偏移 */
.tf-sub-modal {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
}

.tf-sub-modal[hidden] { display: none; }

.tf-sub-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(9, 14, 10, 0.55);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
}

.tf-sub-panel {
    position: relative;
    width: min(430px, calc(100vw - 32px));
    max-height: calc(100vh - 48px);
    overflow-y: auto;
    padding: 32px 30px 26px;
    background: var(--paper);
    border-radius: var(--radius-lg);
    box-shadow: 0 24px 70px rgba(0, 0, 0, 0.28);
    text-align: center;
    animation: tf-fade-up 0.35s var(--ease-out) both;
}

.tf-sub-close {
    position: absolute;
    top: 12px;
    right: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    color: var(--ink-3);
    transition: all var(--duration) var(--ease);
}

.tf-sub-close:hover { color: var(--ink); background: var(--paper-3); }

.tf-sub-mark { margin-bottom: 8px; }

/* 弹窗顶部的官方标志（09-02 起用 VI 矢量原稿，treefinance_brand_logo('mark')） */
.tf-sub-mark .tf-sub-mark-logo { width: 48px; height: auto; }

.tf-sub-title {
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
}

/* 订阅弹窗标题位放页头同款的完整组合标志（09-03）。原稿横向约 8:1，给高度
   即可；字标取 currentColor，深色面板上跟着 --ink 反白。手机面板 342px 宽，
   26px 高时标志约 210px，两侧还有余量。 */
.tf-sub-title-lockup {
    display: flex;
    justify-content: center;
    margin: 8px 0 4px;
    line-height: 0;
}

.tf-sub-title-lockup .tf-sub-lockup {
    display: block;
    height: 30px;
    width: auto;
    max-width: 100%;
    color: var(--ink);
}

@media (max-width: 480px) {
    .tf-sub-title-lockup .tf-sub-lockup { height: 26px; }
}

.tf-sub-desc {
    margin: 8px 0 18px;
    font-size: var(--fs-sm);
    line-height: 1.65;
    color: var(--ink-2);
}

.tf-sub-input-row {
    display: flex;
    gap: 8px;
}

.tf-sub-input {
    flex: 1;
    min-width: 0;
    height: 42px;
    padding: 0 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    font-size: var(--fs-sm);
    color: var(--ink);
    background: var(--paper);
    outline: none;
    transition: border-color var(--duration) var(--ease);
}

.tf-sub-input:focus { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-tint); }

.tf-sub-btn {
    flex-shrink: 0;
    padding: 0 20px;
    border-radius: var(--radius);
    background: var(--brand);
    color: var(--on-brand);
    font-size: var(--fs-sm);
    font-weight: 700;
    transition: filter var(--duration) var(--ease);
}

.tf-sub-btn:hover { filter: brightness(0.96); }

.tf-sub-dl {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 20px;
    padding-top: 18px;
    border-top: 1px solid var(--line-soft);
    text-align: left;
}

.tf-sub-dl-qr {
    display: block;
    width: 74px;
    height: 74px;
    padding: 5px;
    background: #fff;
    border: 1px solid var(--line-soft);
    border-radius: var(--radius);
    flex-shrink: 0;
}

.tf-sub-dl-qr svg { width: 100%; height: 100%; display: block; }

.tf-sub-dl-text {
    display: flex;
    flex-direction: column;
    gap: 3px;
    font-size: var(--fs-xs);
}

.tf-sub-dl-text strong { font-size: var(--fs-sm); color: var(--ink); }
.tf-sub-dl-text a { color: var(--brand-text); font-weight: 600; }

/* ── 登录浮窗（复用订阅弹窗骨架 tf-sub-*，全屏遮罩 + 面板居中）── */
.tf-login-modal {
    position: fixed;
    inset: 0;
    z-index: 1001;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
}

.tf-login-modal[hidden] { display: none; }

.tf-login-panel { width: min(400px, calc(100vw - 32px)); text-align: left; }

.tf-login-panel .tf-sub-mark,
.tf-login-panel .tf-sub-title { text-align: center; display: block; }

.tf-login-tabs {
    display: flex;
    gap: 4px;
    margin: 18px 0 16px;
    padding: 4px;
    border-radius: var(--radius-full);
    background: var(--paper-3);
}

.tf-login-tab {
    flex: 1;
    padding: 8px 0;
    border-radius: var(--radius-full);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-3);
    transition: all var(--duration) var(--ease);
}

.tf-login-tab.active {
    background: var(--paper);
    color: var(--ink);
    font-weight: 700;
    box-shadow: var(--shadow-sm);
}

.tf-login-form .tf-ev-field { margin-bottom: 12px; }

.tf-login-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin: 2px 0 14px;
    font-size: var(--fs-xs);
}

.tf-login-remember {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--ink-2);
    cursor: pointer;
}

.tf-login-forgot { color: var(--ink-3); }
.tf-login-forgot:hover { color: var(--brand-text); }

.tf-login-submit { width: 100%; justify-content: center; }

.tf-login-bonus {
    margin-top: 12px;
    padding: 9px 12px;
    border-radius: var(--radius);
    background: var(--brand-tint);
    color: var(--brand-text);
    font-size: var(--fs-xs);
    text-align: center;
}

/* ── 列表页 Banner + 主列/边栏布局（R19）── */
.list-banner {
    position: relative;
    margin: 0 0 12px;
    border-radius: var(--radius-lg);
    background: linear-gradient(120deg, #10140A 0%, #182010 55%, #10140A 100%);
    overflow: hidden;
}

.list-banner-glow {
    position: absolute;
    right: -60px;
    top: -80px;
    width: 320px;
    height: 320px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(160, 238, 4, 0.22), transparent 65%);
    pointer-events: none;
}

.list-banner-inner {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    padding: 14px 22px;
    flex-wrap: wrap;
}

.list-banner-title {
    font-size: var(--fs-lg);
    font-weight: 800;
    letter-spacing: -0.01em;
    color: #F6F8F2;
}

.list-banner-desc {
    margin-top: 6px;
    max-width: 560px;
    font-size: var(--fs-sm);
    line-height: 1.6;
    color: rgba(246, 248, 242, 0.66);
}

.list-banner-extra {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 12px;
}

/* 标题块可压缩：不给基准的话，长文案（英文 / 越南文）会把右侧 extra 整块顶到第二行，
   同一个页面各语言版式对不齐 */
.list-banner-text { flex: 1 1 260px; min-width: 0; }

/* is-split（活动页）：extra 交出盒子，统计与标题同排在右，入口按钮独占下一行。
   各语言按钮宽度差很多，固定分行才能让五个语言的 Banner 长得一样 */
.list-banner-extra.is-split { display: contents; }
.list-banner-extra.is-split .list-banner-stats { align-self: center; }
.list-banner-extra.is-split .tf-ev-cta-row { flex: 1 0 100%; margin-top: 0; justify-content: flex-end; }

.list-banner-stats { display: flex; gap: 26px; }

.list-banner-stat {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.1em;
    color: rgba(246, 248, 242, 0.55);
}

.list-banner-stat strong {
    font-size: var(--fs-lg);
    font-weight: 700;
    color: #A0EE04;
}

/* Banner 内的次要按钮走深底描边样式 */
.list-banner .tf-banner-btn-ghost {
    border-color: rgba(246, 248, 242, 0.28);
    color: #F6F8F2;
    background: transparent;
}

.list-banner .tf-banner-btn-ghost:hover { border-color: #A0EE04; color: #A0EE04; }

.list-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 340px;
    gap: 16px;
    align-items: start;
}

.list-main { min-width: 0; }

/* 与 .home-sidebar 同口径：右侧模块栏不吸顶（09-02） */
.list-sidebar {
    display: flex;
    flex-direction: column;
    gap: var(--card-gap);
}

@media (max-width: 1080px) {
    .list-layout { grid-template-columns: 1fr; }
}

@media (max-width: 768px) {
    .list-banner-inner { padding: 22px 20px; }
    .list-banner-title { font-size: var(--fs-lg); }
    .list-banner-extra { align-items: flex-start; }
    /* is-split 不生成盒子，上面那条 align-items 管不到它的子元素，窄屏单独收口左对齐 */
    .list-banner-extra.is-split .list-banner-stats,
    .list-banner-extra.is-split .tf-ev-cta-row { justify-content: flex-start; }
}

/* ── 文章列表图文卡（R18）── */
.af-item-media {
    display: grid;
    grid-template-columns: 200px minmax(0, 1fr);   /* 图在左（金色财经式）；无图退单列见文件末尾「列表图文卡」 */
    gap: 20px;
}

/* 正文列拉成与图等高的纵向 flex：标题贴图顶、来源行贴图底，
   和金色的条目一样上下各占一条边线，中间留白随标题长短伸缩。 */
.af-item-body { min-width: 0; display: flex; flex-direction: column; }

.af-item-thumb {
    width: 200px;
    height: 125px;
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--panel);
}

.af-item-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.af-item-link:hover .af-item-thumb img { transform: scale(1.04); }

.af-item-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: auto;
    padding-top: 10px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.af-author { font-weight: 600; color: var(--ink-2); }

@media (max-width: 640px) {
    /* 窄屏：正文是「标签 + 两行标题 + 两行摘要 + 来源」，比图高得多，图顶对齐会
       缩在左上角像个图标。改成 3:2 的 120×80 并与正文垂直居中。 */
    .af-item-media { grid-template-columns: 120px minmax(0, 1fr); gap: 12px; align-items: center; }
    .af-item-thumb { width: 120px; height: 80px; }
}

/* ── 站内行情列表页（R15）── */
.tf-mkt-section { padding: var(--page-top) 0 var(--section-gap); }

.tf-mkt-table {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--fs-sm);
    min-width: 720px;
}

.tf-mkt-table th {
    padding: 12px 14px;
    text-align: left;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
    border-bottom: 1px solid var(--line);
    white-space: nowrap;
}

.tf-mkt-table td {
    padding: 11px 14px;
    border-bottom: 1px solid var(--line-soft);
    vertical-align: middle;
}

.tf-mkt-table tbody tr { transition: background var(--duration) var(--ease); }
.tf-mkt-table tbody tr:hover { background: var(--panel); }
.tf-mkt-table tbody tr:last-child td { border-bottom: none; }

/* 从首页面板跳入的定位高亮 */
.tf-mkt-table tbody tr.is-flash { background: var(--brand-tint); }

.tf-mkt-coin img { border-radius: 50%; flex-shrink: 0; }

.tf-mkt-coin strong {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
}

.tf-mkt-coin em {
    font-style: normal;
    font-size: var(--fs-xs);
    color: var(--ink-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

td.tf-mkt-num.up { color: var(--up); }
td.tf-mkt-num.down { color: var(--down); }

.tf-mkt-attribution a { color: var(--ink-3); }

@media (max-width: 768px) {

    .tf-mkt-table { min-width: 0; }
}

/* ═══════════════════════════════════════════
   发现 · 学习模块（R31/R33 改版）
   小白入门 / 区块链百科 / 工具导航三页共用一套门面：深色首屏 + 浅色正文。

   为什么首屏是深色：三页原先各挂一条绿渐变 Banner，彼此看不出属于同一个
   模块，页内又都是裸列表，观感散。深色首屏把三页收成一个「学习」入口，
   首屏里的 tab 让读者在模块内横向跳转。正文仍是浅色，阅读体验与全站一致。

   深色值是本地常量（与下载页首屏同源），不复用 --page/--paper：这两块本就
   不跟随主题，写成变量会在主题切换时被拆散。
   ═══════════════════════════════════════════ */

.tf-learn-hero {
    position: relative;
    overflow: hidden;
    isolation: isolate;
    padding: clamp(38px, 5vw, 68px) 0 clamp(34px, 4.2vw, 56px);
    background: #0A0D09;
    color: #fff;
}

/* 背景三层：两团品牌绿光晕 + 一层细网格，纯 CSS，不引入位图 */
.tf-learn-hero-bg {
    position: absolute;
    inset: 0;
    z-index: -1;
    pointer-events: none;
}

.tf-learn-glow {
    position: absolute;
    border-radius: 50%;
    filter: blur(90px);
}

.tf-learn-glow-1 {
    top: -55%;
    left: -6%;
    width: 44%;
    height: 150%;
    background: rgba(160, 238, 4, 0.15);
}

.tf-learn-glow-2 {
    right: -12%;
    bottom: -80%;
    width: 50%;
    height: 175%;
    background: rgba(117, 186, 42, 0.12);
}

.tf-learn-mesh {
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(rgba(255, 255, 255, 0.022) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255, 255, 255, 0.022) 1px, transparent 1px);
    background-size: 64px 64px;
    -webkit-mask-image: radial-gradient(90% 80% at 20% 0%, #000 0%, transparent 72%);
    mask-image: radial-gradient(90% 80% at 20% 0%, #000 0%, transparent 72%);
}

/* 深色首屏与白底正文之间的收口：一条极细的品牌绿，代替生硬的直角切换 */
.tf-learn-hero::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(160, 238, 4, 0.45), transparent);
}

.tf-learn-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 5px 12px;
    border: 1px solid rgba(160, 238, 4, 0.28);
    border-radius: var(--radius-full);
    background: rgba(160, 238, 4, 0.08);
    font-size: var(--fs-xs);
    font-weight: 600;
    letter-spacing: 0.04em;
    color: #C8F27A;
}

.tf-learn-eyebrow-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--brand);
    box-shadow: 0 0 0 3px rgba(160, 238, 4, 0.18);
}

/* 文案在左、模块入口在右：首屏高度撑到 400px 上下，单列会在右半屏空出一大片 */
.tf-learn-hero-inner {
    display: grid;
    grid-template-columns: minmax(0, 1.08fr) minmax(0, 0.92fr);
    align-items: center;
    gap: clamp(28px, 4vw, 64px);
}

.tf-learn-title {
    margin: 18px 0 0;
    /* 上限压到 40px：CJK 字面比拉丁大一圈，再大在窄屏会二次折行 */
    font-size: clamp(26px, 3vw, 40px);
    font-weight: 800;
    line-height: 1.2;
    letter-spacing: -0.02em;
    color: #fff;
}

.tf-learn-sub {
    margin: 12px 0 0;
    max-width: 46em;
    font-size: clamp(14px, 1.1vw, 16px);
    line-height: var(--lh-base);
    color: rgba(255, 255, 255, 0.6);
}

/* 统计：只放真实数字（章节数 / 词条数 / 工具数），取不到就整块不出 */
.tf-learn-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 14px 34px;
    margin: 24px 0 0;
    padding: 0;
    list-style: none;
}

.tf-learn-stats li {
    display: flex;
    align-items: baseline;
    gap: 8px;
}

.tf-learn-stats b {
    font-family: var(--font-mono);
    font-size: 24px;
    font-weight: 700;
    line-height: 1;
    color: var(--brand);
}

.tf-learn-stats span {
    font-size: var(--fs-xs);
    letter-spacing: 0.04em;
    color: rgba(255, 255, 255, 0.5);
}

/* ── 模块内互跳 tab：宽屏在右列竖排，当作三个模块入口 ── */
.tf-learn-tabs {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 10px;
}

.tf-learn-tab {
    position: relative;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 38px 14px 16px;
    border: 1px solid rgba(255, 255, 255, 0.1);
    border-radius: var(--radius);
    background: rgba(255, 255, 255, 0.03);
    color: rgba(255, 255, 255, 0.75);
    transition: transform var(--duration) var(--ease),
                border-color var(--duration) var(--ease),
                background var(--duration) var(--ease);
}

.tf-learn-tab:hover {
    transform: translateY(-1px);
    border-color: rgba(160, 238, 4, 0.42);
    background: rgba(160, 238, 4, 0.07);
    color: #fff;
}

.tf-learn-tab.is-active {
    border-color: rgba(160, 238, 4, 0.55);
    background: rgba(160, 238, 4, 0.12);
    color: #fff;
    cursor: default;
}

/* 箭头只给可跳转的两项：当前页自己不该看起来还能点 */
.tf-learn-tab:not(.is-active)::after {
    content: '→';
    position: absolute;
    right: 15px;
    font-size: var(--fs-sm);
    color: rgba(255, 255, 255, 0.32);
    transition: transform var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-learn-tab:not(.is-active):hover::after {
    transform: translateX(3px);
    color: var(--brand);
}

.tf-learn-tab-icon {
    width: 20px;
    height: 20px;
    flex-shrink: 0;
    color: var(--brand);
    opacity: 0.85;
}

.tf-learn-tab-text {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
}

.tf-learn-tab-text strong {
    font-size: var(--fs-sm);
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.tf-learn-tab-text em {
    font-style: normal;
    font-size: var(--fs-2xs);
    color: rgba(255, 255, 255, 0.45);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* ── 浅色正文区 ── */
.tf-learn-body { padding: clamp(28px, 3.4vw, 44px) 0 var(--section-gap); }

.tf-learn-empty {
    padding: 56px 24px;
    border: 1px dashed var(--line);
    border-radius: var(--radius-lg);
    background: var(--panel);
    text-align: center;
}

.tf-learn-empty h2 {
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
}

.tf-learn-empty p {
    margin: 8px auto 0;
    max-width: 42em;
    font-size: var(--fs-sm);
    line-height: var(--lh-base);
    color: var(--ink-3);
}

/* ── 模块底部互链：读完一页不至于走进死路 ── */
.tf-learn-next { margin-top: clamp(32px, 4vw, 52px); }

.tf-learn-next-title {
    margin-bottom: 12px;
    font-size: var(--fs-xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-learn-next-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 12px;
}

.tf-learn-next-card {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px 20px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    transition: transform var(--duration) var(--ease),
                border-color var(--duration) var(--ease),
                box-shadow var(--duration) var(--ease);
}

.tf-learn-next-card:hover {
    transform: translateY(-2px);
    border-color: var(--brand-2);
    box-shadow: var(--shadow-md);
}

.tf-learn-next-icon {
    width: 22px;
    height: 22px;
    flex-shrink: 0;
    color: var(--brand-2);
}

.tf-learn-next-body {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
    flex: 1;
}

.tf-learn-next-body strong {
    font-size: var(--fs-md);
    font-weight: 700;
    color: var(--ink);
}

.tf-learn-next-body em {
    font-style: normal;
    font-size: var(--fs-xs);
    line-height: var(--lh-snug);
    color: var(--ink-3);
}

.tf-learn-next-arrow {
    flex-shrink: 0;
    font-size: var(--fs-md);
    color: var(--ink-4);
    transition: transform var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-learn-next-card:hover .tf-learn-next-arrow {
    transform: translateX(3px);
    color: var(--brand-text);
}

/* ─────────────────────────────────────────
   小白入门 · Web3 知识库（三版）

   版式取自两个参考站：金色财经的百科/工具专题是「左封面卡 + 中分区列表 +
   右锚点目录」三栏；链捕手的知识库条目点进去是独立文章页。所以总览走三栏，
   每个条目链到自己的地址（/beginner/<slug>/），小节正文是真正的一页。

   封面仍不用位图：站内没有可用真图，也不拿占位图凑数，用品牌色相渐变 +
   线性图标 + 序号拼出，六个专题各一个色相。
   ───────────────────────────────────────── */
.tf-kb-layout {
    display: grid;
    grid-template-columns: 272px minmax(0, 1fr) 180px;
    gap: clamp(20px, 2.4vw, 36px);
    align-items: start;
}

/* ── 左：知识库封面卡 ── */
.tf-kb-hero-card {
    position: sticky;
    top: calc(var(--header-h) + 16px);
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    overflow: hidden;
}

.tf-kb-hero-art {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 168px;
    background: linear-gradient(150deg, #0F1A06 0%, #16240A 55%, #0A0D09 100%);
    overflow: hidden;
}

.tf-kb-hero-glow {
    position: absolute;
    width: 150%;
    height: 150%;
    background: radial-gradient(closest-side, rgba(160, 238, 4, 0.28), transparent 70%);
    filter: blur(24px);
}

/* 高度写死：这枚标志的 SVG 只带 viewBox 不带宽高属性，height:auto 会被算成 0 */
.tf-kb-hero-mark {
    position: relative;
    width: 74px;
    height: 68px;
    color: #fff;
}

.tf-kb-hero-text { padding: 18px 18px 20px; }

.tf-kb-hero-text h2 {
    font-size: var(--fs-md);
    font-weight: 800;
    line-height: var(--lh-tight);
    color: var(--ink);
}

.tf-kb-hero-text p {
    margin-top: 10px;
    font-size: var(--fs-sm);
    line-height: 1.75;
    color: var(--ink-2);
}

.tf-kb-hero-meta {
    display: inline-block;
    margin-top: 14px;
    padding: 4px 10px;
    border-radius: var(--radius-full);
    background: var(--brand-tint);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: var(--brand-text);
}

/* ── 中：专题分区 + 条目列表 ── */
.tf-kb-block {
    padding: 20px 22px 8px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    scroll-margin-top: calc(var(--header-h) + 24px);
}

.tf-kb-block + .tf-kb-block { margin-top: 16px; }

.tf-kb-block-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--line-soft);
}

.tf-kb-block-title {
    font-size: var(--fs-lg);
    font-weight: 800;
    line-height: var(--lh-tight);
    color: var(--ink);
}

.tf-kb-block-sub {
    margin-top: 6px;
    font-size: var(--fs-sm);
    line-height: 1.6;
    color: var(--ink-3);
}

.tf-kb-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.tf-kb-item {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 15px 8px;
    border-bottom: 1px solid var(--line-soft);
    transition: background var(--duration) var(--ease);
}

.tf-kb-list li:last-child .tf-kb-item { border-bottom: none; }

.tf-kb-item:hover { background: var(--row-hover); }

.tf-kb-item-num {
    flex-shrink: 0;
    width: 38px;
    height: 38px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 9px;
    background: hsl(var(--kb-h, 96) 62% 94%);
    color: hsl(var(--kb-h, 96) 45% 32%);
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
}

.tf-kb-item-body {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    flex: 1;
}

.tf-kb-item-title {
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: var(--lh-snug);
    color: var(--ink);
}

.tf-kb-item:hover .tf-kb-item-title { color: var(--brand-text); }

.tf-kb-item-excerpt {
    font-style: normal;
    font-size: var(--fs-xs);
    line-height: 1.55;
    color: var(--ink-3);
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.tf-kb-item-go {
    flex-shrink: 0;
    color: var(--ink-4);
    transition: transform var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-kb-item:hover .tf-kb-item-go { transform: translateX(3px); color: var(--brand-text); }

/* ── 右：专题锚点目录 ── */
.tf-kb-toc {
    position: sticky;
    top: calc(var(--header-h) + 16px);
}

.tf-kb-toc-label {
    margin-bottom: 10px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-kb-toc-list {
    margin: 0;
    padding: 0 0 0 1px;
    list-style: none;
    border-left: 2px solid var(--line);
}

.tf-kb-toc-list li { position: relative; }

.tf-kb-toc-list li::before {
    content: '';
    position: absolute;
    left: -2px;
    top: 3px;
    bottom: 3px;
    width: 2px;
    background: transparent;
    transition: background var(--duration) var(--ease);
}

.tf-kb-toc-list li.is-active::before { background: var(--brand-2); }

.tf-kb-toc-list a {
    display: block;
    padding: 7px 8px 7px 12px;
    font-size: var(--fs-xs);
    line-height: 1.5;
    color: var(--ink-3);
    transition: color var(--duration) var(--ease);
}

.tf-kb-toc-list a:hover { color: var(--ink); }
.tf-kb-toc-list li.is-active a { color: var(--ink); font-weight: 700; }

/* ── 专题封面（三种尺寸共用一套配色） ── */
.tf-kb-cover {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    background:
        radial-gradient(120% 120% at 18% 12%, hsl(var(--kb-h, 96) 70% 96%) 0%, hsl(var(--kb-h, 96) 62% 90%) 55%, hsl(var(--kb-h, 96) 45% 84%) 100%);
    color: hsl(var(--kb-h, 96) 42% 30%);
    overflow: hidden;
}

.tf-kb-cover::after {
    content: '';
    position: absolute;
    inset: 0;
    background-image: repeating-linear-gradient(-45deg,
        hsl(var(--kb-h, 96) 40% 35% / 0.07) 0 1px, transparent 1px 11px);
}

.tf-kb-cover.is-sm {
    width: 56px;
    height: 56px;
    flex-shrink: 0;
    border-radius: 11px;
}

.tf-kb-cover.is-sm svg { width: 26px; height: 26px; }
.tf-kb-cover.is-sm b { display: none; }

.tf-kb-cover.is-rail {
    width: 100%;
    height: 96px;
    border-radius: var(--radius-lg);
}

.tf-kb-cover.is-rail svg { width: 34px; height: 34px; }

.tf-kb-cover b {
    position: absolute;
    right: 12px;
    bottom: 6px;
    font-family: var(--font-mono);
    font-size: 26px;
    font-weight: 700;
    line-height: 1;
    color: hsl(var(--kb-h, 96) 40% 32% / 0.28);
}

/* ─────────────────────────────────────────
   小节正文页（/beginner/<slug>/）
   ───────────────────────────────────────── */
.tf-lesson { padding: clamp(22px, 3vw, 38px) 0 var(--section-gap); }

.tf-lesson-wrap {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 268px;
    gap: clamp(24px, 3vw, 48px);
    align-items: start;
}

.tf-lesson-crumb {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.tf-lesson-crumb a { color: var(--ink-3); }
.tf-lesson-crumb a:hover { color: var(--brand-text); }

.tf-lesson-head { margin: 16px 0 22px; }

.tf-lesson-kicker {
    display: inline-block;
    padding: 3px 10px;
    border-radius: var(--radius-full);
    background: hsl(var(--kb-h, 96) 62% 94%);
    color: hsl(var(--kb-h, 96) 45% 30%);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.06em;
}

.tf-lesson-title {
    margin-top: 12px;
    font-size: clamp(24px, 2.6vw, 34px);
    font-weight: 800;
    line-height: 1.25;
    letter-spacing: -0.01em;
    color: var(--ink);
}

.tf-lesson-body p {
    max-width: 66ch;
    font-size: 16px;
    line-height: 1.95;
    color: var(--ink-2);
}

.tf-lesson-body p + p { margin-top: 18px; }

.tf-lesson-main .tf-kb-takeaway { margin-top: 24px; }

/* 右栏：本专题的其他小节 */
.tf-lesson-rail {
    position: sticky;
    top: calc(var(--header-h) + 16px);
}

.tf-lesson-rail-card {
    padding: 14px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.tf-lesson-rail-title {
    margin-top: 12px;
    font-size: var(--fs-md);
    font-weight: 800;
    color: var(--ink);
}

.tf-lesson-rail-sub {
    margin-top: 6px;
    font-size: var(--fs-xs);
    line-height: 1.65;
    color: var(--ink-3);
}

.tf-lesson-rail-label {
    margin: 20px 0 8px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-lesson-rail-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.tf-lesson-rail-list a {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 9px 10px;
    border-radius: var(--radius);
    font-size: var(--fs-sm);
    line-height: 1.5;
    color: var(--ink-2);
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-lesson-rail-list a:hover { background: var(--hover-ink); color: var(--ink); }

.tf-lesson-rail-list li.is-active a {
    background: var(--brand-tint);
    color: var(--ink);
    font-weight: 700;
}

.tf-lesson-rail-num {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.tf-lesson-rail-list li.is-active .tf-lesson-rail-num { color: var(--brand-text); }

/* ── 专题结论 / 术语 / 翻页（总览与小节页共用） ── */
.tf-kb-takeaway {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    max-width: 66ch;
    padding: 14px 16px;
    border-left: 3px solid var(--brand);
    border-radius: 0 8px 8px 0;
    background: var(--brand-tint);
}

.tf-kb-takeaway-label {
    flex-shrink: 0;
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.06em;
    line-height: 1.7;
    text-transform: uppercase;
    color: var(--brand-text);
}

.tf-kb-takeaway-text {
    font-size: var(--fs-sm);
    font-weight: 600;
    line-height: var(--lh-base);
    color: var(--ink);
}

.tf-kb-terms {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-top: 22px;
}

.tf-kb-terms-label {
    margin-right: 2px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-kb-term {
    padding: 5px 11px;
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
    transition: all var(--duration) var(--ease);
}

.tf-kb-term:hover {
    border-color: var(--brand-2);
    background: var(--brand-tint);
    color: var(--brand-text);
}

.tf-kb-pager {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin-top: 32px;
    padding-top: 22px;
    border-top: 1px solid var(--line-2);
}

.tf-kb-pager-link {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 14px 16px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    transition: border-color var(--duration) var(--ease), background var(--duration) var(--ease);
}

.tf-kb-pager-link:hover { border-color: var(--brand-2); background: var(--paper-2); }
.tf-kb-pager-link.is-next { text-align: right; }

.tf-kb-pager-link em {
    font-style: normal;
    font-size: var(--fs-2xs);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-kb-pager-link strong {
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
}

/* ─────────────────────────────────────────
   区块链百科（三版）
   总览：搜索 + 分类 + A–Z 字母索引 + 可点进的词条卡
   详情：/wiki/<slug>/ 独立成页

   卡片整体是链接，卡内的分类标签又要能筛选，所以标签用 span + JS 拦截，
   不能嵌 <a>（HTML 不允许链接套链接，浏览器会把它拆开）。
   ───────────────────────────────────────── */
.tf-wiki-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 14px 20px;
    margin-bottom: 16px;
}

.tf-wiki-search-wrap {
    position: relative;
    flex: 1 1 300px;
    max-width: 420px;
}

.tf-wiki-search-icon {
    position: absolute;
    left: 14px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ink-3);
    pointer-events: none;
}

.tf-wiki-search {
    width: 100%;
    height: 44px;
    padding: 0 38px 0 42px;
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    background: var(--paper);
    font-family: inherit;
    font-size: var(--fs-sm);
    color: var(--ink);
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.tf-wiki-search::placeholder { color: var(--ink-4); }
.tf-wiki-search::-webkit-search-cancel-button { display: none; }

.tf-wiki-search:focus {
    outline: none;
    border-color: var(--brand-2);
    box-shadow: 0 0 0 3px var(--brand-tint);
}

.tf-wiki-search-clear {
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    width: 26px;
    height: 26px;
    border: none;
    border-radius: 50%;
    background: var(--paper-3);
    font-size: 15px;
    line-height: 1;
    color: var(--ink-3);
    cursor: pointer;
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-wiki-search-clear:hover { background: var(--hover-ink); color: var(--ink); }

.tf-wiki-cats { display: flex; flex-wrap: wrap; gap: 8px; }

.tf-wiki-cat {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 13px;
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    background: var(--paper);
    font-family: inherit;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
    cursor: pointer;
    transition: all var(--duration) var(--ease);
}

.tf-wiki-cat em {
    font-family: var(--font-mono);
    font-style: normal;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.tf-wiki-cat:hover { border-color: var(--brand-2); color: var(--ink); }

.tf-wiki-cat.is-active {
    border-color: transparent;
    background: var(--brand);
    color: var(--on-brand);
}

.tf-wiki-cat.is-active em { color: rgba(24, 36, 2, 0.72); }

/* ── A–Z 字母索引 ── */
.tf-wiki-alpha {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    margin-bottom: 20px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--line-2);
}

.tf-wiki-alpha-item {
    min-width: 30px;
    height: 30px;
    padding: 0 8px;
    border: none;
    border-radius: var(--radius-sm);
    background: transparent;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
    cursor: pointer;
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-wiki-alpha-item:hover:not(.is-empty) { background: var(--hover-ink); color: var(--ink); }

.tf-wiki-alpha-item.is-active {
    background: var(--brand);
    color: var(--on-brand);
}

/* 没有词条的字母保留位置但不可点：跳来跳去落空比看到灰字更糟 */
.tf-wiki-alpha-item.is-empty {
    color: var(--ink-4);
    opacity: 0.4;
    cursor: default;
}

/* ── 词条卡（整张可点） ── */
.tf-wiki-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
    gap: 14px;
}

.tf-wiki-card {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 20px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    transition: transform var(--duration) var(--ease),
                border-color var(--duration) var(--ease),
                box-shadow var(--duration) var(--ease);
}

/* [hidden] 的默认样式是 UA 表里的 display:none，权重最低，会被上面的
   display:flex 直接盖掉 —— 筛选时卡片设了 hidden 却照样显示。凡是给元素
   显式写过 display 又要用 hidden 藏它的，都得补这一条。 */
.tf-wiki-card[hidden] { display: none; }

.tf-wiki-card:hover {
    transform: translateY(-2px);
    border-color: var(--brand-2);
    box-shadow: var(--shadow-md);
}

.tf-wiki-card-head {
    display: flex;
    align-items: flex-start;
    gap: 12px;
}

/* 词条图标：概念没有官方 logo，用线性图标，色调跟品牌走 */
.tf-wiki-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    border-radius: 11px;
    background: var(--brand-tint);
    color: var(--brand-text);
}

.tf-wiki-icon svg { width: 22px; height: 22px; }

.tf-wiki-icon.is-lg { width: 60px; height: 60px; border-radius: var(--radius-xl); }
.tf-wiki-icon.is-lg svg { width: 30px; height: 30px; }

.tf-wiki-icon.is-sm { width: 34px; height: 34px; border-radius: 9px; }
.tf-wiki-icon.is-sm svg { width: 18px; height: 18px; }

.tf-wiki-card-names { min-width: 0; padding-top: 2px; }

.tf-wiki-term {
    display: block;
    font-size: var(--fs-md);
    font-weight: 800;
    line-height: var(--lh-tight);
    color: var(--ink);
}

.tf-wiki-card:hover .tf-wiki-term { color: var(--brand-text); }

.tf-wiki-alias {
    display: block;
    margin-top: 2px;
    font-style: normal;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.tf-wiki-def {
    flex: 1;
    font-size: var(--fs-sm);
    line-height: 1.8;
    color: var(--ink-2);
}

.tf-wiki-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}

.tf-wiki-tag {
    padding: 3px 9px;
    border-radius: var(--radius-full);
    background: var(--panel);
    font-size: var(--fs-2xs);
    font-weight: 600;
    color: var(--ink-3);
}

/* 可点的标签：外观上要看得出能按，不然跟纯标签没区别 */
.tf-wiki-tag.is-filter,
.tf-wiki-tag.is-link {
    cursor: pointer;
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-wiki-tag.is-filter:hover,
.tf-wiki-tag.is-link:hover,
.tf-wiki-tag.is-filter:focus-visible {
    background: var(--brand-tint-strong);
    color: var(--brand-text);
}

.tf-wiki-tag.is-link { display: inline-block; margin-top: 10px; }

.tf-wiki-card-go {
    font-size: var(--fs-sm);
    color: var(--ink-4);
    transition: transform var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-wiki-card:hover .tf-wiki-card-go { transform: translateX(3px); color: var(--brand-text); }

.tf-wiki-empty {
    padding: 48px 24px;
    border: 1px dashed var(--line);
    border-radius: var(--radius-lg);
    background: var(--panel);
    font-size: var(--fs-sm);
    color: var(--ink-3);
    text-align: center;
}

/* ─────────────────────────────────────────
   词条详情页
   ───────────────────────────────────────── */
.tf-term { padding: clamp(22px, 3vw, 38px) 0 var(--section-gap); }

.tf-term-wrap {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 272px;
    gap: clamp(24px, 3vw, 48px);
    align-items: start;
}

/* 没有相关词条时右栏整个不出，正文自己占满 */
.tf-term-wrap:not(:has(.tf-term-rail)) { grid-template-columns: minmax(0, 1fr); }

.tf-term-crumb {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.tf-term-crumb a { color: var(--ink-3); }
.tf-term-crumb a:hover { color: var(--brand-text); }

.tf-term-head {
    display: flex;
    align-items: flex-start;
    gap: 18px;
    margin: 18px 0 22px;
}

.tf-term-title {
    font-size: clamp(24px, 2.6vw, 34px);
    font-weight: 800;
    line-height: 1.2;
    letter-spacing: -0.01em;
    color: var(--ink);
}

.tf-term-alias {
    margin-top: 6px;
    font-size: var(--fs-md);
    color: var(--ink-3);
}

/* 一句话定义：详情页的导语，比正文重一档 */
.tf-term-def {
    max-width: 66ch;
    padding: 16px 18px;
    border-left: 3px solid var(--brand);
    border-radius: 0 10px 10px 0;
    background: var(--brand-tint);
    font-size: var(--fs-base);
    line-height: 1.85;
    color: var(--ink);
}

.tf-term-def-label {
    display: block;
    margin-bottom: 4px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--brand-text);
}

.tf-term-body { margin-top: 22px; }

.tf-term-body p {
    max-width: 66ch;
    font-size: 16px;
    line-height: 1.95;
    color: var(--ink-2);
}

/* 去入门知识库系统学一遍 */
.tf-term-learn {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    max-width: 66ch;
    margin-top: 26px;
    padding: 16px 18px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    color: var(--ink-3);
    transition: border-color var(--duration) var(--ease), background var(--duration) var(--ease);
}

.tf-term-learn:hover { border-color: var(--brand-2); background: var(--paper-2); }

.tf-term-learn-text { display: flex; flex-direction: column; gap: 3px; }
.tf-term-learn-text strong { font-size: var(--fs-base); font-weight: 700; color: var(--ink); }
.tf-term-learn-text em { font-style: normal; font-size: var(--fs-xs); color: var(--ink-3); }

.tf-term-rail {
    position: sticky;
    top: calc(var(--header-h) + 16px);
}

.tf-term-rail-label {
    margin-bottom: 10px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.tf-term-rail-list { display: flex; flex-direction: column; gap: 8px; }

.tf-term-rail-item {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 11px 12px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    transition: border-color var(--duration) var(--ease), background var(--duration) var(--ease);
}

.tf-term-rail-item:hover { border-color: var(--brand-2); background: var(--paper-2); }
.tf-term-rail-item span { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.tf-term-rail-item strong { font-size: var(--fs-sm); font-weight: 700; color: var(--ink); }

.tf-term-rail-item em {
    font-style: normal;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* ─────────────────────────────────────────
   工具导航：吸顶分组条 + 分组网格
   ───────────────────────────────────────── */
.tf-tool-nav {
    position: sticky;
    top: calc(var(--header-h) + 12px);
    z-index: 5;
    display: flex;
    /* 收到内容宽：拉满整行时右侧会空出一大截，吸顶后那截白条格外显眼 */
    width: fit-content;
    max-width: 100%;
    gap: 6px;
    margin-bottom: 22px;
    padding: 6px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-full);
    background: var(--surface-blur);
    -webkit-backdrop-filter: blur(10px);
    backdrop-filter: blur(10px);
    box-shadow: var(--shadow-sm);
    /* 分组多了就横向滚，不换行——换行会让吸顶条在滚动中忽高忽低 */
    overflow-x: auto;
    scrollbar-width: none;
}

.tf-tool-nav::-webkit-scrollbar { display: none; }

.tf-tool-nav-item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 14px;
    border-radius: var(--radius-full);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    white-space: nowrap;
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}

.tf-tool-nav-item em {
    font-family: var(--font-mono);
    font-style: normal;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.tf-tool-nav-item:hover { background: var(--hover-ink); color: var(--ink); }

.tf-tool-nav-item.is-active {
    background: var(--brand);
    color: var(--on-brand);
}

.tf-tool-nav-item.is-active em { color: rgba(24, 36, 2, 0.72); }

.tf-tool-group {
    scroll-margin-top: calc(var(--header-h) + 72px);
}

.tf-tool-group + .tf-tool-group { margin-top: clamp(26px, 3vw, 40px); }

.tf-tool-group-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 14px;
}

.tf-tool-group-title {
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
}

.tf-tool-group-count {
    padding: 2px 8px;
    border-radius: var(--radius-full);
    background: var(--brand-tint);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: var(--brand-text);
}

/* 标题右侧补一条渐隐细线，把标题与卡片区分开又不切断版面 */
.tf-tool-group-rule {
    flex: 1;
    height: 1px;
    background: linear-gradient(90deg, var(--line), transparent);
}

.tf-tool-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 12px;
}

.tf-tool-card {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 13px;
    padding: 15px 16px;
    border: 1px solid var(--line-2);
    border-radius: var(--radius-lg);
    background: var(--paper);
    transition: transform var(--duration) var(--ease),
                border-color var(--duration) var(--ease),
                box-shadow var(--duration) var(--ease);
}

.tf-tool-card:hover {
    transform: translateY(-2px);
    border-color: var(--brand-2);
    box-shadow: var(--shadow-md);
}

.tf-tool-card-mark {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    border-radius: var(--radius-lg);
    /* 各家 logo 深浅不一：纯白的（Dune、Uniswap）在白底上会整个消失，
       所以垫一层浅灰底并加一圈内描边，把图标的边界兜住 */
    background: var(--paper-3);
    box-shadow: inset 0 0 0 1px rgba(26, 29, 31, 0.06);
    overflow: hidden;
}

/* 预抓的站点图标（assets/tool-icons）。留 padding 是因为各家 favicon 的
   留白差别很大，直接铺满会让满幅图标显得比留白图标大一圈 */
.tf-tool-icon {
    width: 30px;
    height: 30px;
    object-fit: contain;
    border-radius: var(--radius-sm);
}

.tf-tool-card-body {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
}

.tf-tool-card-name {
    /* 名称后面跟着付费角标，用 inline 排版让角标贴着文字走 */
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: var(--lh-snug);
    color: var(--ink);
}

.tf-tool-card:hover .tf-tool-card-name { color: var(--brand-text); }

.tf-tool-card-desc {
    font-size: var(--fs-xs);
    line-height: 1.6;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.tf-tool-card-host {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* 外链箭头：静态时不出现，避免每张卡都挂一个图标形成噪点 */
.tf-tool-card-go {
    position: absolute;
    top: 13px;
    right: 13px;
    width: 15px;
    height: 15px;
    color: var(--brand-text);
    opacity: 0;
    transform: translate(-2px, 2px);
    transition: opacity var(--duration) var(--ease), transform var(--duration) var(--ease);
}

.tf-tool-card-go svg { width: 100%; height: 100%; }

.tf-tool-card:hover .tf-tool-card-go { opacity: 1; transform: translate(0, 0); }

/* 付费上架标识（R34）：付费位必须一眼可辨，不与自然收录混淆 */
.tf-tool-card.is-promoted {
    border-color: rgba(117, 186, 42, 0.55);
    background: linear-gradient(180deg, var(--brand-tint), transparent 60%), var(--paper);
}

.tf-tool-tier {
    display: inline-block;
    margin-left: 6px;
    padding: 1px 6px;
    border-radius: var(--radius-sm);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-style: normal;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    vertical-align: middle;
}

.tf-tool-tier.tier-paid { color: var(--brand-text); background: var(--brand-tint-strong); }
.tf-tool-tier.tier-sponsor { color: var(--on-brand); background: var(--brand); }

/* ── 响应式 ── */
@media (max-width: 1024px) {
    /* 右列放不下三个入口时回到单列，tab 横排到文案下方 */
    .tf-learn-hero-inner { grid-template-columns: minmax(0, 1fr); }
    .tf-learn-tabs { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 26px; }
    .tf-learn-tab { padding: 12px 30px 12px 14px; }

    /* 三栏收成两栏：右侧锚点目录在窄屏没有立足之地，直接收起 */
    .tf-kb-layout { grid-template-columns: 240px minmax(0, 1fr); }
    .tf-kb-toc { display: none; }
    .tf-lesson-wrap { grid-template-columns: minmax(0, 1fr); }
    .tf-lesson-rail { position: static; }
    .tf-term-wrap { grid-template-columns: minmax(0, 1fr); }
    .tf-term-rail { position: static; }
}

@media (max-width: 768px) {
    /* 08-26：手机上 Banner 内的三页互跳 tab 去掉，只留标题；三页互链靠底部「下一步」卡与「发现」菜单 */
    .tf-learn-tabs { display: none; }

    /* 09-02 移动端压缩（用户反馈「上面的区域太大」）：深色 hero 从整屏欢迎语
       压到 160px 上下，第一节内容在首屏露出。入门/百科/工具三页共用。 */
    .tf-learn-hero { padding: 20px 0 18px; }
    .tf-learn-eyebrow { padding: 3px 10px; font-size: var(--fs-2xs); }
    .tf-learn-title { margin-top: 10px; font-size: 22px; }
    .tf-learn-sub {
        margin-top: 8px;
        font-size: 13px;
        /* 副文案桌面可以铺开，手机上超过两行就是纯占屏 */
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .tf-learn-stats { margin-top: 14px; gap: 8px 20px; }
    .tf-learn-stats b { font-size: 17px; }

    /* nowrap 不能漏：column + wrap 会让浏览器按内容把工具条分成多列，
       每列宽度取子项 max-content，横向滚动的分类条就把整页撑宽了 */
    .tf-wiki-toolbar { flex-direction: column; flex-wrap: nowrap; align-items: stretch; }
    .tf-wiki-search-wrap { max-width: none; }

    /* 分类筛选在窄屏横向滚，换行会把工具条撑成两三行；min-width:0 同上，
       nowrap 容器不压下限就会把 .tf-wiki-toolbar 一起撑出屏幕 */
    .tf-wiki-cats {
        flex-wrap: nowrap;
        min-width: 0;
        overflow-x: auto;
        padding-bottom: 2px;
        scrollbar-width: none;
    }

    .tf-wiki-cats::-webkit-scrollbar { display: none; }
    .tf-wiki-cat { flex-shrink: 0; }

    /* 09-02 学习页移动端排版重设计（用户反馈：字号层级与 UI 要重做）。
       字号阶梯定为 22(页面) / 17(专题) / 15(条目) / 12.5(辅助)，字重 800→700→600；
       辅助文字一律 ink-2 起步（ink-3 小字对比不足），间距向 8px 节奏对齐。 */
    .tf-kb-block { padding: 16px 14px 6px; }
    .tf-kb-block-title { font-size: 17px; font-weight: 700; }
    .tf-kb-block-sub { font-size: 12.5px; color: var(--ink-2); }
    .tf-kb-cover.is-sm { width: 40px; height: 40px; }
    .tf-kb-item { gap: 12px; padding: 12px 2px; }
    .tf-kb-item-num { width: 30px; height: 30px; font-size: 12.5px; }
    .tf-kb-item-title { font-size: 15px; font-weight: 600; }
    .tf-kb-item-excerpt {
        font-size: 12.5px;
        line-height: 1.55;
        color: var(--ink-2);
        /* 摘要只做「有没有兴趣」的判断，一行足够；两行会让每条课节高矮不一 */
        display: -webkit-box;
        -webkit-line-clamp: 1;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .tf-kb-toc-label { font-size: 12px; }
    .tf-kb-hero-meta { font-size: 12px; }
    .tf-learn-next-title { font-size: 12px; }

    /* 百科词条手机双列（原来单列一条一卡，内容只有词名+一句定义，单列浪费纵向空间）。
       双列必须锁行数：定义 clamp 两行，卡片才等高成网格而不是高低不齐的堆叠 */
    .tf-wiki-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 8px; }
    .tf-wiki-card { padding: 12px 10px; gap: 8px; }
    .tf-wiki-icon { width: 28px; height: 28px; }
    .tf-wiki-term { font-size: 14.5px; font-weight: 700; }
    .tf-wiki-alias { font-size: 11.5px; }
    .tf-wiki-def {
        font-size: 12px;
        line-height: 1.55;
        color: var(--ink-2);
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    /* 分类 tag 在双列卡里放不下，且顶部分类条已能筛，藏掉不丢功能 */
    .tf-wiki-card-foot .tf-wiki-tag { display: none; }

    /* 工具页手机版一行两列（08-26） */
    .tf-tool-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    .tf-tool-card { padding: 10px; gap: 8px; }

    /* 手机：封面卡收到最上面，正文单列 */
    .tf-kb-layout { grid-template-columns: minmax(0, 1fr); }
    /* 封面卡改横排紧凑条：整幅深色插画（128px）+ 三行长文案是桌面语言，
       手机上左侧 96px 插画块 + 右侧两行文案，高度从 311px 压到 ~110px */
    .tf-kb-hero-card { position: static; display: flex; align-items: stretch; }
    .tf-kb-hero-art { flex: 0 0 96px; height: auto; }
    .tf-kb-hero-mark { width: 46px; height: 42px; }
    .tf-kb-hero-text { padding: 12px 14px; min-width: 0; }
    .tf-kb-hero-text h2 { font-size: var(--fs-sm); }
    .tf-kb-hero-text p {
        margin-top: 4px;
        font-size: var(--fs-xs);
        line-height: 1.5;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .tf-kb-hero-meta { margin-top: 8px; }
    .tf-kb-takeaway { flex-direction: column; gap: 6px; }
    .tf-kb-block-head { gap: 10px; }
    .tf-kb-pager { grid-template-columns: minmax(0, 1fr); }
    .tf-kb-pager-link.is-next { text-align: left; }
    .tf-term-head { flex-direction: column; gap: 12px; }
    .tf-wiki-alpha { gap: 2px; }
    .tf-wiki-alpha-item { min-width: 26px; height: 28px; padding: 0 5px; }

    .tf-learn-next-grid { grid-template-columns: 1fr; }
}

/* 动效降级：整块只做位移与透明度，关掉即可，无需逐条覆盖 */
@media (prefers-reduced-motion: reduce) {
    .tf-learn-tab,
    .tf-learn-next-card,
    .tf-wiki-card,
    .tf-kb-item,
    .tf-tool-card { transition: none; }

    .tf-learn-tab:hover,
    .tf-learn-next-card:hover,
    .tf-wiki-card:hover,
    .tf-kb-item:hover,
    .tf-tool-card:hover { transform: none; }
}

/* ── 发现板块（R31/R32/R33）：友商 / 积分 / 日历等仍在用的旧件 ──
   工具导航、入门、百科三页已迁到上面的 tf-learn-* / tf-kb-* / tf-wiki-* /
   tf-tool-*；下面这批 class 现在服务 template-partners（tools-grid / tool-card）、
   template-points 与 template-calendar（tools-group-title / tools-note），改动前
   先确认这几页。 */

.tools-group-title {
    font-size: var(--fs-md);
    font-weight: 800;
    color: var(--ink);
    margin-bottom: 12px;
}

.tools-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
    gap: 12px;
}

.partners-grid { margin-top: 8px; }

.tool-card {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 11px 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    transition: all var(--duration) var(--ease);
}

.tool-card:hover { border-color: var(--brand); box-shadow: var(--shadow-sm); }

.tool-card-favicon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--radius-sm);
    background: var(--paper-3);
    flex-shrink: 0;
    overflow: hidden;
}

/* 站点标记（见 treefinance_site_mark）：色相由 PHP 按域名给出，饱和度与明度
   在这里锁死，保证任何色相都落在同一档柔和度上，且底色字色的对比度达标 */
.site-mark {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    background: hsl(var(--mark-h, 90) 62% 94%);
    color: hsl(var(--mark-h, 90) 48% 32%);
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1;
    user-select: none;
}

.tool-card-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }

.tool-card-name { font-size: var(--fs-base); font-weight: 700; color: var(--ink); }
.tool-card:hover .tool-card-name { color: var(--brand-text); }

/* 付费上架标识（R34）：付费位必须可辨识，不与自然收录混淆 */
.tool-card.is-promoted { border-color: var(--brand-2); background: var(--brand-tint); }

.tool-card-tier.tier-paid { color: var(--brand-text); background: var(--brand-tint-strong); }
.tool-card-tier.tier-sponsor { color: var(--on-brand); background: var(--brand); }

.tool-card-desc {
    font-size: var(--fs-xs);
    line-height: 1.5;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* 09-02 手机双列：友商卡只有图标+名称+一行描述，auto-fill 250px 在 390px 视口
   只能落一列，一屏放不满 4 张。双列 + 描述一行截断，一屏 6-8 张。 */
@media (max-width: 768px) {
    .tools-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 8px; }
    .tool-card { padding: 10px; gap: 8px; }
    .tool-card-favicon { width: 28px; height: 28px; }
    .site-mark { font-size: var(--fs-sm); }
    .tool-card-name { font-size: 13.5px; }
    .tool-card-desc { font-size: 11.5px; -webkit-line-clamp: 1; }
}

.tools-note {
    margin-top: 28px;
    padding: 14px 18px;
    border-radius: var(--radius);
    background: var(--panel);
    font-size: var(--fs-sm);
    color: var(--ink-2);
    text-align: center;
}

.tools-note a { color: var(--brand-text); font-weight: 600; }

/* 行业日历 */
.cal-nav {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 18px;
    margin: 6px 0 16px;
}

.cal-month { font-size: var(--fs-lg); font-weight: 800; color: var(--ink); min-width: 160px; text-align: center; }

.cal-nav-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: var(--radius-sm);
    border: 1px solid var(--line);
    color: var(--ink-2);
    transition: all var(--duration) var(--ease);
}

.cal-nav-btn:hover { border-color: var(--brand); color: var(--ink); }

.cal-grid-wrap {
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    overflow-x: auto;
    background: var(--paper);
}

.cal-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(96px, 1fr));
    min-width: 700px;
}

.cal-weekday {
    padding: 10px 0;
    text-align: center;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 600;
    letter-spacing: 0.08em;
    color: var(--ink-3);
    border-bottom: 1px solid var(--line);
}

.cal-cell {
    min-height: 74px;
    padding: 8px;
    border-right: 1px solid var(--line-soft);
    border-bottom: 1px solid var(--line-soft);
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.cal-cell:nth-child(7n) { border-right: none; }
.cal-cell.is-empty { background: var(--paper-3); opacity: 0.5; }
.cal-cell.is-today { background: var(--brand-tint); }

.cal-day {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-3);
}

.cal-cell.is-today .cal-day { color: var(--brand-text); font-weight: 700; }

.cal-item {
    display: block;
    padding: 2px 7px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-2xs);
    font-weight: 600;
    line-height: 1.4;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.cal-item.is-event { background: var(--brand-tint); color: var(--brand-text); }
.cal-item.is-unlock { background: var(--down-tint); color: var(--down); }
.cal-item.is-milestone { background: var(--info-tint); color: var(--info); }
.cal-item.is-macro { background: var(--paper-3); color: var(--ink-2); }
a.cal-item:hover { filter: brightness(0.94); }

/* 月历格：格子里直接列标题，09-02 起不截断、当天条目全部列出 */
a.cal-day:hover { color: var(--brand-text); }
.cal-dot.is-macro { background: var(--ink-4); }

.cal-legend {
    display: flex;
    gap: 20px;
    justify-content: center;
    margin-top: 12px;
    font-size: var(--fs-xs);
    color: var(--ink-2);
}

.cal-legend-item { display: inline-flex; align-items: center; gap: 6px; }

.cal-dot { width: 9px; height: 9px; border-radius: 3px; display: inline-block; }
.cal-dot.is-event { background: var(--brand); }
.cal-dot.is-unlock { background: var(--down); }
.cal-dot.is-milestone { background: #0ea5e9; }

a.cal-list-label:hover { color: var(--brand-text); }

/* ── 日历日视图（解锁 / 宏观数据明细）── */
.cal-viewbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    margin: 4px 0 14px;
}

.cal-view-tabs {
    display: inline-flex;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    overflow: hidden;
}

.cal-view-tab {
    padding: 7px 18px;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink-3);
    background: var(--paper);
    transition: all var(--duration) var(--ease);
}

.cal-view-tab + .cal-view-tab { border-left: 1px solid var(--line); }
.cal-view-tab:hover { background: var(--paper-2); color: var(--ink); }
.cal-view-tab.is-active { background: var(--brand); color: var(--on-brand); }

.cal-sync-note { font-family: var(--font-mono); font-size: var(--fs-xs); color: var(--ink-3); }

/* 周选择器 */
.cal-week-bar {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 14px;
}

.cal-week {
    display: grid;
    /* minmax(0,1fr) 而非 1fr：否则日期数字的最小内容宽度会把网格撑开，
       窄屏上整行溢出，「今天」按钮被挤出视口。 */
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 6px;
    flex: 1;
    min-width: 0;
}

.cal-week-day {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
    padding: 8px 2px 6px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    transition: all var(--duration) var(--ease);
}

.cal-week-day:hover { border-color: var(--brand-2); background: var(--paper-2); }

.cal-week-dow { font-size: var(--fs-2xs); font-weight: 600; color: var(--ink-3); }
.cal-week-num { font-family: var(--font-mono); font-size: var(--fs-md); font-weight: 700; color: var(--ink); line-height: 1.1; }

.cal-week-day.is-today .cal-week-num { color: var(--brand-text); }

.cal-week-day.is-active {
    background: var(--brand);
    border-color: var(--brand);
}
.cal-week-day.is-active .cal-week-dow,
.cal-week-day.is-active .cal-week-num { color: var(--on-brand); }

.cal-week-dot { width: 4px; height: 4px; border-radius: 50%; background: transparent; }
.cal-week-dot.has { background: var(--brand-2); }
.cal-week-day.is-active .cal-week-dot.has { background: var(--on-brand); }

.cal-today-btn {
    flex-shrink: 0;
    padding: 8px 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--ink-2);
    background: var(--paper);
    transition: all var(--duration) var(--ease);
}

.cal-today-btn:hover { border-color: var(--brand); color: var(--ink); }
.cal-today-btn.is-active { border-color: var(--brand); color: var(--brand-text); background: var(--brand-tint); }

/* 类型筛选 */
.cal-type-tabs {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--line);
}

.cal-type-tab {
    padding: 5px 14px;
    border-radius: var(--radius-full);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-3);
    background: var(--paper-3);
    transition: all var(--duration) var(--ease);
}

.cal-type-tab:hover { background: var(--hover-ink); color: var(--ink); }
.cal-type-tab.is-active { background: var(--brand); color: var(--on-brand); }

.cal-imp-toggle {
    margin-left: auto;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-3);
    border-bottom: 1px dashed var(--line);
}
.cal-imp-toggle:hover { color: var(--brand-text); border-color: var(--brand-2); }

/* 当日标题 */
.cal-day-head {
    display: flex;
    align-items: baseline;
    gap: 10px;
    margin: 18px 0 10px;
}

.cal-day-title { font-size: var(--fs-lg); font-weight: 800; color: var(--ink); }

/* 事件行 */
.cal-day-list {
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    overflow: hidden;
}

.cal-row {
    display: grid;
    grid-template-columns: 56px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    /* 日历是逐条扫的时间轴，行高 13→9 让一屏能看完一整周 */
    padding: 9px 16px;
    border-bottom: 1px solid var(--line-soft);
    border-left: 3px solid transparent;
    transition: background var(--duration) var(--ease);
}

.cal-row:last-child { border-bottom: none; }
.cal-row:hover { background: var(--paper-2); }

.cal-row.is-unlock { border-left-color: var(--brand-2); }
.cal-row.is-macro  { border-left-color: var(--info); }
.cal-row.is-site   { border-left-color: #0ea5e9; }
.cal-row.is-macro.imp-2 { border-left-color: var(--warn); }
/* 行业事件（08-31）：色条跟着分类走，与右侧标签同色，一眼能扫出这一天有哪几类事 */
.cal-row.is-industry { border-left-color: var(--info); }
.cal-row.is-industry:has(.cal-tag.is-event)    { border-left-color: var(--brand-2); }
.cal-row.is-industry:has(.cal-tag.is-featured) { border-left-color: var(--down); }
.cal-row.is-industry:has(.cal-tag.is-listing)  { border-left-color: var(--up); }
.cal-row.is-industry:has(.cal-tag.is-airdrop)  { border-left-color: var(--warn); }

.cal-row-time {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink-3);
}

.cal-row-main {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    min-width: 0;
}

.cal-row-title { font-size: var(--fs-base); font-weight: 600; color: var(--ink); }
a.cal-row-title:hover { color: var(--brand-text); }
.cal-row-sub { font-size: var(--fs-xs); color: var(--ink-3); }
.cal-flag { font-size: var(--fs-base); line-height: 1; }

.cal-tag {
    flex-shrink: 0;
    padding: 2px 8px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.02em;
}

.cal-tag.is-unlock { background: var(--brand-tint); color: var(--brand-text); }
.cal-tag.is-event { background: var(--brand-2-tint); color: var(--brand-text); }
.cal-tag.is-milestone { background: var(--info-tint); color: var(--info); }

/* 行业事件的五个分类（08-31，PANews 日历）。全部用既有语义令牌上色 ——
   它们在明暗两套里都已成对定义，新加一档配色就得两处同步维护。 */
.cal-tag.is-project  { background: var(--info-tint);    color: var(--info); }
.cal-tag.is-featured { background: var(--down-tint);    color: var(--down); }
.cal-tag.is-listing  { background: var(--up-tint);      color: var(--up); }
.cal-tag.is-airdrop  { background: var(--warn-tint);    color: var(--warn); }

/* 重要度：三格信号条 */
.cal-imp { display: inline-flex; gap: 2px; align-items: flex-end; height: 11px; }
.cal-imp i { width: 3px; background: var(--line); border-radius: 1px; }
.cal-imp i:nth-child(1) { height: 5px; }
.cal-imp i:nth-child(2) { height: 8px; }
.cal-imp i:nth-child(3) { height: 11px; }
.cal-imp i.on { background: var(--ink-4); }
.cal-imp.imp-1 i.on { background: var(--info); }
.cal-imp.imp-2 i.on { background: var(--warn); }

/* 右侧数值区 */
.cal-row-stats,
.cal-row-vals {
    display: flex;
    align-items: center;
    gap: 22px;
    flex-shrink: 0;
}

.cal-stat {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 62px;
    text-align: right;
}

.cal-stat em {
    font-style: normal;
    font-size: var(--fs-2xs);
    font-weight: 600;
    letter-spacing: 0.03em;
    color: var(--ink-3);
}

.cal-stat b {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
}

.cal-stat.is-actual b { color: var(--ink-3); }
.cal-stat.is-actual.is-up b { color: var(--up); }
.cal-stat.is-actual.is-down b { color: var(--down); }

/* 月视图里指向日视图的数据入口 */
.cal-item.is-data { background: var(--info-tint); color: var(--info); }
.cal-dot.is-data { background: var(--info); }

@media (max-width: 900px) {
    .cal-row {
        grid-template-columns: 48px minmax(0, 1fr);
        row-gap: 8px;
    }
    .cal-row-stats,
    .cal-row-vals {
        grid-column: 2 / -1;
        gap: 18px;
        flex-wrap: wrap;
    }
    .cal-stat { text-align: left; min-width: 56px; }
}

@media (max-width: 600px) {
    /* 窄屏放不下「箭头 + 7 天 + 今天」一行，把「今天」换到下一行整行显示 */
    .cal-week-bar { flex-wrap: wrap; gap: 8px; }
    /* 容器内的 a 依次是：左箭头、右箭头、今天（.cal-week 是 div），
       所以按 nth-of-type 排序，不能用 :last-of-type——那会选中「今天」。 */
    .cal-week-bar > a:nth-of-type(1) { order: 0; }
    .cal-week { order: 1; flex: 1 1 auto; gap: 3px; min-width: 0; }
    .cal-week-bar > a:nth-of-type(2) { order: 2; }
    .cal-today-btn { order: 3; flex: 1 0 100%; padding: 7px 10px; font-size: var(--fs-xs); text-align: center; }

    .cal-week-day { padding: 6px 0 5px; }
    .cal-week-num { font-size: var(--fs-base); }
    .cal-week-dow { font-size: var(--fs-2xs); }
    .cal-viewbar { gap: 8px; }
    .cal-day-title { font-size: var(--fs-md); }
    .cal-imp-toggle { margin-left: 0; }
    .cal-row-sub { display: none; }   /* 项目全名在窄屏挤压标题，符号已足够辨识 */
}

/* ── 我的积分（R43）── */
.pt-login-card {
    max-width: 640px;
    margin: 0 auto;
    padding: 28px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 16px;
    font-size: var(--fs-base);
    color: var(--ink-2);
}

.pt-balance-card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    padding: 16px 20px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    flex-wrap: wrap;
}

.pt-balance { display: flex; align-items: baseline; gap: 10px; }

.pt-balance-num {
    font-family: var(--font-mono);
    font-size: var(--fs-xl);
    font-weight: 700;
    color: var(--brand-text);
}

.pt-balance-label { font-size: var(--fs-sm); color: var(--ink-3); }

.pt-rules {
    display: flex;
    flex-direction: column;
    gap: 4px;
    font-size: var(--fs-xs);
    color: var(--ink-2);
}

.pt-rewards {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
    gap: 12px;
}

.pt-reward-card {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
}

.pt-reward-name { font-size: var(--fs-base); font-weight: 700; color: var(--ink); }

.pt-reward-cost {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--brand-text);
}

.pt-reward-card .tf-detail-btn { justify-content: center; }
.pt-reward-card .tf-detail-btn:disabled { opacity: 0.45; cursor: not-allowed; }

.pt-history { display: flex; flex-direction: column; }

.pt-history-row {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 10px 4px;
    border-bottom: 1px solid var(--line-soft);
    font-size: var(--fs-sm);
}

.pt-history-row:last-child { border-bottom: none; }

.pt-history-date { font-family: var(--font-mono); font-size: var(--fs-xs); color: var(--ink-3); width: 84px; }
.pt-history-label { color: var(--ink-2); min-width: 0; }

.pt-history-delta {
    margin-left: auto;
    font-family: var(--font-mono);
    font-weight: 700;
}

.pt-history-delta.up { color: var(--up); }
.pt-history-delta.down { color: var(--down); }

/* ═══════════════════════════════════════════
   专栏体系（参考金色财经专栏）：头像 / 列表流 / 详情主页
   ═══════════════════════════════════════════ */

/* 通用专栏头像：有图用图，无图首字母渐变占位；角标 V 认证 */
.cxv-avatar {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    overflow: visible;
    background: var(--paper-3);
    flex-shrink: 0;
    font-weight: 800;
    color: var(--on-brand);
}

.cxv-avatar img {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    display: block;
}

.cxv-avatar.is-ph {
    background: linear-gradient(135deg, #A0EE04, #75BA2A);
    font-size: var(--fs-lg);
}

.cxv-avatar-sm { width: 32px; height: 32px; }
.cxv-avatar-sm.is-ph { font-size: var(--fs-base); }
.cxv-avatar-md { width: 44px; height: 44px; }

.cxv-avatar-lg.is-ph { font-size: var(--fs-xl); }
.cxv-avatar-xl { width: 76px; height: 76px; }
.cxv-avatar-xl.is-ph { font-size: var(--fs-xl); }

.cxv-badge {
    position: absolute;
    right: -2px;
    bottom: -2px;
    color: var(--brand-2, #75BA2A);
    background: var(--paper);
    border-radius: 50%;
}

/* ── 列表页：精选专栏头像条 ── */

/* ── 列表页：精选专栏（头像条 + 联动最新 3 条，参考金色财经）── */
.cxf { margin: 0 0 22px; }
.cxf-head { display: flex; align-items: center; gap: 10px; margin: 0 0 12px; }
.cxf-title { font-size: var(--fs-lg); font-weight: 800; color: var(--ink); }
.cxf-more { font-size: var(--fs-sm); font-weight: 600; color: var(--ink-3); }
.cxf-more:hover { color: var(--brand-text); }
.cxf-nav { display: inline-flex; align-items: center; gap: 8px; margin-left: auto; color: var(--ink-3); font-size: var(--fs-sm); }
.cxf-arrow {
    width: 26px; height: 26px;
    display: inline-flex; align-items: center; justify-content: center;
    border: 1px solid var(--line); border-radius: 50%;
    background: var(--paper); color: var(--ink-2);
    font-size: var(--fs-base); line-height: 1; cursor: pointer;
    transition: all var(--duration) var(--ease);
}
.cxf-arrow:hover { border-color: var(--ink); background: var(--ink); color: var(--page); }

.cxf-panel { border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--paper); overflow: hidden; }

/* 头像条：等分列，多于 5 个翻页 */
.cxf-avatars {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 8px;
    padding: 18px 16px 20px;
    background: var(--paper-2, var(--panel));
}
.cxf-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    position: relative;
    text-align: center;
    min-width: 0;
}
/* 选中项底部指向下方最新条的小三角 */
.cxf-item.active::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: -20px;
    transform: translateX(-50%);
    border: 8px solid transparent;
    border-bottom-color: var(--paper);
}
.cxf-name {
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--ink);
    max-width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.cxf-item:hover .cxf-name,
.cxf-item.active .cxf-name { color: var(--brand-text); }
.cxf-count { font-size: var(--fs-xs); color: var(--ink-3); }
.cxf-follow { margin-top: 2px; }

/* 联动最新 3 条 */
.cxf-posts { padding: 6px 10px 8px; }
.cxf-post-list { display: none; list-style: none; margin: 0; padding: 0; }
.cxf-post-list.active { display: block; }
.cxf-post-list li { list-style: none; border-top: 1px solid var(--line-soft); }
.cxf-post-list li:first-child { border-top: 0; }
.cxf-post-list li a {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 9px 8px;
    border-radius: var(--radius);
    transition: background var(--duration) var(--ease);
}
.cxf-post-list li a:hover { background: var(--row-hover); }
.cxf-post-title {
    flex: 1;
    min-width: 0;
    font-size: var(--fs-base);
    color: var(--ink-2);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    position: relative;
    padding-left: 15px;
}
/* 单个圆点（去掉 <ul> 默认 disc 与自定义符号重叠导致的双圆点） */
.cxf-post-title::before {
    content: "";
    position: absolute;
    left: 3px;
    top: 50%;
    width: 4px;
    height: 4px;
    margin-top: -2px;
    border-radius: 50%;
    background: var(--brand-2);
}
.cxf-post-list li a:hover .cxf-post-title { color: var(--brand-text); }
.cxf-post-time { flex-shrink: 0; font-size: var(--fs-xs); color: var(--ink-3); font-variant-numeric: tabular-nums; }
.cxf-post-empty { padding: 14px 8px; color: var(--ink-3); font-size: var(--fs-sm); }

@media (max-width: 700px) {
    .cxf-avatars { grid-template-columns: repeat(3, 1fr); }
    .cxf-post-time { display: none; }
}

/* ── 列表页：专栏目录（紧凑一行一栏 + 搜索/筛选/排序，面向多作者）── */
.cxv-dir-section { margin: 0 0 22px; }

.cxv-dir-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px 16px;
    flex-wrap: wrap;
    margin: 0 0 12px;
}

.cxv-tabs { display: flex; gap: 6px; flex-wrap: wrap; }

.cxv-tab {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    background: var(--paper);
    color: var(--ink-2);
    font-size: var(--fs-sm);
    font-weight: 600;
    cursor: pointer;
    transition: all var(--duration) var(--ease);
}
.cxv-tab:hover { border-color: var(--brand-2); color: var(--ink); }
.cxv-tab.active { background: var(--ink); border-color: var(--ink); color: var(--page); }
.cxv-tab em {
    font-style: normal;
    font-size: var(--fs-2xs);
    padding: 0 5px;
    border-radius: var(--radius-full);
    background: var(--paper-3);
    color: var(--ink-3);
}
.cxv-tab.active em { background: rgba(255,255,255,.22); color: var(--page); }

.cxv-dir-tools { display: flex; align-items: center; gap: 8px; }

.cxv-search {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 5px 11px;
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    background: var(--paper);
    color: var(--ink-3);
    transition: border-color var(--duration) var(--ease);
}
.cxv-search:focus-within { border-color: var(--brand-2); color: var(--brand-text); }
.cxv-search input {
    border: 0;
    outline: 0;
    background: transparent;
    font-size: var(--fs-sm);
    color: var(--ink);
    width: 150px;
    padding: 0;
}
.cxv-search input::placeholder { color: var(--ink-4, var(--ink-3)); }

.cxv-sort { display: inline-flex; gap: 2px; padding: 3px; border: 1px solid var(--line); border-radius: var(--radius-full); background: var(--paper); flex-shrink: 0; }
.cxv-sort-btn {
    padding: 4px 11px;
    border: 0;
    border-radius: var(--radius-full);
    background: transparent;
    color: var(--ink-3);
    font-size: var(--fs-xs);
    font-weight: 700;
    cursor: pointer;
    transition: all var(--duration) var(--ease);
}
.cxv-sort-btn.active { background: var(--brand-tint, var(--panel)); color: var(--brand-text); }

/* 紧凑目录：一行一栏，多列自适应；作者多时靠搜索/筛选/排序找 */
.cxv-dir {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
    gap: 8px;
}

.cxv-col {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    transition: border-color var(--duration) var(--ease), background var(--duration) var(--ease);
}
.cxv-col:hover { border-color: var(--brand-2); background: var(--row-hover); }

.cxv-col-link { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }
.cxv-col-info { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1; }
.cxv-col-name {
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.cxv-col:hover .cxv-col-name { color: var(--brand-text); }
.cxv-col-meta {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.cxv-col-stats {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 1px;
    flex-shrink: 0;
    font-size: var(--fs-2xs);
    line-height: 1.3;
    color: var(--ink-3);
    text-align: right;
}
.cxv-col-stats strong { color: var(--ink); font-weight: 800; }

.cxv-dir-empty { padding: 28px 8px; text-align: center; color: var(--ink-3); font-size: var(--fs-base); grid-column: 1 / -1; }

/* 关注按钮：默认描边，已关注为淡底 */
.cxv-follow {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    min-width: 84px;
    padding: 8px 14px;
    border: 1px solid var(--brand-2);
    border-radius: var(--radius);
    font-size: var(--fs-sm);
    font-weight: 800;
    color: var(--brand-text);
    background: var(--brand-tint, transparent);
    cursor: pointer;
    transition: all var(--duration) var(--ease);
}
.cxv-follow:hover { background: var(--brand); border-color: var(--brand); color: var(--on-brand, #0b1a00); }
.cxv-follow.is-on { border-color: var(--line); background: var(--paper); color: var(--ink-3); }
.cxv-follow.is-on:hover { border-color: var(--danger, #d33); background: transparent; color: var(--danger, #d33); }
.cxv-follow.is-busy { opacity: .55; pointer-events: none; }
.cxv-follow-on { display: none; }
.cxv-follow.is-on .cxv-follow-off { display: none; }
.cxv-follow.is-on .cxv-follow-on { display: inline; }

/* 紧凑关注按钮（目录行内） */
.cxv-follow-sm { min-width: 62px; padding: 5px 11px; font-size: var(--fs-xs); }

/* 独立目录页（全部专栏）：头部 + 更宽的密集网格 */
.cxd-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin: 6px 0 18px; }
.cxd-back { display: inline-block; font-size: var(--fs-sm); color: var(--ink-3); margin-bottom: 6px; }
.cxd-back:hover { color: var(--brand-text); }
.cxd-title { display: flex; align-items: baseline; gap: 8px; font-size: var(--fs-xl); font-weight: 800; color: var(--ink); }
.cxd-title em { font-style: normal; font-size: var(--fs-base); font-weight: 700; color: var(--ink-3); }
.cxv-dir-wide { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }

/* 边栏热榜：关注/文章 两档切换 */
.cxv-rank-tabs { display: inline-flex; gap: 2px; margin-left: auto; padding: 2px; border: 1px solid var(--line); border-radius: var(--radius-full); background: var(--paper); }
.cxv-rank-toggle {
    padding: 2px 9px;
    border: 0;
    border-radius: var(--radius-full);
    background: transparent;
    color: var(--ink-3);
    font-size: var(--fs-2xs);
    font-weight: 700;
    cursor: pointer;
    transition: all var(--duration) var(--ease);
}
.cxv-rank-toggle.active { background: var(--brand-tint, var(--panel)); color: var(--brand-text); }

/* ── 列表页：最新发布流 ── */
.cxv-feed { display: flex; flex-direction: column; }

.cxv-entry {
    padding: 10px 4px;
    border-bottom: 1px solid var(--line-soft);
}

.cxv-entry:last-child { border-bottom: none; }

.cxv-entry-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 10px;
}

.cxv-entry-author {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
}

.cxv-entry-name { font-size: var(--fs-base); font-weight: 700; color: var(--ink); }
.cxv-entry-author:hover .cxv-entry-name { color: var(--brand-text); }
.cxv-entry-time { font-size: var(--fs-xs); color: var(--ink-3); }

.cxv-entry-enter {
    margin-left: auto;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-3);
    white-space: nowrap;
}

.cxv-entry-enter:hover { color: var(--brand-text); }

.cxv-entry-link {
    display: grid;
    grid-template-columns: 200px minmax(0, 1fr);   /* 图在左（金色财经式）；无图退单列见文件末尾「列表图文卡」 */
    gap: 20px;
    align-items: start;
}

.cxv-entry-body { min-width: 0; }

.cxv-entry-thumb {
    width: 200px;
    height: 125px;
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--panel);
}

.cxv-entry-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.cxv-entry-link:hover .cxv-entry-thumb img { transform: scale(1.04); }

.cxv-entry-title {
    font-size: var(--fs-md);
    font-weight: 700;
    line-height: 1.45;
    color: var(--ink);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color var(--duration) var(--ease);
}

.cxv-entry-link:hover .cxv-entry-title { color: var(--brand-text); }

.cxv-entry-excerpt {
    margin-top: 6px;
    font-size: var(--fs-sm);
    line-height: 1.65;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* 动态（note）条目：正文即内容，带「动态」小标 */
.cxv-entry-tag {
    font-size: var(--fs-2xs);
    font-weight: 800;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--brand-text);
    padding: 1px 7px;
    border-radius: var(--radius-full);
    background: var(--brand-tint, var(--panel));
}
.cxv-entry-note-link { display: block; }
.cxv-entry-note-body {
    margin: 2px 0 0;
    font-size: var(--fs-base);
    line-height: 1.6;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.cxv-entry-note-link:hover .cxv-entry-note-body { color: var(--ink); }

/* ── 边栏：申请 CTA 卡 ── */
.cxv-cta-card {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
    padding: 22px;
    border-radius: var(--radius-lg);
    background: linear-gradient(135deg, #10140A, #1C2610);
    color: #F6F8F2;
}

.cxv-cta-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--radius);
    background: rgba(160, 238, 4, 0.16);
    color: #A0EE04;
}

.cxv-cta-card strong { font-size: var(--fs-md); font-weight: 800; }

.cxv-cta-card p {
    font-size: var(--fs-xs);
    line-height: 1.65;
    color: rgba(246, 248, 242, 0.66);
}

.cxv-cta-card .tf-detail-btn { align-self: stretch; justify-content: center; }

/* ── 详情页：背景墙 + 资料卡 ── */
.colp-hero {
    position: relative;
    height: 216px;
    background-size: cover;
    background-position: center;
}

.colp-hero.is-default {
    background: linear-gradient(120deg, #10140A 0%, #1E2B12 45%, #10140A 100%);
}

.colp-hero-overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(9, 14, 10, 0.25), rgba(9, 14, 10, 0.55));
}

.colp-hero-crumb {
    position: relative;
    padding-top: 20px;
}

.colp-hero-crumb a {
    display: inline-block;
    padding: 6px 14px;
    border-radius: var(--radius-full);
    background: rgba(9, 14, 10, 0.45);
    color: rgba(246, 248, 242, 0.9);
    font-size: var(--fs-sm);
    backdrop-filter: blur(4px);
}

.colp-hero-crumb a:hover { color: #A0EE04; }

.colp-body { padding: 0 0 var(--section-gap); }

.colp-grid {
    display: grid;
    grid-template-columns: 316px minmax(0, 1fr);
    gap: 20px;
    align-items: start;
}

/* 资料卡上浮压在背景墙上（参考金色专栏主页） */
.colp-rail {
    display: flex;
    flex-direction: column;
    gap: 16px;
    margin-top: -96px;
    position: relative;
    z-index: 2;
}

.colp-card {
    padding: 0 18px 16px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    box-shadow: var(--shadow-md);
    text-align: center;
}

.colp-avatar {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 96px;
    height: 96px;
    margin-top: -48px;
    border-radius: 50%;
    border: 4px solid var(--paper);
    background: var(--paper-3);
    font-size: var(--fs-xl);
    font-weight: 800;
    color: var(--on-brand);
    box-shadow: var(--shadow-sm);
}

.colp-avatar img {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
}

.colp-avatar.is-ph { background: linear-gradient(135deg, #A0EE04, #75BA2A); }

.colp-name {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin-top: 12px;
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
}

.colp-v { color: var(--brand-2, #75BA2A); flex-shrink: 0; }

.colp-owner {
    margin-top: 4px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.colp-desc {
    margin-top: 10px;
    font-size: var(--fs-sm);
    line-height: 1.7;
    color: var(--ink-2);
}

.colp-stats {
    display: flex;
    justify-content: center;
    gap: 8px;
    margin-top: 16px;
    padding-top: 16px;
    border-top: 1px solid var(--line-soft);
}

.colp-stat {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 2px;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.colp-stat strong {
    font-family: var(--font-mono);
    font-size: var(--fs-lg);
    font-weight: 700;
    color: var(--ink);
}

.colp-stat.is-freq strong {
    font-family: var(--font-body);
    font-size: var(--fs-xs);
    line-height: 1.5;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 24px;
    color: var(--brand-text);
}

/* 详情资料卡：关注（主）+ 发文（次，仅 owner） */
.colp-actions { display: flex; flex-direction: column; gap: 8px; margin-top: 16px; }
.colp-actions .colp-apply-btn { margin-top: 0; }

.colp-follow {
    width: 100%;
    min-width: 0;
    padding: 11px 14px;
    font-size: var(--fs-base);
    background: var(--brand);
    border-color: var(--brand);
    color: var(--on-brand, #0b1a00);
}
.colp-follow:hover { filter: brightness(.96); background: var(--brand); border-color: var(--brand); color: var(--on-brand, #0b1a00); }
.colp-follow.is-on { background: var(--paper); border-color: var(--line); color: var(--ink-2); filter: none; }
.colp-follow.is-on:hover { border-color: var(--danger, #d33); color: var(--danger, #d33); background: transparent; }

.colp-apply-btn {
    margin-top: 16px;
    width: 100%;
    justify-content: center;
}
.colp-apply-btn.secondary {
    background: transparent;
    color: var(--ink);
    border: 1px solid var(--line);
}
.colp-apply-btn.secondary:hover { border-color: var(--ink); background: var(--ink); color: var(--page); }

.colp-about-body {
    padding: 4px 16px 14px;
    font-size: var(--fs-sm);
    line-height: 1.7;
    color: var(--ink-2);
}

.colp-about-body p { margin-bottom: 8px; }

/* 其他专栏 / 专栏榜条目 */
.colp-others {
    display: flex;
    flex-direction: column;
    padding: 4px 0 10px;
}

.colp-other {
    display: flex;
    align-items: center;
    gap: 10px;
    padding-block: 8px;
    border-radius: var(--radius-sm);
    transition: background var(--duration) var(--ease);
}

.colp-other:hover { background: var(--row-hover); }

.colp-other-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--paper-3);
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--on-brand);
    flex-shrink: 0;
    overflow: hidden;
}

.colp-other-avatar img { width: 100%; height: 100%; object-fit: cover; }
.colp-other-avatar.is-ph { background: linear-gradient(135deg, #A0EE04, #75BA2A); }

.colp-other-info { display: flex; flex-direction: column; gap: 1px; min-width: 0; }

.colp-other-name {
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.colp-other:hover .colp-other-name { color: var(--brand-text); }
.colp-other-count { font-size: var(--fs-xs); color: var(--ink-3); }

/* 详情页主列：tab + 内容 */
.colp-main { min-width: 0; padding-top: 10px; }

.colp-tabs {
    display: flex;
    gap: 4px;
    border-bottom: 1px solid var(--line);
    margin-bottom: 14px;
}

.colp-tab {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 12px 18px;
    font-size: var(--fs-base);
    font-weight: 600;
    color: var(--ink-3);
    border-bottom: 3px solid transparent;
    margin-bottom: -1px;
    transition: color var(--duration) var(--ease);
}

.colp-tab em {
    font-style: normal;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    padding: 1px 8px;
    border-radius: var(--radius-full);
    background: var(--paper-3);
    color: var(--ink-3);
}

.colp-tab:hover { color: var(--ink); }

.colp-tab.active {
    color: var(--ink);
    font-weight: 700;
    border-bottom-color: var(--brand);
}

.colp-tab.active em { background: var(--brand-tint); color: var(--brand-text); }

/* 动态时间线 */
.colp-timeline {
    position: relative;
    padding-left: 18px;
}

.colp-timeline::before {
    content: '';
    position: absolute;
    left: 4px;
    top: 8px;
    bottom: 8px;
    width: 2px;
    background: var(--line-2);
}

.colp-note { position: relative; padding: 10px 0; }

.colp-note-dot {
    position: absolute;
    left: -18px;
    top: 26px;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--brand);
    border: 2px solid var(--paper);
    box-shadow: 0 0 0 2px var(--brand-tint);
}

.colp-note-card {
    padding: 14px 18px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
}

.colp-note-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
}

.colp-note-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--paper-3);
    font-size: var(--fs-xs);
    font-weight: 800;
    color: var(--on-brand);
    overflow: hidden;
    flex-shrink: 0;
}

.colp-note-avatar img { width: 100%; height: 100%; object-fit: cover; }
.colp-note-avatar.is-ph { background: linear-gradient(135deg, #A0EE04, #75BA2A); }

.colp-note-name { font-size: var(--fs-sm); font-weight: 700; color: var(--ink); }
.colp-note-time { margin-left: auto; font-size: var(--fs-xs); color: var(--ink-3); }

.colp-note-body {
    font-size: var(--fs-base);
    line-height: 1.75;
    color: var(--ink-2);
}

.colp-note-body p { margin-bottom: 8px; }
.colp-note-body p:last-child { margin-bottom: 0; }
.colp-note-body img { max-width: 100%; border-radius: var(--radius); }

/* 首页专栏卡（带头像版） */

@media (max-width: 1080px) {
    .colp-grid { grid-template-columns: 1fr; }
    .colp-rail { margin-top: -72px; }
    .colp-hero { height: 200px; }
}

@media (max-width: 640px) {

    .cxv-avatar-lg.is-ph { font-size: var(--fs-lg); }
    .cxv-entry-link { grid-template-columns: 120px minmax(0, 1fr); gap: 12px; align-items: center; }
    .cxv-entry-thumb { width: 120px; height: 80px; }
    .cxv-entry-excerpt { display: none; }
    .cxv-entry-enter { display: none; }
}

/* ── 首页焦点区：轮播 Banner（指示器）+ 右侧今日头条卡 ── */
.hero-carousel {
    position: relative;
    min-height: 280px;   /* 09-02：随 .hero-card-lg 一起压扁 */
    border-radius: var(--radius-lg);
    overflow: hidden;
}

/* 轮播位于主列顶部时与下方板块的间距 */
.home-main > .hero-carousel { margin-bottom: 12px; }
.home-main > .hero-carousel + .home-deep { margin-top: 0; }

.hero-slide {
    position: absolute;
    inset: 0;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.55s var(--ease);
}

.hero-slide.active {
    opacity: 1;
    pointer-events: auto;
}

.hero-dots {
    position: absolute;
    right: 16px;
    bottom: 14px;
    z-index: 5;
    display: flex;
    gap: 6px;
}

.hero-dot {
    width: 14px;
    height: 4px;
    border-radius: var(--radius-full);
    background: rgba(246, 248, 242, 0.35);
    transition: all var(--duration) var(--ease);
    cursor: pointer;
}

.hero-dot:hover { background: rgba(246, 248, 242, 0.6); }

.hero-dot.active {
    width: 26px;
    background: #A0EE04;
}

/* 右侧 2×2 宫格图卡（首格今日头条） */

.hero-tile img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.hero-tile:hover img { transform: scale(1.05); }

/* 今日头条卡（旧版单卡样式，宫格版启用后保留备用） */

.hero-headline-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform var(--duration-slow) var(--ease);
}

.hero-headline-main:hover .hero-headline-media img { transform: scale(1.04); }

@media (max-width: 960px) {
    .hero-carousel { min-height: 260px; }
}

/* ── 首页主列 7×24 快讯板块（R1/R2）：固定条数 + 查看更多 ── */

.home-main > .hero-carousel + .home-news { margin-top: 0; }
.home-news .news-list { margin-top: 4px; }

/* ── 首页热门专栏横滑（箭头翻页 + scroll-snap）── */
.colcar { position: relative; margin-bottom: 14px; }

.colcar-track {
    display: flex;
    gap: 10px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
    padding: 2px;
}

.colcar-track::-webkit-scrollbar { display: none; }

.colcar-card {
    flex: 0 0 calc((100% - 20px) / 3);
    scroll-snap-align: start;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    min-width: 0;
    transition: all var(--duration) var(--ease);
}

.colcar-card:hover { border-color: var(--brand); box-shadow: var(--shadow-sm); }

.colcar-info { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.colcar-count { font-size: var(--fs-xs); color: var(--ink-3); }

.colcar-btn {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: var(--paper);
    border: 1px solid var(--line);
    color: var(--ink-2);
    box-shadow: var(--shadow-sm);
    transition: all var(--duration) var(--ease);
}

.colcar-btn:hover { color: var(--ink); border-color: var(--brand); }
.colcar-prev { left: -13px; }
.colcar-next { right: -13px; }

.home-col-sub {
    margin: 4px 0 2px;
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--ink);
}

@media (max-width: 768px) {
    .colcar-card { flex-basis: calc((100% - 10px) / 2); }
}

/* ── 专栏页动态 Banner：标题 | 轮播 | 今日头条 三栏同行 ── */
.cx-banner .list-banner-inner {
    align-items: center;
    flex-wrap: nowrap;
    gap: 28px;
}

.cx-banner .list-banner-text { flex: 1 1 auto; min-width: 200px; }
.cx-banner .list-banner-desc { max-width: none; }

.cx-banner-live {
    position: relative;
    flex: 0 1 400px;
    min-width: 300px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.cx-banner-live-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.12em;
    color: #A0EE04;
}

.cx-banner-live-dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #A0EE04;
    animation: tf-live-pulse 2s var(--ease) infinite;
}

.cx-banner-items { position: relative; min-height: 80px; }

.cx-banner-item {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    gap: 5px;
    opacity: 0;
    transform: translateY(6px);
    pointer-events: none;
    transition: opacity 0.45s var(--ease), transform 0.45s var(--ease);
}

.cx-banner-item.active {
    opacity: 1;
    transform: translateY(0);
    pointer-events: auto;
}

.cx-banner-col {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: rgba(246, 248, 242, 0.85);
}

.cx-banner-col em {
    font-style: normal;
    font-weight: 400;
    color: rgba(246, 248, 242, 0.5);
}

.cx-banner-title {
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: 1.45;
    color: #F6F8F2;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.cx-banner-item:hover .cx-banner-title { color: #A0EE04; }

/* 轮播指示器 */
.cx-banner-dots {
    display: flex;
    gap: 6px;
    margin-top: 4px;
}

.cx-banner-dot {
    width: 14px;
    height: 4px;
    border-radius: var(--radius-full);
    background: rgba(246, 248, 242, 0.28);
    transition: all var(--duration) var(--ease);
    cursor: pointer;
}

.cx-banner-dot:hover { background: rgba(246, 248, 242, 0.55); }

.cx-banner-dot.active {
    width: 26px;
    background: #A0EE04;
}

/* 今日头条（Banner 右侧带图卡） */

.cx-headline-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform var(--duration-slow) var(--ease);
}

.cx-banner-headline:hover .cx-headline-media img { transform: scale(1.04); }

@media (max-width: 900px) {
    .cx-banner-live { display: none; }   /* 窄屏 Banner 只留标题，内容轮播交给正文流 */
}

/* ── 专栏直播预留位（R23）── */

.cx-live-text strong { font-size: var(--fs-sm); color: var(--ink); }

/* ── 活动详情页：会议落地页版式 ── */

/* 面包屑层级 */
.tf-ev-detail .tf-detail-breadcrumb { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tf-crumb-sep { color: var(--ink-3); font-size: var(--fs-xs); }
.tf-crumb-current {
    font-size: var(--fs-sm);
    color: var(--ink-2);
    max-width: 320px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Hero：海报作背景，信息浮层压在深色渐变上 */
.tf-ev-hero {
    position: relative;
    margin-bottom: 20px;
    border-radius: var(--radius-lg);
    overflow: hidden;
    background: linear-gradient(135deg, #14532D 0%, #166534 55%, #15803D 100%);
    min-height: 240px;
    display: flex;
    align-items: flex-end;
}
.tf-ev-hero-bg {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.tf-ev-hero-scrim {
    position: absolute;
    inset: 0;
    background: linear-gradient(to top, rgba(9, 14, 10, 0.78) 0%, rgba(9, 14, 10, 0.35) 55%, rgba(9, 14, 10, 0.12) 100%);
}
.tf-ev-hero-inner {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 20px;
    width: 100%;
    padding: 48px 28px 24px;
}
.tf-ev-hero-main { display: flex; align-items: flex-end; gap: 16px; min-width: 0; }
.tf-ev-hero .tf-ev-date {
    width: 64px;
    height: 64px;
    border-radius: var(--radius-lg);
    /* 走 --paper 而不是写死白：里面的字色是暗色令牌，白底配浅绿字读不出来 */
    background: var(--paper);
    flex-shrink: 0;
}
.tf-ev-hero-identity { min-width: 0; }
.tf-ev-hero-badges {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin-bottom: 8px;
}
.tf-ev-hero-title {
    margin: 0 0 6px;
    font-size: clamp(22px, 3.4vw, 32px);
    font-weight: 800;
    line-height: 1.15;
    letter-spacing: -0.01em;
    color: #fff;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
}
.tf-ev-hero-meta {
    margin: 0;
    font-size: var(--fs-sm);
    font-weight: 500;
    color: rgba(255, 255, 255, 0.88);
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}
.tf-ev-hero-actions {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
    flex-shrink: 0;
}
.tf-ev-hero-ghost {
    background: rgba(255, 255, 255, 0.12);
    border-color: rgba(255, 255, 255, 0.35);
    color: #fff;
    text-align: center;
}
.tf-ev-hero-ghost:hover { background: rgba(255, 255, 255, 0.22); color: #fff; }
/* 深色底上的徽章：一律实底（浅色模式白、暗色模式纸色），彩色只用于文字，保证任何海报上可读 */
.tf-ev-hero .tf-ev-status,
.tf-ev-hero .tf-detail-asset-badge,
.tf-ev-hero .tf-ev-countdown {
    background: var(--paper);
    border-color: transparent;
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);
}
.tf-ev-hero .tf-ev-status-open { color: var(--brand-text); }
.tf-ev-hero .tf-ev-status-ended { color: var(--ink-2); }

/* 倒计时徽章 */
.tf-ev-countdown {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 10px;
    font-size: var(--fs-xs);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    border-radius: var(--radius-full);
    background: var(--paper);
    border: 1px solid var(--line);
    color: var(--ink-2);
}

/* 议程时间线 */
.tf-ev-agenda { list-style: none; margin: 0; padding: 0; }
.tf-ev-agenda-item {
    display: flex;
    gap: 14px;
    padding: 9px 0;
    border-bottom: 1px solid var(--line-soft);
}
.tf-ev-agenda-item:last-child { border-bottom: none; }
.tf-ev-agenda-time {
    flex-shrink: 0;
    min-width: 110px;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--brand-text);
}
.tf-ev-agenda-title { font-size: var(--fs-sm); line-height: 1.55; color: var(--ink); }

/* 侧栏位置卡：小地图缩略 + 放大模态 */
.tf-ev-venue-name { margin: 0 0 2px; font-size: var(--fs-base); font-weight: 700; color: var(--ink); }
.tf-ev-venue-addr { margin: 0 0 10px; font-size: var(--fs-xs); line-height: 1.5; color: var(--ink-2); }
.tf-ev-map-links { display: flex; gap: 14px; margin-top: 10px; }
.tf-ev-map-link { font-size: var(--fs-xs); font-weight: 600; color: var(--brand-text); }

.tf-ev-map-mini {
    position: relative;
    display: block;
    width: 100%;
    aspect-ratio: 16 / 8;
    padding: 0;
    border: 1px solid var(--line-soft);
    border-radius: var(--radius);
    overflow: hidden;
    cursor: pointer;
    background-color: var(--paper);
    background-size: cover;
    background-position: center;
    transition: border-color var(--duration) var(--ease);
}
.tf-ev-map-mini:hover { border-color: var(--brand); }
.tf-ev-map-mini.has-tile .tf-ev-map-fallback { background: none; }
.tf-ev-map-mini.has-tile .tf-ev-map-coords,
.tf-ev-map-mini.has-tile .tf-ev-map-place { display: none; }
.tf-ev-map-zoom {
    position: absolute;
    right: 8px;
    bottom: 8px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border-radius: var(--radius);
    background: var(--panel);
    color: var(--ink-2);
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
}

/* 坐标定位卡（OSM 不可达时的兜底；模态里有放大版） */
.tf-ev-map-fallback {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    width: 100%;
    height: 100%;
    background:
        linear-gradient(var(--line-soft) 1px, transparent 1px),
        linear-gradient(90deg, var(--line-soft) 1px, transparent 1px),
        var(--paper);
    background-size: 24px 24px, 24px 24px, auto;
    background-position: center;
}
.tf-ev-map-pin { color: var(--brand-text); }
.tf-ev-map-coords {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--ink);
}

.tf-ev-map-fallback-lg { gap: 8px; }
.tf-ev-map-fallback-lg .tf-ev-map-coords { font-size: var(--fs-base); }

/* 地图放大模态 */
.tf-ev-map-modal { position: fixed; inset: 0; z-index: 1000; }
.tf-ev-map-modal-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(9, 14, 10, 0.55);
    cursor: pointer;
}
.tf-ev-map-modal-panel {
    position: absolute;
    inset: 50% auto auto 50%;
    transform: translate(-50%, -50%);
    width: min(880px, calc(100vw - 32px));
    height: min(560px, calc(100vh - 64px));
    background: var(--panel);
    border-radius: var(--radius-lg);
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
    overflow: hidden;
}
.tf-ev-map-modal-close {
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border: none;
    border-radius: var(--radius-full);
    background: var(--panel);
    color: var(--ink-2);
    cursor: pointer;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}
.tf-ev-map-modal-close:hover { color: var(--ink); }
.tf-ev-map-modal-body { width: 100%; height: 100%; }

/* 模态内的瓦片拼图地图 */
.tf-ev-map-mosaic {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: hidden;
    background: var(--paper-3);
}
.tf-ev-map-mosaic img { position: absolute; width: 256px; height: 256px; }
.tf-ev-map-marker {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -92%);   /* 针尖对准坐标点 */
    color: var(--brand-text);
    filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.35));
}
.tf-ev-map-attribution {
    position: absolute;
    right: 6px;
    bottom: 4px;
    padding: 1px 6px;
    font-size: var(--fs-2xs);
    color: var(--ink-2);
    background: rgba(255, 255, 255, 0.75);
    border-radius: var(--radius);
}

/* 日历与分享 */
.tf-ev-cal-row { display: flex; gap: 8px; margin-bottom: 12px; }
.tf-ev-cal-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    flex: 1;
    padding: 8px 10px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}
.tf-ev-cal-btn:hover { color: var(--brand-text); border-color: var(--brand); }
.tf-ev-share-row { display: flex; gap: 8px; }
.tf-ev-share-row .tf-detail-social { position: relative; }
.tf-ev-share-row .tf-detail-social.is-copied { color: var(--brand-text); border-color: var(--brand); }
/* 复制成功提示：只变色太不明显，补一个短暂气泡 */
.tf-ev-share-row .tf-detail-social.is-copied::after {
    content: attr(data-copied);
    position: absolute;
    bottom: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%);
    padding: 3px 8px;
    font-size: var(--fs-xs);
    font-weight: 600;
    line-height: 1.4;
    white-space: nowrap;
    color: var(--brand-text);
    background: var(--paper);
    border: 1px solid var(--brand);
    border-radius: var(--radius);
    pointer-events: none;
}

@media (max-width: 768px) {
    .tf-ev-hero { min-height: 200px; }
    .tf-ev-hero-inner { flex-direction: column; align-items: stretch; padding: 36px 16px 16px; }
    .tf-ev-hero-main { align-items: flex-start; }
    .tf-ev-hero .tf-ev-date { width: 52px; height: 52px; }
    .tf-ev-hero-actions { flex-direction: row; }
    .tf-ev-hero-actions .tf-detail-btn { flex: 1; text-align: center; }
    .tf-ev-agenda-time { min-width: 84px; }
    .tf-crumb-current { max-width: 160px; }
}

/* ── 快讯实时连接指示点（WebSocket 状态，front-page updateWsIndicator） ── */
.ws-indicator {
    display: inline-block;
    width: 7px;
    height: 7px;
    margin-left: 6px;
    border-radius: 50%;
    background: var(--ink-3);
    vertical-align: middle;
}
.ws-indicator.connected {
    background: var(--brand);
    box-shadow: 0 0 0 3px var(--brand-tint);
}
.ws-indicator.disconnected { background: var(--warn); }

@media (max-width: 768px) {
    .columns-page { padding: var(--page-top) 0 48px; }

}

/* ═══════════════════════════════════════════
   信息页（关于 / 合规 / 法律）
   ═══════════════════════════════════════════ */

.info-page { padding: 48px 0 64px; }

.info-page-header {
    padding-bottom: 20px;
    margin-bottom: 28px;
    border-bottom: 1px solid var(--line);
}

.info-page-title {
    font-size: var(--fs-xl);
    font-weight: 800;
    letter-spacing: -0.01em;
    line-height: 1.3;
    color: var(--ink);
    margin-bottom: 10px;
}

.info-page-meta {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--ink-3);
}

@media (max-width: 768px) {
    .info-page { padding: 32px 0 48px; }
    .info-page-title { font-size: var(--fs-xl); }
}

/* 法务长文（09-03，法律文件包 V1.0）：版本行 / 适用主体 / 目录 / 相关文件。
   正文条款本身走 .entry-content 的 h2 / ol / table 排版。 */
.entry-content .legal-meta {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
    margin-bottom: 0.6em;
}

.entry-content .legal-scope {
    font-size: var(--fs-sm);
    color: var(--ink-2);
    padding: 10px 14px;
    background: var(--paper-2);
    border-radius: var(--radius);
}

.entry-content .legal-toc {
    margin: 1.4em 0 2em;
    padding: 14px 18px 6px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--card);
}

.entry-content .legal-toc ol {
    margin: 0;
    padding-left: 1.4em;
    columns: 2;
    column-gap: 28px;
    font-size: var(--fs-sm);
}

.entry-content .legal-toc li { margin-bottom: 0.35em; break-inside: avoid; }

.entry-content .legal-toc a { color: var(--ink-2); text-decoration: none; }
.entry-content .legal-toc a:hover { color: var(--brand-text); text-decoration: underline; }

.entry-content .legal-related {
    margin-top: 2.2em;
    padding-top: 1em;
    border-top: 1px solid var(--line);
    font-size: var(--fs-sm);
    color: var(--ink-2);
}

/* 长条款页的锚点跳转别被吸顶页头盖住 */
.entry-content h2[id] { scroll-margin-top: calc(var(--header-h, 64px) + 16px); }

@media (max-width: 640px) {
    .entry-content .legal-toc ol { columns: 1; }
}

/* 免责声明 / 来源与转载：PRD §7.1 要求常驻展示，故独立成带 */
.footer-notice {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 20px 40px;
    padding: 20px 0;
    border-top: 1px solid var(--line-soft);
}

.footer-notice p {
    font-size: var(--fs-xs);
    line-height: 1.75;
    color: var(--ink-3);
}

.footer-notice strong {
    display: block;
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--ink-3);
    margin-bottom: 3px;
}

/* 固定声明条文末「详见 免责声明 · 用户协议 · …」（09-03） */
.footer-notice-refs { white-space: nowrap; }
.footer-notice-refs a { color: var(--ink-2); text-decoration: underline; text-underline-offset: 2px; }
.footer-notice-refs a:hover { color: var(--brand-text); }
.footer-notice-sep { margin: 0 5px; }

.footer-bottom {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px 0;
    border-top: 1px solid var(--line-soft);
    font-size: var(--fs-xs);
    color: var(--ink-3);
    flex-wrap: wrap;
}

/* 备案号（PRD §7：页面底部展示备案号与链接） */
.footer-beian {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px 14px;
}

.footer-beian a,
.footer-beian span {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: var(--ink-3);
}

.footer-beian a:hover { color: var(--brand-text); }
.footer-beian svg { color: var(--ink-4); flex-shrink: 0; }

.footer-bottom-langs { display: inline-flex; align-items: center; gap: 10px; }
.footer-bottom-langs a { color: var(--ink-3); }
.footer-bottom-langs a:hover { color: var(--brand-text); }
.footer-bottom-langs a.active { color: var(--ink); font-weight: 600; }

.footer-bottom-tag {
    margin-left: auto;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ink-3);
}

/* ═══════════════════════════════════════════
   动画 / 工具
   ═══════════════════════════════════════════ */

/* 进场动画：animation 结束态即可见，无 JS 也不会丢内容 */
.animate-in {
    animation: tf-fade-up 0.45s var(--ease-out) both;
}

@keyframes tf-fade-up {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: translateY(0); }
}

/* ═══════════════════════════════════════════
   RESPONSIVE
   ═══════════════════════════════════════════ */

@media (max-width: 1280px) {
    .home-grid { grid-template-columns: minmax(0, 1fr) 340px; }
    .header-search { max-width: 380px; }
    .tf-detail-grid { grid-template-columns: minmax(0, 1fr) 300px; }
}

/* 平板区间（769–980）：页头一行放不下完整动作区——社媒图标让位给页脚矩阵，
   「联系我们」收成纯图标，登录与语言切换才不会被挤出视口 */
@media (max-width: 980px) {
    .header-x-link { display: none; }
    .header-contact { width: 36px; padding: 0; justify-content: center; }
    .header-contact span { display: none; }
}

@media (max-width: 1080px) {
    .tf-detail-grid { grid-template-columns: 1fr; }
    .tf-detail-sidebar { position: static; }
    .article-grid { grid-template-columns: 1fr; gap: 28px; }
    .article-aside { position: static; }
    .article-title { font-size: var(--fs-xl); }
}

@media (max-width: 640px) {
    .related-grid { grid-template-columns: 1fr; }
    .article-title { font-size: var(--fs-lg); }
}

@media (max-width: 960px) {

    .hero-card-lg { min-height: 260px; }

    .home-grid { grid-template-columns: 1fr; }
    .home-sidebar { position: static; max-height: none; overflow: visible; }

}

@media (max-width: 768px) {
    /* 移动端菜单常显、独占一行（R38）：横向滑动，不再收进抽屉 */
    :root { --nav-h: 38px; --header-top-h: 52px; }

    /* 窄屏横滑导航去掉图标，保持紧凑 */
    .main-nav .nav-ico { display: none; }

    .container, .container-narrow { padding: 0 16px; }

    /* 页头第一行在 375px 上寸土寸金：全字标（约 200px）换纯符号，
       内边距与动作区间距同步收紧，右上角的登录/语言才放得下 */
    .header-inner { padding: 0 16px; }
    .site-logo .logo-lockup-en { display: none; }
    .site-logo .logo-lockup-mark { display: block; }
    .header-actions { gap: 6px; }

    .header-top { height: var(--header-top-h); gap: 10px; }

    /* 宽搜索条让位：窄屏回退放大镜 + 全屏搜索弹层 */
    .header-search { display: none; }
    .search-toggle { display: flex; }

    .header-nav-row { padding: 0; }

    .main-nav {
        width: 100%;
        justify-content: flex-start;   /* 窄屏横滑，不做平铺分布 */
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        gap: 0;
    }

    .main-nav::-webkit-scrollbar { display: none; }

    .main-nav a {
        flex-shrink: 0;
        height: var(--nav-h);
        padding: 0 12px;
        font-size: var(--fs-base);
    }

    /* 横滑行里的「发现」：面板固定到页头下方，避免被滚动容器裁切 */
    .nav-discover > summary {
        height: var(--nav-h);
        padding: 0 12px;
        font-size: var(--fs-base);
    }

    .nav-discover-menu {
        position: fixed;
        left: 12px;
        right: 12px;
        top: calc(var(--header-h) + 6px);
    }

    /* 菜单常显后抽屉退役：汉堡钮与抽屉内语言/账户区不再出现（R38） */
    .mobile-nav-toggle { display: none; }
    .nav-drawer-extra { display: none; }
    .header-inner { gap: 10px; }

    /* 右上角常显（R42）：登录/用户中心 + 联系我们/下载图标（R39）；社媒图标让位 */
    .header-x-link { display: none; }

    .header-contact { display: flex; width: 36px; padding: 0; justify-content: center; }
    .header-contact span { display: none; }

    .header-dl-link {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 36px;
        height: 36px;
        border-radius: var(--radius-sm);
        color: var(--ink-2);
    }

    .header-login span { display: none; }
    .header-login { width: 36px; padding: 0; justify-content: center; }

    .lang-switcher { margin-left: 0; }
    .lang-dropdown summary { padding: 4px 8px; font-size: var(--fs-xs); }

    .hero-title { font-size: var(--fs-lg); }

    /* 快讯紧凑化（R41）：字号收小、间距压缩，首屏约展示 6 条 */
    .news-item { grid-template-columns: 44px minmax(0, 1fr); gap: 8px; padding: 9px 8px 9px 0; margin-bottom: 0; }
    .news-time-dot { display: none; }
    .news-item-content { padding-left: 12px; }
    .news-item-title { font-size: var(--fs-base); line-height: 1.45; }
    .news-item-body { margin-top: 4px; font-size: var(--fs-xs); line-height: 1.55; -webkit-line-clamp: 1; }
    .news-item-meta { margin-top: 5px; gap: 8px; }
    .news-date-separator { margin: 12px 0 6px; }

    .deep-card { grid-template-columns: 120px minmax(0, 1fr); gap: 12px; padding: 10px 4px; align-items: center; }
    .deep-card-thumb { width: 120px; height: 80px; }
    .deep-card-title { font-size: var(--fs-base); }
    .deep-card-excerpt { display: none; }

    /* 横滑的分类条出血到屏幕两侧：最右一个 Tab 被切在边缘，读者才知道还能往左滑 */
    .af-filter-bar { margin-inline: -16px; padding-inline: 16px; margin-bottom: 16px; }
    .af-item-link { padding: 14px 16px; }
    .af-item-title { font-size: var(--fs-md); }

    .single-news-content, .entry-content { font-size: var(--fs-md); }

    .news-card-btn { justify-content: center; }

    .card-download-btn.card-action-desktop { display: none; }
    .card-mobile-hint { display: flex; }

    .footer-notice { grid-template-columns: 1fr; gap: 14px; }
    .footer-bottom { flex-direction: column; align-items: flex-start; gap: 10px; }
    .footer-bottom-tag { margin-left: 0; }
    .footer-beian { flex-direction: column; align-items: flex-start; gap: 6px; }

    .section-title { font-size: var(--fs-md); }
}

@media (max-width: 480px) {
    .lang-switcher a { padding: 4px 9px; }
    .hero-card .hero-body { padding: 36px 14px 12px; }
    /* 无图版式靠标题撑场面，但窄屏放大到 28px 会占掉整格 */
    .hero-card-plain .hero-body { padding: 14px; }
    .hero-card-plain .hero-title { font-size: var(--fs-lg); }
}

/* ═══════════════════════════════════════════
   08-26 评审会 · 第 2 批：侧栏快讯 / 九宫格 / 活动六宫格 / 左侧分类悬浮条 /
   右侧悬浮工具条 / 移动端收纳
   ═══════════════════════════════════════════ */

/* ── 侧栏快讯：沿用 .news-list.is-compact，字号与行距再收一档 ── */
.rail-news { position: relative; }
.rail-news .sidebar-header { margin-bottom: 4px; }
.rail-news #ws-status { position: absolute; top: 18px; left: 116px; }
.rail-news-list .news-item { grid-template-columns: 40px minmax(0, 1fr); gap: 6px; padding: 8px 0; }
.rail-news-list .news-time-text { font-size: var(--fs-2xs); }
.rail-news-list .news-item-title { font-size: var(--fs-sm); line-height: 1.45; }
.rail-news-list .news-item-meta { margin-top: 4px; }
.rail-news-list .news-date-separator { margin: 8px 0 2px; }
.rail-news-more { padding: 10px 0 0; }
.rail-news-more .view-more-btn { width: 100%; justify-content: center; padding: 7px 0; }

/* ── 「发现」九宫格快捷入口（仿金色财经）：3 列图标 + 文字 ──
   08-29 起排侧栏首位、与主列 Banner 齐平，并带上「发现」标题头 */
.rail-quick { padding-bottom: 10px; }
.rail-quick .sidebar-header { margin-bottom: 6px; }
.quick-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px 4px; }
.quick-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 7px;
    padding: 10px 4px 8px;
    border-radius: var(--radius);
    color: var(--ink-2);
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}
.quick-item:hover { background: var(--paper-3); color: var(--ink); }
.quick-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    border-radius: var(--radius-xl);
    background: var(--paper-3);
    color: var(--ink);
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.quick-item:hover .quick-icon { background: var(--brand-tint); color: var(--brand-text); transform: translateY(-1px); }
/* 三个动作型入口（发布 / 下载 / 客服）按金色的做法用主色底 */
.quick-item.is-publish .quick-icon,
.quick-item.is-download .quick-icon,
.quick-item.is-contact .quick-icon { background: var(--brand); color: var(--on-brand); }
.quick-label { font-size: var(--fs-xs); font-weight: 600; white-space: nowrap; }

/* ── 活动六宫格：3×2，海报 16:9 完整显示（contain）+ 同图毛玻璃垫底 ── */
.home-events-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px 12px; }
.hev-card { display: flex; flex-direction: column; gap: 8px; min-width: 0; color: var(--ink); }
.hev-poster {
    position: relative;
    display: block;
    aspect-ratio: 16 / 9;
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--paper-3);
    isolation: isolate;
}
.hev-poster::before {
    content: '';
    position: absolute;
    inset: -12px;
    background: var(--hev-bg) center / cover no-repeat;
    filter: blur(14px) saturate(1.2);
    opacity: 0.85;
    z-index: 0;
}
.hev-poster.is-ph::before { display: none; }
.hev-poster img { position: relative; z-index: 1; width: 100%; height: 100%; object-fit: contain; display: block; }
.hev-poster-ph {
    position: relative; z-index: 1;
    display: flex; align-items: center; justify-content: center;
    width: 100%; height: 100%;
    font-size: 28px; font-weight: 800; color: var(--ink-4);
}
.hev-badge {
    position: absolute; z-index: 2; left: 8px; top: 8px;
    padding: 2px 8px; border-radius: 999px;
    font-size: var(--fs-2xs); font-weight: 700; letter-spacing: 0.04em;
    background: rgba(11, 15, 10, 0.72); color: #fff;
}
.hev-badge.is-live, .hev-badge.is-ongoing { background: var(--brand); color: var(--on-brand); }
.hev-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.hev-name {
    font-size: var(--fs-sm); font-weight: 700; line-height: 1.4;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.hev-card:hover .hev-name { color: var(--brand-text); }
.hev-meta { font-size: var(--fs-xs); color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ── 左侧分类悬浮条：固定在主列左外侧，滚过首屏后出现 ── */
.home-cat-rail {
    position: fixed;
    left: max(8px, calc(50vw - var(--container) / 2 - 116px));
    top: 50%;
    transform: translateY(-50%);
    z-index: 60;
    display: flex;
    flex-direction: column;
    gap: 4px;
    width: 102px;
    padding: 10px 6px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-md);
    animation: tf-fade-up 0.3s var(--ease-out) both;
}
.home-cat-rail[hidden] { display: none; }
.home-cat-rail-title {
    padding: 0 6px 6px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--ink-3);
    border-bottom: 1px solid var(--line-soft);
    margin-bottom: 2px;
}
.home-cat-rail-item {
    display: block;
    width: 100%;
    padding: 7px 6px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
    text-align: left;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
}
.home-cat-rail-item:hover { background: var(--paper-3); color: var(--ink); }
.home-cat-rail-item.is-active { background: var(--brand); color: var(--on-brand); }
.deep-list.is-loading { opacity: 0.45; pointer-events: none; transition: opacity var(--duration) var(--ease); }

/* ── 右侧悬浮工具条（仿金色财经）：一列 52px 的方格，桌面才有 ── */
.tf-side-tools {
    position: fixed;
    right: max(10px, calc(50vw - var(--container) / 2 - 66px));
    top: 38%;
    z-index: 90;
    display: flex;
    flex-direction: column;
    width: 52px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-md);
    overflow: visible;
}
.tf-st-item {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    width: 52px;
    height: 52px;
    color: var(--ink-3);
    border-bottom: 1px solid var(--line-soft);
    cursor: pointer;
    transition: color var(--duration) var(--ease), background var(--duration) var(--ease);
}
.tf-st-item:last-child { border-bottom: none; }
.tf-st-item:first-child { border-radius: 10px 10px 0 0; }
.tf-st-item:last-child { border-radius: 0 0 10px 10px; }
.tf-st-item:hover, .tf-st-item:focus-within { color: var(--brand-text); background: var(--brand-tint); }
.tf-st-item span { font-size: 10px; line-height: 1; white-space: nowrap; transform: scale(0.92); }
.tf-st-item[hidden] { display: none; }
/* App 格：悬浮弹出二维码 */
.tf-st-pop {
    position: absolute;
    right: calc(100% + 10px);
    top: 50%;
    transform: translateY(-50%) translateX(6px);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    width: 150px;
    padding: 12px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-md);
    color: var(--ink);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--duration) var(--ease), transform var(--duration) var(--ease), visibility 0s linear var(--duration);
}
.tf-st-pop::after { content: ''; position: absolute; left: 100%; top: 50%; margin-top: -6px; border: 6px solid transparent; border-left-color: var(--paper); }
.tf-st-pop strong { font-size: var(--fs-xs); }
.tf-st-pop small { font-size: var(--fs-2xs); color: var(--ink-3); }
.tf-st-pop a { font-size: var(--fs-2xs); color: var(--brand-text); }
.tf-st-app:hover .tf-st-pop, .tf-st-app:focus-within .tf-st-pop { opacity: 1; visibility: visible; transform: translateY(-50%) translateX(0); transition-delay: 0s; }
@media (max-width: 1080px) {
    .tf-side-tools { display: none; }
}

/* ── 移动端（≤768）：Header 只留 Logo + 搜索 + 汉堡；侧栏不显示；页脚简化；边距压缩 ── */
@media (max-width: 768px) {
    /* M1：全字标回来，其余入口进下拉菜单 */
    .site-logo .logo-lockup-en { display: block; height: 20px; }
    .site-logo .logo-lockup-mark { display: none; }
    .mobile-nav-toggle { display: flex; }
    .header-actions .header-contact,
    .header-actions .header-dl-link,
    .header-actions .header-login,
    .header-actions .user-menu,
    .header-actions .lang-switcher,
    .header-actions .theme-toggle { display: none; }

    .tf-mobile-menu {
        position: absolute;
        left: 12px;
        right: 12px;
        top: calc(var(--header-top-h) + 4px);
        z-index: 130;
        padding: 6px;
        background: var(--paper);
        border: 1px solid var(--line);
        border-radius: var(--radius-lg);
        box-shadow: var(--shadow-md);
    }
    .tf-mobile-menu[hidden] { display: none; }
    .tf-mm-user { display: flex; align-items: center; gap: 10px; padding: 10px 12px 8px; }
    .tf-mm-avatar { width: 32px; height: 32px; border-radius: 50%; }
    .tf-mm-name { font-weight: 700; font-size: var(--fs-sm); }
    .tf-mm-item {
        display: flex; align-items: center; gap: 10px;
        width: 100%; padding: 11px 12px;
        border-radius: var(--radius-sm);
        font-size: var(--fs-sm); font-weight: 600; color: var(--ink);
        text-align: left;
    }
    .tf-mm-item:hover { background: var(--paper-3); }
    .tf-mm-item.is-muted { color: var(--ink-3); font-weight: 500; }
    /* 语言区（09-02 重设计）：胶囊碎条换成「标题行 + 双列选项」。
       每项 44px 高的完整触区、边框分格，当前语言用品牌色底 + 对钩，
       一眼能看出「现在是哪个、还能选哪个」。 */
    .tf-mm-langs { padding: 10px 12px 12px; border-top: 1px solid var(--line-soft); margin-top: 4px; }
    .tf-mm-langs-head {
        display: flex; align-items: center; gap: 6px;
        margin-bottom: 8px;
        font-family: var(--font-mono);
        font-size: var(--fs-2xs); font-weight: 700;
        letter-spacing: 0.08em; text-transform: uppercase;
        color: var(--ink-3);
    }
    .tf-mm-langs-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    .tf-mm-langs .tf-mm-lang {
        display: flex; align-items: center; justify-content: space-between; gap: 6px;
        min-height: 44px; padding: 0 12px;
        border: 1px solid var(--line);
        border-radius: var(--radius);
        background: var(--paper);
        font-size: var(--fs-sm); font-weight: 600; color: var(--ink-2);
    }
    .tf-mm-langs .tf-mm-lang.active {
        border-color: var(--brand);
        background: var(--brand-tint);
        color: var(--brand-text);
        font-weight: 700;
    }
    .tf-mm-langs .tf-mm-lang svg { flex-shrink: 0; }

    /* M3：不显示桌面侧栏；首页只留主列（轮播 → 文章 → 专栏 → 活动） */
    .home-sidebar { display: none; }
    .home-cat-rail { display: none; }

    /* 活动六宫格手机版两列 */
    .home-events-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 10px; }

    /* M6：压缩边距与留白 */
    .home-layout { padding-top: 4px; }
    .home-main { gap: 10px; }
    .home-main > .home-section { padding: 12px 12px 8px; }
    .section-header { margin-bottom: 8px; }
    .colcar-card { padding: 10px; }

    /* M4：页脚简化（09-02 重设计）——整体居中的一段式页脚：
       标志 → 社媒图标 → 商店徽章 → 一行可折行的链接流 → 版权/备案。
       两栏链接矩阵在手机上是两根参差的细柱子，标题+列表的层级也读不动；
       改成扁平链接流后高度砍半，display:contents 不动 PHP 结构。 */
    .footer-grid { padding: 20px 0 4px; gap: 12px; }
    .footer-brand { display: flex; flex-direction: column; align-items: center; text-align: center; }
    .footer-brand-logo { margin-bottom: 0; }
    .footer-brand-logo .footer-lockup.logo-lockup-en { height: 22px; }
    .footer-brand-desc { display: none; }
    .footer-social { justify-content: center; margin-top: 10px; gap: 6px; }
    .footer-social-link { padding: 8px; }
    .footer-social-link span { display: none; }
    .footer-apps { margin-top: 10px; }
    .footer-apps-label { display: none; }
    .footer-apps-row { justify-content: center; }
    .tf-store-badge { height: 36px; }
    .footer-col[data-col="content"],
    .footer-col[data-col="channels"],
    .footer-col[data-col="open"] { display: none; }
    .footer-links { display: flex; flex-wrap: wrap; justify-content: center; row-gap: 2px; }
    .footer-col, .footer-col ul, .footer-col li { display: contents; }
    .footer-col h4 { display: none; }
    .footer-col a { display: inline-block; padding: 6px 10px; font-size: var(--fs-xs); color: var(--ink-3); }
    .footer-notice { display: none; }
    .footer-bottom {
        flex-direction: column; align-items: center; text-align: center;
        gap: 6px; padding: 10px 0 14px;
        font-size: var(--fs-2xs);
    }
    .footer-beian { flex-direction: row; flex-wrap: wrap; justify-content: center; gap: 10px; }
    .footer-bottom-langs { justify-content: center; }
    .footer-bottom-tag { display: none; }

    /* M7（09-02）：首页轮播 Banner 适配 ——
       ① 高度改按 16:9 比例走，不再是近乎方形的 300px 大块；
       ② 图片 contain 完整显示、比例不裁切，两侧留白用同图放大模糊垫底
          （颜色天然与主体相近，与活动海报 .evx-card-poster 同一手法）；
       ③ 摘要在这个高度里放不下，收起，标题与分类/时间保留。 */
    .hero-carousel { min-height: 0; aspect-ratio: 16 / 9; }
    .hero-card-lg { min-height: 0; }
    .hero-cover { isolation: isolate; background: #121a0a; }
    .hero-cover::before {
        content: '';
        position: absolute;
        inset: -16px;
        background: var(--hero-bg) center / cover no-repeat;
        filter: blur(18px) saturate(1.15);
        opacity: 0.9;
    }
    .hero-cover img { position: relative; z-index: 1; object-fit: contain; }
    .hero-excerpt { display: none; }
    .hero-card .hero-body { padding: 30px 14px 12px; }
}

/* ═══════════════════════════════════════════
   08-26 评审会 · 第 3 批：活动体系
   ═══════════════════════════════════════════ */

/* 活动卡海报：16:9 完整显示（contain）+ 同图毛玻璃垫底，非标比例不裁切 */
.evx-card-poster { isolation: isolate; }
.evx-card-poster:not(.is-ph)::before {
    content: '';
    position: absolute;
    inset: -14px;
    background: var(--evx-bg) center / cover no-repeat;
    filter: blur(16px) saturate(1.2);
    opacity: 0.85;
    z-index: 0;
}
/* 提高特异度：活动页原有的 .evx-card-poster img { object-fit: cover } 在文件更后面 */
.evx-card .evx-card-poster img { position: relative; z-index: 1; object-fit: contain; }
.evx-card-poster .evx-badge, .evx-card-poster .evx-series-tag { z-index: 2; }

/* 活动详情 hero：背景毛玻璃模糊；原图放到「活动介绍」顶部完整展示 */
.tf-ev-hero-bg { filter: blur(18px) saturate(1.15); transform: scale(1.08); }
.tf-ev-about-poster { margin: 0 0 18px; border-radius: var(--radius); overflow: hidden; background: var(--paper-3); }
.tf-ev-about-poster img { display: block; width: 100%; height: auto; }

/* Banner 四按钮：窄屏折两行 */
.tf-ev-cta-row { flex-wrap: wrap; }

/* 往期活动案例 */
/* 往期活动案例（08-31 按客户设计稿重排）：
   卡片是一张作品集条目，自上而下 序号 / 海报 / 标签行 / 标题 / 描述 / 成效 / 两格数据 / 图集链接。
   整卡有边框与内边距 —— 卡里信息层级多达六层，没有容器边界会和相邻卡糊成一片。 */
.case-filters { margin-top: 14px; display: flex; flex-direction: column; gap: 8px; }
.case-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px 16px; margin-top: 18px; }

.case-card {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-width: 0;
    padding: 10px 10px 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.case-card:hover { border-color: var(--brand-text); box-shadow: var(--shadow-sm); }

/* 序号：设计稿里压在卡片左上角，是作品集的编号而不是排名 */
.case-card-seq {
    position: absolute;
    top: 16px;
    left: 16px;
    z-index: 2;
    padding: 1px 7px;
    border-radius: var(--radius-sm);
    background: rgba(0, 0, 0, 0.55);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: #fff;
}

.case-card-open { display: block; width: 100%; padding: 0; border: none; background: none; cursor: pointer; text-align: left; }
.case-card-open .hev-poster { border-radius: var(--radius); }
.case-card-open:hover .hev-poster img { transform: scale(1.02); transition: transform var(--duration-slow) var(--ease); }

/* 城市水印：压在海报右下角，白字 + 半透明底，浅色海报上也读得出 */
.case-card-city {
    position: absolute;
    right: 10px;
    bottom: 10px;
    z-index: 2;
    padding: 2px 9px;
    border-radius: var(--radius-sm);
    background: rgba(0, 0, 0, 0.5);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: #fff;
}

/* 无照片：出「PHOTO PENDING」而不是假图 —— 设计稿第 9 张就是这个状态。
   撑满整个海报框并居中，否则文字会挤在左上角、被序号徽章压住。 */
.case-photo-pending {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: 0.14em;
    color: var(--ink-3);
}

.case-card-body { display: flex; flex-direction: column; gap: 5px; padding: 0 4px; }

.case-card-tags {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 1px;
}

.case-tag {
    padding: 1px 7px;
    border-radius: var(--radius-sm);
    font-size: var(--fs-2xs);
    font-weight: 700;
}

.case-tag.is-region { background: var(--hover-ink); color: var(--ink-2); }
.case-tag.is-type   { background: var(--brand-tint); color: var(--brand-text); }

/* 「CASE / OPEN ↗」：设计稿里靠右的那个提示，说明卡片可点开 */
.case-card-open-hint {
    margin-left: auto;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    letter-spacing: 0.06em;
    color: var(--ink-3);
}

.case-card:hover .case-card-open-hint { color: var(--brand-text); }

.case-card-name { font-size: var(--fs-md); font-weight: 700; line-height: 1.4; }
.case-card-meta { font-size: var(--fs-xs); color: var(--ink-3); }
.case-card-excerpt { font-size: var(--fs-sm); color: var(--ink-2); line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.case-card-note { font-size: var(--fs-xs); color: var(--ink-3); }
.case-card-partner { font-size: var(--fs-xs); color: var(--brand-text); font-weight: 600; }

/* 两格亮点数据：等分一行，上大数字下小标签 */
.case-card-stats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    margin-top: 8px;
    padding-top: 10px;
    border-top: 1px solid var(--line-soft);
}

.case-stat { display: flex; flex-direction: column; gap: 2px; min-width: 0; }

.case-stat b {
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--brand-text);
    line-height: 1.2;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.case-stat em {
    font-style: normal;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.case-card-gallery {
    margin-top: 8px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--brand-text);
}

.case-card-gallery:hover { text-decoration: underline; }

/* 底部「还有更多现场」 */
.case-more {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 26px;
    padding: 20px 22px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--panel);
}

.case-more-title { margin: 0 0 4px; font-size: var(--fs-md); font-weight: 700; color: var(--ink); }
.case-more-desc  { margin: 0; font-size: var(--fs-sm); color: var(--ink-2); line-height: 1.65; }

@media (max-width: 980px) {
    .case-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 640px) {
    .case-grid { grid-template-columns: minmax(0, 1fr); }
    .case-more { flex-direction: column; align-items: flex-start; }
}
.case-modal { position: fixed; inset: 0; z-index: 200; display: flex; align-items: center; justify-content: center; }
.case-modal[hidden] { display: none; }
.case-modal-panel {
    position: relative;
    width: min(760px, calc(100vw - 32px));
    max-height: calc(100vh - 48px);
    overflow: auto;
    padding: 28px;
    background: var(--paper);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg, 0 20px 60px rgba(0,0,0,0.3));
}
.case-detail h2 { font-size: var(--fs-xl); font-weight: 800; margin-bottom: 6px; }
.case-detail-poster { display: block; width: 100%; height: auto; margin: 14px 0 18px; border-radius: var(--radius); }

/* 上传活动：链接 + 识别按钮一行，海报预览 */
.tf-up-parse { flex: 0 0 auto; white-space: nowrap; }
.tf-up-preview { max-width: 360px; margin: -4px 0 14px; }
.tf-up-preview .hev-poster { border-radius: var(--radius); }

@media (max-width: 768px) {
    .case-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 10px; }
    .case-card-name { font-size: var(--fs-sm); }
    .case-modal-panel { padding: 18px; }
}

/* ═══════════════════════════════════════════
   08-26 评审会 · 第 4 批：Banner 背景/高度、融资筛选、行情 2:1、联系方式、兑换表单、头像
   ═══════════════════════════════════════════ */

/* 页面 Banner：后台配的背景图压一层深色，三档高度 */
.list-banner { position: relative; overflow: hidden; }
.list-banner.has-image::before {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--banner-img) center / cover no-repeat;
    opacity: 0.5;
    z-index: 0;
}
.list-banner.has-image::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, rgba(10, 14, 8, 0.82), rgba(10, 14, 8, 0.35));
    z-index: 0;
}
.list-banner.has-image .list-banner-glow { display: none; }
.list-banner .list-banner-inner { position: relative; z-index: 1; }
.list-banner.is-compact .list-banner-inner { padding-top: 8px; padding-bottom: 8px; }
.list-banner.is-compact .list-banner-desc { display: none; }
.list-banner.is-tall .list-banner-inner { padding-top: 38px; padding-bottom: 38px; min-height: 190px; align-items: flex-end; }

/* 融资页计数（搜索/赛道芯片工具条已随 09-01 左筛选栏改版下线） */
.evx-chip em { font-style: normal; opacity: 0.6; margin-left: 3px; font-size: var(--fs-2xs); }
.tf-fd-count { font-size: var(--fs-xs); color: var(--ink-3); margin: 0 0 8px; }

/* 行情页 2:1 */
.mkt-layout { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.mkt-side { display: flex; flex-direction: column; gap: var(--card-gap); min-width: 0; }
.mkt-search { margin: 6px 0 12px; max-width: 360px; }
.mkt-no-match { padding: 24px 0; }
.mkt-coin-icon { width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0; background: var(--paper); }
.mkt-board-tabs { display: flex; gap: 4px; margin-bottom: 8px; border-bottom: 1px solid var(--line-soft); }
.mkt-board-tab {
    padding: 6px 10px 8px;
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--ink-3);
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
}
.mkt-board-tab.is-active { color: var(--ink); border-bottom-color: var(--brand); }
.mkt-board-list { list-style: none; margin: 0; padding: 0; }
.mkt-board-list[hidden] { display: none; }
.mkt-board-row { display: flex; align-items: center; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--line-soft); }
.mkt-board-row:last-child { border-bottom: none; }
.mkt-board-row .mkt-coin-icon { width: 22px; height: 22px; }
.mkt-board-row .mkt-coin-mark { width: 22px; height: 22px; font-size: 10px; }
.mkt-board-name { display: flex; flex-direction: column; min-width: 0; flex: 1; line-height: 1.2; }
.mkt-board-name b { font-size: var(--fs-sm); }
.mkt-board-name small { font-size: var(--fs-2xs); color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mkt-board-price { font-family: var(--font-mono); font-size: var(--fs-xs); color: var(--ink-2); }
.mkt-board-val { font-family: var(--font-mono); font-size: var(--fs-xs); font-weight: 700; min-width: 64px; text-align: right; }
.mkt-board-val.is-up { color: var(--up); }
.mkt-board-val.is-down { color: var(--down); }
@media (max-width: 1080px) {
    .mkt-layout { grid-template-columns: 1fr; }
}

/* 客服二维码块（联系页 / 兑换弹层） */
.tf-support-qr {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 16px 0;
    padding: 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper-2, var(--paper));
}
.tf-support-qr img { width: 96px; height: 96px; border-radius: var(--radius-sm); background: #fff; padding: 4px; flex-shrink: 0; }
.tf-support-qr span { display: flex; flex-direction: column; gap: 3px; }
.tf-support-qr strong { font-size: var(--fs-sm); }
.tf-support-qr small { font-size: var(--fs-xs); color: var(--ink-3); }

/* 注册浮窗里的「扫码」隐藏交互：悬浮才展开二维码 */
.tf-login-qr-hint { margin: 10px 0 0; justify-content: center; }
.tf-login-qr-pop { left: 50%; transform: translate(-50%, 4px); width: 150px; align-items: center; text-align: center; display: flex; flex-direction: column; gap: 6px; }
.tf-risk:hover .tf-login-qr-pop, .tf-risk:focus-within .tf-login-qr-pop { transform: translate(-50%, 0); }
.tf-login-qr-pop .tf-qr-slot { width: 110px; height: 110px; }

/* 兑换弹层 */
.pt-modal-panel { width: min(520px, calc(100vw - 32px)); }

/* 个人资料：头像点击更换 */
.acc-profile-head { display: flex; gap: 22px; align-items: flex-start; margin-bottom: 8px; }
.acc-avatar-pick {
    position: relative;
    display: block;
    width: 120px;
    height: 120px;
    flex-shrink: 0;
    border-radius: 50%;
    overflow: hidden;
    cursor: pointer;
    background: var(--paper-3);
}
.acc-avatar-img { width: 120px; height: 120px; border-radius: 50%; object-fit: cover; display: block; }
.acc-avatar-overlay {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: #fff;
    background: rgba(10, 14, 8, 0.55);
    opacity: 0;
    transition: opacity var(--duration) var(--ease);
}
.acc-avatar-pick:hover .acc-avatar-overlay, .acc-avatar-pick:focus-within .acc-avatar-overlay { opacity: 1; }
.acc-profile-fields { flex: 1; min-width: 0; }
@media (max-width: 768px) {
    .acc-profile-head { flex-direction: column; align-items: center; }
    .acc-profile-fields { width: 100%; }
}

/* ═══════════════════════════════════════════
   08-26 评审会 · 第 5 批：微信分享、来源头像、AI 解读预留
   ═══════════════════════════════════════════ */
.tf-wx-share { color: #07C160; }
.tf-wx-panel { width: min(360px, calc(100vw - 32px)); text-align: center; }
.tf-wx-body { display: flex; flex-direction: column; align-items: center; gap: 10px; color: var(--ink); }
.tf-wx-body > svg { color: #07C160; }
.tf-wx-body h3 { font-size: var(--fs-md); font-weight: 800; margin: 0; }
.tf-wx-qr { width: 180px; height: 180px; padding: 8px; background: #fff; border: 1px solid var(--line-soft); border-radius: var(--radius); }
.tf-wx-qr[hidden] { display: none; }
.tf-wx-qr svg { width: 100%; height: 100%; display: block; }
.tf-wx-hint { font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.6; margin: 0; }

/* 来源 / 作者头像 */
.src-avatar { width: 18px; height: 18px; border-radius: 50%; object-fit: cover; background: var(--paper); flex-shrink: 0; vertical-align: -4px; margin-right: 4px; }
.src-avatar.is-ph { display: inline-flex; align-items: center; justify-content: center; font-size: 10px; font-weight: 800; color: var(--brand-text); background: var(--brand-tint); }
.deep-card-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; }
img.author-avatar { object-fit: cover; background: var(--paper); }

/* 快讯 AI 解读（预留） */
.news-ai-box { margin: 18px 0 4px; padding: 14px 16px; border: 1px solid var(--line); border-left: 3px solid var(--brand); border-radius: var(--radius); background: var(--paper-2, var(--paper)); }
.news-ai-head { display: flex; align-items: center; gap: 6px; font-size: var(--fs-xs); font-weight: 800; letter-spacing: 0.04em; color: var(--brand-text); margin-bottom: 8px; }
.news-ai-body { font-size: var(--fs-sm); line-height: 1.7; color: var(--ink-2); }
.news-ai-note { font-size: var(--fs-2xs); color: var(--ink-3); margin: 8px 0 0; }

/* ═══════════════════════════════════════════
   REDUCED MOTION
   ═══════════════════════════════════════════ */

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }

    .animate-in { opacity: 1; transform: none; }
    html { scroll-behavior: auto; }
}

/* ═══════════════════════════════════════════
   404 页（404.php）：状态说明 + 搜索 + 板块入口
   ═══════════════════════════════════════════ */

.tf-404 { padding: 72px 0 96px; text-align: center; }

.tf-404-code {
    font-family: var(--font-mono);
    font-size: var(--fs-xl);
    font-weight: 700;
    line-height: 1;
    color: var(--ink-3);
    letter-spacing: 0.04em;
}

.tf-404-title {
    margin-top: 14px;
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
}

.tf-404-desc {
    margin: 10px auto 0;
    max-width: 520px;
    font-size: var(--fs-base);
    line-height: 1.7;
    color: var(--ink-3);
}

.tf-404-search {
    display: flex;
    gap: 8px;
    max-width: 460px;
    margin: 24px auto 0;
}

.tf-404-input {
    flex: 1;
    min-width: 0;
    padding: 9px 14px;
    font-size: var(--fs-sm);
    color: var(--ink);
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius);
}

.tf-404-input:focus { outline: none; border-color: var(--brand-2); }

.tf-404-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 9px 18px;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--on-brand);
    background: var(--brand-2);
    border: none;
    border-radius: var(--radius);
    cursor: pointer;
}

.tf-404-links {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
    margin-top: 22px;
}

.tf-404-links a {
    padding: 6px 14px;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

.tf-404-links a:hover { color: var(--brand-text); border-color: var(--brand-2); }

/* ═══════════════════════════════════════════
   活动板块重构（版式参考金色财经活动频道）
   焦点轮播 / 活动专题图卡 / 三维筛选 / 海报卡片
   ═══════════════════════════════════════════ */

/* ── 焦点活动轮播：海报 + 深色信息板 ── */
.evx-hero {
    position: relative;
    margin: 0 0 var(--section-gap);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    overflow: hidden;
}

.evx-hero-slide {
    display: grid;
    grid-template-columns: 1.7fr 1fr;
    height: 340px;
}

/* display:grid 会盖过 UA 的 [hidden]{display:none}，显式补回 */
.evx-hero-slide[hidden] { display: none; }

.evx-hero-poster {
    position: relative;
    min-width: 0;
    min-height: 0;   /* 阻断图片自然高度撑大栅格行（否则内容溢出 340px 裁剪，CTA 被切掉） */
    background: var(--paper-3);
    overflow: hidden;
}

/* 海报按 contain 完整显示（活动海报常是竖版/方版，cover 会把标题日期裁掉），
   两侧留白用海报自身放大模糊后的底色填铺，颜色天然贴近、不出现死板灰边 */
.evx-hero-poster::before {
    content: '';
    position: absolute;
    inset: -6%;
    background-image: var(--poster-img);
    background-size: cover;
    background-position: center;
    filter: blur(48px) saturate(1.25);
    transform: scale(1.25);
}

.evx-hero-poster img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.evx-hero-panel {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
    padding: 24px 26px;
    background: linear-gradient(150deg, #131A0E, #1E2A14);
    color: #E6EDDD;
}

.evx-hero-title {
    font-size: var(--fs-lg);
    font-weight: 800;
    line-height: 1.35;
    color: #fff;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.evx-hero-excerpt {
    font-size: var(--fs-sm);
    line-height: 1.65;
    color: rgba(230, 237, 221, 0.75);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.evx-hero-meta {
    display: flex;
    flex-direction: column;
    gap: 6px;
    font-size: var(--fs-xs);
    color: rgba(230, 237, 221, 0.85);
}

.evx-hero-meta span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
}

.evx-hero-meta svg { color: var(--brand); flex-shrink: 0; }

.evx-hero-cta {
    margin-top: auto;
    padding: 8px 18px;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: #131A0E;
    background: var(--brand);
    border-radius: var(--radius);
    transition: background var(--duration) var(--ease);
}

.evx-hero-slide:hover .evx-hero-cta { background: #B5F53A; }

.evx-hero-dots {
    position: absolute;
    left: 20px;
    bottom: 16px;
    display: flex;
    gap: 6px;
}

.evx-hero-dot {
    width: 18px;
    height: 4px;
    padding: 0;
    border: none;
    border-radius: 2px;
    background: rgba(255, 255, 255, 0.45);
    cursor: pointer;
    transition: background var(--duration) var(--ease);
}

.evx-hero-dot.active { background: var(--brand); }

/* ── 活动专题条（系列聚合图卡） ── */
.evx-series {
    margin: 0 0 var(--section-gap);
}

.evx-series-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 10px;
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--ink);
}

.evx-series-track {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: 230px;   /* 固定卡宽：单系列时不被拉成整行 */
    gap: 12px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    padding-bottom: 4px;
}

.evx-series-card {
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    align-items: flex-start;
    gap: 2px;
    height: 88px;
    padding: 12px 14px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: linear-gradient(135deg, #1E2A14, #2C3D1D) center/cover no-repeat;
    cursor: pointer;
    overflow: hidden;
    scroll-snap-align: start;
    text-align: left;
}

.evx-series-card::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(0,0,0,0.05), rgba(0,0,0,0.62));
    transition: background var(--duration) var(--ease);
}

.evx-series-card:hover::before { background: linear-gradient(180deg, rgba(0,0,0,0), rgba(0,0,0,0.5)); }

.evx-series-card.active { outline: 2px solid var(--brand); outline-offset: -2px; }

.evx-series-name {
    position: relative;
    font-size: var(--fs-base);
    font-weight: 800;
    color: #fff;
    text-shadow: 0 1px 3px rgba(0,0,0,0.5);
}

.evx-series-count {
    position: relative;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: rgba(255,255,255,0.85);
}

/* ── 活动全览工具条：标题 + 搜索 + 地图找会 ── */
.evx-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    margin: 0 0 14px;
    padding-bottom: 10px;
    border-bottom: 1px solid var(--line);
}

.evx-toolbar-title { font-size: var(--fs-md); font-weight: 800; color: var(--ink); }

.evx-toolbar-actions {
    display: flex;
    align-items: center;
    gap: 10px;
}

.evx-search {
    display: flex;
    align-items: center;
    gap: 7px;
    width: 260px;
    padding: 7px 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    color: var(--ink-3);
}

.evx-search input {
    flex: 1;
    min-width: 0;
    border: none;
    background: none;
    font-size: var(--fs-sm);
    color: var(--ink);
}

.evx-search input:focus { outline: none; }
.evx-search:focus-within { border-color: var(--brand-2); }

.evx-map-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 14px;
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    background: var(--panel);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    cursor: pointer;
    transition: all var(--duration) var(--ease);
    white-space: nowrap;
}

.evx-map-btn:hover { border-color: var(--brand-2); color: var(--ink); }

.evx-map-btn.active {
    background: var(--brand);
    border-color: var(--brand);
    color: #131A0E;
}

/* ── 三维筛选行（时间 / 类型 / 地点） ── */
.evx-filters { margin: 0 0 18px; }

.evx-filter-row {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    padding: 5px 0;
}

.evx-filter-label {
    flex-shrink: 0;
    width: 44px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-3);
}

.evx-chip {
    padding: 4px 13px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-2);
    background: none;
    border: none;
    border-radius: var(--radius);
    cursor: pointer;
    transition: all var(--duration) var(--ease);
}

.evx-chip:hover { color: var(--brand-text); }

.evx-chip.active {
    background: var(--brand);
    color: #131A0E;
}

/* ── Chip 横滑条（08-31，先用在融资页赛道）──
   赛道有十几个，flex-wrap 会把筛选行折成两行、下方整张表跟着下沉；选中不同赛道
   时行高还会变，表格上沿忽上忽下。改成恒定一行：track 横向滚动，两端箭头只在真
   的还有内容时出现（.can-prev / .can-next 由 main.js 按 scrollLeft 挂）。 */
.tf-chipscroll {
    position: relative;
    display: flex;
    align-items: center;
    flex: 1;
    min-width: 0;
}

.tf-chipscroll-track {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
    min-width: 0;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-behavior: smooth;
    overscroll-behavior-x: contain;
    scrollbar-width: none;
    -ms-overflow-style: none;
}

.tf-chipscroll-track::-webkit-scrollbar { display: none; }

.tf-chipscroll-track .evx-chip {
    flex-shrink: 0;
    white-space: nowrap;
}

/* 两端渐隐：告诉用户这行还没到头，也让箭头底下的 chip 不至于被硬切一半 */
.tf-chipscroll.can-prev .tf-chipscroll-track {
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 46px);
    mask-image: linear-gradient(90deg, transparent 0, #000 46px);
}

.tf-chipscroll.can-next .tf-chipscroll-track {
    -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 46px), transparent 100%);
    mask-image: linear-gradient(90deg, #000 calc(100% - 46px), transparent 100%);
}

.tf-chipscroll.can-prev.can-next .tf-chipscroll-track {
    -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 46px, #000 calc(100% - 46px), transparent 100%);
    mask-image: linear-gradient(90deg, transparent 0, #000 46px, #000 calc(100% - 46px), transparent 100%);
}

.tf-chipscroll-nav {
    position: absolute;
    top: 50%;
    z-index: 2;
    display: none;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    margin-top: -13px;
    padding: 0;
    color: var(--ink-3);
    background: var(--bg);
    /* 边框用 --line 不用 --line-2：暗色下 --line-2 与页面底几乎同色，按钮会整个化进渐隐里 */
    border: 1px solid var(--line);
    border-radius: var(--radius-full);
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
    cursor: pointer;
    transition: color var(--duration) var(--ease), border-color var(--duration) var(--ease);
}

.tf-chipscroll-nav.is-prev { left: -4px; }
.tf-chipscroll-nav.is-next { right: -4px; }

.tf-chipscroll.can-prev .tf-chipscroll-nav.is-prev,
.tf-chipscroll.can-next .tf-chipscroll-nav.is-next { display: inline-flex; }

.tf-chipscroll-nav:hover { color: var(--brand-text); border-color: var(--brand-text); }
.tf-chipscroll-nav:focus-visible { outline: 2px solid var(--brand-text); outline-offset: 2px; }

/* 触屏直接横滑，箭头没有存在意义，反而压住第一个 chip */
@media (hover: none) {
    .tf-chipscroll-nav { display: none !important; }
    .tf-chipscroll.can-prev .tf-chipscroll-track,
    .tf-chipscroll.can-next .tf-chipscroll-track,
    .tf-chipscroll.can-prev.can-next .tf-chipscroll-track {
        -webkit-mask-image: none;
        mask-image: none;
    }
}

@media (prefers-reduced-motion: reduce) {
    .tf-chipscroll-track { scroll-behavior: auto; }
}

/* ── 海报卡片网格（金色式） ── */
.evx-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
}

.evx-card {
    display: flex;
    flex-direction: column;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    overflow: hidden;
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}

.evx-card:hover {
    border-color: var(--brand-2);
    box-shadow: var(--shadow-sm);
}

.evx-card.is-ended { opacity: 0.68; }

.evx-card-poster {
    position: relative;
    aspect-ratio: 16 / 9;
    background: var(--paper-3);
    overflow: hidden;
}

.evx-card-poster img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-slow) var(--ease);
}

.evx-card:hover .evx-card-poster img { transform: scale(1.03); }
.evx-card.is-ended .evx-card-poster img { filter: grayscale(0.6); }

/* 无海报的活动：不撑出 16:9 的空图位，收成一条只承载角标的窄带。
   站点不放任何占位图 —— 没图就少一块，别拿品牌符号冒充配图。 */
.evx-card-poster.is-ph {
    aspect-ratio: auto;
    height: 30px;
    background: var(--paper-3);
}

.evx-card-poster.is-ph .evx-series-tag { top: 4px; }

/* 状态角标（金色式：海报左上） */
.evx-badge {
    position: absolute;
    top: 0;
    left: 0;
    padding: 3px 10px;
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--paper);
    border-radius: 0 0 var(--radius) 0;
}

/* 状态底色全走语义令牌：品牌绿上用深字（白字只有 2.4:1），
   报名中/即将开始用 --warn，已结束用 --ink-3，字色随主题取纸色 */
.evx-badge.is-live  { background: var(--brand); color: var(--on-brand); }
.evx-badge.is-soon,
.evx-badge.is-open  { background: var(--warn); }
.evx-badge.is-ended { background: var(--ink-3); }

/* Hero 信息板里的状态徽章相对定位即可 */
.evx-hero-panel .evx-badge {
    position: static;
    border-radius: var(--radius-sm);
}

.evx-series-tag {
    position: absolute;
    top: 8px;
    right: 8px;
    padding: 2px 9px;
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: #fff;
    background: rgba(0, 0, 0, 0.62);
    border-radius: var(--radius-sm);
    backdrop-filter: blur(4px);
}

.evx-card-body {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 9px 12px 10px;
}

.evx-card-title {
    font-size: var(--fs-base);
    font-weight: 700;
    line-height: 1.4;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.evx-card:hover .evx-card-title { color: var(--brand-text); }

.evx-card-loc,
.evx-card-date {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.evx-card-date { font-variant-numeric: tabular-nums; }
.evx-card-days { color: var(--ink-3); }

.evx-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: 4px;
    padding-top: 9px;
    border-top: 1px solid var(--line-soft);
}

.evx-cat-tag {
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--brand-text);
}

.evx-organizer {
    font-size: var(--fs-xs);
    color: var(--ink-3);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* 采集来源说明：列表末尾与详情页信息卡各一处，注明会期/海报的出处 */
.evx-source-note,
.tf-ev-source-note {
    margin: 16px 0 0;
    font-size: var(--fs-xs);
    line-height: 1.6;
    color: var(--ink-3);
}

.tf-ev-source-note {
    margin-top: 12px;
    padding-top: 10px;
    border-top: 1px solid var(--line-soft);
}

/* ── 响应式 ── */
@media (max-width: 900px) {
    .evx-hero-slide { grid-template-columns: 1fr; height: auto; }
    .evx-hero-poster { aspect-ratio: 16 / 8; }
    .evx-grid { grid-template-columns: repeat(2, 1fr); }
    .evx-toolbar { flex-direction: column; align-items: stretch; }
    .evx-toolbar-actions { justify-content: space-between; }
    .evx-search { flex: 1; width: auto; }
}

@media (max-width: 600px) {
    /* 09-02：600 以下维持双列（此前退成单列，95 场活动排成 3.4 万像素长页，
       一屏只看得到一张卡）。每列 ~172px：标题两行截断、主办方让位隐藏 */
    .evx-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 10px; }
    .evx-card-body { gap: 3px; padding: 8px 10px 9px; }
    .evx-card-title {
        font-size: 13.5px;
        line-height: 1.35;
        /* nowrap 椭圆在 172px 列里截得太狠，改两行盒 */
        white-space: normal;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .evx-card-loc, .evx-card-date { font-size: 11px; }
    .evx-card-foot { margin-top: 3px; padding-top: 7px; }
    .evx-organizer { display: none; }
    .evx-cat-tag { font-size: 11px; }
    /* 注意：不要给 .evx-filter-label 设 width:100% —— 768px 断点的筛选行是
       nowrap 横滑，label 占满整行会把所有 chip 推到视口外 */
    .evx-series-track { grid-auto-columns: minmax(150px, 60%); }
}

/* ── 活动详情页：主办方外链报名卡 + 前后场导航 ── */
.tf-ev-reg-countdown {
    display: flex;
    align-items: center;
    gap: 6px;
    margin: 0 0 12px;
    font-size: var(--fs-sm);
    color: var(--brand-text);
}

.tf-ev-reg-cta {
    display: block;
    text-align: center;
    width: 100%;
}

.tf-ev-reg-site {
    display: block;
    text-align: center;
    width: 100%;
    margin-top: 8px;
}

.evd-adjacent {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
    margin-top: 20px;
}

.evd-adjacent-link {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 12px 16px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--paper);
    transition: border-color var(--duration) var(--ease);
}

.evd-adjacent-link:hover { border-color: var(--brand-2); }
.evd-adjacent-link.is-next { text-align: right; align-items: flex-end; }
.evd-adjacent-link.is-prev:only-child { grid-column: 1; }
.evd-adjacent-link.is-next:only-child { grid-column: 2; }

.evd-adjacent-label {
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-3);
}

.evd-adjacent-name {
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
}

.evd-adjacent-link:hover .evd-adjacent-name { color: var(--brand-text); }

@media (max-width: 600px) {
    .evd-adjacent { grid-template-columns: 1fr; }
    .evd-adjacent-link.is-next:only-child { grid-column: 1; }
}

/* ═══════════════════════════════════════════
   首页侧栏：今日大事件 + 24 小时热文（对标金色财经）
   ═══════════════════════════════════════════ */

/* ── 今日大事件：时间标签 + 标题列表 ── */
.bigevents-list {
    display: flex;
    flex-direction: column;
    padding: 4px 0 8px;
    list-style: none;
    margin: 0;
}

/* 用 grid 而不是 flex：条目有的带时间、有的不带，flex 下不带时间的那条
   文字会顶到最左，和带时间的那条对不齐（截图里就是这个毛病）。
   固定时间列宽后，无论有没有时间，标题都从同一条竖线开始。 */
.bigevents-item {
    display: grid;
    grid-template-columns: 40px minmax(0, 1fr);
    align-items: baseline;
    gap: 10px;
    padding-block: 7px;
    border-bottom: none;
}

/* 无时间的条目：标题直接落到第 2 列，与带时间的条目左对齐。
   圆点交给下面既有的 .bigevents-title:first-child::before 画 ——
   之前在这里又加了一个 li::before，结果同一行出现两个点。 */
.bigevents-item:not(:has(.bigevents-time)) .bigevents-title { grid-column: 2; }

.bigevents-item:last-child { border-bottom: none; }

.bigevents-time {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--brand-text);
    text-align: left;
}

.bigevents-title {
    font-size: var(--fs-sm);
    line-height: 1.55;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

a.bigevents-title { transition: color var(--duration) var(--ease); }
a.bigevents-title:hover { color: var(--brand-text); }

/* 无时间标签的条目：小圆点顶格对齐 */
.bigevents-item > .bigevents-title:first-child::before {
    content: '';
    display: inline-block;
    width: 5px;
    height: 5px;
    margin-right: 8px;
    border-radius: 50%;
    background: var(--brand-2);
    vertical-align: middle;
}

/* ═══════════════════════════════════════════
   侧栏市场情绪（R14）：恐慌贪婪指数 + 24h 资金流进流出

   币价列表整体下线后，纪要点名保留的就剩这两项。指数用一根 0–100 的
   进度条表达"现在站在哪一档"，比单摆一个数字直观；资金流是两行数值，
   正负分别走 --up / --down，不额外画图表。
   ═══════════════════════════════════════════ */
.pulse-fng {
    padding-block: 12px 10px;
    border-bottom: 1px solid var(--line-soft);
}

.pulse-fng-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
}

.pulse-fng-name {
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.pulse-fng-value {
    font-family: var(--font-mono);
    font-size: var(--fs-lg);
    font-weight: 700;
    line-height: 1.1;
    color: var(--pulse-tone, var(--ink-1));
}

.pulse-fng-bar {
    position: relative;
    height: 6px;
    margin: 8px 0 6px;
    border-radius: 999px;
    /* 底槽画出五档光谱，填充条的宽度即当前读数落点 */
    background: linear-gradient(90deg, #DC2626, #F59E0B, #A3A3A3, #84CC16, #16A34A);
    opacity: 0.28;
}

.pulse-fng-fill {
    position: absolute;
    top: -2px;
    left: 0;
    height: 10px;
    border-right: 2px solid var(--pulse-tone, var(--ink-1));
    border-radius: 2px;
}

.pulse-fng-label {
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--pulse-tone, var(--ink-2));
}

/* 五档配色：极度恐惧 → 极度贪婪 */
.pulse-fng.is-ef { --pulse-tone: #DC2626; }
.pulse-fng.is-f  { --pulse-tone: #EA580C; }
.pulse-fng.is-n  { --pulse-tone: #6B7280; }
.pulse-fng.is-g  { --pulse-tone: #4D9A1B; }
.pulse-fng.is-eg { --pulse-tone: #16A34A; }

.pulse-flows { padding-block: 10px 12px; }

.pulse-flows-title {
    margin: 0 0 6px;
    font-size: var(--fs-2xs);
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--ink-3);
}

.pulse-flow-item {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    padding: 5px 0;
}

.pulse-flow-name {
    font-size: var(--fs-xs);
    color: var(--ink-2);
    min-width: 0;
}

.pulse-flow-nums {
    flex-shrink: 0;
    display: flex;
    align-items: baseline;
    gap: 6px;
    font-family: var(--font-mono);
}

.pulse-flow-nums.is-up   { color: var(--up); }
.pulse-flow-nums.is-down { color: var(--down); }

.pulse-flow-delta { font-size: var(--fs-sm); font-weight: 700; }
.pulse-flow-pct   { font-size: var(--fs-2xs); opacity: 0.85; }

@media (max-width: 768px) {
    .pulse-flow-item { flex-wrap: wrap; gap: 2px; }
    .pulse-flow-nums { margin-left: auto; }
}

/* ── 侧栏行业日历：日期 + 时间 + 一句话标题（接替下线的行情卡位置）── */
.sidecal-list {
    display: flex;
    flex-direction: column;
    padding: 4px 0 8px;
    list-style: none;
    margin: 0;
}

.sidecal-item {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding-block: 8px;
    border-bottom: 1px solid var(--line-soft);
}

.sidecal-item:last-child { border-bottom: none; }

.sidecal-when {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    font-family: var(--font-mono);
}

.sidecal-date { font-size: var(--fs-xs); font-weight: 700; color: var(--brand-text); }
.sidecal-time { font-size: var(--fs-2xs); color: var(--ink-3); }

/* 解锁与宏观用左侧色条区分，不额外占一行标签 */
.sidecal-item.is-unlock .sidecal-date { color: var(--warn, #c98a1a); }

.sidecal-title {
    font-size: var(--fs-sm);
    line-height: 1.55;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ── 24 小时热文：排名榜 ── */
.hot-articles-list {
    display: flex;
    flex-direction: column;
    padding: 4px 0 8px;
    list-style: none;
    margin: 0;
    counter-reset: none;
}

.hot-article-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding-block: 8px;
    border-radius: var(--radius-sm);
    transition: background var(--duration) var(--ease);
}

.hot-article-item:hover { background: var(--row-hover); }

.hot-article-rank {
    flex-shrink: 0;
    width: 18px;
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 800;
    text-align: left;
    color: var(--ink-3);
    line-height: 1.5;
}

.hot-article-rank.top { color: var(--down); }

.hot-article-link {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
}

.hot-article-title {
    font-size: var(--fs-sm);
    line-height: 1.5;
    color: var(--ink-2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color var(--duration) var(--ease);
}

.hot-article-item:hover .hot-article-title { color: var(--brand-text); }

.hot-article-views {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.hot-article-views svg { opacity: 0.7; }

/* ═══════════════════════════════════════════
   侧栏信息密度（08-31）
   原来每块都只有「一行标题」，读者扫过去分不出轻重缓急。这里给每块补上
   第二层真实信息（分类 / 时间 / 热度 / 类型 / 金额），排版规则统一：
   主行是内容本身，副行是等宽小字的元信息，颜色降到 --ink-3。
   ═══════════════════════════════════════════ */

/* 副行：所有块共用的元信息行 */
.hot-article-meta,
.hotsearch-meta,
.sidecal-meta,
.funding-sub {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px 8px;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.hot-article-meta { margin-top: 3px; }

/* 分类芯片：沿用快讯分类标签的形态，但收到更小一档 */
.hot-article-cat {
    padding: 1px 6px;
    border-radius: var(--radius-sm);
    background: var(--paper-3);
    color: var(--ink-2);
    font-size: var(--fs-2xs);
    line-height: 1.7;
}

.hot-article-time { font-family: var(--font-mono); }

/* ── 热搜：词 + 真实热度（近 7 天搜索次数 / 站内条目数 / 热度条）── */
.hotsearch-main {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    flex: 1;
}

/* 一行里的每个热度数（报道量 / 搜索次数 / 相关条数）。
   这些串是「近 48 小时 2 条报道」这种中英混排，整串上等宽字会把汉字拉得松散，
   只开表格数字（tnum）就够：数字仍然等宽对齐，汉字保持正文字距。 */
.hotsearch-stat { font-variant-numeric: tabular-nums; }

.hotsearch-stat + .hotsearch-stat::before {
    content: '·';
    margin-right: 6px;
    color: var(--ink-3);
}

/* 词与角标一行；整行的点击目标是搜索页，标题行另有自己的链接 */
.hotsearch-link {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.hotsearch-link:hover .hotsearch-term { color: var(--brand-text); }

/* 趋势角标：up 用行情红取「热」的语义（与榜首序号同色），down 收成弱灰不喧宾夺主 */
.hotsearch-trend {
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    line-height: 1;
}

.hotsearch-trend.is-up { color: var(--down); }
.hotsearch-trend.is-down { color: var(--ink-3); font-weight: 600; }

.hotsearch-trend.is-new {
    padding: 2px 5px;
    border-radius: var(--radius-sm);
    background: rgba(160, 238, 4, 0.18);
    color: var(--brand-text);
    letter-spacing: 0.02em;
}

/* 词底下挂一条最新相关报道：让「为什么热」在榜里就能读到 */
.hotsearch-latest {
    display: flex;
    align-items: baseline;
    gap: 6px;
    min-width: 0;
    font-size: var(--fs-2xs);
    line-height: 1.5;
    color: var(--ink-3);
}

.hotsearch-latest-title {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.hotsearch-latest:hover .hotsearch-latest-title { color: var(--brand-text); }

.hotsearch-latest-time {
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
    color: var(--ink-3);
}

/* 夹在热度数字与最新报道之间，两边各留一点空，别贴成标题的下划线 */
.hotsearch-main > .hotsearch-bar { margin: 3px 0 4px; }

/* 热度条是辅助刻度不是主角：短一点、细一点，别把整行拉成进度条 */
.hotsearch-bar {
    display: block;
    width: 96px;
    max-width: 100%;
    height: 2px;
    border-radius: 2px;
    background: var(--line-soft);
    overflow: hidden;
}

.hotsearch-bar > span {
    display: block;
    height: 100%;
    border-radius: 2px;
    background: linear-gradient(90deg, var(--brand), var(--brand-text));
}

/* ── 侧栏日历：标题下补类型 / 代币 / 解锁市值 / 国家 / 重要度 ── */
.sidecal-item { align-items: flex-start; }
.sidecal-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.sidecal-meta { margin-top: 1px; }

.sidecal-kind {
    padding: 1px 6px;
    border-radius: var(--radius-sm);
    background: var(--paper-3);
    color: var(--ink-2);
    line-height: 1.7;
}

.sidecal-kind.is-unlock { background: rgba(201, 138, 26, 0.14); color: #a06f14; }
.sidecal-kind.is-macro  { background: var(--brand-tint); color: var(--brand-text); }

.sidecal-symbol { font-family: var(--font-mono); font-weight: 700; color: var(--ink-2); }
.sidecal-usd    { font-family: var(--font-mono); color: var(--ink-2); }

/* 重要度：两颗点，与日历页的星级同源但更窄 */
.sidecal-imp { display: inline-flex; gap: 2px; }
.sidecal-imp i {
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--line);
}
.sidecal-imp i.on { background: var(--down); }

/* ── 融资：领投行之下再补赛道与日期 ── */
.funding-sub { margin-top: 2px; }
.funding-date { font-family: var(--font-mono); }
.funding-sector {
    padding: 1px 6px;
    border-radius: var(--radius-sm);
    background: var(--paper-3);
    color: var(--ink-2);
    line-height: 1.7;
}

/* ── 侧栏快讯：放开摘要（两行）──
   列表页的紧凑流默认收起摘要是为了「一屏多条」，侧栏只有 5 条，
   省下的高度换不来什么，反而让每条只剩一个光秃秃的标题。 */
.news-list.is-compact.rail-news-list .news-item-body {
    display: -webkit-box;
    margin-top: 3px;
    font-size: var(--fs-xs);
    line-height: 1.55;
    color: var(--ink-3);
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* 摘要放开后标题不再需要单行截断——两行标题比截断成半句更好读 */
.rail-news-list .news-item-title {
    -webkit-line-clamp: 2;
}

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .sidecal-kind.is-unlock { background: rgba(201, 138, 26, 0.2); color: #e0a63a; }
}

:root[data-theme="dark"] .sidecal-kind.is-unlock { background: rgba(201, 138, 26, 0.2); color: #e0a63a; }

/* ═══════════════════════════════════════════
   申请状态条（专栏申请 / 办会申请共用）
   提交完没有下文是这两条流程最伤的一处：状态条把「收到了、在审、已上架」
   摆回用户面前，重复提交与追问因此消失。
   ═══════════════════════════════════════════ */

.tf-appstatus {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin: 0 0 20px;
    padding: 14px 16px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-left: 3px solid var(--ink-4);
    border-radius: var(--radius);
}

.tf-appstatus.is-pending   { border-left-color: var(--warn, #c98a1a); }
.tf-appstatus.is-done      { border-left-color: var(--brand); }
.tf-appstatus.is-dismissed { border-left-color: var(--ink-4); }

.tf-appstatus-badge {
    flex-shrink: 0;
    padding: 3px 9px;
    border-radius: 999px;
    background: var(--paper-3);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--ink-2);
    white-space: nowrap;
}

.tf-appstatus.is-pending .tf-appstatus-badge { background: var(--warn-tint, #fdf3e0); color: var(--warn, #c98a1a); }
.tf-appstatus.is-done .tf-appstatus-badge    { background: var(--brand-tint); color: var(--brand-text); }

.tf-appstatus-text {
    font-size: var(--fs-sm);
    line-height: 1.65;
    color: var(--ink-2);
}

/* ═══════════════════════════════════════════
   专栏作者工作台（/columnist/）
   ═══════════════════════════════════════════ */

.cwd-section { padding: 28px 0 56px; }

.cwd-hero {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 18px 20px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
}

.cwd-hero-body { flex: 1; min-width: 0; }

.cwd-hero-name {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: var(--fs-lg);
    font-weight: 800;
    color: var(--ink);
}

.cwd-verified {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 17px;
    height: 17px;
    border-radius: 50%;
    background: var(--brand);
    color: var(--on-brand);
    font-size: var(--fs-2xs);
    font-weight: 700;
}

.cwd-hero-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-top: 6px;
    font-size: var(--fs-sm);
    color: var(--ink-3);
}

.cwd-hero-meta a { color: var(--brand-text); }
.cwd-hero-dot { color: var(--ink-4); }

/* 发布档位是作者最需要一眼确认的事：直发还是送审 */
.cwd-tier {
    padding: 2px 9px;
    border-radius: 999px;
    font-size: var(--fs-xs);
    font-weight: 700;
}

.cwd-tier.is-direct { background: var(--brand-tint); color: var(--brand-text); }
.cwd-tier.is-review { background: var(--paper-3);    color: var(--ink-2); }

.cwd-stats {
    display: flex;
    gap: 20px;
    flex-shrink: 0;
}

.cwd-stat {
    display: flex;
    flex-direction: column;
    gap: 2px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
    text-align: center;
}

.cwd-stat strong {
    font-family: var(--font-mono);
    font-size: var(--fs-lg);
    font-weight: 700;
    color: var(--ink);
}

.cwd-tabs {
    display: flex;
    gap: 4px;
    margin: 18px 0 14px;
    overflow-x: auto;
    scrollbar-width: none;
}

.cwd-tabs::-webkit-scrollbar { display: none; }

.cwd-tab {
    flex-shrink: 0;
    padding: 8px 14px;
    border-radius: var(--radius);
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink-2);
    white-space: nowrap;
    transition: all var(--duration) var(--ease);
}

.cwd-tab:hover { background: var(--paper-3); color: var(--ink); }
.cwd-tab.is-active { background: var(--brand); color: var(--on-brand); }

.cwd-msg {
    margin: 0 0 14px;
    padding: 10px 14px;
    border-radius: var(--radius);
    font-size: var(--fs-sm);
}

.cwd-msg.is-ok  { background: var(--brand-tint); color: var(--brand-text); }
.cwd-msg.is-err { background: var(--down-tint);  color: var(--down); }

.cwd-panel {
    padding: 20px 22px;
    background: var(--paper);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
}

.cwd-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 22px;
}

.cwd-sub {
    margin: 0 0 10px;
    font-size: var(--fs-base);
    font-weight: 700;
    color: var(--ink);
}

.cwd-empty {
    padding: 22px 0;
    font-size: var(--fs-sm);
    color: var(--ink-3);
}

.cwd-list { list-style: none; margin: 0; padding: 0; }

.cwd-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 11px 0;
    border-bottom: 1px solid var(--line-soft);
}

.cwd-item:last-child { border-bottom: none; }

.cwd-item-status {
    flex-shrink: 0;
    min-width: 62px;
    padding: 2px 8px;
    border-radius: 999px;
    background: var(--paper-3);
    font-size: var(--fs-xs);
    font-weight: 700;
    color: var(--ink-3);
    text-align: center;
}

.cwd-item-status.is-publish { background: var(--brand-tint);          color: var(--brand-text); }
.cwd-item-status.is-pending { background: var(--warn-tint, #fdf3e0);  color: var(--warn, #c98a1a); }

.cwd-item-title {
    flex: 1;
    min-width: 0;
    font-size: var(--fs-base);
    font-weight: 600;
    color: var(--ink);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    transition: color var(--duration) var(--ease);
}

.cwd-item-title:hover { color: var(--brand-text); }

.cwd-item-time {
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

.cwd-item-ops {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: var(--fs-xs);
}

.cwd-item-ops a { color: var(--ink-3); }
.cwd-item-ops a:hover { color: var(--brand-text); }
.cwd-item-ops form { display: inline; }

/* 删除按钮排在一串文字链接里，外观也按链接走，不做成实心按钮 */
.cwd-linkbtn {
    padding: 0;
    background: none;
    border: none;
    font-size: var(--fs-xs);
    font-family: inherit;
    color: var(--ink-3);
    cursor: pointer;
}

.cwd-linkbtn:hover { color: var(--down); }

.cwd-form { max-width: 780px; }

.cwd-form-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin-top: 16px;
}

.cwd-form-link { font-size: var(--fs-sm); color: var(--ink-3); }
.cwd-form-link:hover { color: var(--brand-text); }

/* 正文框：等宽字体 + 足够行距，长稿在里面写不至于难受 */
.cwd-editor {
    min-height: 380px;
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    line-height: 1.75;
}

.cwd-note-hint {
    margin: 0 0 16px;
    padding: 10px 12px;
    background: var(--paper-3);
    border-radius: var(--radius);
    font-size: var(--fs-xs);
    line-height: 1.6;
    color: var(--ink-3);
}

.cwd-notes { list-style: none; margin: 18px 0 0; padding: 0; }

.cwd-note {
    padding: 14px 0;
    border-bottom: 1px solid var(--line-soft);
}

.cwd-note:last-child { border-bottom: none; }

.cwd-note-body {
    font-size: var(--fs-base);
    line-height: 1.7;
    color: var(--ink-2);
}

.cwd-note-body p { margin: 0 0 8px; }
.cwd-note-body p:last-child { margin-bottom: 0; }

.cwd-note-foot {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 8px;
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

/* 文章署名指向专栏主页 */
.article-byline-col {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-weight: 600;
    color: var(--ink-2);
    transition: color var(--duration) var(--ease);
}

/* 专栏已下架时署名是纯文本（.is-off），不能给可点的悬停反馈 */
.article-byline-col:not(.is-off):hover { color: var(--brand-text); }

.article-byline-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--brand);
    color: var(--on-brand);
    font-size: var(--fs-2xs);
    font-weight: 700;
}

/* ── 工作台移动端：名片竖排、统计独占一行、按钮铺满 ── */
@media (max-width: 768px) {
    .cwd-section { padding: 16px 0 40px; }

    .cwd-hero {
        flex-wrap: wrap;
        gap: 12px;
        padding: 14px 16px;
    }

    .cwd-hero-name { font-size: var(--fs-lg); }

    /* 统计条独占一行、四项均分，不再挤在头像右侧 */
    .cwd-stats {
        width: 100%;
        justify-content: space-between;
        gap: 8px;
        padding-top: 12px;
        border-top: 1px solid var(--line-soft);
    }

    .cwd-stat strong { font-size: var(--fs-md); }

    .cwd-panel { padding: 16px 14px; }

    /* 列表项在窄屏改为两行：标题独占一行，状态与操作同行 */
    .cwd-item { flex-wrap: wrap; gap: 8px; }

    .cwd-item-title {
        order: -1;
        flex: 1 0 100%;
        white-space: normal;
        line-height: 1.5;
    }

    .cwd-item-ops { margin-left: auto; }

    /* 触控目标不小于 44px；主次按钮各占一行更好点中 */
    .cwd-actions .tf-detail-btn,
    .cwd-form-actions .tf-detail-btn {
        flex: 1 1 100%;
        justify-content: center;
        min-height: 44px;
    }

    .cwd-editor { min-height: 300px; font-size: var(--fs-base); }

    .tf-appstatus {
        flex-direction: column;
        gap: 8px;
        padding: 12px 14px;
    }
}

/* ═══════════════════════════════════════════
   移动端收口（R38–R42 之外，实测中仍会硌手的几处）

   页头的常显菜单、紧凑快讯、右上角登录与顶部联系/下载入口已在上面的
   768px 段落里落地；这里补的是那批规则没覆盖到的交互细节：
   表单聚焦缩放、触控目标过小、底部下载条压住页脚。
   ═══════════════════════════════════════════ */

@media (max-width: 768px) {

    /* iOS Safari 会在聚焦 <16px 的输入框时自动放大整页，退出后又不还原，
       用户以为页面坏了。全站表单控件在窄屏统一抬到 16px，代价只是略大一号字。 */
    .tf-ev-field input,
    .tf-ev-field textarea,
    .tf-ev-field select,
    .tf-sub-input,
    .header-search-input,
    .search-input,
    .tf-404-input,
    #tf-db-search {
        font-size: var(--fs-md);
    }

    /* 触控目标：指尖的可靠命中区约 44px，这几处此前只有 26–30px。
       radio/checkbox 要排除——它们是行内小控件，被撑到 44px 会把
       旁边的文字标签挤成竖排 */
    .tf-ev-field input:not([type="radio"]):not([type="checkbox"]),
    .tf-ev-field select {
        min-height: 44px;
    }

    .evx-chip {
        min-height: 34px;
        padding: 7px 14px;
    }

    .cal-type-tab,
    .cal-imp-toggle,
    .evx-map-btn {
        min-height: 38px;
    }

    .tf-dl-bar-btn { min-height: 38px; display: inline-flex; align-items: center; }
    .tf-dl-bar-close { width: 38px; height: 38px; }

    /* 底部固定下载条会压住页脚最后一行（备案号与语言切换恰好在那里）。
       显示时由 main.js 给 body 挂 .has-dl-bar，腾出等高的安全区。 */
    body.has-dl-bar { padding-bottom: 68px; }

    /* 筛选行：标签独占一行后，chip 组横滑而不是折成多行，
       否则活动页的三组筛选会吃掉整个首屏 */
    .evx-filter-row {
        flex-wrap: nowrap;
        overflow-x: auto;
        scrollbar-width: none;
    }

    .evx-filter-row::-webkit-scrollbar { display: none; }
    .evx-filter-row .evx-chip { flex-shrink: 0; }

    /* 侧栏日历：标题两行足够，时间列收窄给正文让位 */
    .sidecal-link { grid-template-columns: 38px minmax(0, 1fr); }
    .sidecal-title { font-size: var(--fs-sm); }
}

/* 极窄屏（≤380px）：日历周选择器与工作台统计条最先挤爆 */
@media (max-width: 380px) {
    .cal-week-day { padding: 5px 0 4px; }
    .cwd-stats { gap: 4px; }
    .cwd-stat { font-size: var(--fs-2xs); }
    .cwd-stat strong { font-size: var(--fs-base); }
}

/* ══════════════════════════════════════════════════════════
   行情页（R15）：站内币种列表数据页 /markets/
   币种行刻意不可点 —— 纪要明确「不需要详情页」，见 template-markets.php
   ══════════════════════════════════════════════════════════ */

.mkt-table-wrap {
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius);
    /* clip 只裁圆角、不产生滚动容器：overflow:auto 会让本容器成为表头
       sticky 的滚动上下文，而它纵向不滚，表头吸顶就成了死设定。
       ≤640px 退回 auto（见下方媒体查询）：窄屏表格可能超宽，横滑优先。 */
    overflow-x: clip;
}

.mkt-table {
    width: 100%;
    /* separate 而非 collapse：collapse 下 Chrome 不带着单元格边框一起吸附，
       表头吸顶后底边线会留在原滚动位置 */
    border-collapse: separate;
    border-spacing: 0;
    font-size: var(--fs-base);
    white-space: nowrap;
}

/* 行情表按交易终端的密度排：一屏能比对的币越多，表格越有用。
   行高 12→8，一屏从约 26 行提到约 34 行。 */
.mkt-table thead th {
    position: sticky;
    top: var(--header-h);           /* 吸在页头（含行情跑马灯）下沿 */
    z-index: 1;
    background: var(--surface-2, var(--surface));
    border-bottom: 1px solid var(--line);
    padding: 8px 12px;
    font-size: var(--fs-xs);
    font-weight: 600;
    color: var(--ink-3);
    text-align: left;
    white-space: nowrap;
}

.mkt-table tbody td {
    padding: 8px 12px;
    border-bottom: 1px solid var(--line-2, var(--line));
    color: var(--ink);
    vertical-align: middle;
}

.mkt-table tbody tr:last-child td { border-bottom: 0; }
.mkt-table tbody tr:hover { background: var(--brand-wash, rgba(160, 238, 4, .06)); }

.mkt-full { min-width: 0; }

/* 币种列定宽：不约束的话「Figure Heloc」这类长名会把它撑到 440px，
   把市值与走势挤出可视区 —— 而这页的价值正在于一屏横向对比。 */
.mkt-col-name  { width: 220px; max-width: 220px; }
.mkt-coin-name,
.mkt-coin-sym  { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.mkt-col-rank  { width: 44px; color: var(--ink-3); font-variant-numeric: tabular-nums; }
.mkt-col-num   { text-align: right; font-variant-numeric: tabular-nums; }
.mkt-col-spark { width: 132px; text-align: right; }
.mkt-price     { font-weight: 600; }

.mkt-table .is-up   { color: var(--up); }
.mkt-table .is-down { color: var(--down); }

/* 币种：首字母色块 + 名称/代号。不引上游图标 CDN（大陆不可达） */
.mkt-coin { display: flex; align-items: center; gap: 10px; }

.mkt-coin-mark {
    flex: none;
    width: 28px; height: 28px;
    border-radius: 50%;
    display: grid; place-items: center;
    background: var(--brand-gradient, linear-gradient(135deg, #A0EE04, #75BA2A));
    color: #10240a;
    font-size: var(--fs-xs); font-weight: 700;
    text-transform: uppercase;
}

.mkt-coin-text { display: flex; flex-direction: column; line-height: 1.25; min-width: 0; }
.mkt-coin-name { font-weight: 600; color: var(--ink); }
.mkt-coin-sym  { font-size: var(--fs-2xs); color: var(--ink-3); }

.mkt-spark { display: inline-block; vertical-align: middle; }
.mkt-spark.is-up   { color: var(--up); }
.mkt-spark.is-down { color: var(--down); }
.mkt-spark-na { color: var(--ink-3); }

.mkt-attrib {
    margin-top: 12px;
    font-size: var(--fs-xs);
    color: var(--ink-3);
}

/* 快照提示：数据来自兜底快照而非新鲜缓存时才出现 */
.mkt-stale {
    display: inline-block;
    margin-right: 6px;
    padding: 1px 7px;
    border-radius: 999px;
    background: var(--brand-wash, rgba(160, 238, 4, .12));
    color: var(--ink-2, var(--ink));
}

@media (max-width: 900px) {
    .mkt-hide-md { display: none; }
}

@media (max-width: 640px) {
    .mkt-hide-sm { display: none; }
    .mkt-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .mkt-table { font-size: var(--fs-sm); }
    .mkt-table thead th,
    .mkt-table tbody td { padding: 10px 8px; }

    /* 手机上币种列必须让位给价格：全名 + 代号两行会把「价格 / 24h」挤出首屏，
       而来行情页的人第一眼要看的就是价格。这里退化成「色块 + 代号」单行
       （BTC/ETH 本就是移动端行情的通用标识），腾出的宽度刚好放下两列数字。 */
    .mkt-col-rank  { width: 26px; }
    .mkt-coin      { gap: 6px; }
    .mkt-coin-mark { width: 22px; height: 22px; font-size: var(--fs-2xs); }
    .mkt-coin-name { display: none; }
    .mkt-coin-sym  { font-size: var(--fs-sm); font-weight: 700; color: var(--ink); }

    /* 币种列定宽：列宽本会被 100 行里最长的代号（stETH、WBETH…）撑开，
       白白吃掉数字列的位置。定宽 + 溢出省略，让「价格 + 24h」稳定落在首屏内。 */
    .mkt-col-name  { width: 78px; max-width: 78px; }
    .mkt-coin-sym  { overflow: hidden; text-overflow: ellipsis; }
    .mkt-table     { font-size: var(--fs-xs); }
    .mkt-table thead th,
    .mkt-table tbody td { padding: 10px 6px; }
}

/* 快讯详情页的相关币种卡（R15）：整卡点进 /markets/，替代原 CoinGecko widget */
.news-coin-cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 10px;
}

.news-coin-card {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 12px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--surface);
    text-decoration: none;
    transition: border-color .15s, transform .15s;
}

.news-coin-card:hover {
    border-color: var(--brand, #75BA2A);
    transform: translateY(-1px);
}

.news-coin-card-head { display: flex; align-items: center; gap: 8px; }
.news-coin-card-id   { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
.news-coin-card-sym  { font-size: var(--fs-sm); font-weight: 700; color: var(--ink); }
.news-coin-card-name { font-size: var(--fs-2xs); color: var(--ink-3); }

.news-coin-card-price {
    font-size: var(--fs-md);
    font-weight: 700;
    color: var(--ink);
    font-variant-numeric: tabular-nums;
}

.news-coin-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
}

.news-coin-card-chg { font-size: var(--fs-xs); font-weight: 600; font-variant-numeric: tabular-nums; }
.news-coin-card-chg.is-up   { color: var(--up); }
.news-coin-card-chg.is-down { color: var(--down); }
.news-coin-card .mkt-spark  { width: 72px; height: 24px; }

/* ═══════════════════════════════════════════
   列表图文卡
   ═══════════════════════════════════════════

   文章列表走图文卡：首页深度文章与热门专栏文章、文章归档、专栏页文章 tab、
   专栏一览「最新发布」与精选专栏联动条、侧栏精选是「左侧缩略图 + 正文」的
   行式卡（金色财经式：图 210×130 在左、标题贴图顶、来源行贴图底，这里取
   200×125，窄屏 120×80），相关阅读是「顶图 + 标题」的格子卡。

   图位始终渲染：有源站真图（article-og-*）或运营上传的封面就出真图，没有就出
   品牌占位卡 .tf-ph（2026-08-26 用户要求，见 treefinance_cover_placeholder 的
   注释——占位卡不是图片、不入媒体库，只有分类名与字标，不冒充报道配图）。
   图在左是同日定的口径（此前一版放右侧，理由是混排时标题起点不跳；占位卡上线后
   每行都有图位，标题起点本来也不再跳了）。

   选片仍偏向真图：相关阅读按「同分类有图 → 同分类 → 站内有图 → 站内任意」凑满
   4 篇（single-tf_article.php），首页热门专栏文章与专栏一览最新发布在最新 100 篇
   里有图优先（TreeFinance_Columns::feed_query 的 $prefer_window）—— 占位卡是兜底，
   不该把真图挤出展示位。

   下面这组 :has() 兜底保留但常态下不再触发：图位现在总是存在，只有专栏动态
   （note）这类本就没有图位的条目会命中。规则在，是因为图位一旦因数据异常缺席，
   正文会落到第二列、左边空出一条。

   首页轮播是另一套：整组同进退，五张缺一张就整组退成纯文字版（见 front-page.php）
   —— 那是 330px 的整幅图位，铺一张占位卡比退成文字版更空，所以没接占位。 */

.af-item-media:not(:has(.af-item-thumb)),
.deep-card:not(:has(.deep-card-thumb)),
.feat-article-item:not(:has(.feat-article-thumb)),
.cxv-entry-link:not(:has(.cxv-entry-thumb)) {
    grid-template-columns: minmax(0, 1fr);
}

/* ── 无封面时的品牌占位卡（.tf-ph）──
   不是图片：没有文件、不入媒体库（进了媒体库 has_post_thumbnail 就为真，
   「优先挑有图的」那几处选片逻辑会把占位当真图挑走）。就是一块按分类着色的
   底 + 分类名 + TREE NEWS 字标，明摆着是版式填充。

   配色：色相由 PHP 按分类给（六档，与品牌绿协调），饱和度/明度锁死在这里，
   任何一档都落在同一档柔和度上；渐变角度按文章 ID 变，同分类连着几条不会
   糊成一片。字标只用底色的深色版，不引品牌绿 —— 绿底绿字会糊。 */
.tf-ph {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    padding: 6px 10px;
    background:
        repeating-linear-gradient(var(--ph-a, 45deg),
            hsl(var(--ph-h, 88) 42% 100% / .28) 0 2px,
            transparent 2px 9px),
        linear-gradient(var(--ph-a, 45deg),
            hsl(var(--ph-h, 88) 46% 93%),
            hsl(var(--ph-h, 88) 52% 86%));
    overflow: hidden;
    user-select: none;
}

.tf-ph-cat {
    font-size: var(--fs-sm);
    font-weight: 800;
    line-height: 1.25;
    text-align: center;
    letter-spacing: .02em;
    color: hsl(var(--ph-h, 88) 46% 26%);
    /* 分类名再长也不许换到第三行，否则会顶到字标 */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.tf-ph-brand {
    position: absolute;
    right: 7px;
    bottom: 5px;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    letter-spacing: .1em;
    color: hsl(var(--ph-h, 88) 38% 34% / .5);
}

/* 小图位（侧栏精选 88px、联动条 64×40）：字标放不下，只留分类名并降一档 */
.tf-ph-sm { padding: 4px 6px; }
.tf-ph-sm .tf-ph-cat { font-size: var(--fs-2xs); -webkit-line-clamp: 2; }
.tf-ph-sm .tf-ph-brand { display: none; }

@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .tf-ph {
        background:
            repeating-linear-gradient(var(--ph-a, 45deg),
                hsl(var(--ph-h, 88) 40% 60% / .07) 0 2px,
                transparent 2px 9px),
            linear-gradient(var(--ph-a, 45deg),
                hsl(var(--ph-h, 88) 26% 16%),
                hsl(var(--ph-h, 88) 30% 22%));
    }
    :root:not([data-theme="light"]) .tf-ph-cat   { color: hsl(var(--ph-h, 88) 44% 76%); }
    :root:not([data-theme="light"]) .tf-ph-brand { color: hsl(var(--ph-h, 88) 30% 66% / .45); }
}

:root[data-theme="dark"] .tf-ph {
    background:
        repeating-linear-gradient(var(--ph-a, 45deg),
            hsl(var(--ph-h, 88) 40% 60% / .07) 0 2px,
            transparent 2px 9px),
        linear-gradient(var(--ph-a, 45deg),
            hsl(var(--ph-h, 88) 26% 16%),
            hsl(var(--ph-h, 88) 30% 22%));
}

:root[data-theme="dark"] .tf-ph-cat   { color: hsl(var(--ph-h, 88) 44% 76%); }
:root[data-theme="dark"] .tf-ph-brand { color: hsl(var(--ph-h, 88) 30% 66% / .45); }

/* ── 知识库 / 站点标记的按色相派生芯片：同 .tf-ph，浅色模式是 94% 明度的淡底，
   暗色下要翻成深底浅字，否则在暗页面上是一块块亮色光斑 ── */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) .tf-kb-item-num,
    :root:not([data-theme="light"]) .tf-lesson-kicker { background: hsl(var(--kb-h, 96) 30% 18%); color: hsl(var(--kb-h, 96) 45% 72%); }
    :root:not([data-theme="light"]) .site-mark         { background: hsl(var(--mark-h, 90) 30% 18%); color: hsl(var(--mark-h, 90) 45% 72%); }
    :root:not([data-theme="light"]) .tf-kb-cover {
        background: radial-gradient(120% 120% at 18% 12%, hsl(var(--kb-h, 96) 32% 22%) 0%, hsl(var(--kb-h, 96) 28% 16%) 55%, hsl(var(--kb-h, 96) 26% 12%) 100%);
        color: hsl(var(--kb-h, 96) 45% 72%);
    }
    :root:not([data-theme="light"]) .tf-kb-cover::after { background-image: repeating-linear-gradient(-45deg, hsl(var(--kb-h, 96) 40% 70% / 0.06) 0 1px, transparent 1px 11px); }
    :root:not([data-theme="light"]) .tf-kb-cover b { color: hsl(var(--kb-h, 96) 40% 70% / 0.22); }
}
:root[data-theme="dark"] .tf-kb-item-num,
:root[data-theme="dark"] .tf-lesson-kicker { background: hsl(var(--kb-h, 96) 30% 18%); color: hsl(var(--kb-h, 96) 45% 72%); }
:root[data-theme="dark"] .site-mark         { background: hsl(var(--mark-h, 90) 30% 18%); color: hsl(var(--mark-h, 90) 45% 72%); }
:root[data-theme="dark"] .tf-kb-cover {
    background: radial-gradient(120% 120% at 18% 12%, hsl(var(--kb-h, 96) 32% 22%) 0%, hsl(var(--kb-h, 96) 28% 16%) 55%, hsl(var(--kb-h, 96) 26% 12%) 100%);
    color: hsl(var(--kb-h, 96) 45% 72%);
}
:root[data-theme="dark"] .tf-kb-cover::after { background-image: repeating-linear-gradient(-45deg, hsl(var(--kb-h, 96) 40% 70% / 0.06) 0 1px, transparent 1px 11px); }
:root[data-theme="dark"] .tf-kb-cover b { color: hsl(var(--kb-h, 96) 40% 70% / 0.22); }

/* 精选专栏联动条：一行一条，有图时 64×40 小图顶在最左、圆点让位 */
.cxf-post-thumb {
    flex-shrink: 0;
    width: 64px;
    height: 40px;
    border-radius: var(--radius);
    overflow: hidden;
    background: var(--panel);
}

.cxf-post-thumb img { width: 100%; height: 100%; object-fit: cover; }

.cxf-post-list li a:has(.cxf-post-thumb) .cxf-post-title { padding-left: 0; }
.cxf-post-list li a:has(.cxf-post-thumb) .cxf-post-title::before { display: none; }

/* 图列占掉 120px 后，窄屏的正文列只剩 170px 上下，「来源 · 日期」这行放不下时
   会在来源和日期内部各自折行，成了四行碎字。让整行按项换行、每一项自身不折。 */
.af-item-meta,
.deep-card-meta {
    flex-wrap: wrap;
    row-gap: 2px;
}

.af-item-meta > *,
.deep-card-meta > * {
    white-space: nowrap;
}

/* 融资行是「logo + 正文 + 金额」三列，缺 logo 时只去掉第一列 */
.tf-fd-row:not(:has(.tf-fd-row-logo)) {
    grid-template-columns: minmax(0, 1fr) auto;
}

/* ═══════════════════════════════════════════
   个人中心（R44）
   ═══════════════════════════════════════════

   骨架直接复用专栏工作台的 cwd-*（名片 / 标签页 / 面板 / 表单）—— 两处是同
   一个产品的两块自留地，视觉本就该一致。这里只补个人中心专有的元素。 */

/* 头像：有图出图，没图出首字母色块。不依赖 Gravatar —— 大陆取不到图，
   靠 get_avatar 的默认行为只会留下一个永远转圈的头像位。 */
.acc-avatar {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    overflow: hidden;
    background: var(--paper-3);
    color: var(--ink-2);
    font-size: var(--fs-lg);
    font-weight: 800;
    line-height: 1;
}

.acc-avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.acc-avatar.is-ph { background: var(--brand-tint); color: var(--brand-text); }

/* 身份标签：读者 / 专栏作者 / 编辑 */
.acc-role {
    padding: 2px 9px;
    border-radius: 999px;
    background: var(--paper-3);
    color: var(--ink-2);
    font-size: var(--fs-xs);
    font-weight: 700;
}

/* 概览里的引导卡：开专栏 / 审核中 / 进工作台 */
.acc-quick {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 14px;
    padding: 16px 18px;
    background: var(--paper-2);
    border: 1px solid var(--line);
    border-radius: var(--radius);
}

.acc-quick-desc {
    flex: 1;
    min-width: 220px;
    margin: 0;
    font-size: var(--fs-sm);
    color: var(--ink-2);
    line-height: 1.6;
}

.acc-badge {
    padding: 3px 10px;
    border-radius: 999px;
    font-size: var(--fs-xs);
    font-weight: 700;
}

.acc-badge.is-pending { background: var(--paper-3); color: var(--ink-2); }

/* 「对外资料在专栏工作台改」的指路条 */
.acc-hint {
    margin: 0 0 18px;
    padding: 11px 14px;
    background: var(--brand-tint);
    border-radius: var(--radius);
    font-size: var(--fs-sm);
    color: var(--ink-2);
    line-height: 1.6;
}

.acc-hint a {
    color: var(--brand-text);
    font-weight: 700;
    white-space: nowrap;
}

/* 只读字段（邮箱） */
.acc-field-static {
    display: flex;
    flex-direction: column;
    gap: 4px;
    /* 下面紧跟着「修改密码」小标题，留够呼吸位再起下一段 */
    margin-bottom: 26px;
}

.acc-field-label {
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink-2);
}

.acc-field-value {
    font-size: var(--fs-base);
    color: var(--ink);
}

/* 危险区：注销不可逆，视觉上必须和上面的表单断开 */
.acc-danger {
    margin-top: 32px;
    padding: 18px 20px;
    border: 1px solid var(--down);
    border-radius: var(--radius-lg);
    background: var(--down-tint);
}

.acc-danger-title {
    margin: 0 0 6px;
    font-size: var(--fs-base);
    font-weight: 800;
    color: var(--down);
}

.acc-danger-desc {
    margin: 0 0 14px;
    font-size: var(--fs-sm);
    color: var(--ink-2);
    line-height: 1.6;
}

.tf-detail-btn.acc-btn-danger {
    background: var(--down);
    border-color: var(--down);
    color: var(--paper);   /* 暗色下 --down 提亮成浅红，白字对比不够，改用纸色（暗色即深字） */
}

.tf-detail-btn.acc-btn-danger:hover { opacity: .88; }

@media (max-width: 768px) {
    /* 窄屏：名片竖排，数据格另起一行。读者只有两格，贴两端会散成一左一右，
       所以左对齐排列 —— 专栏作者的四格靠 wrap 自然折行。 */
    .acc-section .cwd-hero { flex-wrap: wrap; }
    .acc-section .cwd-stats { width: 100%; flex-wrap: wrap; justify-content: flex-start; gap: 12px 30px; }
    .acc-avatar { width: 44px; height: 44px; font-size: var(--fs-base); }
    .acc-quick { flex-direction: column; align-items: flex-start; }
}

/* ═══════════════════════════════════════════════════════════════
   08-30 全站 UI 精修：统一交互态
   圆角令牌已整体放大（--radius-sm 6 / --radius 8 / --radius-lg 12 / --radius-xl 16），
   这里补的是各处按钮、卡片、弹层此前各写各的 hover / active / focus：
   · 实心品牌按钮：悬停提亮 + 品牌色投影 + 微抬，按下回落
   · 描边次级按钮：悬停微抬 + 小阴影
   · 可点卡片：悬停描边变品牌辅绿 + 中阴影 + 抬 2px
   · 弹层：xl 圆角 + 大阴影
   · 原生勾选框 / 单选 / 滑杆：accent-color 走品牌色
   放在文件末尾，等特异度时后者生效；prefers-reduced-motion 时关掉位移。
   ═══════════════════════════════════════════════════════════════ */
.news-card-btn,
.card-download-btn,
.tf-sub-btn,
.header-search-btn,
.tf-404-btn {
    transition: filter var(--duration) var(--ease), box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.news-card-btn:hover,
.card-download-btn:hover,
.tf-sub-btn:hover,
.header-search-btn:hover,
.tf-404-btn:hover {
    filter: brightness(1.04);
    box-shadow: 0 6px 18px rgba(160, 238, 4, 0.28);
    transform: translateY(-1px);
}
.news-card-btn:active,
.card-download-btn:active,
.tf-sub-btn:active,
.header-search-btn:active,
.tf-404-btn:active {
    filter: brightness(0.96);
    box-shadow: none;
    transform: translateY(0);
}

.view-more-btn,
.cal-nav-btn,
.cal-today-btn,
.tf-ev-cal-btn,
.evx-map-btn,
.share-btn {
    transition: color var(--duration) var(--ease), background var(--duration) var(--ease),
                border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease),
                transform var(--duration) var(--ease);
}
.view-more-btn:hover,
.cal-nav-btn:hover,
.cal-today-btn:hover,
.tf-ev-cal-btn:hover,
.evx-map-btn:hover,
.share-btn:hover {
    transform: translateY(-1px);
    box-shadow: var(--shadow-sm);
}
.view-more-btn:active,
.cal-nav-btn:active,
.cal-today-btn:active,
.tf-ev-cal-btn:active,
.evx-map-btn:active,
.share-btn:active {
    transform: translateY(0);
    box-shadow: none;
}

/* 可点卡片（服务页 / 积分兑换）此前没有悬停反馈 */
.tf-svc-card,
.pt-reward-card {
    transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease);
}
.tf-svc-card:hover,
.pt-reward-card:hover {
    border-color: var(--brand-2);
    box-shadow: var(--shadow-md);
    transform: translateY(-2px);
}

/* 弹层：更大的圆角与投影，和页面卡片拉开层级 */
.case-modal-panel,
.tf-sub-panel,
.tf-ev-map-modal-panel {
    border-radius: var(--radius-xl);
    box-shadow: var(--shadow-lg);
}

/* 原生控件的品牌色 */
input[type="checkbox"],
input[type="radio"],
input[type="range"],
progress { accent-color: var(--brand-2); }

/* 通用文本输入（不在 .tf-ev-field 里的）也给同一套焦点环 */
input[type="text"]:focus-visible,
input[type="email"]:focus-visible,
input[type="search"]:focus-visible,
input[type="url"]:focus-visible,
input[type="tel"]:focus-visible,
input[type="number"]:focus-visible,
input[type="password"]:focus-visible,
textarea:focus-visible,
select:focus-visible {
    outline: none;
    border-color: var(--brand-2);
    box-shadow: 0 0 0 3px var(--brand-tint);
}

@media (prefers-reduced-motion: reduce) {
    .tf-detail-btn, .tf-detail-btn:hover,
    .news-card-btn:hover, .card-download-btn:hover, .tf-sub-btn:hover, .header-search-btn:hover, .tf-404-btn:hover,
    .view-more-btn:hover, .cal-nav-btn:hover, .cal-today-btn:hover, .tf-ev-cal-btn:hover, .evx-map-btn:hover, .share-btn:hover,
    .tf-svc-card:hover, .pt-reward-card:hover,
    .tf-contact-im-item:hover, .tf-contact-social-icon:hover, .tf-contact-channel:hover .tf-contact-channel-icon {
        transform: none;
    }
}

/* ─────────────────────────────────────────
   媒体合作申请（08-31，友商链接页底部）
   客户自填名称 / 链接 / 图标 → 后台批准即上架友商卡片。
   表单骨架复用 .tf-lead-* 那一套，这里只给容器与留白。
   ───────────────────────────────────────── */
.tf-media-apply {
    margin-top: 34px;
    padding: 22px 22px 24px;
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    background: var(--paper);
    box-shadow: var(--shadow-sm);
}

.tf-media-apply .section-header { margin-bottom: 6px; }

.tf-media-apply-intro {
    margin: 0 0 4px;
    color: var(--ink-2);
    font-size: 13px;
    line-height: 1.7;
}

.tf-media-apply .tf-lead-submit {
    min-width: 168px;
    justify-content: center;
}

/* 友商卡片的自带图标：与站标色块同尺寸，完整显示不裁切 */
.partners-grid .tool-card-favicon img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    border-radius: var(--radius-sm);
}

@media (max-width: 640px) {
    .tf-media-apply { padding: 18px 14px 20px; }
}

/* ─────────────────────────────────────────
   行情页右栏的宏观图表卡（08-31 两张，09-01 补齐为五块，对齐链捕手首页左栏）
   美元指数 / M7 多线 / BTC·ETH ETF 净流 / 衍生品交易所榜，全部内联 SVG 或纯 HTML
   自绘，不挂图表库。涨跌配色沿用行情表格那一套 --up / --down，明暗两套里都已
   成对定义；M7 七条线的调色板写死在渲染器里（要的是彼此可分，不走品牌令牌）。
   ───────────────────────────────────────── */
.mkt-chart-card { padding-bottom: 14px; }

.mkt-chart-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 8px;
}

.mkt-chart-title {
    margin: 0;
    font-size: var(--fs-sm);
    font-weight: 700;
    color: var(--ink);
}

.mkt-chart-badge {
    flex: none;
    padding: 2px 7px;
    border-radius: var(--radius-sm);
    background: var(--hover-ink);
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.mkt-chart-vals {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
}

.mkt-chart-last {
    font-family: var(--font-mono);
    font-size: var(--fs-xl);
    font-weight: 800;
    color: var(--ink);
    font-variant-numeric: tabular-nums;
}

.mkt-chart-last.is-up   { color: var(--up); }
.mkt-chart-last.is-down { color: var(--down); }

.mkt-chart-chg {
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}

.mkt-chart-chg.is-up   { color: var(--up); }
.mkt-chart-chg.is-down { color: var(--down); }

.mkt-chart-sub {
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* 图本身：宽度铺满卡片，高度固定 —— preserveAspectRatio="none" 让它随卡片拉伸 */
.mkt-chart-area,
.mkt-chart-bars {
    display: block;
    width: 100%;
    height: 96px;
}

/* 折线用 currentColor：线与面积渐变共用一个颜色，只需在这里定一次 */
.mkt-chart-area.is-up   { color: var(--up); }
.mkt-chart-area.is-down { color: var(--down); }

.mkt-chart-bars rect.is-up   { fill: var(--up); }
.mkt-chart-bars rect.is-down { fill: var(--down); }
.mkt-chart-zero { stroke: var(--line); stroke-width: 1; }

/* M7 多线图：略高于单线图（七条线要呼吸感）；平均线走 currentColor 取正文色 */
.mkt-chart-multi {
    display: block;
    width: 100%;
    height: 110px;
    color: var(--ink);
}

/* M7 图例：两列小行，色点 + 代码 + 当日涨跌 */
.mkt-m7-legend {
    list-style: none;
    margin: 10px 0 0;
    padding: 0;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 4px 14px;
}

.mkt-m7-legend li {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.mkt-m7-legend i {
    flex: none;
    width: 7px;
    height: 7px;
    border-radius: 50%;
}

.mkt-m7-code {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: var(--ink-2);
}

.mkt-m7-chg {
    margin-left: auto;
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-variant-numeric: tabular-nums;
}

.mkt-m7-chg.is-up   { color: var(--up); }
.mkt-m7-chg.is-down { color: var(--down); }

/* 衍生品交易所榜：名次 + 名称 + 两列数字，同一网格保证列对齐 */
.mkt-deriv-list {
    list-style: none;
    margin: 0;
    padding: 0;
}

.mkt-deriv-head,
.mkt-deriv-row {
    display: grid;
    grid-template-columns: 18px 1fr 76px 76px;
    align-items: center;
    gap: 8px;
}

.mkt-deriv-head {
    padding-bottom: 6px;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

.mkt-deriv-head span:nth-child(n+3) { text-align: right; }

.mkt-deriv-row {
    padding: 6px 0;
    border-top: 1px solid var(--line);
}

.mkt-deriv-rank {
    font-family: var(--font-mono);
    font-size: var(--fs-2xs);
    font-weight: 700;
    color: var(--ink-3);
}

.mkt-deriv-name {
    font-size: var(--fs-sm);
    font-weight: 600;
    color: var(--ink);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.mkt-deriv-num {
    font-family: var(--font-mono);
    font-size: var(--fs-xs);
    color: var(--ink-2);
    font-variant-numeric: tabular-nums;
    text-align: right;
}

.mkt-deriv-note {
    margin: 8px 0 0;
    font-size: var(--fs-2xs);
    color: var(--ink-3);
}

/* ═══════════════════════════════════════════
   移动端统一适配（09-02，theme 3.57.0）

   之前六十多个零散的 @media 块各管各的组件，字号、触控区、单列/双列没有统一口径。
   这一段追加在文件末尾，同优先级靠后者生效，作为全站 ≤768px 的收口层：
     · 令牌层：H1 28→24、最小字号 11→12、栏距 24→16、区块间距 32→24
     · 触控层：所有可点元素 ≥ 40px（Apple HIG 44pt / MD 48dp 取下限）
     · 版式层：内容够短的版块并成两列（用户 09-02 要求「横向能放两个就别一行放一个」）
     · 学习模块：小白入门/课节页/百科/词条按新的字阶重排
   新增移动端规则请写在这里，别再往上面的零散块里加。
   ═══════════════════════════════════════════ */

/* 入门总览目录链接里的封面图标与课节数只在手机的宫格目录里出现；
   桌面右栏仍是一列纯文字锚点（见 template-beginner.php） */
.tf-kb-cover.is-toc,
.tf-kb-toc-n { display: none; }

@media (max-width: 768px) {
    :root {
        --fs-xl: 24px;        /* 内容页 H1（关于/联系/办会/会务）：28 在 390 宽上一行只放 8 个字 */
        --fs-2xs: 12px;       /* 11px 低于手机可读下限：标签/时间戳/角标统一 12 */
        --section-gap: 24px;
        --page-top: 12px;
    }

    .container,
    .container-narrow { padding: 0 16px; }

    /* 列表页主列的 grid 轨道原写 1fr（= minmax(auto, 1fr)），子项的 min-content 会把轨道
       撑到比容器宽 22px，栏距收到 16px 后整页就多出 6px 横向滚动；锁死下限即可 */
    .list-layout { grid-template-columns: minmax(0, 1fr); }

    /* ── 触控区 ── */
    .search-toggle { width: 40px; height: 40px; }
    .footer-social-link { min-width: 40px; min-height: 40px; justify-content: center; }
    .share-btn,
    .tf-contact-social-icon,
    .tf-detail-social { width: 40px; height: 40px; }
    .colcar-btn,
    .cxf-arrow,
    .tf-contact-im-copy { width: 36px; height: 36px; }
    .page-numbers { min-width: 40px; min-height: 40px; }
    .footer-col a { display: inline-block; padding: 5px 0; }
    /* 首页「编辑部观察」条目与热搜「最新」行是 18px 高的纯文字链接，撑到 ≥28px。
       观察条目的内距加在 li 上而不是链接上：时间轴圆点是 li 的绝对定位伪元素，
       链接自己加内距会把文字推下去、圆点留在原地 */
    .ew-item { padding-block: 10px; }
    .ew-item::before { top: 17px; }
    .ew-item.is-article::before { top: 16px; }
    .hotsearch-latest { display: block; padding-block: 5px; }
    input[type="checkbox"],
    input[type="radio"] { width: 18px; height: 18px; }

    /* 活动卡四行 meta（地点 / 日期 / 天数 / 分类）原来写死 11px，提到 12 */
    .evx-card-loc,
    .evx-card-date,
    .evx-card-days,
    .evx-cat-tag { font-size: var(--fs-xs); }

    /* 轮播指示点视觉上只有 4px 高，热区用伪元素撑到 32px，外观不变 */
    .hero-dot,
    .evx-hero-dot { position: relative; }
    .hero-dot::before,
    .evx-hero-dot::before {
        content: '';
        position: absolute;
        inset: -14px -5px;
    }

    /* ── 侧栏：手机上整列不出（用户 09-02 拍板）──
       桌面右栏（热搜 / 精选文章 / 热门文章 / 趋势话题 / 其他专栏 / 行业日历 / 关注我们）
       在手机上只能排到主列底下，离首屏三到十几屏，没人滚得到，却把页面拉长一倍。
       这些内容主导航都有独立入口，整列藏掉。活动详情的报名卡（.tf-detail-sidebar）
       与融资页的筛选栏（.tf-fdx-side）是功能件，不在此列。 */
    .list-sidebar,
    .article-aside,
    .mkt-side { display: none; }
    /* 专栏作者页的左轨装着资料卡本身，只藏它下面的「其他专栏」，关于本专栏保留 */
    .colp-rail .sidebar-section:not(.colp-about) { display: none; }

    /* ── 专栏 ── */
    .cxv-entry-link { grid-template-columns: 112px minmax(0, 1fr); gap: 12px; }
    .cxv-entry-thumb { width: 112px; height: 72px; }
    .cxv-entry-title { font-size: var(--fs-base); }
    /* 「其他专栏 / 专栏热榜」：头像 + 名字 + 篇数一行只占半屏宽，并成两列 */
    .colp-others {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 2px 10px;
    }
    .colp-other { padding: 6px 4px; }

    /* ── 行情表：代号列给够宽，USDT / HYPE / STETH 不再被截成「U…」 ── */
    .mkt-col-rank { width: 34px; }
    .mkt-col-name { width: 104px; max-width: 104px; }
    .mkt-coin { gap: 8px; }
    .mkt-coin-mark { width: 24px; height: 24px; }
    .mkt-coin-sym { font-size: var(--fs-sm); }
    .mkt-table { font-size: var(--fs-sm); }
    /* 四列（# / 币种 / 价格 / 24h）在 390 宽已放得下，不再需要横滑容器；
       overflow:auto 会让表头 sticky 落到这个不纵向滚的容器上，一滚就失效 */
    .mkt-table-wrap { overflow-x: clip; }

    /* ── 融资速递 ── */
    /* 首屏四个统计横排会把「近 30 天笔数」竖着折成一列字：改 2×2 */
    .list-banner-stats {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 12px 16px;
    }
    .list-banner-stat { align-items: flex-start; letter-spacing: 0.04em; }

    /* ── 活动页首屏（用户 09-02 反馈「上面太大、按钮没对齐」）──
       原来标题 / 说明 / 两个大数字 / 四个宽度不一的按钮竖着堆了 330px。
       压法：内距 22→16，说明锁两行，统计改「数字 + 文案」横排一行，
       四个入口改 2×2 等宽网格，整块收到 ~230px。 */
    .list-banner-inner { padding: 16px 16px 14px; gap: 12px 16px; }
    .list-banner-desc {
        margin-top: 4px;
        line-height: 1.55;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .list-banner-extra.is-split .list-banner-stats { display: flex; gap: 18px; }
    .list-banner-extra.is-split .list-banner-stat {
        flex-direction: row;
        align-items: baseline;
        gap: 6px;
        letter-spacing: 0.02em;
    }
    .list-banner-extra.is-split .list-banner-stat strong { font-size: 18px; }
    .list-banner-extra.is-split .tf-ev-cta-row {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 8px;
        margin-top: 2px;
    }
    .list-banner .tf-ev-cta-row .tf-detail-btn {
        width: 100%;
        min-height: 40px;
        padding: 8px 10px;
        font-size: var(--fs-sm);
    }

    /* 条目卡从 5 行压成 3 行：项目 / 轮次·金额 / 投资方·日期，估值列手机不出 */
    .tf-fd-table .tf-fd-row,
    .tf-fd-table.no-val .tf-fd-row,
    .tf-fd-table.no-inv .tf-fd-row,
    .tf-fd-table.no-val.no-inv .tf-fd-row {
        grid-template-columns: minmax(0, 1fr) auto;
        gap: 4px 10px;
        padding: 10px 8px;
    }
    .tf-fd-cell-project { grid-row: 1; grid-column: 1 / -1; gap: 10px; }
    .tf-fd-row-logo { width: 34px; height: 34px; }
    .tf-fd-row-body { flex-direction: row; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
    .tf-fd-row-sector { margin-top: 0; }
    .tf-fd-cell-round { grid-row: 2; grid-column: 1; }
    .tf-fd-cell-amount { grid-row: 2; grid-column: 2; }
    .tf-fd-cell-amount strong { font-size: var(--fs-base); }
    .tf-fd-cell-val { display: none; }
    .tf-fd-cell-inv { grid-row: 3; grid-column: 1; }
    .tf-fd-cell-date { grid-row: 3; grid-column: 2; align-self: center; text-align: right; }

    /* ── 百科：column 方向下 flex-basis 300px 变成了高度，搜索框下面空出一大截 ── */
    .tf-wiki-search-wrap { flex: 0 0 auto; max-width: none; }
    /* 上面零散块里两处 11.5px 的说明文字，同样提到 12 的下限 */
    .tf-wiki-alias,
    .tool-card-desc { font-size: var(--fs-xs); }
    /* 词条页「相关词条」三张卡并两列 */
    .tf-term-rail-list {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 8px;
    }

    /* ── 学习模块「接下来看什么」：两张入口卡并排 ── */
    .tf-learn-next-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    .tf-learn-next-card { flex-direction: column; align-items: flex-start; gap: 8px; padding: 12px; }
    .tf-learn-next-arrow { display: none; }
    .tf-learn-next-body strong { font-size: var(--fs-base); }
    .tf-learn-next-body em {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }

    /* ── 小白入门总览 ──
       字阶：页面 22 / 专题 17 / 课节 15 / 摘要 12.5 / 辅助 12，字重 800→700→600。
       左栏封面卡与首屏说的是同一句话（六专题十八节），手机上撤掉；
       右栏锚点目录改成 2×3 宫格放到最上面，一屏看全六个专题，点哪个跳哪个。 */
    .tf-kb-hero-card { display: none; }
    .tf-kb-toc { display: block; position: static; order: -1; }
    .tf-kb-toc-label { display: none; }
    .tf-kb-toc-list {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 8px;
        padding: 0;
        border-left: none;
    }
    .tf-kb-toc-list li::before { display: none; }
    .tf-kb-toc-list a {
        display: flex;
        align-items: center;
        gap: 10px;
        padding: 10px 12px;
        border: 1px solid var(--line-2);
        border-radius: var(--radius-lg);
        background: var(--paper);
        font-size: var(--fs-sm);
        font-weight: 600;
        line-height: 1.3;
        color: var(--ink);
    }
    .tf-kb-toc-list li.is-active a { border-color: var(--brand-2); background: var(--brand-tint); }
    .tf-kb-cover.is-toc {
        display: flex;
        flex-shrink: 0;
        width: 32px;
        height: 32px;
        border-radius: 8px;
    }
    .tf-kb-cover.is-toc svg { width: 17px; height: 17px; }
    .tf-kb-cover.is-toc b { display: none; }
    .tf-kb-toc-text { display: flex; flex-direction: column; min-width: 0; }
    /* 专题名最长七八个字（「币、代币与稳定币」），半屏宽一行放不下就折成两行，别截断 */
    .tf-kb-toc-text > span {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .tf-kb-toc-n {
        display: block;
        margin-top: 2px;
        font-size: var(--fs-2xs);
        font-style: normal;
        font-weight: 500;
        color: var(--ink-3);
    }

    .tf-kb-block { padding: 14px 14px 4px; }
    .tf-kb-block + .tf-kb-block { margin-top: 12px; }
    .tf-kb-block-head { gap: 12px; padding-bottom: 12px; }
    .tf-kb-cover.is-sm { width: 44px; height: 44px; border-radius: 10px; }
    .tf-kb-cover.is-sm svg { width: 22px; height: 22px; }
    .tf-kb-block-title { font-size: 17px; font-weight: 700; }
    /* 专题说明本就只有两三行，不锁行数：截成「…以及大多数人一路点过去的那步「授…」反而怪 */
    .tf-kb-block-sub { margin-top: 4px; font-size: var(--fs-sm); line-height: 1.5; }
    .tf-kb-item { gap: 10px; padding: 11px 0; }
    .tf-kb-item-num { width: 28px; height: 28px; border-radius: 8px; font-size: var(--fs-xs); }
    .tf-kb-item-title { font-size: var(--fs-base); font-weight: 600; }
    .tf-kb-item-excerpt { font-size: 12.5px; }
    .tf-kb-item-go { font-size: var(--fs-sm); }

    /* ── 课节正文页 ── */
    .tf-lesson-head { margin: 12px 0 16px; }
    .tf-lesson-title { font-size: 22px; }
    .tf-lesson-body p { font-size: 16px; line-height: 1.85; }
    /* 右栏专题卡：整幅封面 + 标题 + 说明三层叠着占 200px，改成封面在左的一行 */
    .tf-lesson-rail-card {
        display: grid;
        grid-template-columns: 48px minmax(0, 1fr);
        gap: 2px 12px;
        align-items: center;
        padding: 12px;
    }
    .tf-kb-cover.is-rail { grid-row: 1 / span 2; width: 48px; height: 48px; border-radius: 10px; }
    .tf-kb-cover.is-rail svg { width: 22px; height: 22px; }
    .tf-kb-cover.is-rail b { display: none; }
    .tf-lesson-rail-title { margin-top: 0; font-size: var(--fs-base); }
    .tf-lesson-rail-sub {
        margin-top: 0;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
    .tf-lesson-rail-label { margin: 16px 0 6px; }
    /* 上一节 / 下一节并排，标题超长截断 */
    .tf-kb-pager { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    .tf-kb-pager-link { padding: 10px 12px; }
    .tf-kb-pager-link.is-next { text-align: right; }
    .tf-kb-pager-link strong {
        display: block;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

    /* ── 大树会务 / 案例 ── */
    .tf-svc-h2 { font-size: 22px; }
    .tf-svc-resources { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
    .tf-svc-resource { padding: 14px; }
    .tf-svc-resource-v { font-size: 24px; }
    .tf-svc-type { padding: 16px; }
    .case-grid { gap: 12px 10px; }
    .case-card-open-hint { display: none; }

    /* ── App 下载：六张特性卡并两列 ── */
    .tf-app-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
    .tf-app-card { padding: 14px 14px 16px; }

    /* ── 文章详情「相关阅读」/ 活动详情「上一场 / 下一场」并两列 ── */
    .related-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
    .related-card-body { padding: 10px 10px 12px; }
    .related-card-title { font-size: var(--fs-sm); }
    .evd-adjacent { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
    .evd-adjacent-link { padding: 10px 12px; }
    .evd-adjacent-link.is-next:only-child { grid-column: 2; }

    /* ── 融资速递筛选区重设计（用户 09-02）──
       原来赛道 / 金额 / 轮次是三张各自带折叠箭头的卡片竖着堆，占 450px，
       而手机上没人会去折叠它。改成一张卡三行：左侧 44px 放组名，右侧选项横滑，
       折叠箭头撤掉，整块收到 ~140px。桌面侧栏的折叠版式不动。 */
    .tf-fdx-side { gap: 0; }
    .tf-fdx-search { margin-bottom: 10px; }
    .tf-fdx-group {
        display: grid;
        grid-template-columns: 44px minmax(0, 1fr);
        align-items: center;
        gap: 8px;
        padding: 0 0 0 12px;
        border: 1px solid var(--line-soft);
        border-bottom: none;
        border-radius: 0;
        background: var(--card);
    }
    .tf-fdx-search + .tf-fdx-group { border-radius: var(--radius-lg) var(--radius-lg) 0 0; }
    .tf-fdx-group:last-child {
        border-bottom: 1px solid var(--line-soft);
        border-radius: 0 0 var(--radius-lg) var(--radius-lg);
    }
    .tf-fdx-search + .tf-fdx-group:last-child { border-radius: var(--radius-lg); }
    .tf-fdx-group summary {
        padding: 0;
        font-size: var(--fs-xs);
        font-weight: 600;
        color: var(--ink-3);
        pointer-events: none;   /* 手机上不折叠：三组常开才是筛选，收起来就是三行标题 */
    }
    .tf-fdx-group summary::after { display: none; }
    .tf-fdx-opts { padding: 9px 12px 9px 0; gap: 6px; }
    .tf-fdx-opt {
        padding: 5px 11px;
        border: 1px solid var(--line-soft);
        border-radius: var(--radius-full);
        background: var(--paper);
        font-size: var(--fs-xs);
        font-weight: 600;
        color: var(--ink-2);
    }
    .tf-fdx-opt.is-active { border-color: transparent; background: var(--brand); color: var(--on-brand); }
    .tf-fdx-opt em { font-size: var(--fs-2xs); }
    .tf-fdx-opt.is-active em { color: rgba(24, 36, 2, 0.72); }

    /* ── 日历类型筛选：五个 tab 换行后「显示全部」挂在第二行尾巴上，改横滑一行；
       「显示全部 / 只看重点」从虚线下划线文字改成同款描边 chip，放在同一行末尾 ── */
    .cal-type-tabs {
        flex-wrap: nowrap;
        overflow-x: auto;
        gap: 6px;
        padding-bottom: 10px;
        scrollbar-width: none;
    }
    .cal-type-tabs::-webkit-scrollbar { display: none; }
    .cal-type-tab { flex: none; padding: 6px 12px; font-size: var(--fs-xs); }
    .cal-imp-toggle {
        flex: none;
        margin-left: 2px;
        padding: 6px 12px;
        border: 1px dashed var(--line);
        border-radius: var(--radius-full);
        white-space: nowrap;
    }
    .cal-imp-toggle.is-active { border-style: solid; border-color: var(--brand-2); color: var(--brand-text); }

    /* ── 404 入口六个：五个一行 + 一个孤行，改三列网格 ── */
    .tf-404-links { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
    .tf-404-links a { text-align: center; padding: 9px 8px; }
}
