:root{
  --paper:#ECE7DD;
  --ink:#111110;
  --accent:#E8391B;
  --muted:#6f6a60;
  --line:#1111101a;
  --serif:"Fraunces","Noto Serif SC",serif;
  --sans:"Space Grotesk","Noto Sans SC",sans-serif;
  --bg:var(--paper);
  --fg:var(--ink);
  --accent-tint:#E8391B14;
  --glass:rgba(255,255,255,.06);
  --glass-bd:rgba(255,255,255,.16);
  --surface:#F5F1E9;
}
html[data-theme="night"]{
  --paper:#0c0c0b;
  --ink:#ECE7DD;
  --accent:#ff5a36;
  --muted:#8a857c;
  --line:#ECE7DD1f;
  --bg:var(--paper);
  --fg:var(--ink);
  --accent-tint:#ff5a361a;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  background:var(--bg);
  color:var(--fg);
  font-family:var(--sans);
  font-weight:400;
  line-height:1.5;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
  transition:background .6s ease,color .6s ease;
}
::selection{background:var(--accent);color:var(--paper)}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}

/* ---------- grain ---------- */
.grain{
  position:fixed;inset:0;z-index:9000;pointer-events:none;opacity:.06;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
html[data-theme="night"] .grain{mix-blend-mode:screen;opacity:.05}

/* ---------- CRT scanlines (新功能：极淡扫描线质感) ---------- */
.scanlines{position:fixed;inset:0;z-index:8800;pointer-events:none;opacity:.5;
  background:repeating-linear-gradient(to bottom,rgba(255,255,255,.03) 0 1px,transparent 1px 3px)}

/* ---------- custom cursor ---------- */
.cursor-ring,.cursor-dot{position:fixed;top:0;left:0;z-index:9500;pointer-events:none;border-radius:50%;mix-blend-mode:difference}
.cursor-ring{width:38px;height:38px;border:1px solid #fff;transition:width .25s,height .25s,background .25s,opacity .25s;transform:translate(-50%,-50%)}
.cursor-dot{width:6px;height:6px;background:#fff;transform:translate(-50%,-50%)}
.cursor-ring.label{padding:0 14px;width:auto;height:auto;display:flex;align-items:center;background:#fff;color:#000;border:none;font-family:var(--sans);font-size:11px;letter-spacing:.08em;text-transform:uppercase;mix-blend-mode:normal}
.cursor-ring .lbl{display:none}
.cursor-ring.label .lbl{display:inline}
@media(hover:hover) and (pointer:fine){*{cursor:none}}
@media(hover:none){.cursor-ring,.cursor-dot{display:none}}

/* ---------- spotlight (cursor glow) ---------- */
.spotlight{position:fixed;inset:0;z-index:8800;pointer-events:none;mix-blend-mode:overlay;
  background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.18),transparent 60%)}

/* ---------- progress ---------- */
.progress{position:fixed;top:0;left:0;height:3px;width:0;background:var(--accent);z-index:9600;transition:width .1s linear;box-shadow:0 0 14px var(--accent)}

/* ---------- masthead (cross-page nav) ---------- */
.masthead{position:fixed;top:0;left:0;right:0;z-index:9200;display:flex;align-items:center;justify-content:space-between;
  padding:18px 32px;font-family:var(--sans);font-size:12px;letter-spacing:.12em;text-transform:uppercase;
  mix-blend-mode:difference;color:#fff}
.masthead .brand{font-weight:700}
.masthead nav{display:flex;gap:22px}
.masthead nav a{opacity:.85;transition:opacity .2s}
.masthead nav a:hover,.masthead nav a.current{opacity:1}
.masthead nav a.current{text-decoration:underline;text-underline-offset:5px;text-decoration-thickness:1px}
.masthead .iss{display:flex;gap:14px;align-items:center}
.masthead .theme-toggle{border:1px solid currentColor;padding:5px 11px;border-radius:40px;cursor:pointer;background:none;color:inherit;font:inherit;letter-spacing:.12em}
@media(max-width:760px){.masthead nav{display:none}}

/* ---------- hero ---------- */
.hero{min-height:100vh;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:120px 32px 88px;position:relative;perspective:1000px}
.hero .kicker{font-family:var(--sans);font-size:13px;letter-spacing:.3em;text-transform:uppercase;color:var(--accent);margin-bottom:24px}
.hero h1{font-family:var(--serif);font-weight:900;line-height:.86;font-size:clamp(80px,20vw,300px);letter-spacing:-.02em;transform-style:preserve-3d;will-change:transform;transition:transform .25s ease-out}
.hero h1 .ln{display:block;overflow:hidden}
.hero h1 .ln span{display:inline-block;transform:translateY(110%)}
.hero h1 .ch{display:inline-block;will-change:transform}
.hero h1 em{font-style:italic;font-weight:400;color:var(--accent)}
.hero .sub{font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(20px,3vw,40px);line-height:1.1;margin-top:18px;color:var(--fg)}
.hero .meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:20px;margin-top:40px;border-top:1px solid var(--line);padding-top:18px;
  font-family:var(--sans);font-size:13px;letter-spacing:.04em;color:var(--muted)}
.hero .meta b{color:var(--fg);font-weight:500}
.hero .meta a{color:var(--accent);border-bottom:1px solid var(--accent);padding-bottom:2px;transition:opacity .2s}
.hero .meta a:hover{opacity:.7}
.hero .vtext{position:absolute;right:32px;top:130px;writing-mode:vertical-rl;font-family:var(--serif);font-style:italic;
  font-size:15px;letter-spacing:.2em;color:var(--muted);opacity:.7}
/* 新功能：打字机标语 */
.hero .type{font-family:var(--sans);font-size:clamp(14px,1.8vw,19px);letter-spacing:.02em;color:var(--accent);min-height:1.6em;margin-top:18px;display:flex;align-items:center;gap:4px}
.hero .type .caret{flex:none;width:2px;height:1.05em;background:var(--accent);animation:caretBlink 1s steps(1) infinite}
@keyframes caretBlink{50%{opacity:0}}
.hero .hero-stage{display:flex;flex-direction:column;align-items:center}
.hero .type{justify-content:center}
/* 滚动引导：纯装饰 + 引导 PPT 式整页滚动，不是导航链接（导航交给顶部 masthead） */
.hero .scroll-cue{position:absolute;left:50%;bottom:42px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:14px;
  font-family:var(--sans);font-size:11px;letter-spacing:.3em;text-transform:uppercase;color:var(--accent);opacity:.85;pointer-events:none}
.hero .scroll-cue__line{width:1px;height:46px;position:relative;overflow:visible;background:linear-gradient(var(--accent),rgba(232,57,27,0))}
.hero .scroll-cue__line::after{content:"";position:absolute;left:50%;bottom:-1px;width:7px;height:7px;
  border-right:1px solid var(--accent);border-bottom:1px solid var(--accent);transform:translateX(-50%) rotate(45deg);animation:cueDrop 1.8s ease-in-out infinite}
.hero .scroll-cue__txt{white-space:nowrap}
@keyframes cueDrop{0%,100%{transform:translateX(-50%) translateY(0) rotate(45deg);opacity:.9}50%{transform:translateX(-50%) translateY(6px) rotate(45deg);opacity:.4}}
@media(max-width:760px){.hero .vtext{display:none}.hero .scroll-cue{bottom:26px}.hero .scroll-cue__line{height:34px}}

/* about page: compact profile header, NOT a full cover (differentiates from home) */
.hero--about{min-height:auto;padding:150px 32px 36px;align-items:start}
.hero--about h1{font-size:clamp(64px,13vw,170px)}
.hero--about .meta{margin-top:26px}
@media(max-width:760px){.hero--about{padding:120px 24px 28px}.hero--about h1{font-size:clamp(54px,18vw,120px)}}

/* ---------- marquee ---------- */
.marquee{overflow:hidden;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:14px 0;white-space:nowrap;background:var(--accent);color:var(--paper)}
.marquee__inner{display:inline-block;will-change:transform}
.marquee span{font-family:var(--serif);font-weight:900;font-size:clamp(28px,5vw,64px);padding:0 28px;letter-spacing:-.01em}
.marquee span em{font-style:italic;font-weight:400}

/* ---------- generic section ---------- */
.section{padding:120px 32px;position:relative}
.sec-head{display:flex;align-items:baseline;gap:18px;margin-bottom:48px}
.sec-head .num{font-family:var(--sans);font-size:13px;letter-spacing:.2em;color:var(--accent)}
.sec-head h2{font-family:var(--serif);font-weight:600;font-size:clamp(34px,6vw,84px);line-height:.95;letter-spacing:-.02em;overflow:hidden;padding-bottom:.06em}
.sec-head .en{font-family:var(--sans);font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:var(--muted);margin-left:auto;align-self:flex-end}

/* ---------- about ---------- */
.about{display:grid;grid-template-columns:1.4fr 1fr;gap:60px}
@media(max-width:900px){.about{grid-template-columns:1fr;gap:36px}}
.about p{font-family:var(--serif);font-size:clamp(20px,2.4vw,30px);line-height:1.45;font-weight:300}
.about p .drop{float:left;font-family:var(--serif);font-weight:900;font-size:5.4em;line-height:.72;padding:8px 14px 0 0;color:var(--accent)}
.about .side{padding-left:0}
.about .side .row{display:flex;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--line);font-size:14px}
.about .side .row:first-child{border-top:1px solid var(--line)}
.about .side .row span:first-child{color:var(--muted);letter-spacing:.06em}
.about .side .row span:last-child{font-family:var(--serif);font-weight:600;text-align:right}
.quote{font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(26px,4vw,52px);line-height:1.2;margin:60px 0 0;max-width:20ch}
.quote b{color:var(--accent);font-weight:400}

/* ---------- org (涤鉴学社) ---------- */
.org .lead{font-family:var(--serif);font-size:clamp(20px,2.4vw,30px);line-height:1.5;font-weight:300;max-width:34ch;margin-bottom:50px}
.org .cards{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
@media(max-width:760px){.org .cards{grid-template-columns:1fr}}
/* 新功能：玻璃拟态卡片 */
.org .card{background:var(--glass);-webkit-backdrop-filter:blur(14px) saturate(115%);backdrop-filter:blur(14px) saturate(115%);border:1px solid var(--glass-bd);padding:34px 30px;position:relative}
.org .card .no{font-family:var(--sans);font-size:12px;letter-spacing:.2em;color:var(--accent);margin-bottom:14px}
.org .card h3{font-family:var(--serif);font-weight:600;font-size:clamp(22px,2.6vw,32px);line-height:1.05;margin-bottom:10px}
.org .card p{font-family:var(--sans);font-size:14px;color:var(--muted);line-height:1.6}
/* 新功能：玻璃拟态 join 条 */
.org .join{margin-top:50px;border:1px solid var(--glass-bd);padding:40px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:20px;
  background:var(--glass);-webkit-backdrop-filter:blur(14px) saturate(115%);backdrop-filter:blur(14px) saturate(115%)}
.org .join .jt{font-family:var(--serif);font-weight:600;font-size:clamp(22px,3vw,38px);line-height:1.05}
.org .join .jt em{font-style:italic;color:var(--accent);font-weight:400}

/* ---------- qianlin one-liner ---------- */
.qianlin{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:90px 32px;text-align:center}
.qianlin .k{font-family:var(--sans);font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:var(--accent);margin-bottom:22px}
.qianlin .line{font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(24px,4vw,56px);line-height:1.25;max-width:24ch;margin:0 auto}
.qianlin .line b{font-style:normal;color:var(--accent)}

/* ---------- horizontal topics ---------- */
.horizontal{position:relative;height:300vh}
.horizontal .sticky{position:sticky;top:0;height:100vh;overflow:hidden;display:flex;flex-direction:column;justify-content:center}
.horizontal .track{display:flex;gap:30px;padding:0 32px;will-change:transform;perspective:1500px}
.topic{flex:0 0 60vw;max-width:680px;height:60vh;border:1px solid var(--line);position:relative;overflow:hidden;background:var(--bg);padding:40px;display:flex;flex-direction:column;justify-content:space-between;transform-style:preserve-3d;transition:transform .25s ease,background .3s,color .3s}
@media(max-width:760px){.topic{flex:0 0 84vw;height:54vh;padding:28px}}
.topic .num{position:absolute;right:18px;bottom:2px;font-family:var(--serif);font-weight:900;font-size:170px;color:var(--accent);opacity:.14;line-height:1}
.topic .tag{font-family:var(--sans);font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.topic h3{font-family:var(--serif);font-weight:600;font-size:clamp(28px,4vw,56px);line-height:1;margin-top:14px}
.topic p{font-family:var(--sans);font-size:15px;color:var(--muted);line-height:1.6;max-width:40ch;margin-top:16px}
.topic:hover{background:var(--fg);color:var(--bg)}
.topic:hover .tag{color:var(--bg);opacity:.7}
.topic .tjump{margin-top:18px;font-family:var(--sans);font-size:12px;letter-spacing:.1em;color:var(--accent);text-transform:uppercase}

/* ---------- 实验室 (card wall) ---------- */
.notes{position:relative;z-index:1;padding-top:92px}
.notes .sec-head{max-width:1320px;margin:0 auto 48px}
.notes-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;grid-auto-rows:auto;max-width:1320px;margin:0 auto}
.ncard{display:flex;flex-direction:column;justify-content:flex-start;padding:32px 30px;background:var(--surface);border:1px solid var(--line);position:relative;overflow:hidden;text-decoration:none;color:var(--fg);transition:transform .3s ease,background .3s,color .3s,border-color .3s;transform-style:preserve-3d}
.ncard .k{font-family:var(--sans);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);margin-bottom:14px}
.ncard .t{font-family:var(--serif);font-weight:600;font-size:clamp(22px,2.6vw,32px);line-height:1.04;margin:0}
.ncard .d{font-family:var(--sans);font-size:13px;color:var(--muted);line-height:1.5;margin-top:auto;padding-top:18px}
.ncard--hero{grid-column:span 2;grid-row:span 2;min-height:300px;background:var(--ink);color:var(--paper);border-color:var(--ink)}
.ncard--hero .k{color:var(--accent)}
.ncard--hero .t{font-size:clamp(42px,6vw,78px)}
.ncard--hero .d{color:var(--paper);opacity:.78}
.ncard--tall{grid-column:span 1;grid-row:span 2;min-height:300px}
.ncard--accent{grid-column:span 1;min-height:300px;background:var(--accent);color:var(--paper);border-color:var(--accent)}
.ncard--accent .k{color:var(--paper)}
.ncard--accent .t{font-size:clamp(26px,3.4vw,42px)}
.ncard--accent .d{color:var(--paper);opacity:.9}
.ncard:not(.ncard--hero):not(.ncard--accent):hover{background:var(--fg);color:var(--bg)}
.ncard:not(.ncard--hero):not(.ncard--accent):hover .k,.ncard:not(.ncard--hero):not(.ncard--accent):hover .d{color:var(--bg);opacity:.85}
.ncard--hero:hover,.ncard--accent:hover{transform:translateY(-5px)}
/* 小卡：去掉四周边框，改为顶部细线 + 留白，读起来像编辑部条目而非 UI 盒子 */
.ncard:not(.ncard--hero):not(.ncard--accent){background:transparent;border:none;border-top:1px solid var(--line);padding-top:26px}
.ncard:not(.ncard--hero):not(.ncard--accent):hover{border-top-color:var(--fg)}
.notes-other{grid-column:1/-1;border-top:1px solid var(--line);display:flex;align-items:center;gap:26px;font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(18px,2.4vw,26px);line-height:1.3;color:var(--muted);padding:34px 4px 0;opacity:.85}
.notes-other .think{font-style:normal;font-family:'Noto Color Emoji',sans-serif;font-size:clamp(120px,18vw,220px);line-height:.8;flex:0 0 auto;filter:grayscale(.15);opacity:.95}
@media(max-width:760px){.notes-other{align-items:flex-start;gap:18px}.notes-other .think{font-size:clamp(96px,32vw,150px)}}
@media(max-width:760px){.notes-grid{grid-template-columns:1fr}.ncard--hero,.ncard--tall,.ncard--accent{grid-column:auto;grid-row:auto;min-height:0}}

/* ---------- stats ---------- */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;border-top:1px solid var(--line);padding-top:50px}
@media(max-width:760px){.stats{grid-template-columns:repeat(2,1fr);gap:40px}}
.stats .s .v{font-family:var(--serif);font-weight:900;font-size:clamp(48px,8vw,120px);line-height:.9;letter-spacing:-.02em}
.stats .s .v em{font-style:normal;color:var(--accent)}
.stats .s .k{font-family:var(--sans);font-size:13px;letter-spacing:.08em;color:var(--muted);margin-top:8px}

/* ---------- footer email ---------- */
.colophon .foot-mail{font-family:var(--serif);font-size:15px;color:var(--accent);letter-spacing:.02em;text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:2px;transition:opacity .3s}
.colophon .foot-mail:hover{opacity:.55}
.mail-inline{color:var(--accent);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px}
.mail-inline:hover{opacity:.6}

/* ---------- footer ---------- */
.colophon{border-top:1px solid var(--line);padding:40px 32px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;font-family:var(--sans);font-size:12px;letter-spacing:.06em;color:var(--muted)}
.colophon b{color:var(--fg)}
.colophon .beian{flex-basis:100%;margin-top:8px;border-top:1px dashed var(--line);padding-top:14px;color:var(--muted)}
.colophon .beian .ph{color:var(--fg)}
.colophon .beian a{color:var(--accent);text-decoration:none;border-bottom:1px solid var(--accent);padding-bottom:1px}
.colophon .beian a:hover{opacity:.6}

/* ---------- jump link (beside sections) ---------- */
.jump{display:inline-flex;align-items:center;gap:8px;margin-top:30px;font-family:var(--sans);font-size:13px;letter-spacing:.06em;color:var(--accent);border-bottom:1px solid var(--accent);padding-bottom:3px;transition:gap .2s,opacity .2s}
.jump:hover{gap:14px;opacity:.8}

/* ---------- principles (档案) ---------- */
.principles{max-width:820px;margin-top:72px}
.principles h3{font-family:var(--serif);font-weight:600;font-size:clamp(22px,3vw,34px);margin-bottom:10px;letter-spacing:-.01em}
.principles ul{list-style:none;counter-reset:prin;display:flex;flex-direction:column}
.principles li{counter-increment:prin;font-family:var(--serif);font-weight:300;font-size:clamp(17px,2vw,21px);line-height:1.5;color:var(--fg);padding:22px 0;border-top:1px solid var(--line);display:flex;gap:22px;align-items:baseline}
.principles li::before{content:counter(prin,decimal-leading-zero);font-family:var(--sans);font-weight:500;font-size:13px;letter-spacing:.12em;color:var(--accent);flex:none;line-height:1.7}

/* ---------- 档案 / 简历布局（编辑式两栏：栏目名 | 内容） ---------- */
.cv-block{display:grid;grid-template-columns:200px 1fr;gap:40px;padding:46px 0;border-top:1px solid var(--line)}
.cv-block:first-of-type{border-top:none;padding-top:8px}
.cv-block .lab{font-family:var(--sans);font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--accent);padding-top:8px}
.cv-block .body{font-family:var(--serif)}
.cv-block h4{font-family:var(--serif);font-weight:600;font-size:clamp(22px,3vw,30px);line-height:1.15;margin:0 0 10px}
.cv-block .body p{font-family:var(--serif);font-weight:300;font-size:clamp(17px,2vw,22px);line-height:1.5;margin:0 0 14px}
.cv-block .body p:last-child{margin-bottom:0}
.cv-entry{margin-bottom:34px}
.cv-entry:last-child{margin-bottom:0}
.cv-entry .meta{font-family:var(--sans);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 10px}
.cv-facts{display:grid;grid-template-columns:repeat(2,1fr);gap:0 48px}
.cv-facts .row{display:flex;justify-content:space-between;padding:15px 0;border-bottom:1px solid var(--line);font-size:14px}
.cv-facts .row:first-child,.cv-facts .row:nth-child(2){border-top:1px solid var(--line)}
.cv-facts .row span:first-child{color:var(--muted);letter-spacing:.06em}
.cv-facts .row span:last-child{font-family:var(--serif);font-weight:600;text-align:right}
@media(max-width:680px){.cv-block{grid-template-columns:1fr;gap:14px}.cv-facts{grid-template-columns:1fr}}

/* ---------- 首页 PPT 式整页滚动（仅首页 html.deck 生效） ---------- */
/* 首屏 hero 与「思考页」各占一屏，滚一下吸附翻页，像幻灯片。 */
html.deck{scroll-snap-type:y mandatory}
.deck .slide{scroll-snap-align:start;scroll-snap-stop:always}
.deck .hero.slide{height:100vh}
.deck .signs-sec.slide{height:100vh;display:flex;flex-direction:column;padding:0}
.deck .signs-sec.slide .signs-tank{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:center;overflow:hidden}
/* 页脚作为末页吸附点，避免 mandatory 把内容卡在思考页 */
.deck .colophon{scroll-snap-align:start;scroll-snap-stop:always}
/* 窄屏 / 减少动态：关掉整页吸附，并把第二屏固定高度复位成自适应，避免小屏牌子换行后内容被裁 */
@media (max-width:760px),(prefers-reduced-motion:reduce){
  html.deck{scroll-snap-type:none}
  .deck .signs-sec.slide{height:auto}
  .deck .signs-sec.slide .signs-tank{flex:none;min-height:72vh;overflow:visible}
}

/* ---------- now page (此刻 / 状态快照) ---------- */
/* 新功能：玻璃拟态 now-stamp */
.now-stamp{display:flex;flex-wrap:wrap;align-items:baseline;gap:14px 22px;padding:28px 30px;border:1px solid var(--glass-bd);border-radius:14px;
  background:linear-gradient(120deg,var(--glass),var(--accent-tint));
  -webkit-backdrop-filter:blur(14px) saturate(115%);backdrop-filter:blur(14px) saturate(115%);margin-bottom:46px}
.now-stamp-k{font-family:var(--sans);font-size:12px;letter-spacing:.3em;text-transform:uppercase;color:var(--muted)}
.now-stamp-d{font-family:var(--serif);font-weight:900;font-size:clamp(34px,6vw,64px);line-height:1;letter-spacing:-.02em}
.now-stamp-note{font-family:var(--sans);font-size:14px;color:var(--muted);line-height:1.6;flex:1 1 280px;min-width:240px}
.now-board{max-width:860px}
.now-row{display:grid;grid-template-columns:200px 1fr;gap:24px;padding:26px 0;border-top:1px solid var(--line)}
.now-row:last-child{border-bottom:1px solid var(--line)}
.now-side{display:flex;align-items:center;gap:12px}
.now-dot{width:11px;height:11px;border-radius:50%;background:var(--accent);flex:none;position:relative}
.now-dot.soon{background:transparent;border:2px solid var(--accent)}
.now-dot.reading{background:var(--muted)}
.now-dot.live{background:var(--accent)}
.now-dot.live::after{content:"";position:absolute;inset:-6px;border-radius:50%;border:1px solid var(--accent);opacity:.6;animation:nowpulse 2.4s ease-out infinite}
@keyframes nowpulse{0%{transform:scale(.6);opacity:.7}100%{transform:scale(1.5);opacity:0}}
.now-cat{font-family:var(--sans);font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.now-main{display:flex;flex-wrap:wrap;align-items:flex-start;gap:10px 16px}
.now-line{font-family:var(--sans);font-size:17px;line-height:1.6;color:var(--muted);margin:0;flex:1 1 320px}
.now-tag{font-family:var(--sans);font-size:12px;letter-spacing:.12em;padding:5px 12px;border:1px solid var(--accent);border-radius:30px;color:var(--accent);white-space:nowrap}
.now-foot{margin-top:40px;font-family:var(--sans);font-size:15px;color:var(--muted);line-height:1.7}
.now-foot a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}
@media(max-width:680px){.now-row{grid-template-columns:1fr;gap:12px}.now-stamp{padding:22px}}
@media(prefers-reduced-motion:reduce){.now-dot.live::after{animation:none}}

/* ---------- 歪歪斜斜的命名牌（仿 Minecraft 命名牌） ----------
   形态：横向长方形金属牌 + 左端打孔 + 硬朗粗描边 + 实边投影 + 刻字。
   三张叠成一摞，鼠标移进去会散开；每张牌从孔里出来一根细绳；
   hover 时还有一道朱红「附魔」扫光。

   堆叠做法抄自 CodeFronts《Hover Spread》(MIT)
   https://codefronts.com/components/css-stacked-cards/hover-spread/
   核心：flex + 负 margin-top 叠起来，:hover / :focus-within 时释放成正 gap，
   配回弹曲线 cubic-bezier(.34,1.56,.5,1)，每张用 calc(var(--i)*.05s) 错峰延迟。
   ⚠️ 别再改回「绝对定位 + 容器写死 height」了 —— 牌高会随字数换行变化，
      写死高度必然互相盖住，这就是上一版那个 bug。现在 flex 自己把父级撑到正好。

   其余踩过的坑，别改回去：
   ⚠️ 选择器一律 ≥0,3,0，否则会被全局 [data-reveal].in{transform:none}(0,2,0) 抹平倾斜。
   ⚠️ 扫光用 ::after 自身的 clip-path 裁剪，不要用父级 overflow:hidden，否则细绳会被裁掉。
   ⚠️ 不给 .signs-sec 单独设 padding —— 沿用 .section 的 padding:120px 32px。 */
/* 「水缸」：思考雨的容器。范围＝上接跑马灯底边、左右顶到浏览器容器边缘。
   ⚠️ 所以把 .section 的 padding 收进来由 .signs-tank 自己管（值保持一致）：
      块级子元素若留在 section 的 content box 里，宽度会被两侧 32px padding 吃掉；
      把 padding 提到 tank 上，tank 的 padding box 就是视口全宽，
      canvas(absolute inset:0) 才能左右对齐浏览器。牌子的限宽归 .signs 自己。 */
.signs-sec{padding:0}
.signs-sec .signs-tank{position:relative;padding:120px 32px}
.signs-sec .signs{
  position:relative;z-index:2;              /* 压在两层 .rain-pile / .thinkfx 画布之上 */
  display:flex;flex-direction:column;align-items:center;
  max-width:1040px;margin:0 auto;           /* 牌子本身限宽居中 */
  padding:34px 0;                           /* 溢出给倾斜和细绳留余量 */
}
.signs-sec .signs:focus-visible{outline:2px solid var(--accent);outline-offset:6px;border-radius:10px}
.signs .nametag{
  position:relative;flex:none;
  display:flex;align-items:center;gap:16px;
  width:min(460px,88vw);padding:18px 24px 18px 20px;
  background:linear-gradient(180deg,#fff 0,var(--surface) 42%,#E3DDD0 100%);
  border:2px solid var(--ink);
  border-radius:5px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -3px 0 rgba(0,0,0,.08),5px 6px 0 rgba(17,17,16,.14);
  margin-top:-32px;                                   /* ← 负 margin：叠成一摞 */
  --ease-pile:cubic-bezier(.34,1.56,.5,1);
  transition:margin .45s var(--ease-pile),transform .45s var(--ease-pile),box-shadow .25s ease-out;
  transition-delay:calc(var(--i) * .05s);             /* ← 错峰，像牌被一张张抽出来 */
}
.signs .nametag:first-child{margin-top:0}
/* 从孔里出来的细绳：锚点定在孔心（bottom:50%），每根转不同角度，顶端渐隐 */
.signs .nametag::before{
  content:"";position:absolute;left:29px;bottom:50%;
  width:2px;height:52px;pointer-events:none;
  background:linear-gradient(180deg,rgba(17,17,16,0) 0,var(--ink) 26%,var(--ink) 100%);
  transform-origin:bottom center;
}
/* 「附魔」高光：斜掠过牌面的一道金属反光。
   抄 CodeFronts《CSS Shine Sweep Hover Button》(MIT)
   https://codefronts.com/motion/css-animated-buttons/css-shine-sweep-hover-button/
   ⚠️ 但它的原版是靠父级 overflow:hidden 裁光路的 —— 我们这张牌**不能加 overflow**，
      否则 ::before 那根细绳会被一起裁掉（之前踩过）。所以改用「伪元素永不移动、
      只在 250% 宽的画布上滑动 background-position」（CodeFronts 自家 shimmer
      组件的做法：the gradient never changes, the LIGHT moves）。
      这样 inset:0 + clip-path 恒等于牌的边界，光被严格关在牌面里。
   ⚠️ 前一版的真 bug：::after 用 inset:0 + translateX 位移，而 clip-path 裁的是
      ::after 自身 —— 位移时裁剪框跟着一起跑，光会飘到牌外面变成一道悬空亮线。
      那才是"奇怪"的根因，朱红只是表象。
   参数取原版：105deg 斜轴 + 纯白 rgba(255,255,255,.55) + keyframes/forwards。 */
.signs .nametag::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  clip-path:inset(0 round 5px);            /* 伪元素不动，这个框就恒等于牌的边界 */
  background-image:linear-gradient(105deg,transparent 46%,rgba(255,255,255,.55) 50%,transparent 54%);
  background-size:250% 100%;background-repeat:no-repeat;
  background-position:130% 0;              /* 停在牌左侧之外，不可见 */
}
.signs .nametag:hover::after{animation:nametag-shine .55s ease-in-out forwards}
@keyframes nametag-shine{
  0%{background-position:130% 0}
  100%{background-position:-30% 0}         /* 滑到右侧之外；forwards 停住，不会倒放回来 */
}
/* 左端打孔：不用装饰环（会被读成开关旋钮），靠「上暗下亮」内阴影做贯通凹陷 */
.signs .nametag .hole{
  position:relative;flex:0 0 auto;width:15px;height:15px;border-radius:50%;
  background:var(--bg);border:2px solid var(--ink);
  box-shadow:inset 0 3px 4px rgba(0,0,0,.5),inset 0 -1px 0 rgba(255,255,255,.5);
}
/* 刻字：统一一行，不分层级（暗字 + 下方亮边＝压印感） */
.signs .nametag .engrave{
  font-family:var(--sans);font-weight:500;font-size:clamp(14px,1.5vw,17px);
  line-height:1.4;letter-spacing:.02em;color:var(--ink);
  text-shadow:0 1px 0 rgba(255,255,255,.6);
}
/* ---- 各自的歪法（0,3,0：压住 [data-reveal].in 的 transform:none）---- */
.signs .nametag:nth-child(n){transform:rotate(-4.5deg) translateX(-6px);z-index:1}
.signs .nametag:nth-child(2){transform:rotate(2.8deg) translateX(12px);z-index:2}
.signs .nametag:nth-child(3){transform:rotate(-2.2deg) translateX(-10px);z-index:3}
/* 每根绳各自的角度（必须排在 ::before 之后才能覆盖） */
.signs .nametag:nth-child(n)::before{transform:rotate(-14deg)}
.signs .nametag:nth-child(2)::before{transform:rotate(19deg)}
.signs .nametag:nth-child(3)::before{transform:rotate(-27deg)}
/* ---- 鼠标进去：整摞散开（负 margin 释放成正 gap）---- */
.signs-sec .signs:hover .nametag,
.signs-sec .signs:focus-within .nametag{margin-top:22px}
.signs-sec .signs:hover .nametag:first-child,
.signs-sec .signs:focus-within .nametag:first-child{margin-top:0}
.signs-sec .signs:hover .nametag:nth-child(n){transform:rotate(-2.6deg) translateX(-16px)}
.signs-sec .signs:hover .nametag:nth-child(2){transform:rotate(.8deg) translateX(16px)}
.signs-sec .signs:hover .nametag:nth-child(3){transform:rotate(1.8deg) translateX(-4px)}
/* 单独悬停的那张：抽出来看（归正 + 抬起 + 投影加重），(0,5,0) 压住整摞规则 */
.signs-sec .signs .nametag:nth-child(n):hover{
  transform:rotate(0deg) translateX(0) translateY(-4px) scale(1.02);z-index:9;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -3px 0 rgba(0,0,0,.08),8px 10px 0 rgba(17,17,16,.18);
}
/* 夜间：金属转深色，保留受光面 */
html[data-theme="night"] .signs .nametag{background:linear-gradient(180deg,#2a2a25 0,#1c1c19 45%,#131311 100%);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),inset 0 -3px 0 rgba(0,0,0,.4),5px 6px 0 rgba(0,0,0,.5)}
html[data-theme="night"] .signs .nametag .engrave{text-shadow:0 1px 0 rgba(255,255,255,.09)}
html[data-theme="night"] .signs .nametag::before{background:linear-gradient(180deg,rgba(17,17,16,0) 0,var(--ink) 26%,var(--ink) 100%)}
/* 夜间不必额外压制：深色牌面本来就衬白色反光（CodeFronts 那三个 demo 也是深色按钮） */
/* 关掉动效偏好：不回弹，线性散开（照搬 CodeFronts 的处理） */
@media(prefers-reduced-motion:reduce){
  .signs .nametag{transition:margin .25s linear}
  .signs .nametag:hover::after{animation:none}      /* 照搬 CodeFronts 的降级方式 */
}
@media(max-width:760px){
  /* 窄屏不歪了（倾斜会撑出横向滚动条）；细绳竖排时会戳到上一张，隐藏。
     堆叠照旧 —— 负 margin 是 flex 布局自带的，任何屏宽都不会错位。 */
  .signs .nametag{width:min(440px,90vw)}
  .signs .nametag::before{display:none}
  .signs .nametag:nth-child(n),.signs .nametag:nth-child(2),.signs .nametag:nth-child(3),
  .signs-sec .signs:hover .nametag:nth-child(n),.signs-sec .signs:hover .nametag:nth-child(2),
  .signs-sec .signs:hover .nametag:nth-child(3),
  .signs-sec .signs .nametag:nth-child(n):hover{transform:none}
}

/* ====== VISUAL UPGRADE (shared) ====== */
.bgfx{position:fixed;inset:0;z-index:0;pointer-events:none}
/* 思考雨画布：只在牌子那一块（.signs-sec）内，所以用 absolute 而不是 fixed，
   父级 .section 本来就是 position:relative。雨不会溢到跑马灯和页脚上去。 */
/* 两层画布：底层 .rain-pile 只画落定的雨（静止、不参与每帧重绘）；
   上层 .thinkfx 每帧只画空中表情。彻底去掉「每帧全屏 blit 巨幅离屏画布」的开销。 */
.rain-pile,.thinkfx{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.rain-pile{z-index:0}
.thinkfx{z-index:1}
/* 思考雨铺满整块，顶部不再做渐隐（固定满屏后虚化层已移除）。 */
.hero,.section,.marquee,.qianlin,.horizontal,.contact,.colophon,.about-wrap{position:relative;z-index:1}
body::after{content:"";position:fixed;inset:0;z-index:2;pointer-events:none;
  background:radial-gradient(130% 90% at 50% -15%,transparent 55%,var(--ink) 130%);opacity:.05;mix-blend-mode:multiply}
html[data-theme="night"] body::after{mix-blend-mode:screen;opacity:.06}
.card,.topic{--cx:50%;--cy:50%;transition:transform .25s ease,background .3s,color .3s;transform-style:preserve-3d}
.card::after,.topic::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .45s;
  background:radial-gradient(240px circle at var(--cx) var(--cy),var(--accent),transparent 60%);mix-blend-mode:overlay}
.card:hover::after,.topic:hover::after{opacity:.28}
#track{perspective:1500px}
/* 新功能：侧边数字章节索引（圆形徽标 + hover 文字 + 滚动高亮） */
.dots{position:fixed;right:20px;top:50%;transform:translateY(-50%);z-index:9100;display:flex;flex-direction:column;gap:14px;mix-blend-mode:difference}
.dots a{width:26px;height:26px;border:1px solid #fff;border-radius:50%;display:grid;place-items:center;font-family:var(--sans);font-size:11px;font-weight:500;transition:transform .25s,background .25s,color .25s;position:relative}
.dots a .num{display:block;line-height:1}
.dots a.active{background:#fff;color:#000;transform:scale(1.12)}
.dots a .lbl{position:absolute;right:34px;top:50%;transform:translateY(-50%);white-space:nowrap;font-family:var(--sans);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:#fff;opacity:0;transition:opacity .25s;pointer-events:none}
.dots a:hover .lbl,.dots a.active .lbl{opacity:1}
@media(max-width:760px){.dots{display:none}}
[data-reveal]{opacity:0;transform:translateY(48px) scale(.985);filter:blur(7px);transition:opacity 1s cubic-bezier(.2,.8,.2,1),transform 1s cubic-bezier(.2,.8,.2,1),filter 1s}
[data-reveal].in{opacity:1;transform:none;filter:none}
.sec-head h2 .w{display:inline-block;transform:translateY(108%) rotate(5deg);transition:transform .9s cubic-bezier(.2,.8,.2,1)}
.sec-head.in h2 .w{transform:none}

@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important}
  [data-reveal]{opacity:1!important;transform:none!important;filter:none!important}
  .hero h1 .ln span,.hero h1 .ch{transform:none}
  .card::after,.topic::after,.dots{display:none}
  body::after{display:none}
  .scanlines{display:none}
  .hero .type .caret{animation:none}
}

/* ===== article (写作正文) ===== */
.post-head{padding:150px 32px 26px;max-width:820px;margin:0 auto;position:relative;z-index:1}
.post-head .kicker{font-family:var(--sans);font-size:13px;letter-spacing:.3em;text-transform:uppercase;color:var(--accent);margin-bottom:22px}
.post-head h1{font-family:var(--serif);font-weight:900;line-height:.98;font-size:clamp(38px,7.5vw,92px);letter-spacing:-.02em}
.post-head h1 em{font-style:italic;font-weight:400;color:var(--accent)}
.post-head .sub{font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(18px,2.4vw,26px);line-height:1.3;margin-top:20px;color:var(--muted);max-width:30ch}
.article{max-width:740px;margin:0 auto;padding:0 32px;position:relative;z-index:1}
.article .lede{font-family:var(--serif);font-size:clamp(20px,2.6vw,28px);line-height:1.45;font-weight:300;margin:0 0 18px}
.article .lede .drop{float:left;font-family:var(--serif);font-weight:900;font-size:4.4em;line-height:.7;padding:8px 12px 0 0;color:var(--accent)}
.article p{font-family:var(--serif);font-size:clamp(17px,1.9vw,19px);line-height:1.85;margin-bottom:26px;color:var(--fg)}
.article p b{font-weight:600}
.article h3{font-family:var(--serif);font-weight:600;font-size:clamp(22px,3.2vw,34px);line-height:1.12;margin:8px 0 16px;letter-spacing:-.01em}
.article .sec-head{margin:54px 0 26px}
.article .sec-head h2{font-size:clamp(28px,4.4vw,56px)}
.article .pull{font-family:var(--serif);font-style:italic;font-weight:400;font-size:clamp(23px,3.4vw,40px);line-height:1.28;color:var(--accent);margin:44px 0;padding:26px 0 0;border-top:3px solid var(--accent)}
.article ul{list-style:none;display:flex;flex-direction:column;gap:14px;margin:0 0 30px}
.article li{font-family:var(--sans);font-size:16px;line-height:1.6;padding-left:22px;position:relative;color:var(--fg)}
.article li::before{content:"";position:absolute;left:0;top:10px;width:8px;height:8px;background:var(--accent);border-radius:2px}
.article .meta-row{display:flex;justify-content:space-between;flex-wrap:wrap;gap:14px;font-family:var(--sans);font-size:13px;letter-spacing:.04em;color:var(--muted);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:18px 0;margin:40px 0 8px}
.article .meta-row a{color:var(--accent);border-bottom:1px solid var(--accent);padding-bottom:1px;transition:opacity .2s}
.article .meta-row a:hover{opacity:.6}
.article section[id]{scroll-margin-top:96px}
.article .end{margin-top:60px;padding-top:30px;border-top:1px solid var(--line);font-family:var(--sans);font-size:14px;color:var(--muted);line-height:1.8}
.article .end a{color:var(--accent);border-bottom:1px solid var(--accent);padding-bottom:1px}
@media(max-width:760px){.post-head{padding:120px 24px 22px}.article{padding:0 24px}}

/* ===== 组织专题页 (org special) ===== */
.orgpage{max-width:880px;margin:0 auto;padding:0 32px;position:relative;z-index:1}
.orgpage .post-head{padding:150px 0 26px;max-width:880px;margin:0}
.org-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:30px 36px;margin-top:44px}
.ob{border-top:2px solid var(--accent);padding:28px 2px 0;position:relative;transition:background .3s}
.ob .k{font-family:var(--sans);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);margin-bottom:14px}
.ob h3{font-family:var(--serif);font-weight:600;font-size:clamp(24px,3vw,38px);line-height:1.04;margin-bottom:12px}
.ob .role{font-family:var(--sans);font-size:14px;line-height:1.6;color:var(--muted);margin-bottom:18px}
.ob .go{font-family:var(--sans);font-size:13px;letter-spacing:.04em;color:var(--accent);display:inline-block}
.ob .go.muted{color:var(--muted);opacity:.7}
.ob:hover{background:var(--accent-tint)}
@media(max-width:760px){.org-grid{grid-template-columns:1fr;gap:26px}.orgpage{padding:0 24px}.orgpage .post-head{padding:120px 0 22px}}
