:root{
  /* Monochrome palette */
  --ink:#0a0a0b;            /* near-black */
  --ink-2:#18181b;
  --ink-3:#26262b;
  --gray-1:#3a3a40;
  --gray-2:#6b6b73;
  --gray-3:#9a9aa3;
  --gray-4:#c8c8cf;
  --gray-5:#e6e6ea;
  --gray-6:#f3f3f5;
  --paper:#fafafb;
  --white:#ffffff;

  /* Glass tokens — thicker, more transparent, more refractive */
  --glass-bg:rgba(255,255,255,0.38);
  --glass-bg-strong:rgba(255,255,255,0.58);
  --glass-bg-dark:rgba(10,10,11,0.55);
  --glass-border:rgba(255,255,255,0.7);
  --glass-border-soft:rgba(255,255,255,0.55);
  --glass-stroke:rgba(20,20,24,0.06);
  --glass-edge-dark:rgba(20,20,24,0.12);
  --glass-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 0 0 1px rgba(255,255,255,0.35) inset,
    0 -1px 0 rgba(20,20,24,0.06) inset,
    0 14px 40px -14px rgba(20,20,24,0.22),
    0 6px 16px -8px rgba(20,20,24,0.1);
  --glass-shadow-hover:
    0 1px 0 rgba(255,255,255,1) inset,
    0 0 0 1px rgba(255,255,255,0.5) inset,
    0 -1px 0 rgba(20,20,24,0.08) inset,
    0 24px 60px -18px rgba(20,20,24,0.32),
    0 10px 24px -10px rgba(20,20,24,0.14);
  /* 只剩几个弹层在用（搜索 / 登录 / 上传 / 学习资料阅读器工具栏）——
     它们是临时出现的，模糊几帧不影响滚动手感。 */
  --glass-blur:saturate(180%) blur(16px);
  --glass-blur-strong:saturate(200%) blur(32px);
  /* 列表里成批重复出现的玻璃元素（卡片 / 列表头 / 骨架屏 / footer / 搜索结果条）
     用这个，而不是 --glass-blur。2026-07-30 起为 none —— 见下方"环境背景性能"注释。
     想恢复成毛玻璃：把这里改回 var(--glass-blur)，一行回滚，别去逐条改规则。 */
  --card-blur:none;
  /* header / nav 这两条 sticky 栏。实测（120Hz Mac，见 CLAUDE.md）：只要它俩带
     backdrop-filter，滚动就有约 5% 的帧翻倍到 16.8ms；关掉后 p95 从 16.8 → 8.7，
     满帧无掉帧，且是唯一有效的一项。改用近不透明底色替代玻璃。
     想改回毛玻璃：--bar-blur 改成 var(--glass-blur)，两条 --bar-bg-* 的 alpha 调回
     0.55 / 0.7（暗色 0.7 / 0.6）。 */
  --bar-blur:none;
  --bar-bg-header:rgba(10,10,11,0.95);
  --bar-bg-nav:rgba(250,250,251,0.95);

  /* Category accents — three equally-light glass tones, distinguished only by hue
     AI: cool steel blue  ·  Finance: warm soft gold  ·  Politics: soft coral red */
  --ai-tint:rgba(150,180,210,0.42);
  --ai-line-1:#a8b4c2;
  --ai-line-2:#4a6b8f;
  --ai-dot:#5d7a99;
  --ai-tag-bg:rgba(220,232,244,0.85);
  --ai-tag-border:rgba(120,150,185,0.4);
  --ai-tag-text:#2c3e58;

  --fin-tint:rgba(220,205,175,0.42);
  --fin-line-1:#c2ad85;
  --fin-line-2:#6b5a3a;
  --fin-dot:#8a7656;
  --fin-tag-bg:rgba(240,230,210,0.85);
  --fin-tag-border:rgba(180,160,125,0.42);
  --fin-tag-text:#544533;

  --pol-tint:rgba(170,170,195,0.38);
  --pol-line-1:#a8a8c2;
  --pol-line-2:#3d3d6b;
  --pol-dot:#5d5d85;
  --pol-tag-bg:rgba(230,230,242,0.85);
  --pol-tag-border:rgba(130,130,165,0.42);
  --pol-tag-text:#363650;

  --serif:'Noto Serif SC',Georgia,serif;
  --display:'Playfair Display','Noto Serif SC',serif;
  --sans:'Noto Sans SC',-apple-system,BlinkMacSystemFont,'Helvetica Neue',Arial,sans-serif;

  --radius:16px;
  --radius-sm:10px;
  --radius-lg:22px;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html,body{min-height:100%;}
/* html 元素先吃住背景色，浏览器在 CSS 完全 paint 前不会闪白 */
html{background:var(--paper);}
@media (prefers-color-scheme: dark){html{background:#0d0d10;}}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:15px;
  line-height:1.75;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  font-feature-settings:"kern","liga";
  position:relative;
  overflow-x:hidden;
}

/* Ambient mesh background — richer, more contrast so glass clearly refracts it */
body::before{
  content:'';position:fixed;inset:-10vmax;z-index:-2;
  background:
    radial-gradient(38vmax 38vmax at 8% 6%, rgba(15,15,20,0.18), transparent 60%),
    radial-gradient(48vmax 48vmax at 96% 14%, rgba(40,40,48,0.16), transparent 64%),
    radial-gradient(42vmax 42vmax at 76% 92%, rgba(20,20,28,0.20), transparent 60%),
    radial-gradient(36vmax 36vmax at 4% 86%, rgba(50,50,56,0.14), transparent 60%),
    radial-gradient(28vmax 28vmax at 50% 50%, rgba(255,255,255,0.5), transparent 70%),
    linear-gradient(165deg, #f0f0f3 0%, #e2e2e7 50%, #d6d6dc 100%);
}
/* fine grain noise — gives glass a "real" texture under blur */
body::after{
  content:'';position:fixed;inset:0;z-index:-1;pointer-events:none;
  background-image:
    radial-gradient(rgba(20,20,24,0.06) 1px, transparent 1.2px);
  background-size:3px 3px;
  opacity:0.55;
}

/* 全屏盖层（巴菲特文献 / 学习资料阅读器）打开时，底下这些环境层 100% 被挡住，
   但浏览器不知道，仍会逐帧参与合成 —— header/nav 的 backdrop-filter 更是要
   把身后的像素重新模糊一遍。盖层期间一律 display:none，滚动才不掉帧。 */
body.buffett-open::before,
body.buffett-open::after,
body.options-open::before,
body.options-open::after,
body.learning-reader-open::before,
body.learning-reader-open::after{display:none;}
body.buffett-open .theme-tint,
body.options-open .theme-tint,
body.learning-reader-open .theme-tint{display:none;}
body.buffett-open>header,
body.buffett-open>nav,
body.buffett-open>.hairline,
body.options-open>header,
body.options-open>nav,
body.options-open>.hairline{display:none;}
/* 直接打开公开长文时，盖层要等 body 末尾的主脚本跑完才挂上。
   在那之前浏览器已经把站点外壳和骨架屏画出来了，手机上会明显闪一下站点头部，
   所以 <head> 里的同步脚本先给 html 打 .pre-reader，这里把外壳藏掉；
   长文盖层挂上后摘掉这个类，之后交给对应的 body class 接管。 */
html.pre-reader>body>header,
html.pre-reader>body>nav,
html.pre-reader>body>.hairline,
html.pre-reader>body>main,
html.pre-reader>body>.anchor-rail{display:none;}

/* ===== Header ===== */
header{
  position:sticky;top:0;z-index:100;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  height:64px;padding:0 max(20px,4vw);
  background:var(--bar-bg-header);
  -webkit-backdrop-filter:var(--bar-blur);
  backdrop-filter:var(--bar-blur);
  border-bottom:1px solid rgba(255,255,255,0.08);
  box-shadow:0 1px 0 rgba(255,255,255,0.04) inset;
}
.logo-wrap{display:flex;align-items:center;gap:14px;flex-shrink:0;}
.logo{
  font-family:var(--display);font-size:23px;font-weight:700;
  color:#fff;text-decoration:none;letter-spacing:-0.01em;
}
.logo-divider{width:1px;height:18px;background:rgba(255,255,255,0.18);}
.logo-sub{
  font-size:10px;color:rgba(255,255,255,0.55);
  letter-spacing:0.22em;text-transform:uppercase;font-weight:500;
}
.header-right{display:flex;align-items:center;gap:12px;}
.htime{
  font-size:11px;color:rgba(255,255,255,0.42);
  letter-spacing:0.06em;font-variant-numeric:tabular-nums;
}
@media(max-width:600px){.logo-sub,.htime{display:none;}.logo-divider{display:none;}}

.search-btn{
  background:rgba(255,255,255,0.08);
  border:1px solid rgba(255,255,255,0.14);
  color:rgba(255,255,255,0.82);
  border-radius:999px;padding:7px 14px 7px 12px;cursor:pointer;
  font-size:12px;font-family:var(--sans);
  display:flex;align-items:center;gap:7px;
  transition:background .2s ease,border-color .2s ease,color .2s ease,transform .2s ease;
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
}
.search-btn:hover{background:rgba(255,255,255,0.14);border-color:rgba(255,255,255,0.25);color:#fff;}
.search-btn:active{transform:scale(0.97);}
.search-btn svg{width:13px;height:13px;}
@media(max-width:480px){.search-btn span{display:none;}.search-btn{padding:8px;}}

/* fine hairline divider under header */
.hairline{
  height:1px;
  background:linear-gradient(90deg,transparent,rgba(20,20,24,0.18),transparent);
}

/* ===== Nav (glass pill bar) ===== */
nav{
  position:sticky;top:64px;z-index:99;
  background:var(--bar-bg-nav);
  -webkit-backdrop-filter:var(--bar-blur);
  backdrop-filter:var(--bar-blur);
  border-bottom:1px solid var(--glass-border-soft);
  padding:10px max(20px,4vw);
  display:flex;align-items:center;gap:6px;
  overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
}
nav::-webkit-scrollbar{display:none;}
.tab{
  appearance:none;border:1px solid transparent;background:transparent;
  padding:8px 16px;font-size:13px;font-weight:500;cursor:pointer;
  color:var(--gray-2);border-radius:999px;
  font-family:var(--sans);white-space:nowrap;flex-shrink:0;
  letter-spacing:0.02em;
  transition:color .2s ease,background .2s ease,border-color .2s ease,box-shadow .25s ease;
}
.tab:hover{color:var(--ink);background:rgba(20,20,24,0.04);}
.tab.on{
  color:var(--white);
  background:linear-gradient(180deg,var(--ink-2),var(--ink));
  border-color:var(--ink);
  box-shadow:0 1px 0 rgba(255,255,255,0.18) inset, 0 6px 16px -8px rgba(20,20,24,0.45);
}

/* ===== Main ===== */
main{max-width:920px;margin:0 auto;padding:24px max(20px,3vw) 40px;}
.status{text-align:center;padding:80px 0;color:var(--gray-2);}
.spinner{
  width:28px;height:28px;border:2px solid var(--gray-5);
  border-top-color:var(--ink);border-radius:50%;
  animation:spin .8s linear infinite;margin:0 auto 16px;
}
@keyframes spin{to{transform:rotate(360deg);}}

/* Digest header */
.digest-header{
  margin-bottom:16px;
  display:flex;align-items:flex-end;justify-content:space-between;
  flex-wrap:wrap;gap:16px;
}
.digest-date-label{
  font-size:11px;color:var(--gray-2);
  letter-spacing:0.22em;text-transform:uppercase;
  margin-bottom:10px;font-weight:600;
  display:inline-flex;align-items:center;gap:8px;
}
.digest-date-label::before{
  content:'';width:18px;height:1px;background:var(--ink);display:inline-block;
}
.digest-title{
  font-family:var(--display);font-size:38px;font-weight:700;
  color:var(--ink);line-height:1.15;letter-spacing:-0.02em;
}
@media(max-width:600px){.digest-title{font-size:28px;}}
/* hero 大号月日数字 — 杂志封面感 */
.digest-bigdate{
  font-family:var(--display);
  font-size:clamp(56px, 9vw, 96px);
  font-weight:700;
  line-height:0.95;
  letter-spacing:-0.04em;
  color:var(--ink);
  margin-bottom:6px;
  font-variant-numeric:tabular-nums;
  font-feature-settings:"lnum";
}
.digest-bigdate .sep{
  color:var(--gray-3);font-weight:400;
  margin:0 0.04em;
}
.digest-divider{
  height:1px;
  background:linear-gradient(90deg,rgba(20,20,24,0.5),rgba(20,20,24,0.05) 60%,transparent);
  margin-bottom:24px;
}

/* Glass date-picker */
.date-picker-wrap{display:flex;align-items:center;gap:10px;}
.date-label{font-size:11px;color:var(--gray-2);white-space:nowrap;letter-spacing:0.1em;text-transform:uppercase;}
.date-select{
  appearance:none;-webkit-appearance:none;
  background:var(--glass-bg-strong) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath fill='%2326262b' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E") no-repeat right 12px center;
  border:1px solid var(--glass-border-soft);
  color:var(--ink);border-radius:999px;
  padding:8px 34px 8px 16px;font-size:13px;font-family:var(--sans);
  cursor:pointer;transition:border-color .2s,box-shadow .2s;
  font-weight:500;min-width:140px;
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  box-shadow:0 1px 0 rgba(255,255,255,0.6) inset, 0 4px 14px -6px rgba(20,20,24,0.1);
}
.date-select:hover,.date-select:focus{border-color:rgba(20,20,24,0.4);outline:none;}

/* ===== Section ===== */
.digest-section{margin-bottom:52px;}
.section-label{
  display:flex;align-items:center;gap:14px;margin-bottom:22px;
  position:relative;
}
/* 三分类极细彩色 hairline — 在分类标签右侧延伸到 section-more 之前 */
.section-label::after{
  content:'';flex:1;height:1px;margin:0 4px;
  background:linear-gradient(90deg, currentColor, transparent 92%);
  opacity:.5;order:99;
}
.section-label.cat-ai::after{color:#4a6b8f;}       /* 钢蓝 */
.section-label.cat-finance::after{color:#8a7656;}  /* 米杏 */
.section-label.cat-politics::after{color:#5d5d85;} /* 雾灰紫 */
.section-more{order:100;}
@media (prefers-color-scheme: dark){
  .section-label.cat-ai::after{color:#7a9cc4;}
  .section-label.cat-finance::after{color:#c2ad85;}
  .section-label.cat-politics::after{color:#a8a8c2;}
  .section-label::after{opacity:.65;}
}
.section-tag{
  display:inline-flex;align-items:center;gap:10px;
  padding:8px 16px 8px 13px;
  border-radius:999px;
  font-size:11.5px;font-weight:600;letter-spacing:0.2em;text-transform:uppercase;
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
}
/* 章节序号 — 大号 Playfair 数字，杂志版式锚点 */
.section-number{
  font-family:var(--display);
  font-size:34px;font-weight:600;
  color:var(--gray-3);
  letter-spacing:-0.02em;
  font-variant-numeric:tabular-nums;
  font-feature-settings:"lnum";
  line-height:1;
  flex-shrink:0;
}
@media(max-width:600px){.section-number{font-size:24px;}}
.section-tag .dot{
  width:8px;height:8px;border-radius:50%;
}
/* Section tag — three clearly distinct tiers */
.section-label.cat-ai .section-tag{
  background:var(--ai-tag-bg);
  border:1px solid var(--ai-tag-border);
  color:var(--ai-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.6) inset, 0 6px 18px -8px rgba(80,100,130,0.35);
}
.section-label.cat-ai .section-tag .dot{
  background:var(--ai-line-2);
  box-shadow:0 0 0 2px rgba(255,255,255,0.5), 0 0 10px rgba(80,100,130,0.5);
}
.section-label.cat-finance .section-tag{
  background:var(--fin-tag-bg);
  border:1px solid var(--fin-tag-border);
  color:var(--fin-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.12) inset, 0 6px 18px -8px rgba(40,30,20,0.45);
}
.section-label.cat-finance .section-tag .dot{
  background:#d4ccb8;
  box-shadow:0 0 0 2px rgba(255,255,255,0.15), 0 0 10px rgba(212,204,184,0.7);
}
.section-label.cat-politics .section-tag{
  background:var(--pol-tag-bg);
  border:1px solid var(--pol-tag-border);
  color:var(--pol-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.18) inset, 0 6px 20px -8px rgba(0,0,0,0.6);
}
.section-label.cat-politics .section-tag .dot{
  background:#fff;
  box-shadow:0 0 0 2px rgba(255,255,255,0.25), 0 0 10px rgba(255,255,255,0.6);
}
.section-title{
  font-family:var(--serif);font-size:20px;font-weight:600;color:var(--ink);
  letter-spacing:-0.01em;
}
@media(max-width:600px){.section-title{font-size:17px;}}
.section-more{
  margin-left:auto;font-size:12px;color:var(--gray-1);cursor:pointer;
  padding:6px 14px;border:1px solid var(--glass-border-soft);
  border-radius:999px;
  background:var(--glass-bg);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  transition:all .2s;font-family:var(--sans);white-space:nowrap;
}
.section-more:hover{color:var(--ink);border-color:var(--ink);background:var(--white);}

/* ===== Glass topic card ===== */
.topic-card{
  position:relative;overflow:hidden;isolation:isolate;
  border:1px solid var(--glass-border-soft);
  border-radius:var(--radius);
  padding:24px 26px 22px;margin-bottom:16px;
  background:
    linear-gradient(180deg,rgba(255,255,255,0.45),rgba(255,255,255,0.25) 60%,rgba(255,255,255,0.35)),
    var(--glass-bg);
  -webkit-backdrop-filter:var(--card-blur);
  backdrop-filter:var(--card-blur);
  box-shadow:var(--glass-shadow);
  transition:transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s ease, border-color .3s ease, background .3s ease;
}
.topic-card:hover,.topic-card.focus{
  transform:translateY(-3px);
  background:
    linear-gradient(180deg,rgba(255,255,255,0.6),rgba(255,255,255,0.35) 60%,rgba(255,255,255,0.45)),
    var(--glass-bg-strong);
  border-color:rgba(255,255,255,0.85);
  box-shadow:var(--glass-shadow-hover);
}
/* top-edge specular gleam */
.topic-card::before{
  content:'';position:absolute;left:0;right:0;top:0;height:55%;
  background:linear-gradient(180deg,rgba(255,255,255,0.85),rgba(255,255,255,0.0) 75%);
  pointer-events:none;z-index:0;
  border-radius:var(--radius) var(--radius) 0 0;
  mix-blend-mode:overlay;
  opacity:0.8;
}
/* diagonal light streak — thin highlight across the glass surface */
.topic-card::after{
  content:'';position:absolute;left:-20%;top:-30%;width:60%;height:140%;
  background:linear-gradient(115deg,transparent 35%,rgba(255,255,255,0.55) 50%,transparent 65%);
  transform:rotate(8deg);pointer-events:none;
  z-index:0;opacity:0.45;
  filter:blur(2px);
}
/* category bar — left edge indicator, more pronounced */
/* category tint glow inside the card — much stronger than before */
.topic-card.cat-ai{
  box-shadow:var(--glass-shadow), inset 0 0 140px 0 var(--ai-tint);
}
.topic-card.cat-finance{
  box-shadow:var(--glass-shadow), inset 0 0 140px 0 var(--fin-tint);
}
.topic-card.cat-politics{
  box-shadow:var(--glass-shadow), inset 0 0 140px 0 var(--pol-tint);
}
/* hover state preserves tint */
.topic-card.cat-ai:hover,.topic-card.cat-ai.focus{box-shadow:var(--glass-shadow-hover), inset 0 0 180px 0 var(--ai-tint);}
.topic-card.cat-finance:hover,.topic-card.cat-finance.focus{box-shadow:var(--glass-shadow-hover), inset 0 0 180px 0 var(--fin-tint);}
.topic-card.cat-politics:hover,.topic-card.cat-politics.focus{box-shadow:var(--glass-shadow-hover), inset 0 0 180px 0 var(--pol-tint);}

/* card content stacking above gleam layers */
.topic-card > *{position:relative;z-index:1;}

.topic-tag{
  display:inline-flex;align-items:center;gap:7px;
  font-size:11px;font-weight:600;letter-spacing:0.06em;
  margin-bottom:14px;padding:5px 12px 5px 10px;
  border-radius:999px;
  color:var(--ink);
  background:rgba(255,255,255,0.65);
  border:1px solid rgba(255,255,255,0.7);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  box-shadow:0 1px 0 rgba(255,255,255,0.6) inset;
}
.topic-tag::before{
  content:'';width:6px;height:6px;border-radius:50%;
  background:var(--pol-dot);flex-shrink:0;
}
/* Category-specific tag styles — three clear visual tiers */
.cat-ai .topic-tag{
  background:var(--ai-tag-bg);
  border:1px solid var(--ai-tag-border);
  color:var(--ai-tag-text);
}
.cat-ai .topic-tag::before{background:var(--ai-dot);}
.cat-finance .topic-tag{
  background:var(--fin-tag-bg);
  border:1px solid var(--fin-tag-border);
  color:var(--fin-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.1) inset, 0 4px 10px -4px rgba(40,30,20,0.4);
}
.cat-finance .topic-tag::before{background:#d4ccb8;box-shadow:0 0 6px rgba(212,204,184,0.6);}
.cat-politics .topic-tag{
  background:var(--pol-tag-bg);
  border:1px solid var(--pol-tag-border);
  color:var(--pol-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.15) inset, 0 4px 12px -4px rgba(0,0,0,0.5);
}
.cat-politics .topic-tag::before{background:#fff;box-shadow:0 0 8px rgba(255,255,255,0.7);}
.topic-summary{
  font-size:14.5px;line-height:1.9;color:var(--ink);
  margin-bottom:18px;font-family:var(--serif);font-weight:450;
}
@media(max-width:600px){.topic-summary{font-size:14px;}}

.perspectives{
  display:flex;flex-direction:column;gap:10px;
  border-top:1px dashed rgba(20,20,24,0.12);
  padding-top:16px;
}
.perspectives-title{
  font-size:10.5px;color:var(--gray-2);
  letter-spacing:0.18em;text-transform:uppercase;
  margin-bottom:4px;font-weight:600;
}
.perspective-item{display:flex;gap:10px;align-items:flex-start;font-size:13px;padding-left:12px;border-left:2px solid rgba(20,20,24,0.10);}
.perspective-source{
  flex-shrink:0;font-weight:600;color:var(--ink);
  background:rgba(255,255,255,0.6);
  padding:3px 10px;border-radius:6px;
  font-size:10.5px;letter-spacing:0.04em;margin-top:2px;
  border:1px solid var(--glass-border-soft);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  white-space:nowrap;
}
.perspective-point{color:var(--gray-2);line-height:1.7;font-size:13px;}
.empty-date{text-align:center;padding:60px 0;color:var(--gray-2);font-size:14px;}

/* ===== List view ===== */
.list-header{
  position:relative;overflow:hidden;isolation:isolate;
  display:flex;align-items:center;gap:14px;margin-bottom:26px;
  padding:14px 18px;
  background:
    linear-gradient(180deg,rgba(255,255,255,0.45),rgba(255,255,255,0.25) 60%,rgba(255,255,255,0.35)),
    var(--glass-bg);
  border:1px solid var(--glass-border-soft);
  border-radius:var(--radius);
  -webkit-backdrop-filter:var(--card-blur);
  backdrop-filter:var(--card-blur);
  box-shadow:var(--glass-shadow);
}
/* 顶部高光 */
.list-header::before{
  content:'';position:absolute;left:0;right:0;top:0;height:55%;
  background:linear-gradient(180deg,rgba(255,255,255,0.8),rgba(255,255,255,0) 80%);
  pointer-events:none;z-index:0;
  border-radius:var(--radius) var(--radius) 0 0;
  mix-blend-mode:overlay;opacity:0.75;
}
/* 斜对角光带 */
.list-header::after{
  content:'';position:absolute;left:-15%;top:-40%;width:50%;height:180%;
  background:linear-gradient(115deg,transparent 35%,rgba(255,255,255,0.5) 50%,transparent 65%);
  transform:rotate(8deg);pointer-events:none;
  z-index:0;opacity:0.4;
  filter:blur(2px);
}
.list-header > *{position:relative;z-index:1;}
.list-tag{
  display:inline-flex;align-items:center;gap:10px;padding:8px 16px 8px 13px;
  border-radius:999px;
  font-size:11.5px;font-weight:600;letter-spacing:0.2em;text-transform:uppercase;
}
.list-tag .dot{width:8px;height:8px;border-radius:50%;}
.list-tag.cat-ai{
  background:var(--ai-tag-bg);border:1px solid var(--ai-tag-border);color:var(--ai-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.6) inset, 0 6px 18px -8px rgba(80,100,130,0.35);
}
.list-tag.cat-ai .dot{background:var(--ai-line-2);box-shadow:0 0 0 2px rgba(255,255,255,0.5),0 0 10px rgba(80,100,130,0.5);}
.list-tag.cat-finance{
  background:var(--fin-tag-bg);border:1px solid var(--fin-tag-border);color:var(--fin-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.12) inset, 0 6px 18px -8px rgba(40,30,20,0.45);
}
.list-tag.cat-finance .dot{background:#d4ccb8;box-shadow:0 0 0 2px rgba(255,255,255,0.15),0 0 10px rgba(212,204,184,0.7);}
.list-tag.cat-politics{
  background:var(--pol-tag-bg);border:1px solid var(--pol-tag-border);color:var(--pol-tag-text);
  box-shadow:0 1px 0 rgba(255,255,255,0.18) inset, 0 6px 20px -8px rgba(0,0,0,0.6);
}
.list-tag.cat-politics .dot{background:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.25),0 0 10px rgba(255,255,255,0.6);}
.list-title{font-family:var(--serif);font-size:20px;font-weight:600;color:var(--ink);}
.list-count{
  margin-left:auto;font-size:12px;color:var(--gray-1);
  background:var(--glass-bg-strong);padding:4px 12px;border-radius:999px;
  border:1px solid var(--glass-border-soft);white-space:nowrap;
}

.card{
  position:relative;overflow:hidden;isolation:isolate;
  background:
    linear-gradient(180deg,rgba(255,255,255,0.4),rgba(255,255,255,0.22) 60%,rgba(255,255,255,0.32)),
    var(--glass-bg);
  border:1px solid var(--glass-border-soft);
  border-radius:var(--radius-sm);
  padding:18px 22px;margin-bottom:12px;cursor:pointer;
  -webkit-backdrop-filter:var(--card-blur);
  backdrop-filter:var(--card-blur);
  box-shadow:var(--glass-shadow);
  transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .25s,border-color .25s,background .25s;
}
.card::before{
  content:'';position:absolute;inset:0 0 auto 0;height:50%;
  background:linear-gradient(180deg,rgba(255,255,255,0.7),transparent 80%);
  pointer-events:none;z-index:0;
  border-radius:var(--radius-sm) var(--radius-sm) 0 0;
  mix-blend-mode:overlay;opacity:0.7;
}
/* 斜对角光带 — 让 .card 也有 topic-card 那种"水玻璃"质感 */
.card::after{
  content:'';position:absolute;left:-20%;top:-30%;width:55%;height:160%;
  background:linear-gradient(115deg,transparent 35%,rgba(255,255,255,0.45) 50%,transparent 65%);
  transform:rotate(8deg);pointer-events:none;
  z-index:0;opacity:0.4;
  filter:blur(2px);
}
.card > *{position:relative;z-index:1;}
.card:hover,.card.focus{
  transform:translateY(-2px);
  background:
    linear-gradient(180deg,rgba(255,255,255,0.55),rgba(255,255,255,0.32) 60%,rgba(255,255,255,0.42)),
    var(--glass-bg-strong);
  border-color:rgba(255,255,255,0.85);
  box-shadow:var(--glass-shadow-hover);
}
/* 分类色内阴影染色 — card 用 data-cat 属性（不是 class） */
.card[data-cat="ai"]{
  box-shadow:var(--glass-shadow), inset 0 0 110px 0 var(--ai-tint);
}
.card[data-cat="finance"]{
  box-shadow:var(--glass-shadow), inset 0 0 110px 0 var(--fin-tint);
}
.card[data-cat="politics"]{
  box-shadow:var(--glass-shadow), inset 0 0 110px 0 var(--pol-tint);
}
.card[data-cat="ai"]:hover,.card[data-cat="ai"].focus{box-shadow:var(--glass-shadow-hover), inset 0 0 150px 0 var(--ai-tint);}
.card[data-cat="finance"]:hover,.card[data-cat="finance"].focus{box-shadow:var(--glass-shadow-hover), inset 0 0 150px 0 var(--fin-tint);}
.card[data-cat="politics"]:hover,.card[data-cat="politics"].focus{box-shadow:var(--glass-shadow-hover), inset 0 0 150px 0 var(--pol-tint);}
.card-source{
  font-size:10.5px;font-weight:600;text-transform:uppercase;
  letter-spacing:0.12em;margin-bottom:8px;color:var(--gray-1);
}
.card-title{
  font-family:var(--serif);font-size:15.5px;font-weight:600;
  line-height:1.5;margin-bottom:8px;color:var(--ink);
}
.card-summary{
  font-size:13px;color:var(--gray-1);line-height:1.75;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
}
.card-time{margin-top:10px;font-size:11px;color:var(--gray-2);font-variant-numeric:tabular-nums;}

.pagination{display:flex;justify-content:center;gap:8px;margin-top:40px;}
.pbtn{
  padding:8px 18px;border:1px solid var(--glass-border-soft);
  background:var(--glass-bg);color:var(--gray-1);
  border-radius:999px;cursor:pointer;font-size:13px;
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  transition:all .2s;font-family:var(--sans);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.7) inset,
    0 0 0 1px rgba(255,255,255,0.3) inset,
    0 4px 12px -6px rgba(20,20,24,0.18);
}
.pbtn:hover,.pbtn.active{color:var(--ink);border-color:var(--ink);background:var(--white);}

/* ===== Search overlay ===== */
.search-overlay{
  display:none;position:fixed;inset:0;
  background:rgba(10,10,11,0.55);
  z-index:200;
  -webkit-backdrop-filter:saturate(160%) blur(16px);
  backdrop-filter:saturate(160%) blur(16px);
  animation:fadeIn .2s ease;
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.search-overlay.open{display:flex;flex-direction:column;}
.search-box{
  background:var(--glass-bg-strong);
  -webkit-backdrop-filter:var(--glass-blur);
  backdrop-filter:var(--glass-blur);
  padding:18px max(20px,4vw);
  border-bottom:1px solid var(--glass-border-soft);
  box-shadow:0 1px 0 rgba(255,255,255,0.5) inset, 0 8px 24px -8px rgba(20,20,24,0.2);
}
.search-input-wrap{
  max-width:860px;margin:0 auto;
  display:flex;align-items:center;gap:12px;
  background:var(--white);
  border:1px solid var(--glass-border-soft);
  border-radius:14px;padding:12px 18px;
  box-shadow:0 1px 0 rgba(255,255,255,0.7) inset, 0 4px 14px -6px rgba(20,20,24,0.1);
}
.search-input-wrap svg{width:16px;height:16px;color:var(--gray-2);flex-shrink:0;}
.search-input{
  flex:1;border:none;background:none;font-size:15px;color:var(--ink);
  font-family:var(--sans);outline:none;
}
.search-input::placeholder{color:var(--gray-3);}
.search-close{
  background:var(--gray-6);border:none;color:var(--gray-1);
  cursor:pointer;width:28px;height:28px;border-radius:50%;
  font-size:14px;display:flex;align-items:center;justify-content:center;
  transition:background .2s,color .2s;
}
.search-close:hover{background:var(--ink);color:var(--white);}
.search-results{
  flex:1;overflow-y:auto;
  padding:24px max(20px,4vw);max-width:860px;width:100%;margin:0 auto;
}
.search-hint{color:rgba(255,255,255,0.7);font-size:13px;text-align:center;padding:60px 0;}
.search-result-item{
  background:var(--glass-bg-strong);
  border:1px solid var(--glass-border-soft);
  border-radius:12px;padding:18px 20px;margin-bottom:10px;cursor:pointer;
  -webkit-backdrop-filter:var(--card-blur);
  backdrop-filter:var(--card-blur);
  transition:transform .2s,box-shadow .2s,background .2s;
}
.search-result-item:hover{
  transform:translateY(-1px);
  background:var(--white);
  box-shadow:0 12px 30px -10px rgba(20,20,24,0.25);
}
.search-result-cat{
  font-size:10.5px;font-weight:600;text-transform:uppercase;
  letter-spacing:0.12em;margin-bottom:6px;color:var(--gray-1);
}
.search-result-title{
  font-family:var(--serif);font-size:14.5px;font-weight:600;
  line-height:1.5;margin-bottom:6px;color:var(--ink);
}
.search-result-summary{
  font-size:12.5px;color:var(--gray-2);line-height:1.6;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.search-result-meta{font-size:11px;color:var(--gray-3);margin-top:8px;font-variant-numeric:tabular-nums;}
mark{background:rgba(20,20,24,0.12);color:var(--ink);border-radius:3px;padding:0 3px;font-weight:600;}

/* ===== 学习资料库 ===== */
.learning-hero{
  position:relative;overflow:hidden;
  padding:32px 34px;margin-bottom:14px;
  background:
    linear-gradient(135deg,rgba(255,255,255,0.72),rgba(255,255,255,0.24)),
    var(--glass-bg);
  border:1px solid var(--glass-border);
  border-radius:var(--radius-lg);box-shadow:var(--glass-shadow);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
}
.learning-hero::after{
  content:'';position:absolute;width:220px;height:220px;right:-60px;top:-110px;
  border-radius:50%;border:1px solid rgba(20,20,24,0.08);
  box-shadow:0 0 0 30px rgba(20,20,24,0.025),0 0 0 62px rgba(20,20,24,0.018);
  pointer-events:none;
}
.learning-hero-inner{position:relative;z-index:1;display:flex;align-items:flex-end;justify-content:space-between;gap:24px;}
.learning-hero-copy{min-width:0;}
.learning-eyebrow{
  font-size:10px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--gray-2);margin-bottom:7px;
}
.learning-title{font-family:var(--serif);font-size:34px;line-height:1.2;font-weight:700;letter-spacing:-.03em;}
.learning-count{font-size:12px;color:var(--gray-2);margin-top:7px;}
.learning-upload-btn{
  flex-shrink:0;display:flex;align-items:center;gap:8px;padding:10px 16px;
  border:1px solid var(--ink);border-radius:999px;background:var(--ink);color:var(--white);
  font:600 12px var(--sans);cursor:pointer;box-shadow:0 8px 20px -10px rgba(20,20,24,.5);
  transition:transform .2s,opacity .2s,box-shadow .2s;
}
.learning-upload-btn:hover{transform:translateY(-2px);box-shadow:0 12px 26px -12px rgba(20,20,24,.65);}
.learning-upload-btn:active{transform:scale(.97);}
.learning-upload-plus{font-size:18px;font-weight:300;line-height:1;}
.learning-tools{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:14px;
  padding:11px 14px;margin-bottom:24px;
  background:rgba(255,255,255,.38);border:1px solid var(--glass-border);
  border-radius:var(--radius);box-shadow:var(--glass-shadow);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
}
.learning-search-label{
  display:flex;align-items:center;gap:10px;padding:0 15px 0 5px;min-height:40px;
  border-right:1px solid var(--glass-border-soft);color:var(--gray-1);
  font:600 11px var(--sans);letter-spacing:.1em;white-space:nowrap;
}
.learning-search-icon{position:relative;width:16px;height:16px;display:block;flex-shrink:0;}
.learning-search-icon::before{
  content:'';position:absolute;left:1px;top:1px;width:9px;height:9px;
  border:1.7px solid currentColor;border-radius:50%;
}
.learning-search-icon::after{
  content:'';position:absolute;width:6px;height:1.7px;left:10px;top:11px;
  background:currentColor;border-radius:2px;transform:rotate(45deg);transform-origin:left center;
}
.learning-search-field{
  min-width:0;min-height:44px;display:flex;align-items:center;padding:0 8px 0 14px;
  background:rgba(255,255,255,.68);border:1px solid rgba(20,20,24,.1);
  border-radius:11px;box-shadow:0 1px 0 rgba(255,255,255,.9) inset;
  transition:border-color .2s,box-shadow .2s,background .2s;
}
.learning-search-field:focus-within{
  background:rgba(255,255,255,.86);border-color:rgba(20,20,24,.32);
  box-shadow:0 1px 0 rgba(255,255,255,.9) inset,0 0 0 3px rgba(20,20,24,.07);
}
.learning-search{
  min-width:0;flex:1;padding:10px 0;border:0;outline:none;background:transparent;color:var(--ink);
  font:400 13.5px var(--sans);letter-spacing:.01em;
}
.learning-search::placeholder{color:var(--gray-3);}
.learning-search::-webkit-search-cancel-button{display:none;}
.learning-clear{
  display:grid;place-items:center;width:28px;height:28px;flex-shrink:0;
  border:0;border-radius:50%;background:rgba(20,20,24,.07);color:var(--gray-2);
  font:500 13px var(--sans);cursor:pointer;transition:background .2s,color .2s;
}
.learning-clear:hover{background:var(--ink);color:var(--white);}
.learning-clear.hidden{visibility:hidden;pointer-events:none;}
.learning-result-count{
  min-width:66px;text-align:right;padding-right:4px;color:var(--gray-2);
  font:500 11px var(--sans);white-space:nowrap;font-variant-numeric:tabular-nums;
}
.learning-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;}
.learning-card{
  position:relative;overflow:hidden;display:flex;flex-direction:column;
  width:100%;min-height:180px;padding:22px;text-align:left;
  color:var(--ink);font-family:var(--sans);
  background:
    linear-gradient(180deg,rgba(255,255,255,.62),rgba(255,255,255,.26)),
    var(--glass-bg);
  border:1px solid var(--glass-border);border-radius:var(--radius);
  box-shadow:var(--glass-shadow);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .25s,border-color .2s;
}
.learning-card::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(120deg,rgba(255,255,255,.45),transparent 35%);
  opacity:.45;
}
.learning-card:hover{transform:translateY(-4px);box-shadow:var(--glass-shadow-hover);border-color:rgba(20,20,24,.18);}
.learning-card > *{position:relative;z-index:1;}
.learning-card-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:25px;}
.learning-card-actions{display:flex;align-items:center;gap:7px;}
.learning-number{font:600 11px var(--display);letter-spacing:.13em;color:var(--gray-3);}
.learning-number-label{font:600 8px var(--sans);letter-spacing:.15em;margin-right:6px;color:var(--gray-3);}
.learning-delete{
  border:1px solid var(--glass-border-soft);border-radius:999px;padding:6px 9px;
  background:rgba(255,255,255,.38);color:var(--gray-2);font:500 10px var(--sans);
  cursor:pointer;opacity:.72;transition:opacity .2s,color .2s,border-color .2s,background .2s;
}
.learning-delete:hover{opacity:1;color:#a8322a;border-color:rgba(168,50,42,.28);background:rgba(168,50,42,.08);}
.learning-open{
  width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  border:0;background:var(--ink);color:var(--white);font-size:14px;cursor:pointer;
  transition:transform .2s;
}
.learning-card:hover .learning-open{transform:translate(2px,-2px);}
.learning-card-body{
  flex:1;display:flex;flex-direction:column;width:100%;padding:0;border:0;
  background:transparent;color:var(--ink);text-align:left;cursor:pointer;font-family:var(--sans);
}
.learning-card-title{font-family:var(--serif);font-size:18px;font-weight:650;line-height:1.55;letter-spacing:-.01em;margin-bottom:10px;}
.learning-card-meta{margin-top:auto;font-size:10.5px;color:var(--gray-3);letter-spacing:.04em;}
.learning-card-body:focus-visible,.learning-open:focus-visible,.learning-delete:focus-visible,.learning-upload-btn:focus-visible{
  outline:2px solid var(--ink);outline-offset:3px;
}
.learning-empty{
  grid-column:1/-1;text-align:center;padding:70px 20px;color:var(--gray-2);
  border:1px dashed var(--glass-border);border-radius:var(--radius);
}
body.learning-reader-open,body.learning-upload-open{overflow:hidden;}
.learning-reader-overlay{
  position:fixed;inset:0;z-index:450;display:flex;flex-direction:column;
  background:var(--paper);animation:learningReaderIn .22s ease both;
}
@keyframes learningReaderIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.learning-reader-toolbar{
  min-height:62px;padding:9px max(14px,3vw);display:flex;align-items:center;gap:14px;flex-shrink:0;
  background:rgba(10,10,11,.94);color:#fff;border-bottom:1px solid rgba(255,255,255,.1);
  -webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);
  box-shadow:0 8px 28px -18px rgba(0,0,0,.75);
}
.learning-back{
  flex-shrink:0;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);
  color:#fff;border-radius:999px;padding:9px 14px;cursor:pointer;
  font:500 12px var(--sans);transition:background .2s,border-color .2s,transform .2s;
}
.learning-back:hover{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.28);}
.learning-back:active{transform:scale(.97);}
.learning-back:focus-visible{outline:2px solid #fff;outline-offset:3px;}
.learning-reader-name{
  min-width:0;flex:1;text-align:center;font-family:var(--serif);font-size:14px;font-weight:600;color:rgba(255,255,255,.9);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.learning-reader-spacer{width:112px;flex-shrink:0;}
.learning-reader-stage{position:relative;flex:1;min-height:0;background:#fff;}
.learning-frame{display:block;width:100%;height:100%;border:0;background:#fff;}
.learning-reader-loading{
  position:absolute;inset:0;display:grid;place-items:center;background:var(--paper);z-index:2;
  color:var(--gray-2);font:13px var(--sans);letter-spacing:.04em;
}
.learning-reader-loading-inner{text-align:center;}
.learning-reader-error{text-align:center;max-width:360px;padding:28px;color:var(--gray-2);}
.learning-reader-error .learning-back{margin-top:18px;background:var(--ink);color:var(--white);border-color:var(--ink);}
.learning-upload-overlay{
  position:fixed;inset:0;z-index:470;display:grid;place-items:center;padding:20px;
  background:rgba(10,10,11,.64);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
  animation:fadeIn .2s ease;
}
.learning-upload-panel{
  width:min(560px,100%);max-height:min(760px,calc(100vh - 40px));overflow:auto;
  padding:26px;background:var(--glass-bg-strong);border:1px solid var(--glass-border);
  border-radius:var(--radius-lg);box-shadow:var(--glass-shadow-hover);
  -webkit-backdrop-filter:var(--glass-blur-strong);backdrop-filter:var(--glass-blur-strong);
}
.learning-upload-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:20px;}
.learning-upload-eyebrow{font:600 9px var(--sans);letter-spacing:.18em;color:var(--gray-2);text-transform:uppercase;margin-bottom:5px;}
.learning-upload-title{font:700 23px/1.3 var(--serif);color:var(--ink);}
.learning-upload-desc{font:12px/1.7 var(--sans);color:var(--gray-2);margin-top:5px;}
.learning-upload-close{
  width:32px;height:32px;display:grid;place-items:center;flex-shrink:0;border:0;border-radius:50%;
  background:rgba(20,20,24,.07);color:var(--gray-1);cursor:pointer;font-size:14px;
}
.learning-upload-close:hover{background:var(--ink);color:var(--white);}
.learning-dropzone{
  display:block;padding:34px 20px;text-align:center;cursor:pointer;
  border:1px dashed rgba(20,20,24,.24);border-radius:var(--radius);
  background:rgba(255,255,255,.34);transition:border-color .2s,background .2s,transform .2s;
}
.learning-dropzone:hover,.learning-dropzone.dragging{
  border-color:var(--ink);background:rgba(255,255,255,.6);transform:translateY(-1px);
}
.learning-dropzone:focus-visible{outline:2px solid var(--ink);outline-offset:3px;}
.learning-drop-icon{font:300 30px/1 var(--sans);color:var(--gray-1);margin-bottom:10px;}
.learning-drop-title{font:600 14px var(--sans);color:var(--ink);}
.learning-drop-hint{font:11px var(--sans);color:var(--gray-3);margin-top:5px;}
.learning-upload-input{display:none;}
.learning-upload-list{margin-top:14px;display:grid;gap:8px;max-height:230px;overflow:auto;}
.learning-upload-item{
  display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;
  padding:10px 12px;border-radius:10px;background:rgba(255,255,255,.38);border:1px solid var(--glass-border-soft);
}
.learning-upload-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:500 12px var(--sans);color:var(--ink);}
.learning-upload-file-meta{font:10px var(--sans);color:var(--gray-3);margin-top:2px;}
.learning-upload-file-state{font:600 10px var(--sans);color:var(--gray-2);white-space:nowrap;}
.learning-upload-file-state.replace{color:#9a6a20;}
.learning-upload-file-state.success{color:#34785a;}
.learning-upload-file-state.error{color:#b33b32;}
.learning-upload-summary{min-height:20px;margin-top:12px;font:11px/1.6 var(--sans);color:var(--gray-2);}
.learning-upload-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:18px;}
.learning-upload-cancel,.learning-upload-submit{
  border-radius:999px;padding:9px 15px;font:600 12px var(--sans);cursor:pointer;
  transition:opacity .2s,transform .2s;
}
.learning-upload-cancel{border:1px solid var(--glass-border-soft);background:rgba(255,255,255,.38);color:var(--gray-1);}
.learning-upload-submit{border:1px solid var(--ink);background:var(--ink);color:var(--white);min-width:106px;}
.learning-upload-submit:disabled{opacity:.4;cursor:not-allowed;}
.learning-upload-cancel:active,.learning-upload-submit:active{transform:scale(.97);}
.learning-toast{
  position:fixed;z-index:480;left:50%;bottom:max(24px,env(safe-area-inset-bottom));
  transform:translateX(-50%);padding:10px 16px;border-radius:999px;
  background:rgba(10,10,11,.92);color:#fff;font:500 12px var(--sans);
  box-shadow:0 12px 32px -12px rgba(0,0,0,.6);animation:learningToastIn .25s ease;
}
.learning-toast.error{background:rgba(145,35,28,.95);}
@keyframes learningToastIn{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}
@media(max-width:700px){
  .learning-hero{padding:25px 23px;}
  .learning-hero-inner{align-items:flex-start;}
  .learning-title{font-size:29px;}
  .learning-upload-btn{padding:9px 12px;font-size:11px;}
  .learning-upload-btn .learning-upload-label{display:none;}
  .learning-upload-plus{font-size:20px;}
  .learning-tools{grid-template-columns:1fr auto;gap:9px;padding:11px;}
  .learning-search-label{grid-column:1/-1;min-height:auto;padding:0 2px 10px;border-right:0;border-bottom:1px solid var(--glass-border-soft);}
  .learning-result-count{min-width:58px;padding-right:2px;}
  .learning-grid{grid-template-columns:1fr;}
  .learning-card{min-height:155px;}
  .learning-reader-toolbar{min-height:58px;padding:max(8px,env(safe-area-inset-top)) 10px 8px;gap:9px;}
  .learning-back{padding:8px 11px;font-size:11px;}
  .learning-reader-name{text-align:left;font-size:12.5px;}
  .learning-reader-spacer{display:none;}
  .learning-upload-overlay{padding:10px;align-items:end;}
  .learning-upload-panel{width:100%;max-height:calc(100vh - 20px);padding:22px 18px;border-radius:20px 20px 12px 12px;}
  .learning-dropzone{padding:28px 16px;}
}

/* ===== Footer ===== */
footer{
  margin-top:80px;padding:36px 24px 48px;
  text-align:center;color:rgba(255,255,255,0.55);
  background:var(--glass-bg-dark);
  -webkit-backdrop-filter:var(--card-blur);
  backdrop-filter:var(--card-blur);
  border-top:1px solid rgba(255,255,255,0.06);
  font-size:11.5px;letter-spacing:0.06em;
}
.footer-brand{
  color:#fff;margin-bottom:8px;font-size:14px;
  font-family:var(--display);font-weight:700;letter-spacing:0.04em;
}
.footer-meta{color:rgba(255,255,255,0.4);font-size:11px;}

/* Reduced motion */
@media (prefers-reduced-motion: reduce){
  *{animation:none!important;transition:none!important;}
}

/* ===== 登录蒙层 ===== */
.login-overlay{
  display:none;position:fixed;inset:0;z-index:500;
  background:rgba(10,10,11,0.65);
  -webkit-backdrop-filter:saturate(160%) blur(20px);
  backdrop-filter:saturate(160%) blur(20px);
  align-items:center;justify-content:center;
  animation:fadeIn .25s ease;
}
.login-overlay.open{display:flex;}
.login-box{
  width:100%;max-width:400px;margin:24px;
  background:var(--glass-bg-strong);
  -webkit-backdrop-filter:var(--glass-blur-strong);
  backdrop-filter:var(--glass-blur-strong);
  border:1px solid var(--glass-border);
  border-radius:var(--radius-lg);
  padding:40px 36px 36px;
  box-shadow:var(--glass-shadow-hover);
  position:relative;overflow:hidden;
}
.login-box::before{
  content:'';position:absolute;left:0;right:0;top:0;height:55%;
  background:linear-gradient(180deg,rgba(255,255,255,0.85),transparent 80%);
  border-radius:var(--radius-lg) var(--radius-lg) 0 0;
  mix-blend-mode:overlay;opacity:0.7;pointer-events:none;
}
.login-box > *{position:relative;z-index:1;}
.login-brand{
  font-family:var(--display);font-size:26px;font-weight:700;
  color:var(--ink);text-align:center;margin-bottom:6px;letter-spacing:-0.01em;
}
.login-sub{
  font-size:11.5px;color:var(--gray-2);text-align:center;
  letter-spacing:0.2em;text-transform:uppercase;margin-bottom:32px;
}
.login-field{margin-bottom:16px;}
.login-label{
  display:block;font-size:11px;font-weight:600;
  color:var(--gray-1);letter-spacing:0.12em;text-transform:uppercase;
  margin-bottom:7px;
}
.login-input{
  width:100%;padding:12px 16px;
  background:rgba(255,255,255,0.7);
  border:1px solid var(--glass-border-soft);
  border-radius:var(--radius-sm);
  font-size:14.5px;font-family:var(--sans);color:var(--ink);
  outline:none;
  box-shadow:0 1px 0 rgba(255,255,255,0.7) inset;
  transition:border-color .2s,box-shadow .2s;
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
}
.login-input:focus{
  border-color:rgba(20,20,24,0.4);
  box-shadow:0 1px 0 rgba(255,255,255,0.7) inset,0 0 0 3px rgba(20,20,24,0.08);
}
.login-btn{
  width:100%;padding:13px;margin-top:8px;
  background:linear-gradient(180deg,var(--ink-2),var(--ink));
  color:#fff;border:none;border-radius:var(--radius-sm);
  font-size:14px;font-weight:600;font-family:var(--sans);
  cursor:pointer;letter-spacing:0.06em;
  box-shadow:0 1px 0 rgba(255,255,255,0.14) inset,0 8px 22px -8px rgba(20,20,24,0.55);
  transition:opacity .2s,transform .2s;
}
.login-btn:hover{opacity:0.88;}
.login-btn:active{transform:scale(0.98);}
.login-btn:disabled{opacity:0.5;cursor:not-allowed;}
.login-error{
  margin-top:14px;padding:10px 14px;
  background:rgba(180,40,30,0.1);
  border:1px solid rgba(180,40,30,0.25);
  border-radius:8px;font-size:13px;color:#b42820;
  text-align:center;display:none;
}
.login-error.show{display:block;}
@media(prefers-color-scheme:dark){
  .login-input{
    background:rgba(46,46,52,0.7);
    border-color:rgba(255,255,255,0.1);
    color:var(--ink);
  }
  .login-input:focus{border-color:rgba(255,255,255,0.3);}
  .login-error{background:rgba(180,40,30,0.2);border-color:rgba(180,40,30,0.4);color:#e06055;}
}

/* 退出登录按钮 */
.logout-btn{
  background:rgba(255,255,255,0.08);
  border:1px solid rgba(255,255,255,0.14);
  color:rgba(255,255,255,0.6);
  border-radius:999px;padding:7px 14px;cursor:pointer;
  font-size:12px;font-family:var(--sans);
  transition:background .2s,color .2s,border-color .2s;
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  white-space:nowrap;
}
.logout-btn:hover{background:rgba(255,255,255,0.14);border-color:rgba(255,255,255,0.3);color:#fff;}
.user-greeting{
  font-size:11px;color:rgba(255,255,255,0.38);
  letter-spacing:0.06em;white-space:nowrap;
}
@media(max-width:600px){.user-greeting{display:none;}}

/* Fallback when backdrop-filter unsupported */
@supports not ((backdrop-filter: blur(10px)) or (-webkit-backdrop-filter: blur(10px))){
  header{background:rgba(10,10,11,0.96);}
  nav{background:rgba(250,250,251,0.96);}
  .topic-card,.card,.list-header,.search-result-item{background:rgba(255,255,255,0.92);}
  .search-overlay{background:rgba(10,10,11,0.85);}
}

/* ===== Dark mode（跟随系统）===== */
@media (prefers-color-scheme: dark){
  :root{
    --paper:#0d0d10;
    --white:#16161a;
    --gray-6:#1c1c20;
    --gray-5:#26262b;
    --gray-4:#3a3a40;
    --gray-3:#6b6b73;
    --gray-2:#9a9aa3;
    --gray-1:#c8c8cf;
    --ink:#f3f3f5;
    --ink-2:#e6e6ea;
    --ink-3:#c8c8cf;
    --glass-bg:rgba(36,36,42,0.42);
    --glass-bg-strong:rgba(46,46,52,0.62);
    --glass-bg-dark:rgba(10,10,11,0.7);
    --bar-bg-header:rgba(10,10,11,0.96);
    --bar-bg-nav:rgba(20,20,24,0.95);
    --glass-border:rgba(255,255,255,0.10);
    --glass-border-soft:rgba(255,255,255,0.08);
    --glass-stroke:rgba(255,255,255,0.05);
    --glass-edge-dark:rgba(0,0,0,0.4);
    --glass-shadow:
      0 1px 0 rgba(255,255,255,0.05) inset,
      0 0 0 1px rgba(255,255,255,0.06) inset,
      0 -1px 0 rgba(0,0,0,0.4) inset,
      0 14px 40px -14px rgba(0,0,0,0.6),
      0 6px 16px -8px rgba(0,0,0,0.3);
    --glass-shadow-hover:
      0 1px 0 rgba(255,255,255,0.08) inset,
      0 0 0 1px rgba(255,255,255,0.10) inset,
      0 -1px 0 rgba(0,0,0,0.5) inset,
      0 24px 60px -18px rgba(0,0,0,0.75),
      0 10px 24px -10px rgba(0,0,0,0.4);
  }
  body::before{
    background:
      radial-gradient(38vmax 38vmax at 8% 6%, rgba(80,80,110,0.32), transparent 60%),
      radial-gradient(48vmax 48vmax at 96% 14%, rgba(60,60,90,0.28), transparent 64%),
      radial-gradient(42vmax 42vmax at 76% 92%, rgba(50,50,80,0.32), transparent 60%),
      radial-gradient(36vmax 36vmax at 4% 86%, rgba(40,40,70,0.22), transparent 60%),
      radial-gradient(28vmax 28vmax at 50% 50%, rgba(80,80,110,0.18), transparent 70%),
      linear-gradient(165deg, #0d0d12 0%, #16161c 50%, #0a0a10 100%);
  }
  body::after{opacity:.22;}
  /* topic-card / card / list-header 的镜面高光在深色下太亮，压一下 */
  .topic-card::before,.card::before,.list-header::before{opacity:.22;}
  .topic-card::after,.card::after,.list-header::after{opacity:.18;}
  /* list-header 暗色下也要把内层渐变压暗 */
  .list-header{
    background:
      linear-gradient(180deg,rgba(46,46,52,0.5),rgba(36,36,42,0.28) 60%,rgba(40,40,46,0.4)),
      var(--glass-bg);
  }
  /* .pbtn 在深色下 inset 高光要明显减弱 */
  .pbtn{
    box-shadow:
      0 1px 0 rgba(255,255,255,0.08) inset,
      0 0 0 1px rgba(255,255,255,0.04) inset,
      0 4px 12px -6px rgba(0,0,0,0.45);
  }
  /* 玻璃卡片用更深的内层渐变 */
  .topic-card{
    background:
      linear-gradient(180deg,rgba(46,46,52,0.55),rgba(36,36,42,0.32) 60%,rgba(40,40,46,0.45)),
      var(--glass-bg);
  }
  .topic-card:hover,.topic-card.focus{
    background:
      linear-gradient(180deg,rgba(56,56,62,0.7),rgba(46,46,52,0.42) 60%,rgba(50,50,56,0.55)),
      var(--glass-bg-strong);
    border-color:rgba(255,255,255,0.16);
  }
  .card{
    background:
      linear-gradient(180deg,rgba(46,46,52,0.5),rgba(36,36,42,0.28) 60%,rgba(40,40,46,0.4)),
      var(--glass-bg);
  }
  .card:hover,.card.focus{
    background:
      linear-gradient(180deg,rgba(56,56,62,0.65),rgba(46,46,52,0.38) 60%,rgba(50,50,56,0.5)),
      var(--glass-bg-strong);
    border-color:rgba(255,255,255,0.16);
  }
  /* topic-tag 在深色下需要反转 */
  .topic-tag{
    background:rgba(255,255,255,0.08);
    border:1px solid rgba(255,255,255,0.12);
    color:var(--ink);
  }
  /* AI 分类 tag 在深色下用浅蓝灰，对比度才够 */
  .cat-ai .topic-tag,
  .section-label.cat-ai .section-tag,
  .list-tag.cat-ai{
    background:rgba(80,100,130,0.32);
    border-color:rgba(150,170,200,0.35);
    color:#dce4ee;
  }
  /* Finance 暖石墨在深色下仍然偏暖但要更亮 */
  .cat-finance .topic-tag,
  .section-label.cat-finance .section-tag,
  .list-tag.cat-finance{
    background:rgba(90,75,55,0.55);
    border-color:rgba(140,115,80,0.5);
    color:#f0e5cf;
  }
  /* Politics 深墨在深色下需要轮廓更亮才看得清 */
  .cat-politics .topic-tag,
  .section-label.cat-politics .section-tag,
  .list-tag.cat-politics{
    background:rgba(0,0,0,0.65);
    border-color:rgba(255,255,255,0.18);
    color:#fff;
  }
  /* 各种边线 / 虚线在深色下需要变亮 */
  .perspectives{border-top-color:rgba(255,255,255,0.10);}
  .perspective-item{border-left-color:rgba(255,255,255,0.10);}
  .perspective-source{background:rgba(255,255,255,0.06);border-color:rgba(255,255,255,0.08);}
  mark{background:rgba(255,255,255,0.15);}
  .digest-divider{
    background:linear-gradient(90deg,rgba(255,255,255,0.4),rgba(255,255,255,0.05) 60%,transparent);
  }
  .digest-date-label::before{background:var(--ink);}
  .hairline{background:linear-gradient(90deg,transparent,rgba(255,255,255,0.14),transparent);}
  /* 搜索浮层在深色下背景调暗一些 */
  .search-input-wrap{background:rgba(30,30,36,0.9);border-color:rgba(255,255,255,0.1);}
  .search-input{color:var(--ink);}
  .search-result-item:hover{background:rgba(46,46,52,0.9);}
  /* 骨架屏填充色 */
  .skel-line,.skel-section-name,.skel-hero-eyebrow,.skel-hero-title{background:rgba(255,255,255,0.06);}
  /* nav 在深色下不再用浅色玻璃 */
  nav{border-bottom-color:rgba(255,255,255,0.08);}
  /* 暗色下选中态：浅灰胶囊 + 深色文字（不能用 var(--ink)，会被 token 翻转成白） */
  .tab.on{
    color:#0a0a0b;
    background:linear-gradient(180deg,#e6e6ea,#c8c8cf);
    border-color:#c8c8cf;
    box-shadow:0 1px 0 rgba(255,255,255,0.4) inset, 0 6px 16px -8px rgba(0,0,0,0.6);
  }
  .tab:hover{color:var(--ink);background:rgba(255,255,255,0.06);}
  /* date-select 在深色下要把 dropdown 箭头 SVG 颜色翻转 */
  .date-select{
    background:rgba(46,46,52,0.55) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath fill='%23f3f3f5' d='M7 10l5 5 5-5z'/%3E%3C/svg%3E") no-repeat right 12px center;
    color:var(--ink);
  }
  /* section-more 按钮 */
  .section-more:hover{background:rgba(255,255,255,0.08);color:var(--ink);border-color:rgba(255,255,255,0.3);}
  .pbtn:hover,.pbtn.active{background:rgba(255,255,255,0.08);color:var(--ink);border-color:rgba(255,255,255,0.3);}
  .search-close{background:rgba(255,255,255,0.08);color:var(--ink);}
  .search-close:hover{background:var(--ink);color:var(--paper);}
  .learning-hero,.learning-card{
    background:linear-gradient(180deg,rgba(46,46,52,.58),rgba(30,30,36,.34)),var(--glass-bg);
  }
  .learning-hero::after{border-color:rgba(255,255,255,.08);box-shadow:0 0 0 30px rgba(255,255,255,.025),0 0 0 62px rgba(255,255,255,.015);}
  .learning-tools{background:rgba(30,30,36,.5);}
  .learning-search-field{background:rgba(46,46,52,.72);border-color:rgba(255,255,255,.1);box-shadow:0 1px 0 rgba(255,255,255,.06) inset;}
  .learning-search-field:focus-within{background:rgba(56,56,62,.8);border-color:rgba(255,255,255,.28);box-shadow:0 0 0 3px rgba(255,255,255,.06);}
  .learning-clear{background:rgba(255,255,255,.08);color:var(--gray-2);}
  .learning-clear:hover{background:var(--ink);color:var(--white);}
  .learning-card:hover{border-color:rgba(255,255,255,.16);}
  .learning-open{background:#e6e6ea;color:#0a0a0b;}
  .learning-delete,.learning-upload-item,.learning-upload-cancel{background:rgba(255,255,255,.06);}
  .learning-dropzone{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.18);}
  .learning-dropzone:hover,.learning-dropzone.dragging{background:rgba(255,255,255,.08);border-color:var(--ink);}
  .learning-upload-close{background:rgba(255,255,255,.08);}
}

/* ===========================================================
   ANIMATIONS — 5 件套：
   1) 背景 mesh 缓慢漂移 —— 2026-07-30 已下线，见下方说明
   2) 栏目主题色染色（theme-tint）
   3) 鼠标跟随的镜面反射（.gleam）
   4) 卡片入场错落（.reveal → .in）
   5) 玻璃风骨架屏
   6) 右侧浮动锚点栏
   =========================================================== */

/* 1) mesh drift —— 2026-07-30 移除，不要加回来。
   原本给 body::before 挂了一条 28s 的无限 transform 动画。问题不在动画本身
   （transform 是 GPU 便宜项），而在于 header 和 nav 都是 backdrop-filter 的
   毛玻璃：身后的背景一动，这两条 sticky 栏的高斯模糊就得逐帧重采样，等于
   页面从打开到关闭永远有一份满屏模糊在跑，滚动时就跟这份开销抢帧。
   漂移幅度只有 2vmax、周期 28s，肉眼几乎看不出来，性价比极低。 */

/* 2) 栏目主题色染色层 */
.theme-tint{
  position:fixed;inset:-10vmax;z-index:-2;pointer-events:none;
  opacity:0;
  transition:opacity 1s ease, background 1.2s ease;
}
body[data-tab="ai"] .theme-tint{
  opacity:1;
  background:
    radial-gradient(60vmax 60vmax at 30% 30%, rgba(135,160,200,0.22), transparent 60%),
    radial-gradient(50vmax 50vmax at 80% 70%, rgba(170,190,215,0.14), transparent 60%);
}
body[data-tab="finance"] .theme-tint{
  opacity:1;
  background:
    radial-gradient(60vmax 60vmax at 25% 30%, rgba(120,95,55,0.20), transparent 60%),
    radial-gradient(55vmax 55vmax at 85% 75%, rgba(165,140,95,0.14), transparent 60%);
}
body[data-tab="politics"] .theme-tint{
  opacity:1;
  background:
    radial-gradient(60vmax 60vmax at 30% 35%, rgba(20,15,30,0.30), transparent 58%),
    radial-gradient(52vmax 52vmax at 80% 70%, rgba(35,28,45,0.20), transparent 60%);
}
/* 3) 鼠标跟随高光 — .gleam 子元素受 --mx/--my/--gleam 控制 */
.topic-card,.card{
  --mx:50%;--my:50%;--gleam:0;
}
.topic-card .gleam,.card .gleam{
  position:absolute;inset:0;pointer-events:none;
  border-radius:inherit;
  background:radial-gradient(220px 220px at var(--mx) var(--my),
    rgba(255,255,255,0.55),
    rgba(255,255,255,0.18) 35%,
    transparent 60%);
  opacity:var(--gleam);
  transition:opacity .35s ease;
  mix-blend-mode:overlay;
  z-index:0;
}

/* 4) 卡片入场错落 — 默认隐藏，加 .in 才显示，用行内 transitionDelay 错开 */
.topic-card,.card{
  opacity:0;transform:translateY(18px);
}
.topic-card{
  transition:
    opacity .7s cubic-bezier(.2,.8,.2,1),
    transform .7s cubic-bezier(.2,.8,.2,1),
    box-shadow .3s ease, border-color .3s ease, background .3s ease;
}
.card{
  transition:
    opacity .65s cubic-bezier(.2,.8,.2,1),
    transform .65s cubic-bezier(.2,.8,.2,1),
    box-shadow .25s, border-color .25s, background .25s;
}
.topic-card.in,.card.in{opacity:1;transform:translateY(0);}
.topic-card.in:hover{transform:translateY(-3px);}
.card.in:hover{transform:translateY(-2px);}
/* 焦点卡片：上浮 + 轻微放大。scale 与 translateY 同属 transform，纯 GPU 合成、
   零重绘开销 ——「朝你凑近」的放大感比单纯位移更有冲击力 */
.topic-card.in.focus{transform:translateY(-10px) scale(1.02);}
.card.in.focus{transform:translateY(-7px) scale(1.025);}
/* 焦点卡片提前提升到 GPU 合成层，transform 动画走 GPU 不卡顿；
   focus 移除后元素不再匹配，will-change 自动撤销，无内存常驻开销 */
.topic-card.in.focus,.card.in.focus{will-change:transform;}
/* 移动端「焦点卡片」抗卡顿，两条策略叠加，PC（hover:hover）不进此块、体验零变化：
   方案B —— box-shadow / border-color / background 不进 transition 列表，焦点态这些
   CPU 逐帧重绘项瞬切、重绘窗口归零，只让 transform 走 .5s GPU 平滑动画。
   方案A —— 焦点卡片上浮期间彻底关掉 backdrop-filter：blur 在 transform 动画里每帧
   都要重采样模糊背景，是移动端剩余卡顿的根因；改用近不透明纯色背景顶替玻璃质感，
   上浮就变成纯 transform GPU 合成，零重算 / 零重绘。category 内阴影 tint 仍保留分类色。 */
@media (hover:none){
  .topic-card.in,.card.in{
    transition:
      opacity .7s cubic-bezier(.2,.8,.2,1),
      transform .5s cubic-bezier(.22,.61,.36,1);
  }
  .topic-card.in.focus,.card.in.focus{
    -webkit-backdrop-filter:none;
    backdrop-filter:none;
    background:linear-gradient(180deg,#ffffff,#f3f3f6);
  }
}
/* 焦点卡片深色下的不透明背景（特异性 0,3,0 > 深色 hover 块的 .topic-card.focus 0,2,0） */
@media (hover:none) and (prefers-color-scheme:dark){
  .topic-card.in.focus,.card.in.focus{
    background:linear-gradient(180deg,#38383f,#2c2c33);
  }
}

/* 5) 玻璃风骨架屏 */
.skel-glass{
  position:relative;overflow:hidden;
  background:
    linear-gradient(180deg,rgba(255,255,255,0.45),rgba(255,255,255,0.22) 60%,rgba(255,255,255,0.32)),
    var(--glass-bg);
  border:1px solid var(--glass-border-soft);
  border-radius:var(--radius);
  -webkit-backdrop-filter:var(--card-blur);
  backdrop-filter:var(--card-blur);
  box-shadow:var(--glass-shadow);
  padding:24px 26px;margin-bottom:16px;
}
.skel-glass.compact{padding:18px 22px;border-radius:var(--radius-sm);}
.skel-glass::before{
  content:'';position:absolute;left:0;right:0;top:0;height:55%;
  background:linear-gradient(180deg,rgba(255,255,255,0.6),rgba(255,255,255,0) 80%);
  border-radius:var(--radius) var(--radius) 0 0;
  mix-blend-mode:overlay;opacity:0.7;pointer-events:none;
}
.skel-glass::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,
    transparent 35%,
    rgba(255,255,255,0.55) 50%,
    transparent 65%);
  transform:translateX(-100%);
  animation:skelShine 2.2s ease-in-out infinite;
  mix-blend-mode:overlay;
}
@keyframes skelShine{
  0%{transform:translateX(-100%);}
  60%,100%{transform:translateX(120%);}
}
.skel-line{
  height:14px;background:rgba(20,20,24,0.07);border-radius:6px;
  margin-bottom:12px;position:relative;
}
.skel-line.thick{height:20px;border-radius:8px;}
.skel-line.short{width:60%;}
.skel-line.med{width:85%;}
.skel-line.long{width:100%;}
.skel-line.tag{width:90px;height:24px;border-radius:999px;margin-bottom:18px;}
.skel-section-name{
  height:28px;width:32%;margin-bottom:24px;
  background:rgba(20,20,24,0.07);border-radius:8px;
}
.skel-hero-eyebrow{
  height:11px;width:22%;margin-bottom:16px;
  background:rgba(20,20,24,0.08);border-radius:4px;
}
.skel-hero-title{
  height:42px;width:65%;margin-bottom:36px;
  background:rgba(20,20,24,0.08);border-radius:10px;
}

/* 6) 右侧浮动锚点栏 */
.anchor-rail{
  position:fixed;right:24px;top:50%;
  transform:translateY(-50%);
  z-index:80;
  display:flex;flex-direction:column;gap:14px;
  opacity:0;pointer-events:none;
  transition:opacity .4s ease;
}
.anchor-rail.show{opacity:1;pointer-events:auto;}
.anchor-dot{
  position:relative;
  width:11px;height:11px;border-radius:50%;cursor:pointer;
  background:var(--glass-bg-strong);
  border:1px solid var(--glass-border-soft);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.7) inset,
    0 4px 10px -4px rgba(20,20,24,0.18);
  transition:transform .25s cubic-bezier(.2,.8,.2,1),background .25s ease,box-shadow .25s ease,border-color .25s ease;
}
.anchor-dot:hover{transform:scale(1.45);}
.anchor-dot.active{
  background:var(--ink);border-color:var(--ink);
  box-shadow:
    0 0 0 3px rgba(255,255,255,0.5),
    0 4px 14px -2px rgba(20,20,24,0.45);
}
.anchor-dot::after{
  content:attr(data-label);position:absolute;
  right:24px;top:50%;
  transform:translateY(-50%) translateX(8px);
  background:var(--glass-bg-dark);
  -webkit-backdrop-filter:var(--card-blur);backdrop-filter:var(--card-blur);
  color:#fff;
  padding:6px 12px;border-radius:8px;font-size:11px;font-weight:500;
  letter-spacing:0.06em;white-space:nowrap;
  opacity:0;pointer-events:none;
  border:1px solid rgba(255,255,255,0.08);
  box-shadow:0 6px 16px -6px rgba(20,20,24,0.4);
  transition:opacity .2s ease,transform .25s cubic-bezier(.2,.8,.2,1);
}
.anchor-dot:hover::after{
  opacity:1;
  transform:translateY(-50%) translateX(0);
}
@media(max-width:980px){.anchor-rail{display:none;}}

/* Reduced motion — 关闭所有非必要动画 */
@media (prefers-reduced-motion: reduce){
  .skel-glass::after{animation:none!important;}
  .topic-card,.card{opacity:1!important;transform:none!important;transition:none!important;}
  .theme-tint{transition:none!important;}
}
