/* ============================================================
   base.css — 全站动效组件库样式(接口稳定,勿改 fx-* 结构)
   设计契约:#000 / #FFF / #8A8A8A,唯一跳色 #E32B16。
   缓动唯一 cubic-bezier(.16,1,.3,1)。类名前缀 fx-,无裸标签选择器。
   字体改用全量 Noto Sans SC(本站文案字符超出 GB 子集)。
   ============================================================ */

:root{
  --fx-k:#000000;
  --fx-w:#FFFFFF;
  --fx-g:#8A8A8A;
  --fx-r:#E32B16;
  --fx-ease:cubic-bezier(.16,1,.3,1);
  --fx-sans:"Archivo","Noto Sans SC",-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;
  /* 正文字族:不含 Archivo(它只有 900 一档,会把正文里的拉丁字母强行加粗)。
     正文/金句/要义用这个,中文与拉丁字母都走 400,字重一致。Archivo 只留给展示巨字与数字。 */
  --fx-text:"Noto Sans SC",-apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  --fx-mono:"Space Mono","Noto Sans SC",ui-monospace,monospace;
  --fx-pad:clamp(20px,4vw,64px);
}

/* ---------- 字体(本地 woff2,swap + 预载防跳版) ---------- */
@font-face{
  font-family:"Archivo";
  font-style:normal;font-weight:900;font-display:swap;
  src:url("fonts/archivo-latin-900.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215;
}
@font-face{
  font-family:"Space Mono";
  font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/space-mono-latin-400.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215;
}
@font-face{
  font-family:"Space Mono";
  font-style:normal;font-weight:700;font-display:swap;
  src:url("fonts/space-mono-latin-700.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215;
}
/* 全量 Noto Sans SC(≈1.1MB/字重),覆盖本站全部生僻字与标点。
   prefetch.js 会空闲预载 900 字重,避免巨字跳版。 */
@font-face{
  font-family:"Noto Sans SC";
  font-style:normal;font-weight:400;font-display:swap;
  src:url("fonts/noto-sans-sc-400.woff2") format("woff2");
}
@font-face{
  font-family:"Noto Sans SC";
  font-style:normal;font-weight:900;font-display:swap;
  src:url("fonts/noto-sans-sc-900.woff2") format("woff2");
}

/* ---------- 页面基座 ---------- */
.fx-body{
  margin:0;padding:0;
  background:var(--fx-k);color:var(--fx-w);
  font-family:var(--fx-text);font-weight:400;
  overflow-x:clip;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
html,body{overflow-x:clip;}
.fx-body *,.fx-body *::before,.fx-body *::after{box-sizing:border-box;}
.fx-body ::selection{background:var(--fx-r);color:var(--fx-w);}
.fx-body img,.fx-body video,.fx-body canvas,.fx-body svg{display:block;max-width:100%;}
.fx-body a{color:inherit;text-decoration:none;}

/* Lenis 官方推荐基座 */
.fx-lenis html,html.lenis{height:auto;}
.lenis.lenis-smooth{scroll-behavior:auto !important;}
.lenis.lenis-stopped{overscroll-behavior:contain;}

/* ---------- 排印工具类 ---------- */
.fx-label{
  font-family:var(--fx-mono);font-weight:400;
  font-size:11px;letter-spacing:.18em;
  text-transform:uppercase;line-height:1.7;
  margin:0;
}
.fx-label--dim{color:var(--fx-g);}
.fx-display{
  font-family:var(--fx-sans);font-weight:900;
  letter-spacing:-.04em;line-height:.98;margin:0;
}
.fx-num{font-variant-numeric:tabular-nums;}

/* 章节编号红 —— 红色白名单之一 */
.fx-chapnum{color:var(--fx-r);}

/* mix-blend-mode:difference 反色规范 */
.fx-blend{color:var(--fx-w);mix-blend-mode:difference;}

/* 读屏专用(视觉隐藏):FX.split / FX.marquee 自动注入原文 */
.fx-sr{
  position:absolute !important;width:1px;height:1px;
  overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);
  white-space:nowrap;
}

/* JS 进场前隐藏(html.fx-js 由 head 内联脚本同步加上,JS 挂了自动可见) */
.fx-js .fx-hide{visibility:hidden;}
.fx-reduced .fx-hide{visibility:visible;}

/* ---------- 文字拆分结构(FX.split / FX.revealText 生成) ---------- */
.fx-line{
  display:inline-block;overflow:hidden;vertical-align:top;
  padding-bottom:.08em;margin-bottom:-.08em;
}
.fx-line__in{display:block;will-change:transform;}
.fx-word{display:inline-block;white-space:nowrap;}
.fx-char{display:inline-block;will-change:transform;}

/* ---------- fx-curtain 章节幕 ---------- */
.fx-curtain{
  position:fixed;inset:0;z-index:900;
  pointer-events:none;
  display:flex;align-items:center;justify-content:center;
}
.fx-curtain--dark{background:var(--fx-k);color:var(--fx-w);}
.fx-curtain--light{background:var(--fx-w);color:var(--fx-k);}
.fx-curtain__card{
  font-family:var(--fx-mono);font-weight:400;
  font-size:clamp(12px,1.2vw,15px);
  letter-spacing:.18em;text-transform:uppercase;
  display:flex;gap:.9em;align-items:baseline;
  font-variant-numeric:tabular-nums;
}
.fx-curtain__num{color:var(--fx-r);font-weight:700;}
.fx-curtain--eyelid{background:none;display:block;}
.fx-curtain__lid{
  position:absolute;left:0;right:0;height:calc(50% - 1px);
  will-change:transform;
}
.fx-curtain__lid--top{top:0;}
.fx-curtain__lid--bot{bottom:0;}
.fx-curtain--dark .fx-curtain__lid{background:var(--fx-k);}
.fx-curtain--light .fx-curtain__lid{background:var(--fx-w);}
.fx-curtain--eyelid .fx-curtain__card{
  position:absolute;left:var(--fx-pad);bottom:calc(50% + 24px);
}
.fx-curtain--eyelid.fx-curtain--dark .fx-curtain__card{color:var(--fx-w);}
.fx-curtain--eyelid.fx-curtain--light .fx-curtain__card{color:var(--fx-k);}

/* ---------- fx-marquee 跑马灯 ---------- */
.fx-marquee{overflow:hidden;width:100%;}
.fx-marquee__track{display:flex;width:max-content;will-change:transform;}
.fx-marquee__chunk{display:flex;flex:none;align-items:center;white-space:nowrap;}

/* ---------- reduced-motion ---------- */
@media (prefers-reduced-motion:reduce){
  .fx-line__in,.fx-char,.fx-marquee__track{transform:none !important;}
}
