:root {
      --bg:           #F4F4F1;
      --surface:      #FFFFFF;
      --surface-2:    #F8F8F6;
      --border:       #E5E5E1;
      --border-2:     #CECEC8;
      --primary:      #1C3DB8;
      --primary-bg:   #EDF0FB;
      --bull:         #B93027;
      --bull-bg:      #FAF0EF;
      --bull-border:  #EEC4C1;
      --bear:         #0B7A52;
      --bear-bg:      #EAF5EF;
      --bear-border:  #AEDAC7;
      --text-1:       #0C0C0C;
      --text-2:       #555555;
      --text-3:       #999999;
      --nav-h:        56px;
      --max-w:        1280px;
      --r:            12px;
      --font-serif:   'Songti SC', STSong, SimSun, serif;
      --font-body:    -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC',
                       'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
      --font-mono:    'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
    }
    *, *::before, *::after { margin:0; padding:0; box-sizing:border-box; -webkit-font-smoothing:antialiased; }
    html, body { height:100%; background:var(--bg); color:var(--text-1); font-family:var(--font-body); font-size:14px; line-height:1.5; }

    /* ── NAV ── */
    /* 不固定，随页面一起滚，给内容让出垂直空间 */
    .nav {
      position:relative; z-index:100;
      height:var(--nav-h);
      background:#FFFFFF;
      border-bottom:1px solid var(--border);
      display:flex; align-items:center; padding:0 28px; gap:0;
    }
    .nav-logo { display:flex; align-items:center; gap:8px; margin-right:32px; flex-shrink:0; cursor:pointer; text-decoration:none; }
    .nav-logo-icon { width:30px; height:30px; border-radius:9px; background:var(--primary); display:flex; align-items:center; justify-content:center; }
    .nav-logo-text { font-family:var(--font-serif); font-size:17px; font-weight:700; color:var(--text-1); }
    .nav-links { display:flex; align-items:center; gap:2px; }
    .nav-link { padding:5px 13px; border-radius:8px; font-size:13.5px; font-weight:500; color:var(--text-2); cursor:pointer; border:none; background:none; text-decoration:none; transition:all 0.13s; }
    .nav-link:hover { background:var(--surface-2); color:var(--text-1); }
    .nav-link.active { background:var(--primary-bg); color:var(--primary); font-weight:600; }
    .nav-spacer { flex:1; }
    .nav-date { font-family:var(--font-mono); font-size:11px; color:var(--text-3); margin-right:14px; }
    .live-badge { display:flex; align-items:center; gap:5px; padding:3px 9px; border-radius:20px; background:#F5F0FF; border:1px solid #DDD6FE; margin-right:14px; }
    .live-dot { width:5px; height:5px; border-radius:50%; background:#7C3AED; }
    .nav-search-wrap { position:relative; margin-right:10px; }
    .nav-search { width:200px; background:var(--surface-2); border:1px solid var(--border); border-radius:8px; padding:6px 12px 6px 32px; font-size:12.5px; font-family:var(--font-body); color:var(--text-1); outline:none; transition:all 0.14s; }
    .nav-search::placeholder { color:var(--text-3); }
    .nav-search:focus { border-color:var(--border-2); width:240px; background:white; }
    .nav-search-icon { position:absolute; left:9px; top:50%; transform:translateY(-50%); color:var(--text-3); pointer-events:none; }
    .nav-btn { width:32px; height:32px; border-radius:8px; border:1px solid var(--border); background:white; display:flex; align-items:center; justify-content:center; cursor:pointer; color:var(--text-2); transition:all 0.13s; position:relative; }
    .nav-btn:hover { background:var(--surface-2); color:var(--text-1); }
    .notif-dot { position:absolute; top:4px; right:4px; width:5px; height:5px; background:var(--bear); border-radius:50%; }

    /* ── NAV 升级会员按钮 ── */
    .nav-upgrade-btn {
      display: inline-flex; align-items: center; justify-content: center;
      height: 30px; padding: 0 12px; margin-right: 6px;
      border-radius: 8px; border: 1.5px solid var(--primary, #1C3DB8);
      color: var(--primary, #1C3DB8);
      font-size: 12.5px; font-weight: 700; text-decoration: none;
      transition: background .13s, color .13s;
      white-space: nowrap;
    }
    .nav-upgrade-btn:hover,
    .nav-upgrade-btn.active {
      background: var(--primary, #1C3DB8); color: #fff;
    }

    /* ── NAV 用户区（登录/注册，全站复用）── */
    .nav-auth { display:flex; align-items:center; gap:8px; margin-left:4px; }
    .nav-btn-primary {
      display:inline-flex; align-items:center; justify-content:center;
      height:32px; padding:0 14px; border-radius:8px;
      font-size:13px; font-weight:600;
      background:var(--primary); color:#fff; text-decoration:none;
      transition:filter 0.13s, transform 0.13s;
    }
    .nav-btn-primary:hover { filter:brightness(1.06); }
    .nav-btn-primary:active { transform:translateY(1px); }

    .nav-user { position:relative; margin-left:4px; }
    .nav-user-btn {
      display:inline-flex; align-items:center; gap:8px;
      height:34px; padding:0 10px 0 6px;
      border-radius:8px; border:1px solid var(--border);
      background:#fff; color:var(--text-1);
      font-size:13px; font-weight:500; cursor:pointer;
      transition:background 0.13s, border-color 0.13s;
    }
    .nav-user-btn:hover { background:var(--surface-2); border-color:var(--border-2); }
    .nav-user-btn.active { background:var(--primary-bg); border-color:var(--primary-bg); color:var(--primary); }
    .nav-user-avatar {
      width:24px; height:24px; border-radius:50%;
      background:var(--primary); color:#fff;
      font-size:12px; font-weight:700;
      display:inline-flex; align-items:center; justify-content:center;
      font-family:var(--font-body);
    }
    .nav-user-text { font-weight:600; }
    .nav-user-plan {
      font-size:10.5px; font-weight:700; letter-spacing:0.4px;
      padding:1px 6px; border-radius:4px;
      font-family:var(--font-mono);
    }
    .nav-user-plan.plan-pro { background:#FEF3C7; color:#92400E; }
    .nav-user-plan.plan-max { background:#1C3DB8; color:#fff; }

    .nav-user-menu {
      position:absolute; top:calc(100% + 6px); right:0;
      min-width:240px;
      background:#fff;
      border:1px solid var(--border);
      border-radius:12px;
      box-shadow:0 12px 32px rgba(0,0,0,0.10);
      padding:6px;
      z-index:200;
    }
    .nav-user-meta {
      padding:10px 12px 12px;
      border-bottom:1px solid var(--border);
      margin-bottom:4px;
    }
    .nav-user-meta-name { font-size:13.5px; font-weight:700; color:var(--text-1); }
    .nav-user-meta-email { font-size:11.5px; color:var(--text-3); margin-top:2px; word-break:break-all; }
    .nav-user-meta-plan { font-size:11.5px; color:var(--text-2); margin-top:6px; }
    .nav-user-meta-plan strong { color:var(--primary); font-family:var(--font-mono); }
    .nav-user-menu-item {
      display:block; width:100%;
      padding:8px 12px; border-radius:8px;
      font-size:13px; color:var(--text-1);
      text-align:left; text-decoration:none;
      border:none; background:none; cursor:pointer;
      font-family:var(--font-body);
    }
    .nav-user-menu-item:hover { background:var(--surface-2); }
    .nav-user-menu-form { margin:0; }
    .nav-user-menu-logout { color:var(--bull); }
    .nav-user-menu-logout:hover { background:var(--bull-bg); }

    /* ── PAGES ── */
    .pages { min-height:calc(100vh - var(--nav-h)); }
    .page { display:none; }
    .page.active { display:block; }

    /* ── EVENT CENTER PAGE ── */
    .ev-page-wrap { max-width:var(--max-w); margin:0 auto; padding:26px 24px 60px; }

    .pg-head { margin-bottom:20px; }
    .pg-title { font-family:var(--font-serif); font-size:22px; font-weight:700; letter-spacing:-0.3px; margin-bottom:2px; }
    .pg-sub   { font-size:12.5px; color:var(--text-3); }

    /* ── FILTER BAR ── */
    .filter-bar {
      display:flex; align-items:center; gap:8px; flex-wrap:wrap;
      margin-bottom:20px; padding-bottom:16px;
      border-bottom:1px solid var(--border);
    }
    .filter-label { font-size:12px; color:var(--text-3); font-weight:500; margin-right:2px; white-space:nowrap; }
    .ev-type-strip { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
    .ev-type-chip {
      padding:4px 12px; border-radius:20px; font-size:12px; font-weight:500;
      cursor:pointer; user-select:none; border:1px solid var(--border);
      color:var(--text-2); background:white; text-decoration:none; transition:all 0.13s;
    }
    .ev-type-chip:hover { border-color:var(--border-2); color:var(--text-1); }
    .ev-type-chip.active { background:var(--text-1); border-color:var(--text-1); color:white; }
    .ev-search-wrap {
      position:relative;
      display:flex;
      align-items:center;
      margin-left:auto;
      min-width:260px;
    }
    .ev-search {
      width:100%;
      height:34px;
      padding:0 34px 0 34px;
      border:1px solid var(--border);
      border-radius:999px;
      background:white;
      color:var(--text-1);
      font-family:var(--font-body);
      font-size:12.5px;
      outline:none;
      transition:border-color 0.14s, box-shadow 0.14s, background 0.14s;
    }
    .ev-search:focus {
      border-color:var(--text-1);
      background:#fff;
      box-shadow:0 6px 18px rgba(0,0,0,0.06);
    }
    .ev-search::placeholder { color:var(--text-3); }
    .ev-search-icon {
      position:absolute;
      left:12px;
      color:var(--text-3);
      pointer-events:none;
    }
    .ev-search-clear {
      position:absolute;
      right:8px;
      width:22px;
      height:22px;
      border:0;
      border-radius:50%;
      background:var(--surface-2);
      color:var(--text-3);
      cursor:pointer;
      display:none;
      align-items:center;
      justify-content:center;
    }
    .ev-search-clear.visible { display:flex; }
    .ev-search-clear:hover { color:var(--text-1); background:var(--border); }

    /* ── CONCEPT SECTOR PANEL ─────────────────────────────────────── */
    .cs-panel {
      background:var(--surface);
      border:1px solid var(--border-1);
      border-radius:10px;
      margin-bottom:14px;
      overflow:hidden;
    }
    .cs-head {
      display:flex;
      align-items:center;
      gap:8px;
      padding:9px 14px;
      border-bottom:1px solid var(--border-1);
      background:var(--surface-2);
    }
    .cs-title {
      font-size:12.5px;
      font-weight:600;
      color:var(--text-1);
    }
    .cs-date {
      font-size:11.5px;
      color:var(--text-3);
      margin-right:auto;
    }
    .cs-toggle {
      background:none;
      border:none;
      cursor:pointer;
      color:var(--text-3);
      padding:2px 4px;
      display:flex;
      align-items:center;
      border-radius:4px;
      transition:background 0.15s, color 0.15s;
    }
    .cs-toggle:hover { background:var(--border-1); color:var(--text-1); }
    #cs-chevron { transition:transform 0.2s; }
    .cs-panel.collapsed #cs-chevron { transform:rotate(180deg); }
    .cs-panel.collapsed .cs-body { display:none; }

    .cs-tabs {
      display:flex;
      flex-wrap:wrap;
      gap:5px;
      padding:8px 14px;
      border-bottom:1px solid var(--border-1);
    }
    .cs-tab {
      background:none;
      border:1px solid var(--border-1);
      border-radius:20px;
      padding:3px 11px;
      font-size:12px;
      color:var(--text-2);
      cursor:pointer;
      white-space:nowrap;
      transition:all 0.15s;
    }
    .cs-tab:hover { border-color:var(--accent); color:var(--accent); }
    .cs-tab.active {
      background:var(--accent);
      border-color:var(--accent);
      color:#fff;
      font-weight:500;
    }

    .cs-stocks-wrap { padding:10px 14px 12px; }
    .cs-stock-panel { display:none; flex-wrap:wrap; gap:6px; align-items:center; }
    .cs-stock-panel.active { display:flex; }
    /* ── 概念页 · 排名手风琴 ─────────────────────────────────────── */
    .cs-accordion {
      border:1px solid var(--border-1);
      border-radius:12px;
      overflow:hidden;
      background:var(--surface);
      box-shadow:0 2px 12px rgba(15,23,42,0.05);
    }
    .cs-acrd-item {
      border-bottom:1px solid var(--border-1);
      transition:background 0.15s;
    }
    .cs-acrd-item:last-child { border-bottom:none; }
    .cs-acrd-item.open {
      background:var(--surface);
    }

    .cs-acrd-head {
      display:flex;
      align-items:center;
      gap:10px;
      padding:11px 16px;
      width:100%;
      background:none;
      border:none;
      cursor:pointer;
      text-align:left;
      transition:background 0.15s;
      position:relative;
    }
    .cs-acrd-head::before {
      content:'';
      position:absolute;
      left:0; top:0; bottom:0;
      width:3px;
      background:transparent;
      transition:background 0.2s;
      border-radius:0 2px 2px 0;
    }
    .cs-acrd-item.open > .cs-acrd-head::before {
      background:var(--accent);
    }
    .cs-acrd-head:hover { background:color-mix(in srgb, var(--accent) 4%, var(--surface)); }
    .cs-acrd-item.open > .cs-acrd-head {
      background:color-mix(in srgb, var(--accent) 5%, var(--surface));
      border-bottom:1px solid var(--border-1);
    }

    /* 排名徽章 */
    .cs-acrd-rank {
      display:inline-flex;
      align-items:center;
      justify-content:center;
      min-width:24px;
      height:20px;
      padding:0 5px;
      font-size:10.5px;
      font-weight:700;
      color:var(--accent);
      background:color-mix(in srgb, var(--accent) 10%, transparent);
      border-radius:5px;
      flex-shrink:0;
    }
    .cs-acrd-item.open .cs-acrd-rank {
      background:var(--accent);
      color:#fff;
    }
    .cs-acrd-name {
      font-size:13.5px;
      font-weight:600;
      color:var(--text-1);
      white-space:nowrap;
      flex-shrink:0;
    }
    .cs-acrd-desc {
      font-size:11.5px;
      color:var(--text-3);
      flex:1;
      overflow:hidden;
      text-overflow:ellipsis;
      white-space:nowrap;
      min-width:0;
    }
    .cs-acrd-count {
      font-size:11px;
      color:var(--text-3);
      background:var(--surface-2);
      border:1px solid var(--border-1);
      border-radius:20px;
      padding:2px 8px;
      white-space:nowrap;
      flex-shrink:0;
    }
    .cs-acrd-arrow {
      display:inline-flex;
      align-items:center;
      justify-content:center;
      width:18px;
      height:18px;
      color:var(--text-3);
      flex-shrink:0;
      transition:transform 0.2s;
    }
    /* 用 CSS border 绘制小三角，比字符更精准 */
    .cs-acrd-arrow::after {
      content:'';
      display:block;
      width:0; height:0;
      border-left:4px solid transparent;
      border-right:4px solid transparent;
      border-top:5px solid currentColor;
      transition:transform 0.2s;
    }
    .cs-acrd-item.open .cs-acrd-arrow { transform:rotate(180deg); }

    .cs-acrd-body {
      display:none;
      padding:14px 16px 16px;
    }
    .cs-acrd-item.open > .cs-acrd-body { display:block; }

    /* 成分股区块标题 */
    .cs-body-section-label {
      font-size:11px;
      font-weight:600;
      color:var(--text-3);
      text-transform:uppercase;
      letter-spacing:0.5px;
      margin-bottom:8px;
    }

    .cs-acrd-body .cs-stock-panel {
      display:flex;
      flex-wrap:wrap;
      gap:6px;
      margin-bottom:4px;
    }

    /* 成分股 chip */
    .cs-stock {
      display:inline-flex;
      align-items:center;
      gap:5px;
      padding:4px 10px;
      background:var(--surface-2);
      border:1px solid var(--border-1);
      border-radius:20px;
      text-decoration:none;
      transition:all 0.15s;
      white-space:nowrap;
    }
    .cs-stock:hover {
      border-color:var(--accent);
      background:color-mix(in srgb, var(--accent) 6%, var(--surface));
      box-shadow:0 2px 8px rgba(28,61,184,0.10);
    }
    .cs-stock-name { font-size:12px; font-weight:500; color:var(--text-1); }
    .cs-stock-price {
      font-family:var(--font-mono);
      font-size:11px;
      color:var(--text-2);
    }
    .cs-stock-chg {
      font-family:var(--font-mono);
      font-size:11px;
      font-weight:600;
    }
    .cs-stock-chg.bull { color:var(--bull); }
    .cs-stock-chg.bear { color:var(--bear); }
    .cs-stock-chg.flat { color:var(--text-3); }
    .cs-stock-more {
      font-size:11px;
      color:var(--text-3);
      padding:4px 8px;
      background:var(--surface-2);
      border-radius:20px;
    }

    /* ── 概念板块 · 近期事件轴 ────────────────────────────────────── */
    .cs-events-wrap {
      margin-top:14px;
      border-top:1px solid var(--border-1);
      padding-top:12px;
    }
    .cs-events-head {
      display:flex;
      align-items:center;
      justify-content:space-between;
      margin-bottom:9px;
    }
    .cs-events-title {
      font-size:11.5px;
      font-weight:600;
      color:var(--text-2);
      display:flex;
      align-items:center;
      gap:5px;
    }
    .cs-events-more {
      font-size:11px;
      color:var(--accent);
      text-decoration:none;
      padding:2px 7px;
      border:1px solid color-mix(in srgb, var(--accent) 30%, transparent);
      border-radius:4px;
      transition:all 0.15s;
    }
    .cs-events-more:hover {
      background:color-mix(in srgb, var(--accent) 8%, transparent);
    }
    .cs-events-list { display:flex; flex-direction:column; gap:4px; }
    .cs-events-loading,
    .cs-events-empty {
      font-size:11.5px;
      color:var(--text-3);
      padding:6px 0;
    }
    .cs-ev-item {
      display:grid;
      grid-template-columns:auto 1fr auto;
      align-items:center;
      gap:8px;
      padding:7px 10px;
      background:var(--surface-2);
      border:1px solid var(--border-1);
      border-radius:8px;
      text-decoration:none;
      transition:all 0.15s;
    }
    .cs-ev-item:hover {
      border-color:var(--accent);
      background:color-mix(in srgb, var(--accent) 4%, var(--surface));
      box-shadow:0 2px 8px rgba(28,61,184,0.08);
    }
    .cs-ev-time {
      font-size:10.5px;
      color:var(--text-3);
      white-space:nowrap;
      font-family:var(--font-mono);
    }
    .cs-ev-title {
      font-size:12.5px;
      color:var(--text-1);
      line-height:1.4;
      overflow:hidden;
      text-overflow:ellipsis;
      white-space:nowrap;
    }
    .cs-ev-tags {
      display:flex;
      gap:4px;
      flex-shrink:0;
    }
    .cs-ev-tag {
      font-size:9.5px;
      background:color-mix(in srgb, var(--accent) 10%, transparent);
      color:var(--accent);
      border-radius:3px;
      padding:1px 5px;
      white-space:nowrap;
    }

    /* PRO badge */
    .cs-events-pro-badge {
      display:inline-flex;
      align-items:center;
      font-size:8.5px;
      font-weight:700;
      background:linear-gradient(135deg, #6366f1, #8b5cf6);
      color:#fff;
      border-radius:3px;
      padding:1px 5px;
      letter-spacing:0.3px;
    }

    /* 非 PRO 升级门禁 */
    .cs-events-gate {
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:12px;
      padding:10px 14px;
      background:linear-gradient(135deg,
        color-mix(in srgb, var(--accent) 5%, var(--surface-2)),
        color-mix(in srgb, #8b5cf6 5%, var(--surface-2))
      );
      border:1px solid color-mix(in srgb, var(--accent) 20%, var(--border-1));
      border-radius:8px;
      flex-wrap:wrap;
    }
    .cs-events-gate-text {
      font-size:12px;
      color:var(--text-2);
      flex:1;
    }

    /* 日期 badge（heading 右侧） */
    .cs-date-badge {
      font-size:11.5px;
      font-weight:400;
      color:var(--text-3);
      background:var(--surface-2);
      border:1px solid var(--border-1);
      border-radius:4px;
      padding:1px 7px;
      margin-left:8px;
    }

    /* 手风琴移动端优化 */
    @media(max-width:640px) {
      .cs-acrd-head { padding:10px 12px; gap:8px; }
      .cs-acrd-desc { display:none; }
      .cs-acrd-body { padding:12px 12px 14px; }
      .cs-ev-item { grid-template-columns:auto 1fr; }
      .cs-ev-tags { display:none; }
    }

    /* ── TWO-COLUMN EVENT WORKSPACE ── */
    .ev-layout {
      display:grid;
      grid-template-columns:440px minmax(0, 1fr);
      gap:18px;
      align-items:start;
    }
    .ev-list-shell {
      min-width:0;
    }
    .ev-detail {
      min-height:520px;
      background:white;
      border:1px solid var(--border);
      border-radius:16px;
      box-shadow:0 8px 32px rgba(0,0,0,0.05);
      overflow:hidden;
      display:flex;
      flex-direction:column;
      /* 桌面端：黏在视口顶部（header 已跟着页面滚走），内部自身滚动；
         sticky 粘附到 .ev-layout 底部自动停住，不会遮挡下方分页/免责。 */
      position:sticky;
      top:8px;
      max-height:calc(100vh - 16px);
      /* 防止长内容把 grid track 拉伸 */
      align-self:start;
    }
    /* 实际滚动在子元素上：避免移动端 fixed + transform 父层导致无法触控滑动 */
    .ev-detail-scroll {
      flex:1;
      min-height:0;
      overflow-x:hidden;
      overflow-y:auto;
      -webkit-overflow-scrolling:touch;
      touch-action:pan-y;
      overscroll-behavior-y:contain;
      scrollbar-width:thin;
      scrollbar-color:rgba(0,0,0,0.18) transparent;
    }
    .ev-detail-scroll::-webkit-scrollbar { width:6px; }
    .ev-detail-scroll::-webkit-scrollbar-thumb {
      background:rgba(0,0,0,0.18); border-radius:3px;
    }
    .ev-detail-scroll::-webkit-scrollbar-track { background:transparent; }
    .ev-card {
      display:block;
      position:relative;
      background:white;
      border:1px solid var(--border);
      border-radius:var(--r);
      margin-bottom:10px;
      padding:13px 14px 12px 17px;
      overflow:hidden;
      transition:box-shadow 0.14s, border-color 0.14s, transform 0.14s;
      cursor:pointer;
      color:inherit;
      text-decoration:none;
      --exp-color: var(--border-2);
    }
    .ev-card::before {
      content:'';
      position:absolute;
      left:0;
      top:0;
      bottom:0;
      width:3px;
      background:var(--exp-color);
      opacity:0.9;
    }
    .ev-card:hover {
      border-color:var(--border-2);
      box-shadow:0 3px 16px rgba(0,0,0,0.07);
      transform:translateY(-1px);
    }
    .ev-card.active {
      border-color:var(--text-1);
      box-shadow:0 8px 26px rgba(0,0,0,0.08);
    }
    .ev-card-meta {
      display:flex;
      align-items:center;
      gap:7px;
      margin-bottom:7px;
      flex-wrap:wrap;
    }
    .ev-exp-score {
      display:inline-flex;
      align-items:center;
      justify-content:center;
      min-width:28px;
      height:21px;
      padding:0 5px;
      border-radius:5px;
      font-family:var(--font-mono);
      font-size:11px;
      font-weight:700;
      color:var(--exp-color);
      background:transparent;
      border:1px solid var(--exp-color);
      letter-spacing:-0.2px;
    }
    .ev-exp-score.muted {
      color:var(--text-3);
      border-color:var(--border-2);
    }
    .ev-type-tag {
      display:inline-flex;
      padding:2px 8px;
      border-radius:4px;
      font-size:10.5px;
      font-weight:600;
      background:var(--primary-bg);
      color:var(--primary);
    }
    .ev-type-tag.宏观      { background:#F0F0F0; color:var(--text-2); }
    .ev-type-tag.政策      { background:var(--bull-bg); color:var(--bull); }
    .ev-type-tag.海外事件  { background:#F5F0FF; color:#7C3AED; }
    .ev-type-tag.公司事件  { background:#FFF5F0; color:#C2410C; }
    .ev-time {
      font-family:var(--font-mono);
      font-size:11px;
      color:var(--text-3);
    }
    .ev-title {
      font-size:14px;
      font-weight:650;
      line-height:1.5;
      margin-bottom:6px;
      display:-webkit-box;
      -webkit-line-clamp:2;
      line-clamp:2;
      -webkit-box-orient:vertical;
      overflow:hidden;
    }
    .ev-desc {
      font-size:12px;
      color:var(--text-2);
      line-height:1.65;
      margin-bottom:10px;
      display:-webkit-box;
      -webkit-line-clamp:1;
      line-clamp:1;
      -webkit-box-orient:vertical;
      overflow:hidden;
    }
    /* 首页事件卡片 · 概念板块 tag */
    .ev-concept-tags {
      display:flex;
      flex-wrap:wrap;
      gap:5px;
      margin:7px 0 0;
    }
    .ev-concept-chip {
      display:inline-flex;
      align-items:center;
      gap:4px;
      font-size:10.5px;
      font-weight:600;
      color:#3150B7;
      background:linear-gradient(180deg, #F4F7FF 0%, #EEF3FF 100%);
      border:1px solid #DCE6FF;
      border-radius:999px;
      padding:2px 7px;
      text-decoration:none;
      white-space:nowrap;
      transition:all 0.15s;
      line-height:1.45;
      box-shadow:0 1px 2px rgba(28,61,184,0.04);
    }
    .ev-concept-chip::before {
      content:'';
      width:5px;
      height:5px;
      border-radius:50%;
      background:#4F6FEA;
      opacity:.8;
      flex-shrink:0;
    }
    /* 概念 tag 只做展示，不作为链接跳转 */

    .ev-stock-tags {
      display:flex;
      align-items:center;
      gap:6px;
      flex-wrap:wrap;
    }
    .ev-stock-pill {
      display:inline-flex;
      align-items:center;
      gap:4px;
      max-width:132px;
      padding:3px 7px;
      border-radius:7px;
      background:var(--surface-2);
      border:1px solid var(--border);
      font-size:11px;
      color:var(--text-2);
      cursor:pointer;
      text-decoration:none;
      transition:all 0.14s;
    }
    .ev-stock-pill:hover {
      background:white;
      border-color:var(--border-2);
      color:var(--text-1);
    }
    .ev-stock-pill.more, .ev-stock-pill.static { cursor:default; }
    .ev-stock-pill.more:hover,
    .ev-stock-pill.static:hover { background:var(--surface-2); color:var(--text-2); border-color:var(--border); }
    .ev-stock-pill-name {
      overflow:hidden;
      text-overflow:ellipsis;
      white-space:nowrap;
    }
    .ev-stock-pill-score {
      font-family:var(--font-mono);
      font-size:10px;
      color:var(--primary);
      flex-shrink:0;
    }
    .ev-stock-pill-score.bull { color:var(--bull); }
    .ev-stock-pill-score.bear { color:var(--bear); }
    .ev-stock-pill-score.flat { color:var(--text-3); }
    .ev-stock-pill.more {
      color:var(--text-3);
      border-style:dashed;
    }
    .ev-detail-head {
      position:relative;
      padding:22px 24px 18px;
      border-bottom:1px solid var(--border);
      background:linear-gradient(180deg, #FFFFFF 0%, #FAFAF8 100%);
    }
    .ev-detail-title {
      display:flex;
      align-items:flex-start;
      gap:10px;
      font-family:var(--font-serif);
      font-size:25px;
      font-weight:700;
      line-height:1.35;
      letter-spacing:-0.4px;
      margin-top:10px;
    }
    .ev-detail-desc {
      padding:20px 24px 4px;
      font-size:13.5px;
      color:var(--text-2);
      line-height:1.9;
    }
    /* 右侧详情面板 · 概念板块 tags */
    .ev-detail-concepts {
      display:flex;
      flex-wrap:wrap;
      gap:5px;
      padding:10px 0 0;
    }
    .ev-detail-concepts .ev-concept-chip {
      font-size:11px;
      padding:2px 8px;
    }

    .ev-detail-section {
      padding:18px 24px 24px;
    }
    .ev-detail-section-head {
      display:flex;
      align-items:center;
      justify-content:space-between;
      margin-bottom:12px;
    }
    .ev-detail-section-title {
      font-family:var(--font-serif);
      font-size:16px;
      font-weight:700;
    }
    .ev-detail-section-count {
      font-size:11px;
      color:var(--text-3);
    }
    .ev-concept-section {
      padding-bottom:6px;
    }
    .ev-concept-chips {
      display:flex;
      flex-wrap:wrap;
      gap:8px;
    }
    .ev-concept-chips .ev-concept-chip {
      border:1px solid rgba(28,61,184,0.18);
      border-radius:999px;
      background:var(--primary-bg);
      color:var(--primary);
      font-size:12px;
      font-weight:700;
      text-decoration:none;
      transition:all 0.14s;
    }
    .ev-concept-chips .ev-concept-chip:hover {
      border-color:rgba(28,61,184,0.42);
      background:#fff;
      transform:translateY(-1px);
    }
    .ev-stock-row {
      display:grid;
      grid-template-columns:auto 1fr auto;
      align-items:start;
      column-gap:11px;
      row-gap:4px;
      padding:12px 13px;
      background:var(--surface-2);
      border:1px solid var(--border);
      border-radius:10px;
      margin-bottom:8px;
    }
    .ev-stock-row:last-child { margin-bottom:0; }
    .ev-stock-ava {
      grid-column:1;
      grid-row:1 / span 3;
      width:34px;
      height:34px;
      border-radius:9px;
      display:flex;
      align-items:center;
      justify-content:center;
      font-size:13px;
      font-weight:800;
      text-decoration:none;
      color:inherit;
      cursor:pointer;
      font-family:var(--font-serif);
      flex-shrink:0;
      transition:transform 0.14s;
    }
    .ev-stock-ava:hover { transform:scale(1.05); }
    .ev-stock-info {
      grid-column:2;
      grid-row:1;
      min-width:0;
      display:flex;
      flex-direction:column;
      gap:2px;
    }
    .ev-stock-name-row {
      display:flex;
      align-items:center;
      gap:6px;
      flex-wrap:wrap;
    }
    .ev-stock-name-link {
      display:block;
      text-decoration:none;
      color:inherit;
      cursor:pointer;
    }
    .ev-stock-name-link:hover .ev-stock-name { color:var(--primary); }
    .ev-stock-name {
      font-size:13.5px;
      font-weight:700;
      line-height:1.3;
    }
    .ev-stock-code {
      font-family:var(--font-mono);
      font-size:10px;
      color:var(--text-3);
    }
    .ev-rel-tag {
      display:inline-flex;
      align-items:center;
      padding:1px 7px;
      border-radius:4px;
      font-size:10px;
      font-weight:600;
      line-height:1.5;
      border:1px solid transparent;
      white-space:nowrap;
    }
    .ev-stock-reason {
      grid-column:2 / span 2;
      grid-row:3;
      font-size:12px;
      color:var(--text-2);
      line-height:1.65;
    }
    .ev-stock-score {
      grid-column:3;
      grid-row:1;
      font-family:var(--font-mono);
      font-size:11.5px;
      font-weight:700;
      color:var(--text-2);
      white-space:nowrap;
      align-self:center;
      display:inline-flex;
      align-items:center;
      gap:4px;
    }
    .ev-stock-score::before {
      content:'关联度';
      font-family:var(--font-body);
      font-size:10.5px;
      font-weight:600;
      color:var(--text-3);
    }
    .ev-stock-score.hi  { color:var(--primary); }
    .ev-stock-score.mid { color:#B0741F; }
    .ev-stock-score.lo  { color:var(--text-3); }

    /* ── STOCK QUOTE ROW（股票行内行情 + T+N + mini 图）───────────────── */
    .ev-stock-quote {
      grid-column:2 / span 2;
      grid-row:2;
      display:flex;
      align-items:center;
      gap:10px;
      flex-wrap:wrap;
      font-size:12px;
      color:var(--text-2);
      padding:4px 0 2px;
    }
    .ev-stock-reason-wrap {
      grid-column:2 / span 2;
      grid-row:3;
    }
    .qt-price {
      font-family:var(--font-mono);
      font-weight:700;
      font-size:13px;
      color:var(--text-1);
    }
    .qt-chg {
      font-family:var(--font-mono);
      font-size:11.5px;
      font-weight:700;
      padding:1px 6px;
      border-radius:4px;
    }
    .qt-chg.bull { color:var(--bull); background:var(--bull-bg); }
    .qt-chg.bear { color:var(--bear); background:var(--bear-bg); }
    .qt-chg.flat { color:var(--text-3); background:var(--surface-2); }
    .qt-range {
      font-family:var(--font-mono);
      font-size:10.5px;
      font-weight:600;
      color:var(--text-3);
      letter-spacing:0.2px;
      white-space:nowrap;
    }
    /* 未锁定（进行中）的 T+N 标签后挂一个浅色点，提示数值还会变 */
    .qt-range-pending {
      display:inline-block;
      margin-left:3px;
      width:5px;
      height:5px;
      border-radius:50%;
      background:var(--text-3);
      opacity:0.55;
      vertical-align:middle;
      text-indent:-9999px;
      overflow:hidden;
    }
    .qt-help {
      position:relative;
      display:inline-flex;
      align-items:center;
      justify-content:center;
      width:16px;
      height:16px;
      margin-left:-6px;
      border:1px solid var(--border-2);
      border-radius:50%;
      background:white;
      color:var(--text-3);
      font-family:var(--font-mono);
      font-size:10px;
      font-weight:700;
      line-height:1;
      cursor:help;
      outline:none;
    }
    .qt-help:hover,
    .qt-help:focus {
      border-color:var(--text-1);
      color:var(--text-1);
    }
    .qt-help::after {
      content:attr(data-tip);
      position:absolute;
      left:50%;
      bottom:calc(100% + 9px);
      z-index:30;
      width:260px;
      padding:9px 11px;
      border:1px solid var(--border);
      border-radius:10px;
      background:rgba(255,255,255,0.98);
      box-shadow:0 12px 30px rgba(0,0,0,0.13);
      color:var(--text-2);
      font-family:var(--font-body);
      font-size:11.5px;
      font-weight:500;
      line-height:1.65;
      white-space:normal;
      opacity:0;
      pointer-events:none;
      transform:translate(-50%, 4px);
      transition:opacity 0.14s, transform 0.14s;
    }
    .qt-help::before {
      content:'';
      position:absolute;
      left:50%;
      bottom:calc(100% + 3px);
      z-index:31;
      width:10px;
      height:10px;
      border-right:1px solid var(--border);
      border-bottom:1px solid var(--border);
      background:white;
      opacity:0;
      pointer-events:none;
      transform:translate(-50%, 4px) rotate(45deg);
      transition:opacity 0.14s, transform 0.14s;
    }
    .qt-help:hover::after,
    .qt-help:hover::before,
    .qt-help:focus::after,
    .qt-help:focus::before {
      opacity:1;
      transform:translate(-50%, 0) rotate(0deg);
    }
    .qt-help:hover::before,
    .qt-help:focus::before {
      transform:translate(-50%, 0) rotate(45deg);
    }
    .qt-sep { color:var(--border-2); margin:0 -3px; }
    .qt-tplus {
      display:inline-flex;
      align-items:center;
      gap:5px;
      font-size:11.5px;
      color:var(--text-3);
    }
    .qt-tplus-label { font-weight:500; }
    .qt-tplus-val {
      font-family:var(--font-mono);
      font-weight:700;
      font-size:12px;
    }
    .qt-tplus-val.bull { color:var(--bull); }
    .qt-tplus-val.bear { color:var(--bear); }
    .qt-tplus-val.flat { color:var(--text-3); }
    .qt-tplus-mark {
      font-size:9px;
      font-weight:700;
      padding:0 4px;
      border-radius:3px;
      letter-spacing:0.02em;
    }
    .qt-tplus-mark.locked { background:var(--surface-2); color:var(--text-3); }
    .qt-tplus-mark.progressing { background:#FFF9E6; color:#A85C08; }
    .qt-mini {
      margin-left:auto;
      display:inline-flex;
      align-items:center;
      justify-content:center;
      width:76px;
      height:26px;
      padding:3px 5px;
      border:1px solid var(--border);
      border-radius:999px;
      background:white;
      cursor:pointer;
      transition:border-color 0.14s, transform 0.14s, box-shadow 0.14s;
    }
    .qt-mini:hover {
      border-color:var(--text-1);
      transform:translateY(-1px);
      box-shadow:0 4px 12px rgba(0,0,0,0.06);
    }
    .qt-mini svg { display:block; }
    .qt-loading {
      font-size:11px;
      color:var(--text-3);
    }
    .qt-loading::after {
      content:'...';
      display:inline-block;
      animation:dots 1.2s steps(4, end) infinite;
      vertical-align:baseline;
      overflow:hidden;
      width:0;
    }
    @keyframes dots {
      0%   { width:0; }
      100% { width:1.1em; }
    }

    /* ── CHART MODAL（详情弹窗）─────────────────────────────────── */
    .chart-modal {
      position:fixed;
      inset:0;
      z-index:200;
      display:none;
      align-items:center;
      justify-content:center;
      padding:24px;
    }
    .chart-modal.open { display:flex; }
    .chart-modal-mask {
      position:absolute;
      inset:0;
      background:rgba(12,12,12,0.42);
      backdrop-filter:blur(6px);
      -webkit-backdrop-filter:blur(6px);
      animation:fadeIn 0.18s ease both;
    }
    @keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
    .chart-modal-panel {
      position:relative;
      width:min(860px, 100%);
      max-height:calc(100vh - 48px);
      background:white;
      border-radius:18px;
      overflow:hidden;
      display:flex;
      flex-direction:column;
      box-shadow:0 24px 80px rgba(0,0,0,0.28);
      animation:popUp 0.22s cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    @keyframes popUp {
      from { opacity:0; transform:translateY(12px) scale(0.98); }
      to   { opacity:1; transform:translateY(0)   scale(1);    }
    }
    .chart-modal-head {
      display:flex;
      align-items:flex-start;
      gap:14px;
      padding:18px 20px 14px;
      border-bottom:1px solid var(--border);
    }
    .chart-modal-head .ava {
      width:38px;
      height:38px;
      border-radius:10px;
      display:flex;
      align-items:center;
      justify-content:center;
      font-family:var(--font-serif);
      font-weight:800;
      font-size:15px;
      flex-shrink:0;
    }
    .chart-modal-head-main { flex:1; min-width:0; }
    .chart-modal-title-row {
      display:flex;
      align-items:baseline;
      gap:8px;
      flex-wrap:wrap;
    }
    .chart-modal-name {
      font-family:var(--font-serif);
      font-size:19px;
      font-weight:700;
      letter-spacing:-0.2px;
    }
    .chart-modal-code {
      font-family:var(--font-mono);
      font-size:11.5px;
      color:var(--text-3);
    }
    .chart-modal-quote {
      display:flex;
      align-items:center;
      gap:8px;
      margin-top:4px;
      flex-wrap:wrap;
    }
    .chart-modal-price {
      font-family:var(--font-mono);
      font-size:17px;
      font-weight:700;
      color:var(--text-1);
    }
    .chart-modal-detail-link {
      margin-left:6px;
      padding:3px 9px;
      border:1px solid var(--border);
      border-radius:999px;
      background:white;
      color:var(--primary);
      font-size:11.5px;
      font-weight:700;
      text-decoration:none;
      transition:all 0.14s;
      white-space:nowrap;
    }
    .chart-modal-detail-link:hover {
      border-color:var(--primary);
      background:var(--primary-bg);
      transform:translateY(-1px);
    }
    .chart-modal-close {
      width:32px;
      height:32px;
      border:1px solid var(--border);
      background:white;
      border-radius:50%;
      color:var(--text-2);
      cursor:pointer;
      display:flex;
      align-items:center;
      justify-content:center;
      flex-shrink:0;
      transition:all 0.14s;
    }
    .chart-modal-close:hover { border-color:var(--text-1); color:var(--text-1); }
    .chart-event-strip {
      padding:10px 20px;
      background:var(--surface-2);
      border-bottom:1px solid var(--border);
      font-size:12px;
      color:var(--text-2);
      display:flex;
      align-items:center;
      gap:8px;
      flex-wrap:wrap;
    }
    .chart-event-strip .tag {
      font-size:10.5px;
      padding:2px 7px;
      border-radius:4px;
      background:var(--primary-bg);
      color:var(--primary);
      font-weight:600;
    }
    .chart-event-strip .evt-title {
      font-weight:600;
      color:var(--text-1);
      overflow:hidden;
      text-overflow:ellipsis;
      white-space:nowrap;
      max-width:420px;
    }
    .chart-event-strip .evt-time {
      font-family:var(--font-mono);
      font-size:11px;
      color:var(--text-3);
      margin-left:auto;
    }
    .chart-body {
      padding:14px 20px 4px;
      overflow:auto;
      -webkit-overflow-scrolling:touch;
    }
    .chart-period-note {
      display:flex;
      width:max-content;
      margin-bottom:10px;
      padding:5px 13px;
      border:1px solid var(--border);
      border-radius:999px;
      background:var(--surface-2);
      color:var(--text-2);
      font-size:12px;
      font-weight:600;
    }
    .chart-canvas {
      width:100%;
      height:320px;
      background:var(--surface-2);
      border:1px solid var(--border);
      border-radius:10px;
    }
    .chart-state {
      height:320px;
      display:flex;
      align-items:center;
      justify-content:center;
      color:var(--text-3);
      background:var(--surface-2);
      border:1px solid var(--border);
      border-radius:10px;
      font-size:13px;
    }
    .tplus-cards {
      display:grid;
      grid-template-columns:repeat(3, 1fr);
      gap:10px;
      margin:14px 0 6px;
    }
    .tplus-card {
      background:var(--surface-2);
      border:1px solid var(--border);
      border-radius:12px;
      padding:12px 14px;
      position:relative;
    }
    .tplus-card::before {
      content:'';
      position:absolute;
      left:0; top:0; bottom:0;
      width:2px;
      border-radius:2px 0 0 2px;
      background:var(--border-2);
    }
    .tplus-card.locked::before   { background:var(--text-1); }
    .tplus-card.progressing::before { background:#F59E0B; }
    .tplus-label {
      font-family:var(--font-mono);
      font-size:11px;
      color:var(--text-3);
      font-weight:700;
      letter-spacing:0.04em;
    }
    .tplus-value {
      font-family:var(--font-mono);
      font-size:20px;
      font-weight:700;
      margin-top:2px;
      letter-spacing:-0.2px;
    }
    .tplus-value.bull { color:var(--bull); }
    .tplus-value.bear { color:var(--bear); }
    .tplus-value.flat { color:var(--text-3); }
    .tplus-value.muted { color:var(--text-3); font-size:18px; }
    .tplus-status {
      font-size:10.5px;
      color:var(--text-3);
      margin-top:2px;
    }
    .tplus-status.locked { color:var(--text-2); }
    .tplus-status.progressing { color:#A85C08; }
    .chart-max-gain {
      margin:4px 0 18px;
      padding:10px 14px;
      background:var(--primary-bg);
      border-radius:10px;
      font-size:12.5px;
      color:var(--primary);
      line-height:1.6;
    }
    .chart-max-gain b {
      font-family:var(--font-mono);
      font-weight:800;
    }
    .chart-disclaimer {
      padding:0 20px 18px;
      font-size:10.5px;
      color:var(--text-3);
      line-height:1.6;
    }

    /* ── CHART MODAL · MOBILE ─────────────────────────────────── */
    @media(max-width:860px) {
      .chart-modal { padding:0; align-items:flex-end; }
      .chart-modal-mask { backdrop-filter:blur(4px); }
      .chart-modal-panel {
        width:100%;
        max-height:calc(100vh - 40px);
        border-radius:18px 18px 0 0;
        animation:slideUp 0.24s cubic-bezier(0.22, 1, 0.36, 1) both;
      }
      @keyframes slideUp {
        from { transform:translateY(100%); }
        to   { transform:translateY(0); }
      }
      .chart-modal-head { padding:16px 16px 12px; }
      .chart-modal-head .ava { width:34px; height:34px; font-size:14px; }
      .chart-modal-name { font-size:17px; }
      .chart-modal-price { font-size:16px; }
      .chart-event-strip { padding:9px 16px; font-size:11.5px; gap:6px; }
      .chart-event-strip .evt-title { max-width:100%; flex:1 1 100%; }
      .chart-event-strip .evt-time { margin-left:0; }
      .chart-body { padding:12px 14px 4px; }
      .chart-period-note { margin-bottom:10px; }
      .chart-canvas, .chart-state { height:220px; }
      .tplus-cards {
        grid-template-columns:1fr;
        gap:8px;
      }
      .tplus-card { padding:10px 12px; }
      .tplus-value { font-size:18px; }
      .chart-disclaimer { padding:0 14px 16px; }
      .qt-mini { margin-left:auto; }
    }

    /* ── PAGINATION ── */
    .pagination {
      display:flex; align-items:center; justify-content:center;
      gap:6px; padding:22px 0 6px; flex-wrap:wrap;
    }
    .pg-btn {
      min-width:36px; height:36px; border-radius:10px;
      border:1px solid var(--border); background:white;
      font-size:13px; font-weight:600; color:var(--text-2);
      cursor:pointer; text-decoration:none; transition:all 0.14s;
      display:flex; align-items:center; justify-content:center;
      line-height:1; white-space:nowrap; box-shadow:0 2px 8px rgba(0,0,0,0.035);
    }
    .pg-btn:hover { border-color:var(--text-1); color:var(--text-1); transform:translateY(-1px); }
    .pg-btn.active { background:var(--text-1); border-color:var(--text-1); color:white; box-shadow:0 8px 18px rgba(0,0,0,0.12); }
    .pg-btn.disabled { opacity:0.38; cursor:default; pointer-events:none; box-shadow:none; transform:none; }
    .pg-prev, .pg-next { min-width:86px; padding:0 14px; gap:6px; }
    .pg-prev svg, .pg-next svg { flex-shrink:0; }
    .pg-ellipsis { border-color:transparent; background:transparent; box-shadow:none; min-width:28px; }

    .disclaimer { font-size:11px; color:var(--text-3); padding:20px 0 4px; line-height:1.65; text-align:center; }
    /* 超过免费页上限时显示的提示（仅 page_capped=True 时出现） */
    .pg-cap-tip {
      text-align:center; font-size:12.5px; color:var(--text-2);
      padding:10px 16px 6px;
      background:color-mix(in srgb, var(--accent) 5%, var(--surface-2));
      border:1px solid color-mix(in srgb, var(--accent) 18%, var(--border-1));
      border-radius:8px;
      margin-top:8px;
    }
    .pg-cap-tip a { color:var(--accent); font-weight:600; text-decoration:none; }
    .pg-cap-tip a:hover { text-decoration:underline; }
    /* 超出免费页范围的分页按钮 */
    .pg-btn.pg-capped {
      opacity:0.55;
      font-size:12px;
      gap:3px;
      padding:0 6px;
    }
    .pg-btn.pg-capped:hover { opacity:0.8; border-color:var(--accent); color:var(--accent); transform:none; }
    .pg-lock { font-size:9px; line-height:1; }

    /* ── ABOUT PAGE ── */
    .about-page-wrap { max-width:1120px; margin:0 auto; padding:26px 24px 68px; }
    .about-hero {
      position:relative;
      overflow:hidden;
      border-radius:24px;
      padding:42px 44px;
      color:white;
      background:
        radial-gradient(circle at 82% 18%, rgba(255,255,255,0.22), transparent 26%),
        radial-gradient(circle at 8% 86%, rgba(174,218,199,0.26), transparent 32%),
        linear-gradient(135deg, #0C0C0C 0%, #13245F 48%, #1C3DB8 100%);
      box-shadow:0 20px 60px rgba(28,61,184,0.20);
    }
    .about-kicker { font-size:12px; font-weight:700; letter-spacing:0.14em; color:#C9D4FF; margin-bottom:12px; }
    .about-title { max-width:760px; font-family:var(--font-serif); font-size:44px; line-height:1.18; letter-spacing:-1px; margin-bottom:16px; }
    .about-lead { max-width:720px; color:rgba(255,255,255,0.78); font-size:15px; line-height:1.9; }
    .about-actions { display:flex; gap:10px; flex-wrap:wrap; margin-top:26px; }
    .about-btn { border:1px solid rgba(255,255,255,0.18); border-radius:999px; padding:10px 18px; font-size:13px; font-weight:700; cursor:pointer; transition:transform 0.14s, background 0.14s; }
    .about-btn:hover { transform:translateY(-1px); }
    .about-btn.primary { background:white; color:var(--primary); }
    .about-btn.ghost { background:rgba(255,255,255,0.09); color:white; }
    .about-metrics { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin:18px 0 28px; }
    .about-metric { background:white; border:1px solid var(--border); border-radius:16px; padding:18px; }
    .about-metric-num { font-family:var(--font-serif); font-size:30px; font-weight:800; letter-spacing:-0.6px; color:var(--primary); }
    .about-metric-label { margin-top:4px; font-size:12px; color:var(--text-3); }
    .about-section-head { display:flex; align-items:end; justify-content:space-between; gap:18px; margin:28px 0 14px; }
    .about-section-title { font-family:var(--font-serif); font-size:22px; font-weight:800; letter-spacing:-0.3px; }
    .about-section-sub { max-width:520px; font-size:12.5px; color:var(--text-3); text-align:right; line-height:1.75; }
    .about-feature-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
    .about-card { position:relative; min-height:172px; background:white; border:1px solid var(--border); border-radius:18px; padding:18px; overflow:hidden; }
    .about-card::before { content:''; position:absolute; left:0; top:0; bottom:0; width:3px; background:var(--primary); opacity:0.72; }
    .about-card:nth-child(2)::before, .about-card:nth-child(5)::before { background:var(--bull); }
    .about-card:nth-child(3)::before, .about-card:nth-child(6)::before { background:var(--bear); }
    .about-card-index { font-family:var(--font-mono); font-size:11px; color:var(--text-3); margin-bottom:10px; }
    .about-card-title { font-size:16px; font-weight:800; margin-bottom:8px; }
    .about-card-text { font-size:12.5px; color:var(--text-2); line-height:1.78; }
    .about-flow { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; }
    .about-flow-step { background:var(--surface-2); border:1px solid var(--border); border-radius:15px; padding:16px; }
    .about-flow-no { font-family:var(--font-mono); font-size:11px; color:var(--primary); font-weight:800; margin-bottom:8px; }
    .about-flow-title { font-weight:800; margin-bottom:6px; }
    .about-flow-text { font-size:12px; color:var(--text-2); line-height:1.7; }
    .about-retention { margin-top:28px; display:grid; grid-template-columns:1.15fr 0.85fr; gap:12px; }
    .about-retention.about-retention-3 { grid-template-columns:1.4fr 0.8fr 0.8fr; }
    .about-panel { background:white; border:1px solid var(--border); border-radius:18px; padding:22px; }
    .about-panel.dark { background:var(--text-1); color:white; border-color:var(--text-1); }
    .about-panel-title { font-family:var(--font-serif); font-size:20px; font-weight:800; margin-bottom:10px; }
    .about-panel-text { font-size:13px; line-height:1.85; color:var(--text-2); }
    .about-panel.dark .about-panel-text { color:rgba(255,255,255,0.72); }
    .about-qr-panel {
      display:flex;
      flex-direction:column;
      align-items:center;
      justify-content:center;
      text-align:center;
      gap:12px;
    }
    .about-qr-panel .about-panel-title { margin-bottom:0; }
    .about-qr-img {
      width:100%;
      max-width:220px;
      height:auto;
      aspect-ratio:1 / 1;
      object-fit:contain;
      border-radius:12px;
      border:1px solid var(--border);
      background:white;
    }
    .about-qr-note {
      margin:0;
      font-size:12px;
      color:var(--text-3);
      line-height:1.65;
    }
    .about-list { display:grid; gap:9px; margin-top:14px; }
    .about-list-item { display:flex; align-items:flex-start; gap:9px; font-size:12.5px; color:var(--text-2); line-height:1.65; }
    .about-list-dot { width:7px; height:7px; margin-top:7px; border-radius:50%; background:var(--primary); flex-shrink:0; }

    /* 联系方式（邮箱等）—— 放在深色 panel 里 */
    .about-contact {
      margin-top:16px;
      padding-top:14px;
      border-top:1px solid rgba(255,255,255,0.12);
      display:flex;
      flex-wrap:wrap;
      gap:8px;
    }
    .about-contact-item {
      display:inline-flex;
      align-items:center;
      gap:7px;
      padding:7px 12px;
      border-radius:999px;
      background:rgba(255,255,255,0.08);
      border:1px solid rgba(255,255,255,0.16);
      color:rgba(255,255,255,0.9);
      font-size:12.5px;
      font-family:var(--font-mono);
      text-decoration:none;
      transition:all 0.15s;
    }
    .about-contact-item:hover {
      background:rgba(255,255,255,0.16);
      border-color:rgba(255,255,255,0.32);
      color:white;
      transform:translateY(-1px);
    }
    .about-contact-item svg { opacity:0.85; flex-shrink:0; }
    .about-panel:not(.dark) .about-contact {
      border-top-color:var(--border);
    }
    .about-panel:not(.dark) .about-contact-item {
      background:var(--surface-2);
      border-color:var(--border);
      color:var(--text-2);
    }
    .about-panel:not(.dark) .about-contact-item:hover {
      background:white;
      border-color:var(--primary);
      color:var(--primary);
    }

    /* ── ANIMATIONS ── */
    @keyframes fadeUp { from{opacity:0;transform:translateY(8px)} to{opacity:1;transform:translateY(0)} }
    .fu  { animation:fadeUp 0.28s ease both; }
    .fu1 { animation-delay:.04s; }
    .fu2 { animation-delay:.08s; }
    .fu3 { animation-delay:.12s; }

    /* ── SKELETON LOADING ── */
    @keyframes shimmer { 0%{background-position:200% 0} 100%{background-position:-200% 0} }
    .skeleton {
      background:linear-gradient(90deg, #EEEEED 25%, #E4E4E2 50%, #EEEEED 75%);
      background-size:200% 100%;
      animation:shimmer 1.6s infinite;
      border-radius:4px;
    }

    /* ── EMPTY / ERROR STATE ── */
    .state-box { text-align:center; padding:56px 20px; }
    .state-icon { font-size:36px; margin-bottom:14px; }
    .state-title { font-size:15px; font-weight:600; margin-bottom:6px; }
    .state-desc { font-size:12.5px; color:var(--text-3); line-height:1.75; }
    .state-code { background:var(--surface-2); padding:2px 7px; border-radius:4px; font-family:var(--font-mono); font-size:11px; }
    .retry-btn { margin-top:16px; background:var(--text-1); color:white; border:none; border-radius:8px; padding:8px 20px; font-size:13px; cursor:pointer; }
    .ev-detail-close { display:none; }

    /* ── RESPONSIVE · MOBILE EVENT WORKFLOW ── */
    @media(max-width:1020px) {
      .nav { padding:0 18px; }
      .nav-logo { margin-right:18px; }
      .nav-date { display:none; }
      .ev-layout { grid-template-columns:380px minmax(0, 1fr); }
      .ev-search-wrap { min-width:220px; }
      .about-metrics,
      .about-feature-grid,
      .about-flow {
        grid-template-columns:repeat(2, minmax(0, 1fr));
      }
      .about-retention,
      .about-retention.about-retention-3 {
        grid-template-columns:1fr;
      }
    }

    @media(max-width:860px) {
      :root { --nav-h:54px; }
      html, body { overflow-x:hidden; }
      body.detail-open { overflow:hidden; }
      .nav {
        min-height:var(--nav-h);
        height:auto;
        padding:8px 12px 9px;
        gap:8px;
        flex-wrap:wrap;
        align-items:center;
      }
      .nav-logo { margin-right:0; }
      .nav-logo-icon { width:28px; height:28px; border-radius:8px; }
      .nav-logo-text { font-size:16px; }
      .nav-links {
        order:3;
        flex:1 0 100%;
        display:flex;
        gap:6px;
        overflow-x:auto;
        padding:2px 0 1px;
        margin-top:2px;
        -webkit-overflow-scrolling:touch;
        scrollbar-width:none;
      }
      .nav-links::-webkit-scrollbar { display:none; }
      .nav-link {
        flex:0 0 auto;
        min-height:34px;
        display:inline-flex;
        align-items:center;
        padding:7px 12px;
        font-size:13px;
        white-space:nowrap;
      }
      .nav-link[disabled] { display:none; }
      .nav-spacer { flex:1; }
      .live-badge { display:none; }
      .nav-upgrade-btn {
        height:32px;
        margin-right:0;
        padding:0 10px;
        font-size:12px;
      }
      .nav-auth { margin-left:0; }
      .nav-btn-primary {
        height:32px;
        padding:0 11px;
        font-size:12.5px;
      }
      .nav-user { margin-left:0; }
      .nav-user-btn {
        height:32px;
        padding:0 7px 0 5px;
        gap:6px;
      }
      .nav-user-avatar { width:23px; height:23px; font-size:11.5px; }
      .nav-user-text { display:none; }
      .nav-user-menu {
        right:0;
        min-width:min(280px, calc(100vw - 24px));
        max-width:calc(100vw - 24px);
      }

      .ev-page-wrap { padding:18px 12px 36px; }
      .pg-head { margin-bottom:14px; }
      .pg-title { font-size:22px; line-height:1.25; }
      .pg-sub { font-size:12px; }

      .filter-bar {
        position:sticky;
        top:0;
        z-index:80;
        margin:0 -12px 14px;
        padding:10px 12px 12px;
        display:grid;
        grid-template-columns:1fr;
        gap:10px;
        background:rgba(244,244,241,0.96);
        backdrop-filter:blur(14px);
        -webkit-backdrop-filter:blur(14px);
      }
      .filter-label { display:none; }
      .ev-type-strip {
        display:flex;
        gap:8px;
        flex-wrap:nowrap;
        overflow-x:auto;
        -webkit-overflow-scrolling:touch;
        padding-bottom:1px;
      }
      .ev-type-strip::-webkit-scrollbar { display:none; }
      .ev-type-chip { flex:0 0 auto; min-height:34px; padding:7px 13px; font-size:12.5px; }
      .ev-search-wrap {
        order:-1;
        width:100%;
        min-width:0;
        margin-left:0;
      }
      .ev-search { height:40px; font-size:13px; }

      .ev-layout { display:block; }
      .ev-list-shell { width:100%; }
      .ev-card {
        margin-bottom:9px;
        padding:13px 13px 12px 16px;
        border-radius:14px;
        touch-action:manipulation;
      }
      .ev-card:hover { transform:none; box-shadow:0 3px 16px rgba(0,0,0,0.06); }
      .ev-card.active { border-color:var(--border-2); box-shadow:0 3px 16px rgba(0,0,0,0.06); }
      .ev-card-meta { gap:6px; margin-bottom:8px; }
      .ev-title { font-size:14.5px; -webkit-line-clamp:3; line-clamp:3; }
      .ev-desc { -webkit-line-clamp:2; line-clamp:2; }
      .ev-stock-pill { max-width:118px; }

      .ev-detail {
        position:fixed;
        left:0;
        right:0;
        bottom:0;
        top:auto;
        z-index:120;
        min-height:0;
        /* 抽屉高度：占屏幕 85%，顶部 15% 露出背景，点击遮罩可关闭 */
        max-height:none;
        height:min(85vh, calc(100vh - 28px));
        height:min(85dvh, calc(100dvh - 28px));
        display:flex;
        flex-direction:column;
        overflow:hidden;
        border:0;
        border-top:1px solid var(--border);
        border-radius:18px 18px 0 0;
        box-shadow:0 -18px 44px rgba(0,0,0,0.18);
        transform:translateY(105%);
        opacity:0;
        pointer-events:none;
        transition:transform 0.24s ease, opacity 0.2s ease;
      }
      .ev-detail-scroll {
        padding-bottom:calc(env(safe-area-inset-bottom, 0px) + 8px);
      }
      .ev-detail.open { transform:translateY(0); opacity:1; pointer-events:auto; }
      .ev-detail-head {
        position:relative;
        padding:18px 18px 15px;
        background:rgba(255,255,255,0.96);
        border-radius:18px 18px 0 0;
      }
      .ev-detail-head::before {
        content:'';
        display:block;
        width:38px;
        height:4px;
        border-radius:999px;
        background:var(--border-2);
        margin:0 auto 13px;
      }
      .ev-detail-close {
        position:absolute;
        top:13px;
        right:13px;
        display:flex;
        align-items:center;
        justify-content:center;
        width:34px;
        height:34px;
        border:1px solid var(--border);
        border-radius:50%;
        background:white;
        color:var(--text-2);
        cursor:pointer;
      }
      .ev-detail-title { font-size:21px; line-height:1.42; padding-right:44px; }
      .ev-detail-desc { padding:17px 18px 2px; font-size:13px; line-height:1.85; }
      .ev-detail-section { padding:16px 18px 28px; }
      .ev-stock-row { padding:12px; }
      .ev-stock-reason { font-size:12.5px; }

      .pagination { padding:18px 0 10px; gap:5px; }
      .pg-btn { min-width:34px; height:34px; border-radius:9px; }
      .pg-btn.mobile-hide { display:none; }
      .pg-prev, .pg-next { min-width:78px; padding:0 10px; }
      .disclaimer { padding:16px 8px 72px; }

      @media(max-width:520px) {
        .nav { padding-left:10px; padding-right:10px; }
        .nav-upgrade-btn { padding:0 8px; }
        .pagination { gap:4px; }
        .pg-btn { min-width:32px; height:32px; font-size:12px; }
        .pg-prev, .pg-next { min-width:68px; padding:0 8px; }
      }

      .about-page-wrap { padding:18px 12px 36px; }
      .about-hero { border-radius:20px; padding:28px 20px; }
      .about-kicker { font-size:11px; letter-spacing:0.12em; margin-bottom:10px; }
      .about-title { font-size:28px; line-height:1.22; letter-spacing:-0.6px; margin-bottom:12px; }
      .about-lead { font-size:13.5px; line-height:1.85; }
      .about-actions { gap:8px; margin-top:20px; }
      .about-btn { flex:1 1 auto; min-height:42px; padding:11px 14px; font-size:13px; text-align:center; }
      .about-btn:hover { transform:none; }
      .about-metrics, .about-feature-grid, .about-flow, .about-retention { grid-template-columns:1fr; }
      .about-retention.about-retention-3 {
        grid-template-columns:repeat(2, minmax(0, 1fr));
      }
      .about-retention.about-retention-3 .about-panel.dark {
        grid-column:1 / -1;
      }
      .about-metrics { margin:14px 0 22px; gap:10px; }
      .about-metric { padding:15px 16px; border-radius:14px; }
      .about-metric-num { font-size:26px; }
      .about-section-head { display:block; margin:22px 0 12px; }
      .about-section-title { font-size:20px; }
      .about-section-sub { margin-top:6px; text-align:left; font-size:12.5px; }
      .about-card { min-height:auto; padding:16px; border-radius:16px; }
      .about-card-title { font-size:15px; }
      .about-card-text { font-size:12.5px; line-height:1.75; }
      .about-flow-step { padding:14px; border-radius:13px; }
      .about-flow-title { font-size:14px; }
      .about-retention { margin-top:22px; gap:10px; }
      .about-panel { padding:18px; border-radius:16px; }
      .about-panel-title { font-size:17px; margin-bottom:8px; }
      .about-panel-text { font-size:13px; line-height:1.8; }
      .about-qr-panel {
        min-width:0;
        padding:14px 12px;
        gap:9px;
      }
      .about-qr-panel .about-panel-title {
        font-size:15px;
        margin-bottom:0;
      }
      .about-qr-img {
        max-width:min(150px, 100%);
        border-radius:10px;
      }
      .about-qr-note {
        max-width:150px;
        font-size:11.5px;
        line-height:1.55;
      }
      .about-contact { margin-top:14px; padding-top:12px; gap:6px; }
      .about-contact-item {
        max-width:100%;
        font-size:12px;
        padding:7px 10px;
        overflow:hidden;
      }
      .about-contact-item span {
        min-width:0;
        overflow:hidden;
        text-overflow:ellipsis;
        white-space:nowrap;
      }
    }

    @media(max-width:420px) {
      .nav { gap:6px; }
      .nav-logo-text { display:none; }
      .nav-link { padding-left:10px; padding-right:10px; }
      .nav-upgrade-btn { height:30px; font-size:11.5px; }
      .nav-btn-primary { height:30px; padding:0 10px; font-size:12px; }
      .nav-user-plan { display:none; }
      .ev-page-wrap, .about-page-wrap { padding-left:10px; padding-right:10px; }
      .filter-bar { margin-left:-10px; margin-right:-10px; padding-left:10px; padding-right:10px; }
      .ev-search { height:39px; }
      .ev-stock-pill { max-width:104px; }
      .pg-btn:not(.pg-prev):not(.pg-next):not(.active):not(.pg-ellipsis) { display:none; }
      .pg-prev, .pg-next { min-width:72px; }
      .ev-stock-row {
        grid-template-columns:auto 1fr;
        grid-template-rows:auto auto auto auto;
      }
      .ev-stock-ava { grid-row:1 / span 4; }
      .ev-stock-info { grid-column:2; grid-row:1; min-width:0; }
      .ev-stock-score { grid-column:2; grid-row:2; justify-self:start; margin-top:2px; }
      .ev-stock-quote { grid-column:2; grid-row:3; padding-left:0; }
      .ev-stock-reason-wrap { grid-column:1 / -1; grid-row:4; padding-left:45px; }
      .ev-stock-reason { grid-column:1 / -1; grid-row:4; padding-left:45px; }

      /* About 页在超窄屏的进一步压缩 */
      .about-hero { padding:24px 16px; border-radius:18px; }
      .about-title { font-size:24px; letter-spacing:-0.4px; }
      .about-lead { font-size:13px; line-height:1.8; }
      .about-actions { flex-direction:column; gap:8px; }
      .about-btn { width:100%; }
      .about-panel { padding:16px; }
      .about-panel-title { font-size:16px; }
      .about-qr-panel { padding:13px 10px; }
      .about-qr-img { max-width:min(132px, 100%); }
      .about-qr-note { max-width:132px; font-size:11px; }
      .about-contact-item { font-size:11.5px; }
    }

    @media(max-width:340px) {
      .about-retention.about-retention-3 { grid-template-columns:1fr; }
      .about-qr-img { max-width:170px; }
      .about-qr-note { max-width:190px; }
    }

    /* ═════════════════════════════════════════════════════════════════
       STOCK RECAP PAGE · 股票复盘
       ═════════════════════════════════════════════════════════════════ */
    .recap-body { background:var(--bg); }
    .recap-wrap { max-width:1180px; margin:0 auto; padding:24px 24px 60px; }

    .recap-head { display:flex; flex-direction:column; gap:10px; margin-bottom:18px; }
    .recap-back {
      display:inline-flex; align-items:center; gap:4px;
      font-size:12.5px; color:var(--text-2); text-decoration:none;
      width:max-content;
    }
    .recap-back:hover { color:var(--text-1); }
    .recap-title-row { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; }
    .recap-code { font-family:var(--font-mono); font-size:22px; color:var(--text-3); font-weight:600; }
    .recap-name { font-family:var(--font-serif); font-size:28px; font-weight:700; letter-spacing:-0.5px; }
    .recap-quote { display:inline-flex; align-items:baseline; gap:8px; margin-left:4px; font-family:var(--font-mono); }
    .recap-quote-price { font-size:22px; font-weight:600; color:var(--text-1); }
    .recap-quote-price:empty { display:none; }
    .recap-quote-chg { font-size:14px; font-weight:600; }
    .recap-quote-chg.bull { color:var(--bull); }
    .recap-quote-chg.bear { color:var(--bear); }
    .recap-quote-chg.flat { color:var(--text-3); }
    .recap-ts-code { font-family:var(--font-mono); font-size:12px; color:var(--text-3); background:var(--surface-2); padding:2px 8px; border-radius:6px; }

    .recap-info-card {
      background:white; border:1px solid var(--border); border-radius:16px;
      padding:20px 22px; margin-bottom:18px;
      box-shadow:0 2px 12px rgba(0,0,0,0.035);
    }
    .recap-info-grid {
      display:grid; grid-template-columns:repeat(auto-fit, minmax(200px, 1fr)); gap:14px 22px;
    }
    .recap-info-item { display:flex; flex-direction:column; gap:3px; min-width:0; }
    .recap-info-label { font-size:11.5px; color:var(--text-3); letter-spacing:0.02em; }
    .recap-info-value {
      font-size:13.5px; color:var(--text-1); font-weight:500;
      overflow:hidden; text-overflow:ellipsis;
    }
    .recap-info-section { margin-top:16px; padding-top:14px; border-top:1px dashed var(--border); }
    .recap-info-section-title { font-size:12px; color:var(--text-3); margin-bottom:6px; }
    .recap-info-intro {
      font-size:13px; color:var(--text-2); line-height:1.85;
      white-space:pre-wrap;
    }

    .recap-filter-bar {
      display:flex; flex-wrap:wrap; gap:16px 22px;
      margin-bottom:14px;
      padding:12px 14px;
      background:white; border:1px solid var(--border); border-radius:12px;
    }
    .recap-filter-group { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
    .recap-filter-label { font-size:12px; color:var(--text-3); flex-shrink:0; }
    .recap-chip-strip { display:flex; gap:6px; flex-wrap:wrap; }
    .recap-chip {
      padding:5px 11px; border-radius:999px;
      font-size:12.5px; font-weight:500; color:var(--text-2);
      background:var(--surface-2); border:1px solid var(--border);
      cursor:pointer; user-select:none; transition:all 0.14s;
      white-space:nowrap;
    }
    .recap-chip:hover { background:white; color:var(--text-1); }
    .recap-chip.active {
      background:var(--text-1); color:white; border-color:var(--text-1);
    }

    .recap-chart-card {
      background:white; border:1px solid var(--border); border-radius:16px;
      margin-bottom:18px;
      box-shadow:0 2px 12px rgba(0,0,0,0.035);
      overflow:hidden;
    }
    .recap-chart-head {
      display:flex; align-items:baseline; justify-content:space-between;
      padding:16px 20px 8px;
    }
    .recap-chart-title { font-family:var(--font-serif); font-size:15px; font-weight:700; }
    .recap-chart-sub { font-size:11.5px; color:var(--text-3); font-family:var(--font-mono); }
    .recap-chart-legend {
      display:flex; flex-wrap:wrap; align-items:center; gap:10px 14px;
      padding:0 20px 8px; font-size:11.5px; color:var(--text-3);
      user-select:none; transition:opacity 0.15s;
    }
    .recap-chart-legend:hover { opacity:0.85; }
    .recap-chart-legend.is-off .recap-legend-item {
      opacity:0.35; filter:grayscale(0.6);
    }
    .recap-chart-legend-label { color:var(--text-3); }
    .recap-legend-item {
      display:inline-flex; align-items:center; gap:5px;
      color:var(--text-2);
    }
    .recap-legend-item i {
      width:10px; height:10px; border-radius:50%;
      box-shadow:0 0 0 1px rgba(255,255,255,0.9);
    }
    .recap-chart-body { position:relative; padding:4px 10px 14px; }
    .recap-chart-canvas { width:100%; height:430px; }
    .recap-chart-state {
      position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
      color:var(--text-3); font-size:12.5px; background:rgba(255,255,255,0.85);
    }

    .recap-events-card {
      background:white; border:1px solid var(--border); border-radius:16px;
      padding:18px 20px 14px;
      box-shadow:0 2px 12px rgba(0,0,0,0.035);
    }
    .recap-events-head {
      display:flex; align-items:baseline; justify-content:space-between;
      margin-bottom:10px;
    }
    .recap-events-title { font-family:var(--font-serif); font-size:15px; font-weight:700; }
    .recap-events-count { font-size:11.5px; color:var(--text-3); }
    .recap-events-list { display:flex; flex-direction:column; gap:8px; }
    .recap-event-row {
      display:grid;
      grid-template-columns:96px 1fr auto;
      gap:12px;
      padding:12px 14px;
      border:1px solid var(--border);
      border-radius:12px;
      background:var(--surface-2);
      cursor:pointer;
      transition:all 0.14s;
    }
    .recap-event-row:hover {
      background:white;
      border-color:var(--border-2);
      transform:translateY(-1px);
      box-shadow:0 4px 12px rgba(0,0,0,0.06);
    }
    .recap-event-row.focused {
      border-color:var(--primary);
      background:var(--primary-bg);
    }
    .recap-event-date {
      font-family:var(--font-mono); font-size:12px; color:var(--text-2);
      align-self:start; padding-top:2px;
    }
    .recap-event-main { min-width:0; display:flex; flex-direction:column; gap:4px; }
    .recap-event-title-row { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
    .recap-event-type-tag {
      font-size:11px; padding:1px 7px; border-radius:5px;
      background:var(--surface); border:1px solid var(--border);
      color:var(--text-2);
    }
    .recap-event-type-tag.company  { background:#F3EDFF; color:#7C3AED; border-color:#E0D0FA; }
    .recap-event-type-tag.policy   { background:#FDECEA; color:#C62828; border-color:#F7C5BE; }
    .recap-event-type-tag.macro    { background:#FFF3E5; color:#C2410C; border-color:#F5D3B4; }
    .recap-event-type-tag.overseas { background:#E5ECFA; color:#1C3DB8; border-color:#C2CEEF; }
    .recap-event-title {
      font-size:13.5px; font-weight:600; color:var(--text-1);
      line-height:1.5;
      display:-webkit-box; -webkit-line-clamp:2; line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
    }
    .recap-event-meta { font-size:11.5px; color:var(--text-3); display:flex; gap:10px; flex-wrap:wrap; }
    .recap-event-meta-item b { color:var(--text-2); font-weight:600; }
    .recap-event-perf {
      display:flex; flex-direction:column; gap:3px;
      align-items:flex-end;
      font-size:11.5px; font-family:var(--font-mono);
      min-width:98px;
    }
    .recap-event-perf-row { display:flex; gap:6px; align-items:baseline; }
    .recap-event-perf-label { color:var(--text-3); font-size:10.5px; }
    .recap-event-perf-val { font-weight:700; }
    .recap-event-perf-val.bull { color:var(--bull); }
    .recap-event-perf-val.bear { color:var(--bear); }
    .recap-event-perf-val.flat { color:var(--text-3); }
    .recap-event-perf-val.pending { color:var(--text-3); font-weight:500; }

    .recap-skeleton { font-size:12.5px; color:var(--text-3); padding:20px 0; text-align:center; }

    .recap-pro-gate-card {
      background:white;
      border:1px solid var(--border);
      border-radius:16px;
      padding:28px 26px 26px;
      box-shadow:0 4px 20px rgba(15,23,42,0.07);
      margin-bottom:8px;
    }
    .recap-pro-gate-kicker {
      display:inline-block;
      font-size:11px;
      font-weight:700;
      letter-spacing:0.06em;
      text-transform:uppercase;
      color:var(--primary);
      background:color-mix(in srgb, var(--primary) 12%, transparent);
      padding:3px 10px;
      border-radius:999px;
      margin-bottom:12px;
    }
    .recap-pro-gate-title {
      font-family:var(--font-serif);
      font-size:20px;
      font-weight:700;
      color:var(--text-1);
      margin:0 0 10px;
      letter-spacing:-0.3px;
    }
    .recap-pro-gate-desc {
      font-size:14px;
      line-height:1.65;
      color:var(--text-2);
      margin:0 0 16px;
      max-width:52em;
    }
    .recap-pro-gate-list {
      margin:0 0 22px;
      padding-left:1.15em;
      color:var(--text-2);
      font-size:13.5px;
      line-height:1.7;
    }
    .recap-pro-gate-actions { display:flex; flex-wrap:wrap; gap:12px; align-items:center; }
    .recap-pro-gate-cta {
      display:inline-flex;
      align-items:center;
      justify-content:center;
      min-height:44px;
      padding:0 22px;
      border-radius:10px;
      background:var(--primary);
      color:#fff !important;
      font-size:15px;
      font-weight:700;
      text-decoration:none;
      transition:filter 0.15s, transform 0.12s;
    }
    .recap-pro-gate-cta:hover { filter:brightness(1.08); }
    .recap-pro-gate-secondary {
      font-size:14px;
      font-weight:600;
      color:var(--primary);
      text-decoration:none;
    }
    .recap-pro-gate-secondary:hover { text-decoration:underline; }

    /* ECharts tooltip 覆盖样式，让聚合 marker 的 tooltip 更可读 */
    .recap-tooltip {
      font-size:12px;
      width:min(420px, calc(100vw - 48px));
      max-width:420px;
      white-space:normal;
      word-break:break-word;
    }
    .recap-tooltip-title {
      font-weight:700; font-size:12.5px; margin-bottom:6px;
      color:var(--text-1); display:flex; justify-content:space-between; gap:12px;
      min-width:0;
    }
    .recap-tooltip-date { color:var(--text-3); font-family:var(--font-mono); font-size:11.5px; }
    .recap-tooltip-item {
      padding:6px 0; border-top:1px dashed var(--border);
    }
    .recap-tooltip-item:first-of-type { border-top:none; padding-top:2px; }
    .recap-tooltip-item-head {
      display:flex; align-items:flex-start; gap:6px; margin-bottom:3px;
      font-weight:600; min-width:0;
    }
    .recap-tooltip-item-title {
      flex:1;
      min-width:0;
      display:-webkit-box;
      -webkit-line-clamp:2;
      line-clamp:2;
      -webkit-box-orient:vertical;
      overflow:hidden;
      white-space:normal;
      word-break:break-word;
      line-height:1.45;
    }
    .recap-tooltip-tag {
      flex-shrink:0;
      font-size:10.5px; padding:0 5px; border-radius:4px;
      border:1px solid var(--border);
    }
    .recap-tooltip-meta {
      font-size:11px; color:var(--text-3); display:flex; gap:8px; flex-wrap:wrap;
      margin-bottom:2px;
    }
    .recap-tooltip-perf { font-family:var(--font-mono); font-size:11px; color:var(--text-2); }
    .recap-tooltip-perf .bull { color:var(--bull); font-weight:700; }
    .recap-tooltip-perf .bear { color:var(--bear); font-weight:700; }
    .recap-tooltip-perf .flat { color:var(--text-3); }
    .recap-tooltip-perf .pending { color:var(--text-3); }
    .recap-kline-tooltip-grid {
      display:grid;
      grid-template-columns:auto auto auto auto;
      gap:3px 10px;
      padding:6px 0 2px;
      font-family:var(--font-mono);
      font-size:11.5px;
      color:var(--text-2);
    }
    .recap-kline-tooltip-grid b { color:var(--text-1); font-weight:700; }
    .recap-kline-tooltip-grid b.bull { color:var(--bull); }
    .recap-kline-tooltip-grid b.bear { color:var(--bear); }
    .recap-kline-tooltip-grid b.flat { color:var(--text-3); }

    /* 响应式 */
    @media(max-width:860px) {
      .recap-wrap { padding:16px 12px 40px; }
      .recap-name { font-size:22px; }
      .recap-code { font-size:18px; }
      .recap-ts-code { display:none; }
      .recap-info-card { padding:14px 14px; border-radius:14px; }
      .recap-info-grid { grid-template-columns:repeat(2, minmax(0, 1fr)); gap:10px 14px; }
      .recap-filter-bar { gap:10px 14px; padding:10px; }
      .recap-filter-label { display:none; }
      .recap-chart-canvas { height:320px; }
      .recap-chart-head { padding:12px 14px 4px; }
      .recap-chart-legend { padding:0 14px 6px; gap:8px 10px; }
      .recap-events-card { padding:14px 14px 10px; border-radius:14px; }
      .recap-event-row {
        grid-template-columns:auto 1fr;
        grid-template-rows:auto auto;
        gap:8px;
      }
      .recap-event-date { grid-column:1; grid-row:1; }
      .recap-event-main { grid-column:2; grid-row:1 / span 2; }
      .recap-event-perf {
        grid-column:1; grid-row:2;
        flex-direction:row; align-items:baseline; gap:10px;
        min-width:0;
      }
    }

    /* ── RECAP PAGER ── */
    .recap-events-pager {
      display:flex; justify-content:center; align-items:center;
      gap:5px; padding:14px 0 4px; flex-wrap:wrap;
    }
    .recap-events-pager:empty { display:none; }
    .recap-pg-btn {
      min-width:32px; height:32px; padding:0 10px; border-radius:8px;
      border:1px solid var(--border); background:white;
      font-size:12.5px; font-weight:600; color:var(--text-2);
      cursor:pointer; display:inline-flex; align-items:center; justify-content:center;
      transition:all 0.14s;
    }
    .recap-pg-btn:hover:not(.disabled):not(.active) { border-color:var(--text-1); color:var(--text-1); }
    .recap-pg-btn.active { background:var(--text-1); color:white; border-color:var(--text-1); }
    .recap-pg-btn.disabled { opacity:0.38; cursor:default; }
    .recap-pg-btn.ellipsis { border-color:transparent; background:transparent; cursor:default; }
    .recap-pg-btn.prev, .recap-pg-btn.next { min-width:64px; }

    /* ── RECAP EVENT MODAL ── */
    body.recap-modal-open { overflow:hidden; }
    .recap-modal {
      position:fixed; inset:0; z-index:300;
      display:none; align-items:center; justify-content:center;
      padding:24px;
    }
    .recap-modal.open { display:flex; }
    .recap-modal-mask {
      position:absolute; inset:0;
      background:rgba(12,12,12,0.42);
      backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
      animation:fadeIn 0.18s ease both;
    }
    .recap-modal-panel {
      position:relative;
      width:min(680px, 100%);
      max-height:calc(100vh - 48px);
      background:white;
      border-radius:16px;
      overflow:hidden;
      display:flex; flex-direction:column;
      box-shadow:0 30px 60px rgba(0,0,0,0.25);
      animation:popUp 0.22s cubic-bezier(0.22,1,0.36,1) both;
    }
    .recap-modal-head {
      display:flex; align-items:center; justify-content:space-between; gap:14px;
      padding:16px 20px 10px;
      border-bottom:1px solid var(--border);
    }
    .recap-modal-title {
      font-family:var(--font-serif); font-size:16px; font-weight:700;
      line-height:1.35;
    }
    .recap-modal-close {
      width:30px; height:30px; flex-shrink:0;
      border:1px solid var(--border); border-radius:50%;
      background:white; font-size:18px; color:var(--text-2);
      cursor:pointer;
      display:flex; align-items:center; justify-content:center;
      transition:all 0.14s;
    }
    .recap-modal-close:hover { border-color:var(--text-1); color:var(--text-1); }
    .recap-modal-body {
      padding:14px 20px 20px;
      overflow:auto; -webkit-overflow-scrolling:touch;
      display:flex; flex-direction:column; gap:14px;
    }
    .recap-modal-event {
      border:1px solid var(--border);
      border-radius:12px;
      padding:14px 16px;
      background:var(--surface-2);
    }
    .recap-modal-event-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:6px; }
    .recap-modal-event-title {
      font-size:15px; font-weight:700; line-height:1.5;
      font-family:var(--font-serif);
    }
    .recap-modal-event-meta {
      font-size:11.5px; color:var(--text-3);
      display:flex; gap:10px; flex-wrap:wrap; margin-bottom:8px;
    }
    .recap-modal-event-meta b { color:var(--text-1); font-weight:700; }
    .recap-modal-event-reason {
      font-size:13px; color:var(--text-2); line-height:1.75;
      margin:6px 0 10px;
      white-space:pre-wrap;
    }
    .recap-modal-perf-grid {
      display:grid; grid-template-columns:repeat(3, 1fr); gap:8px;
      padding:8px 0;
    }
    .recap-modal-perf-item {
      display:flex; flex-direction:column; align-items:center; gap:2px;
      padding:6px 0; border-radius:8px;
      background:white; border:1px solid var(--border);
    }
    .recap-modal-perf-item .label { font-size:11px; color:var(--text-3); }
    .recap-modal-perf-item .val { font-size:13px; font-weight:700; font-family:var(--font-mono); }
    .recap-modal-perf-item .val.bull { color:var(--bull); }
    .recap-modal-perf-item .val.bear { color:var(--bear); }
    .recap-modal-perf-item .val.flat { color:var(--text-3); }
    .recap-modal-perf-item .val.pending { color:var(--text-3); font-weight:500; }
    .recap-modal-event-actions {
      display:flex;
      justify-content:flex-end;
      padding-top:4px;
    }
    .recap-modal-detail-link {
      display:inline-flex;
      align-items:center;
      justify-content:center;
      min-height:32px;
      padding:0 12px;
      border-radius:8px;
      border:1px solid var(--text-1);
      background:var(--text-1);
      color:#fff;
      font-size:12.5px;
      font-weight:700;
      text-decoration:none;
      transition:filter 0.14s, transform 0.12s;
    }
    .recap-modal-detail-link:hover {
      color:#fff;
      filter:brightness(1.08);
    }
    .recap-modal-detail-link:active { transform:translateY(1px); }

    @media(max-width:860px) {
      .recap-modal { padding:0; align-items:flex-end; }
      .recap-modal-panel { width:100%; max-height:calc(100vh - 40px); border-radius:18px 18px 0 0; }
      .recap-modal-head { padding:14px 16px 8px; }
      .recap-modal-body { padding:12px 14px 18px; }
      .recap-modal-event-actions { justify-content:stretch; }
      .recap-modal-detail-link { width:100%; }
    }

    /* ═════════════════════════════════════════════════════════════════
       事件详情 · 复制分享链接按钮 / 分享页
       ═════════════════════════════════════════════════════════════════ */

    /* 标题行：文本 + 末尾的图标按钮（复制） */
    .ev-detail-title-text {
      flex:1;
      min-width:0;
    }

    /* 复制链接按钮：圆角图标按钮，跟随在标题末尾 */
    .ev-detail-copy {
      display:inline-flex;
      align-items:center;
      justify-content:center;
      flex-shrink:0;
      width:30px;
      height:30px;
      margin-top:4px;
      padding:0;
      border-radius:50%;
      border:1px solid var(--border);
      background:white;
      color:var(--text-2);
      cursor:pointer;
      transition:all 0.14s;
      line-height:1;
    }
    .ev-detail-copy:hover {
      border-color:var(--primary);
      color:var(--primary);
      background:var(--primary-bg);
      transform:translateY(-1px);
    }
    .ev-detail-copy:active { transform:translateY(0); }
    .ev-detail-copy .ev-detail-copy-icon { flex-shrink:0; transition:transform 0.14s; }
    .ev-detail-copy.copied {
      border-color:var(--bear);
      color:var(--bear);
      background:var(--bear-bg);
    }
    .ev-detail-copy.copy-failed {
      border-color:var(--bull);
      color:var(--bull);
      background:var(--bull-bg);
    }

    /* ── 移动端详情抽屉的背景遮罩（点击空白处关闭） ── */
    .ev-detail-backdrop {
      display:none;
      position:fixed;
      inset:0;
      z-index:115;
      background:rgba(12,12,12,0);
      transition:background 0.22s ease;
      -webkit-tap-highlight-color:transparent;
    }
    body.detail-open .ev-detail-backdrop {
      display:block;
      background:rgba(12,12,12,0.32);
    }

    /* ── 分享页 ── */
    .share-page-wrap {
      max-width:1080px;
      margin:0 auto;
      padding:22px 24px 60px;
    }
    .share-actions {
      display:flex;
      align-items:center;
      justify-content:space-between;
      margin-bottom:14px;
      gap:10px;
    }
    .share-back {
      display:inline-flex;
      align-items:center;
      gap:4px;
      font-size:12.5px;
      color:var(--text-2);
      text-decoration:none;
      padding:6px 12px 6px 8px;
      border-radius:999px;
      border:1px solid transparent;
      transition:all 0.14s;
    }
    .share-back:hover {
      color:var(--text-1);
      border-color:var(--border);
      background:white;
    }
    /* 分享页的事件卡片：覆盖首页桌面端 .ev-detail 的 sticky/限高/滚动，全部展开由页面整体滚动 */
    .share-detail {
      min-height:auto;
      position:static;
      top:auto;
      max-height:none;
      overflow:visible;
      display:block;
    }
    .share-detail .ev-detail-head {
      padding:26px 28px 20px;
    }
    .share-detail .ev-detail-desc {
      padding:22px 28px 6px;
    }
    .share-detail .ev-detail-section {
      padding:20px 28px 8px;
    }
    .share-disclaimer {
      padding:16px 28px 22px;
      font-size:11.5px;
      color:var(--text-3);
      border-top:1px dashed var(--border);
      line-height:1.7;
    }

    .share-toast {
      position:fixed;
      left:50%;
      bottom:34px;
      transform:translateX(-50%) translateY(6px);
      background:rgba(12,12,12,0.86);
      color:white;
      font-size:12.5px;
      padding:8px 16px;
      border-radius:999px;
      z-index:300;
      opacity:0;
      transition:opacity 0.18s ease, transform 0.18s ease;
      pointer-events:none;
      box-shadow:0 6px 18px rgba(0,0,0,0.18);
    }
    .share-toast.visible {
      opacity:1;
      transform:translateX(-50%) translateY(0);
    }

    /* 分享页响应式 */
    @media(max-width:860px) {
      .share-page-wrap { padding:16px 12px 40px; }
      .share-disclaimer { padding:14px 18px 20px; }

      /* 覆盖首页 .ev-detail 移动端的 position:fixed 抽屉样式 —— 分享页要跟着页面整体滚 */
      .share-detail {
        position:static;
        inset:auto;
        z-index:auto;
        height:auto;
        max-height:none;
        overflow:visible;
        transform:none;
        opacity:1;
        pointer-events:auto;
        border:1px solid var(--border);
        border-radius:16px;
      }

      .share-detail .ev-detail-head { padding:18px 18px 14px; }
      .share-detail .ev-detail-desc { padding:16px 18px 4px; }
      .share-detail .ev-detail-section { padding:14px 18px 8px; }
      .share-detail .ev-detail-title { font-size:20px; padding-right:0; }
      .share-detail .ev-detail-copy { width:28px; height:28px; }
    }
    @media(max-width:420px) {
      .share-page-wrap { padding:14px 10px 36px; }
    }

/* ═════════════ 自选股 ⭐ 按钮 / chip（全局复用） ═════════════ */
.ev-watch-btn {
  appearance: none;
  -webkit-appearance: none;
  border: 1px solid var(--border, #E5E7EB);
  background: var(--surface, #fff);
  color: #9CA3AF;
  width: 28px;
  height: 28px;
  border-radius: 8px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  line-height: 1;
  transition: all 0.15s ease;
  padding: 0;
  user-select: none;
}
.ev-watch-btn:hover { background: #FFF7ED; color: #F59E0B; border-color: #FDE68A; }
.ev-watch-btn.watching { color: #F59E0B; border-color: #FCD34D; background: #FFFBEB; }
.ev-watch-btn.watching:hover { color: #B45309; }
.ev-watch-btn:active { transform: scale(0.93); }
.ev-watch-btn[disabled], .ev-watch-btn[data-busy="1"] { opacity: 0.5; cursor: wait; }
/* 复盘页 ⭐：和标题基线对齐，稍微拉大 */
.recap-watch-btn { width: 32px; height: 32px; font-size: 17px; margin-left: 6px; }

/* 首页 chip "仅自选股" */
.ev-watch-chip {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.ev-watch-chip.active {
  background: #FFFBEB;
  color: #B45309;
  border-color: #FCD34D;
}
.ev-watch-chip:not(.active) { color: #6B7280; }
.ev-watch-chip.locked {
  background: #FFF7ED;
  color: #92400E;
  border-color: #FED7AA;
}
.ev-watch-chip.locked:hover {
  background: #FFEDD5;
  color: #7C2D12;
  border-color: #FDBA74;
}
.ev-watch-chip-pro {
  margin-left: 2px;
  padding: 0 5px;
  border-radius: 999px;
  background: #FEF3C7;
  color: #92400E;
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 800;
  line-height: 16px;
}

/* 首页自选股升级弹窗 */
.ev-upgrade-modal {
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
}
.ev-upgrade-modal[hidden] { display: none; }
.ev-upgrade-mask {
  position: absolute;
  inset: 0;
  background: rgba(15, 23, 42, 0.48);
  backdrop-filter: blur(2px);
}
.ev-upgrade-card {
  position: relative;
  width: min(420px, 100%);
  background: #fff;
  border: 1px solid rgba(251, 191, 36, 0.42);
  border-radius: 16px;
  box-shadow: 0 24px 70px rgba(15, 23, 42, 0.22);
  padding: 24px 24px 22px;
  text-align: center;
}
.ev-upgrade-close {
  position: absolute;
  top: 10px;
  right: 12px;
  width: 28px;
  height: 28px;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--text-3);
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
}
.ev-upgrade-close:hover { background: var(--surface-2); color: var(--text-1); }
.ev-upgrade-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 58px;
  height: 58px;
  margin-bottom: 14px;
  border-radius: 50%;
  background: #FEF3C7;
  color: #92400E;
  font-size: 28px;
}
.ev-upgrade-title {
  margin: 0 0 9px;
  color: var(--text-1);
  font-family: var(--font-serif);
  font-size: 18px;
  font-weight: 800;
  letter-spacing: -0.2px;
}
.ev-upgrade-desc {
  margin: 0 auto 18px;
  max-width: 330px;
  color: var(--text-2);
  font-size: 13.5px;
  line-height: 1.7;
}
.ev-upgrade-actions {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 9px;
}
.ev-upgrade-primary,
.ev-upgrade-secondary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 34px;
  padding: 0 14px;
  border-radius: 9px;
  font-size: 13px;
  font-weight: 700;
  text-decoration: none;
  cursor: pointer;
}
.ev-upgrade-primary {
  border: 1px solid var(--primary, #1C3DB8);
  background: var(--primary, #1C3DB8);
  color: #fff;
}
.ev-upgrade-secondary {
  border: 1px solid var(--border);
  background: #fff;
  color: var(--text-2);
}
.ev-upgrade-secondary:hover { border-color: var(--border-2); color: var(--text-1); }

    /* ── HOME · 热门概念月历 ─────────────────────────────────────────────── */
    .cc-section {
      margin-bottom:12px;
    }
    .cc-section-head {
      margin-bottom:6px;
    }
    .cc-heading {
      font-family:var(--font-serif);
      font-size:16px;
      font-weight:700;
      letter-spacing:-0.2px;
      color:var(--text-1);
      margin-bottom:2px;
    }
    .cc-hint {
      font-size:11px;
      color:var(--text-3);
      line-height:1.45;
      max-width:720px;
    }
    /* 月历：窄卡片居中，固定行高保证每格等大 */
    #concept-calendar-root {
      display:flex;
      justify-content:flex-start;
      width:100%;
    }
    .cc-card {
      background:var(--surface);
      border:1px solid var(--border);
      border-radius:10px;
      box-shadow:0 4px 16px rgba(15,23,42,0.045);
      overflow:hidden;
      width:100%;
      max-width:100%;
      box-sizing:border-box;
      display:flex;
      align-items:stretch;
    }
    .cc-toolbar {
      display:flex;
      flex:0 0 154px;
      align-items:flex-start;
      justify-content:center;
      flex-direction:column;
      gap:6px;
      padding:8px 10px;
      border-right:1px solid var(--border);
      background:linear-gradient(180deg, var(--surface-2) 0%, var(--surface) 100%);
    }
    .cc-nav {
      display:flex;
      align-items:center;
      gap:4px;
      justify-self:auto;
      justify-content:center;
      flex-wrap:nowrap;
    }
    .cc-iconbtn {
      width:24px;
      height:24px;
      border-radius:6px;
      border:1px solid var(--border);
      background:var(--surface);
      color:var(--text-2);
      cursor:pointer;
      display:flex;
      align-items:center;
      justify-content:center;
      transition:background 0.12s, border-color 0.12s, color 0.12s;
    }
    .cc-iconbtn:hover {
      background:var(--surface-2);
      border-color:var(--border-2);
      color:var(--text-1);
    }
    .cc-todaybtn {
      height:24px;
      padding:0 8px;
      border-radius:6px;
      border:1px solid var(--border-2);
      background:var(--surface);
      font-family:var(--font-body);
      font-size:10.5px;
      font-weight:600;
      color:var(--text-2);
      cursor:pointer;
      transition:all 0.12s;
    }
    .cc-todaybtn:hover {
      border-color:var(--text-1);
      color:var(--text-1);
    }
    .cc-month {
      font-family:var(--font-serif);
      font-size:13px;
      font-weight:700;
      color:var(--text-1);
      text-align:left;
      margin:0;
      justify-self:auto;
      order:-1;
      white-space:nowrap;
    }
    .cc-legend {
      justify-self:auto;
      display:none;
      flex-wrap:wrap;
      align-items:center;
      justify-content:center;
      gap:8px 10px;
      font-size:10px;
      color:var(--text-3);
    }
    .cc-legend span { display:inline-flex; align-items:center; gap:4px; white-space:nowrap; }
    .cc-dot {
      display:inline-block;
      width:6px;
      height:6px;
      border-radius:2px;
      flex-shrink:0;
    }
    .cc-dot-hot { background:#F59E0B; }
    .cc-cal {
      flex:1;
      min-width:0;
      background:var(--surface);
      position:relative;
    }
    .cc-cal::after {
      display:none;
    }
    .cc-days-row {
      display:grid;
      grid-template-columns:repeat(var(--cc-cols, 16), minmax(0, 1fr));
      grid-auto-rows:42px;
      gap:6px;
      min-width:0;
      overflow:hidden;
      padding:8px 10px;
      position:relative;
    }
    .cc-wkhead {
      display:none;
    }
    .cc-weeks {
      display:flex;
      flex-direction:column;
      gap:1px;
    }
    /* 每周一块 7×2 网格：第 1 行日期、第 2 行概念条（整行底 + pill 叠上），周高恒定 */
    .cc-week-grid {
      display:grid;
      grid-template-columns:repeat(7, minmax(0, 1fr));
      gap:1px;
      background:var(--border);
      overflow:hidden;
    }
    .cc-week-grid > .cc-cell {
      position:relative;
    }
    .cc-wday {
      text-align:center;
      font-size:9.5px;
      font-weight:600;
      color:var(--text-2);
      padding:0 2px;
      background:var(--surface-2);
      letter-spacing:0.02em;
      display:flex;
      align-items:center;
      justify-content:center;
      min-height:0;
      box-sizing:border-box;
    }
    .cc-wday.cc-wkend { color:var(--primary); }
    .cc-cell {
      background:var(--surface);
      box-sizing:border-box;
      height:42px;
      min-height:42px;
      max-height:42px;
      padding:5px;
      display:flex;
      flex-direction:column;
      align-items:stretch;
      justify-content:space-between;
      gap:3px;
      position:relative;
      overflow:hidden;
      border:1px solid var(--border);
      border-radius:7px;
    }
    .cc-cell.cc-muted { background:var(--surface-2); }
    .cc-cell.cc-today {
      box-shadow:inset 0 0 0 1px rgba(28,61,184,0.38);
      background:#F7F8FE;
      border-color:rgba(28,61,184,0.42);
    }
    .cc-date {
      font-size:10.5px;
      font-weight:700;
      color:var(--text-1);
      line-height:1;
      text-align:left;
      padding-left:1px;
      display:flex;
      align-items:baseline;
      justify-content:space-between;
      gap:3px;
    }
    .cc-date em {
      font-style:normal;
      font-size:9px;
      font-weight:600;
      color:var(--text-3);
    }
    .cc-date.cc-wknum { color:var(--primary); }
    .cc-muted .cc-date { color:var(--text-3); font-weight:600; }
    .cc-pill {
      display:flex;
      align-items:center;
      justify-content:center;
      width:100%;
      min-width:0;
      min-height:16px;
      max-height:16px;
      padding:0 4px;
      border-radius:4px;
      box-sizing:border-box;
      font-size:8.5px;
      font-weight:600;
      line-height:16px;
      white-space:nowrap;
      overflow:hidden;
      text-overflow:ellipsis;
      border:1px solid transparent;
      opacity:0.94;
      position:relative;
      z-index:1;
    }
    .cc-run-pill {
      position:absolute;
      min-width:0;
      z-index:3;
    }
    .concept-days-row.cc-runs-enhanced .concept-day-cell > .cc-pill {
      visibility:hidden;
    }
    .concept-days-row > .cc-run-pill {
      min-height:20px;
      max-height:20px;
      line-height:20px;
      font-size:9px;
      pointer-events:none;
      z-index:5;
    }
    .cc-pill-merge-start,
    .cc-pill-merge-mid {
      margin-right:-10px;
      padding-right:10px;
      border-top-right-radius:0;
      border-bottom-right-radius:0;
      z-index:2;
    }
    .cc-pill-merge-end,
    .cc-pill-merge-mid {
      margin-left:-10px;
      padding-left:10px;
      border-top-left-radius:0;
      border-bottom-left-radius:0;
      z-index:2;
    }
    .cc-pill-empty {
      visibility:hidden;
      border-color:transparent;
    }
    .cc-pill-span {
      display:flex;
      align-items:center;
      justify-content:center;
      text-align:center;
      padding:0 3px;
      border-radius:3px;
      box-sizing:border-box;
      height:17px;
      max-height:17px;
      min-height:17px;
      min-width:0;
      overflow:hidden;
    }
    .cc-pill.cc-tone-teal   { background:#E8F7F5; color:#0F766E; border-color:#CFEDEA; }
    .cc-pill.cc-tone-rose   { background:#FFECEF; color:#BE123C; border-color:#F9D5DD; }
    .cc-pill.cc-tone-violet { background:#F1EDFF; color:#5B21B6; border-color:#E4DDFC; }
    .cc-pill.cc-tone-amber  { background:#FFF4D7; color:#A95C07; border-color:#F6E4B7; }
    .cc-pill.cc-tone-slate  { background:#F3F4F6; color:#4B5563; border-color:#E5E7EB; }

    @media(max-width:860px) {
      .cc-section { margin-bottom:12px; }
      .cc-card { max-width:100%; }
      .cc-toolbar {
        flex-basis:128px;
        padding:7px 8px;
      }
      .cc-wkhead { grid-template-rows:19px; }
      .cc-wday { font-size:9px; }
      .cc-days-row {
        grid-template-columns:repeat(11, minmax(0, 1fr));
        gap:5px;
        padding:7px 8px;
      }
      .cc-cell {
        height:40px;
        min-height:40px;
        max-height:40px;
        padding:4px 2px 3px;
      }
      .cc-date { font-size:10px; }
      .cc-pill {
        min-height:15px;
        max-height:15px;
        font-size:8px;
        line-height:15px;
      }
      .cc-pill-span {
        height:16px;
        max-height:16px;
        min-height:16px;
        padding:0 2px;
      }
    }
    @media(max-width:520px) {
      .cc-heading { font-size:15px; }
      .cc-hint { font-size:10.5px; }
      .cc-legend { display:none; }
      .cc-card {
        flex-direction:column;
      }
      .cc-toolbar {
        flex:0 0 auto;
        flex-direction:row;
        align-items:center;
        justify-content:space-between;
        border-right:0;
        border-bottom:1px solid var(--border);
      }
      .cc-days-row {
        grid-template-columns:repeat(7, minmax(0, 1fr));
      }
    }

    /* ── CONCEPTS PAGE · 概念板块 ───────────────────────────────────────── */
    .concept-page-wrap {
      max-width:1160px;
      margin:0 auto;
      padding:30px 22px 52px;
    }
    .concept-hero {
      display:flex;
      align-items:flex-end;
      justify-content:space-between;
      gap:22px;
      margin-bottom:18px;
    }
    .concept-kicker {
      font-size:11px;
      font-weight:700;
      letter-spacing:0.12em;
      text-transform:uppercase;
      color:var(--primary);
      margin-bottom:6px;
    }
    .concept-title {
      font-family:var(--font-serif);
      font-size:34px;
      line-height:1.1;
      letter-spacing:-0.8px;
      color:var(--text-1);
      margin-bottom:8px;
    }
    .concept-sub {
      font-size:14px;
      line-height:1.7;
      color:var(--text-2);
      max-width:620px;
    }
    .concept-hero-stat {
      min-width:150px;
      padding:12px 14px;
      border:1px solid var(--border);
      border-radius:14px;
      background:linear-gradient(180deg, var(--surface) 0%, var(--surface-2) 100%);
      box-shadow:0 10px 28px rgba(15,23,42,0.06);
    }
    .concept-hero-stat span {
      display:block;
      font-size:11px;
      color:var(--text-3);
      margin-bottom:4px;
    }
    .concept-hero-stat strong {
      display:block;
      font-family:var(--font-mono);
      font-size:14px;
      color:var(--text-1);
    }
    .concept-calendar-section {
      margin-bottom:18px;
    }
    .concept-section-head {
      display:flex;
      align-items:flex-end;
      justify-content:space-between;
      gap:16px;
      margin-bottom:8px;
    }
    .concept-calendar-card {
      border-radius:10px;
      box-shadow:0 4px 16px rgba(15,23,42,0.045);
    }
    .concept-calendar-card .cc-iconbtn,
    .concept-calendar-card .cc-todaybtn {
      text-decoration:none;
    }
    .concept-days-row {
      --cc-merge-overlap:16px;
      grid-template-columns:repeat(16, minmax(0, 1fr));
      grid-auto-rows:48px;
      gap:6px;
      padding:8px 10px;
    }
    .concept-day-cell {
      height:48px;
      min-height:48px;
      max-height:48px;
      padding:5px 5px 23px;
      color:inherit;
      text-decoration:none;
      overflow:visible;
      transition:transform 0.14s ease, box-shadow 0.14s ease, border-color 0.14s ease;
    }
    .concept-day-cell:hover {
      transform:translateY(-1px);
      border-color:var(--border-2);
      box-shadow:0 8px 18px rgba(15,23,42,0.08);
    }
    .concept-day-cell.cc-selected {
      border-color:rgba(28,61,184,0.72);
      box-shadow:inset 0 0 0 1px rgba(28,61,184,0.58), 0 10px 24px rgba(28,61,184,0.1);
      background:#F7F8FE;
    }
    .concept-day-cell .cc-pill {
      min-height:20px;
      max-height:20px;
      line-height:20px;
      font-size:9px;
      margin-top:auto;
    }
    .concept-day-cell .cc-pill-merge-start,
    .concept-day-cell .cc-pill-merge-end,
    .concept-day-cell .cc-pill-merge-mid {
      z-index:1;
    }
    .concept-empty-pill {
      margin-top:auto;
      font-size:11px;
      color:var(--text-3);
    }
    .concept-rank-section {
      background:var(--surface);
      border:1px solid var(--border);
      border-radius:18px;
      padding:20px;
      box-shadow:0 14px 40px rgba(15,23,42,0.06);
    }
    .concept-rank-head {
      display:flex;
      align-items:flex-start;
      justify-content:space-between;
      gap:16px;
      margin-bottom:16px;
    }
    .concept-rank-head h2 {
      font-family:var(--font-serif);
      font-size:22px;
      letter-spacing:-0.4px;
      color:var(--text-1);
    }
    .concept-event-link,
    .concept-card-link {
      display:inline-flex;
      align-items:center;
      justify-content:center;
      border:1px solid var(--border);
      border-radius:999px;
      padding:7px 12px;
      font-size:12px;
      font-weight:700;
      color:var(--primary);
      text-decoration:none;
      background:var(--surface);
      transition:background 0.14s ease, border-color 0.14s ease;
    }
    .concept-event-link:hover,
    .concept-card-link:hover {
      background:var(--primary-bg);
      border-color:rgba(28,61,184,0.22);
    }
    .concept-rank-grid {
      display:grid;
      grid-template-columns:repeat(2, minmax(0, 1fr));
      gap:12px;
    }
    .concept-rank-card {
      border:1px solid var(--border);
      border-radius:15px;
      padding:15px;
      background:linear-gradient(180deg, var(--surface) 0%, var(--surface-2) 100%);
    }
    .concept-rank-meta {
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
      margin-bottom:10px;
    }
    .concept-rank-no {
      font-family:var(--font-mono);
      font-size:11px;
      font-weight:800;
      color:var(--primary);
    }
    .concept-rank-card h3 {
      font-size:18px;
      color:var(--text-1);
      margin-bottom:8px;
    }
    .concept-rank-card p {
      min-height:50px;
      font-size:13px;
      line-height:1.7;
      color:var(--text-2);
      margin-bottom:12px;
    }
    .concept-rank-card p.muted {
      color:var(--text-3);
    }
    .concept-stock-strip {
      display:flex;
      flex-wrap:wrap;
      gap:7px;
      margin:2px 0 14px;
    }
    .concept-stock-pill {
      display:inline-flex;
      align-items:baseline;
      gap:6px;
      max-width:150px;
      padding:6px 9px;
      border-radius:999px;
      border:1px solid var(--border);
      background:rgba(255,255,255,0.78);
      color:var(--text-1);
      text-decoration:none;
      transition:background 0.14s ease, border-color 0.14s ease, transform 0.14s ease;
    }
    .concept-stock-pill:hover {
      background:var(--primary-bg);
      border-color:rgba(28,61,184,0.25);
      transform:translateY(-1px);
    }
    .concept-stock-name {
      min-width:0;
      overflow:hidden;
      text-overflow:ellipsis;
      white-space:nowrap;
      font-size:12px;
      font-weight:700;
    }
    .concept-stock-code {
      flex-shrink:0;
      font-family:var(--font-mono);
      font-size:10.5px;
      color:var(--text-3);
    }
    .concept-stock-empty {
      margin:2px 0 14px;
      font-size:12px;
      color:var(--text-3);
    }
    .concept-empty-state {
      margin:4px 0 0;
      padding:18px;
      border:1px dashed var(--border);
      border-radius:12px;
      background:var(--surface-2);
      color:var(--text-3);
      font-size:12.5px;
      text-align:center;
    }
    .concept-empty-state .state-desc {
      margin-top:6px;
      font-size:12px;
      color:var(--text-3);
    }

    /* ── CONCEPT DETAIL PAGE · 概念事件回溯 ─────────────────────── */
    .concept-detail-body { background:var(--bg); }
    .concept-detail-wrap { max-width:1180px; margin:0 auto; padding:24px 24px 60px; }
    .concept-detail-hero {
      margin:16px 0 18px;
      padding:22px;
      border:1px solid var(--border);
      border-radius:18px;
      background:linear-gradient(135deg, #fff 0%, #F7F8FE 100%);
      display:grid;
      grid-template-columns:minmax(0, 1fr) auto;
      gap:22px;
      box-shadow:0 10px 28px rgba(15,23,42,0.055);
    }
    .concept-detail-title {
      font-family:var(--font-serif);
      font-size:34px;
      line-height:1.12;
      letter-spacing:-0.5px;
      margin-bottom:8px;
    }
    .concept-detail-sub { max-width:680px; color:var(--text-2); font-size:13.5px; line-height:1.75; }
    .concept-stat-grid {
      display:grid;
      grid-template-columns:repeat(2, minmax(120px, 1fr));
      gap:10px;
      min-width:310px;
    }
    .concept-stat-card {
      padding:12px 13px;
      border:1px solid var(--border);
      border-radius:13px;
      background:rgba(255,255,255,0.82);
    }
    .concept-stat-card span { display:block; font-size:11.5px; color:var(--text-3); margin-bottom:2px; }
    .concept-stat-card b { font-family:var(--font-mono); font-size:21px; color:var(--text-1); }
    .concept-detail-grid {
      display:grid;
      grid-template-columns:minmax(0, 1fr) 360px;
      gap:18px;
      align-items:start;
    }
    .concept-main-col, .concept-side-col { min-width:0; display:flex; flex-direction:column; gap:18px; }
    .concept-side-col { position:sticky; top:10px; }
    .concept-panel {
      background:#fff;
      border:1px solid var(--border);
      border-radius:16px;
      box-shadow:0 2px 12px rgba(0,0,0,0.035);
      overflow:hidden;
    }
    .concept-panel-head {
      display:flex;
      align-items:baseline;
      justify-content:space-between;
      gap:12px;
      padding:16px 18px 10px;
      border-bottom:1px solid var(--border);
    }
    .concept-panel-head h2 { font-family:var(--font-serif); font-size:16px; font-weight:700; }
    .concept-panel-head span { font-size:11.5px; color:var(--text-3); }
    .concept-event-list { display:flex; flex-direction:column; gap:9px; padding:12px; }
    .concept-event-card {
      display:grid;
      grid-template-columns:104px minmax(0, 1fr) 86px;
      gap:12px;
      padding:13px 14px;
      border:1px solid var(--border);
      border-radius:13px;
      background:var(--surface-2);
      color:inherit;
      text-decoration:none;
      transition:all 0.14s;
    }
    .concept-event-card:hover { background:#fff; border-color:var(--border-2); transform:translateY(-1px); box-shadow:0 6px 16px rgba(0,0,0,0.07); }
    .concept-event-date { font-family:var(--font-mono); font-size:11.5px; color:var(--text-3); padding-top:3px; }
    .concept-event-main { min-width:0; }
    .concept-event-title-row { display:flex; align-items:center; gap:7px; flex-wrap:wrap; margin-bottom:7px; }
    .concept-event-title {
      flex:1 1 260px;
      min-width:0;
      font-size:13.5px;
      font-weight:700;
      line-height:1.45;
      color:var(--text-1);
      display:-webkit-box;
      -webkit-line-clamp:2;
      line-clamp:2;
      -webkit-box-orient:vertical;
      overflow:hidden;
    }
    .concept-exp-badge {
      padding:1px 6px;
      border-radius:5px;
      border:1px solid var(--exp-color);
      color:var(--exp-color);
      font-size:10.5px;
      font-weight:700;
      font-family:var(--font-mono);
    }
    .concept-event-stocks { display:flex; flex-wrap:wrap; gap:6px; }
    .concept-event-stocks span {
      padding:2px 7px;
      border:1px solid var(--border);
      border-radius:999px;
      background:#fff;
      font-size:11.5px;
      color:var(--text-2);
    }
    .concept-event-stocks em { font-style:normal; color:var(--text-3); font-family:var(--font-mono); }
    .concept-event-side {
      display:flex;
      flex-direction:column;
      align-items:flex-end;
      gap:2px;
      font-family:var(--font-mono);
      font-size:11.5px;
      color:var(--text-3);
    }
    .concept-event-side b { font-size:13px; }
    .concept-event-side b.bull, .concept-stock-metrics .bull { color:var(--bull); }
    .concept-event-side b.bear, .concept-stock-metrics .bear { color:var(--bear); }
    .concept-event-side b.flat, .concept-stock-metrics .flat { color:var(--text-3); }
    .concept-stock-list, .concept-rank-list { display:flex; flex-direction:column; gap:8px; padding:12px; }
    .concept-stock-row {
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
      padding:10px 11px;
      border:1px solid var(--border);
      border-radius:11px;
      background:var(--surface-2);
      color:inherit;
      text-decoration:none;
      transition:all 0.14s;
    }
    .concept-stock-row:hover { background:#fff; border-color:var(--border-2); transform:translateY(-1px); }
    .concept-stock-row b { display:block; font-size:13px; color:var(--text-1); }
    .concept-stock-row span { font-size:11px; color:var(--text-3); font-family:var(--font-mono); }
    .concept-stock-metrics { display:flex; flex-direction:column; align-items:flex-end; gap:2px; flex-shrink:0; }
    .concept-stock-metrics span { font-size:11px; color:var(--text-2); }
    .concept-rank-row { padding:10px 11px; border:1px solid var(--border); border-radius:11px; background:var(--surface-2); }
    .concept-rank-row div { display:flex; justify-content:space-between; gap:10px; margin-bottom:4px; }
    .concept-rank-row b { font-family:var(--font-mono); font-size:12px; }
    .concept-rank-row span { font-family:var(--font-mono); font-size:11px; color:var(--primary); font-weight:700; }
    .concept-rank-row p { font-size:12px; color:var(--text-2); line-height:1.6; }
    .concept-empty-state.small { padding:14px; font-size:12px; }

    @media(max-width:860px) {
      .concept-page-wrap { padding:22px 14px 44px; }
      .concept-hero { align-items:flex-start; flex-direction:column; }
      .concept-title { font-size:29px; }
      .concept-hero-stat { width:100%; box-sizing:border-box; }
      .concept-section-head { align-items:flex-start; flex-direction:column; gap:4px; }
      .concept-calendar-card { flex-direction:column; }
      .concept-calendar-card .cc-toolbar {
        flex:0 0 auto;
        flex-direction:row;
        align-items:center;
        justify-content:space-between;
        border-right:0;
        border-bottom:1px solid var(--border);
      }
      .concept-days-row {
        --cc-merge-overlap:9px;
        grid-template-columns:repeat(11, minmax(0, 1fr));
        grid-auto-rows:46px;
      }
      .concept-day-cell {
        height:46px;
        min-height:46px;
        max-height:46px;
        padding:4px 2px 5px;
      }
      .concept-rank-grid {
        grid-template-columns:1fr;
      }
      .concept-rank-head {
        align-items:flex-start;
        flex-direction:column;
      }
      .concept-detail-wrap { padding:16px 12px 42px; }
      .concept-detail-hero { grid-template-columns:1fr; padding:17px; }
      .concept-detail-title { font-size:28px; }
      .concept-stat-grid { min-width:0; grid-template-columns:repeat(2, minmax(0, 1fr)); }
      .concept-detail-grid { grid-template-columns:1fr; }
      .concept-side-col { position:static; }
      .concept-event-card { grid-template-columns:1fr; gap:8px; }
      .concept-event-date { padding-top:0; }
      .concept-event-side { align-items:flex-start; flex-direction:row; gap:8px; }
    }
    @media(max-width:520px) {
      .concept-days-row {
        grid-template-columns:repeat(7, minmax(0, 1fr));
        gap:5px;
        padding:7px 8px;
      }
      .concept-day-cell .cc-pill {
        font-size:8.5px;
      }
    }


    /* ── 邀请落地横幅 ── */
    .invite-banner {
      display: flex; align-items: center; gap: 12px;
      padding: 10px 28px;
      background: linear-gradient(90deg, #1C3DB8 0%, #2563eb 100%);
      color: #fff; font-size: 13.5px;
    }
    .invite-banner-text { flex: 1; }
    .invite-banner-btn {
      flex-shrink: 0; padding: 6px 16px; border-radius: 8px;
      background: #fff; color: var(--primary, #1C3DB8);
      font-weight: 700; font-size: 13px; text-decoration: none;
      transition: opacity .15s;
    }
    .invite-banner-btn:hover { opacity: .88; }
    .invite-banner-close {
      flex-shrink: 0; width: 24px; height: 24px; border: none;
      background: rgba(255,255,255,.2); color: #fff; border-radius: 50%;
      cursor: pointer; font-size: 16px; line-height: 1;
      display: flex; align-items: center; justify-content: center;
    }
    .invite-banner-close:hover { background: rgba(255,255,255,.35); }
    @media(max-width:640px) {
      .invite-banner { padding: 10px 16px; flex-wrap: wrap; }
      .invite-banner-text { font-size: 13px; }
    }
