/* ==========================================================================
   反贼网 2.0 — 卷宗档案 (Case File) 设计系统
   全部字体自托管，零第三方外联。见 docs/20260907_fanzei2_ui_workorder.md
   ========================================================================== */

/* -- U1.2 自托管字体：中文按 unicode-range 切成 4 片 (misc / cjk1 / cjk2 / cjk3)，
      拉丁与标点先加载，其余按需加载；品牌字标与印章单独子集化 <2KB。 -- */
@font-face {
  font-family: "FZ Brand";
  font-weight: 900;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-900-brand.woff2") format("woff2");
  unicode-range: U+53CD, U+7F51, U+8D3C; /* 反 网 贼 */
}

@font-face {
  font-family: "Noto Serif SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-700-misc.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+2000-206F, U+2E00-2E7F, U+3000-303F, U+FF00-FFEF;
}
@font-face {
  font-family: "Noto Serif SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-700-cjk1.woff2") format("woff2");
  unicode-range: U+4E00-6FFF;
}
@font-face {
  font-family: "Noto Serif SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-700-cjk2.woff2") format("woff2");
  unicode-range: U+7000-8FFF;
}
@font-face {
  font-family: "Noto Serif SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-700-cjk3.woff2") format("woff2");
  unicode-range: U+9000-9FFF;
}

@font-face {
  font-family: "Noto Serif SC";
  font-weight: 900;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-900-misc.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+2000-206F, U+2E00-2E7F, U+3000-303F, U+FF00-FFEF;
}
@font-face {
  font-family: "Noto Serif SC";
  font-weight: 900;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-900-cjk1.woff2") format("woff2");
  unicode-range: U+4E00-6FFF;
}
@font-face {
  font-family: "Noto Serif SC";
  font-weight: 900;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-900-cjk2.woff2") format("woff2");
  unicode-range: U+7000-8FFF;
}
@font-face {
  font-family: "Noto Serif SC";
  font-weight: 900;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSerifSC-900-cjk3.woff2") format("woff2");
  unicode-range: U+9000-9FFF;
}

@font-face {
  font-family: "Noto Sans SC";
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-400-misc.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+2000-206F, U+2E00-2E7F, U+3000-303F, U+FF00-FFEF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-400-cjk1.woff2") format("woff2");
  unicode-range: U+4E00-6FFF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-400-cjk2.woff2") format("woff2");
  unicode-range: U+7000-8FFF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-400-cjk3.woff2") format("woff2");
  unicode-range: U+9000-9FFF;
}

@font-face {
  font-family: "Noto Sans SC";
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-500-misc.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+2000-206F, U+2E00-2E7F, U+3000-303F, U+FF00-FFEF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-500-cjk1.woff2") format("woff2");
  unicode-range: U+4E00-6FFF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-500-cjk2.woff2") format("woff2");
  unicode-range: U+7000-8FFF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-500-cjk3.woff2") format("woff2");
  unicode-range: U+9000-9FFF;
}

@font-face {
  font-family: "Noto Sans SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-700-misc.woff2") format("woff2");
  unicode-range: U+0020-007E, U+00A0-00FF, U+2000-206F, U+2E00-2E7F, U+3000-303F, U+FF00-FFEF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-700-cjk1.woff2") format("woff2");
  unicode-range: U+4E00-6FFF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-700-cjk2.woff2") format("woff2");
  unicode-range: U+7000-8FFF;
}
@font-face {
  font-family: "Noto Sans SC";
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/NotoSansSC-700-cjk3.woff2") format("woff2");
  unicode-range: U+9000-9FFF;
}

@font-face {
  font-family: "IBM Plex Mono";
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/IBMPlexMono-400-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "IBM Plex Mono";
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  src: url("/static/fonts/IBMPlexMono-500-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* -- U1.1 设计令牌 -- */
:root {
  --fz-paper: #F4F1EA;
  --fz-paper-2: #ECE8DF;
  --fz-ink: #111111;
  --fz-ink-2: #3A3733;
  --fz-meta: #6B6660;
  --fz-mute: #B9B4AA;
  --fz-red: #C41E3A;
  --fz-rule: rgba(17, 17, 17, 0.18);
  --fz-rule-strong: #111111;

  --fz-serif: "FZ Brand", "Noto Serif SC", "Songti SC", "SimSun", serif;
  --fz-sans: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
  --fz-mono: "IBM Plex Mono", "SFMono-Regular", Menlo, Consolas, monospace;

  --fz-max: 1280px;
  --fz-gutter: 80px;
}
[data-theme="dark"] {
  --fz-paper: #0E0E0E;
  --fz-paper-2: #181818;
  --fz-ink: #EDE9E0;
  --fz-ink-2: #C9C4B8;
  --fz-meta: #8A8580;
  --fz-mute: #4A4640;
  --fz-red: #E24B5F;
  --fz-rule: rgba(237, 233, 224, 0.16);
  --fz-rule-strong: #EDE9E0;
  color-scheme: dark;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --fz-paper: #0E0E0E;
    --fz-paper-2: #181818;
    --fz-ink: #EDE9E0;
    --fz-ink-2: #C9C4B8;
    --fz-meta: #8A8580;
    --fz-mute: #4A4640;
    --fz-red: #E24B5F;
    --fz-rule: rgba(237, 233, 224, 0.16);
    --fz-rule-strong: #EDE9E0;
    color-scheme: dark;
  }
}

/* -- 旧令牌兼容别名 --
   U1.1 已删除 --fz-primary 系旧蓝色 SaaS 令牌族本身（阴影、圆角、旧蓝色都
   已不再出现任何真实取值）。但本轮未重做的页面（论坛/群组/专题列表/用户
   主页/后台等）仍有大量内联 style="...var(--fz-surface)..." 之类的写法；
   不给这些旧变量名一个映射，它们会在计算值阶段变成 invalid，导致背景/
   边框/文字色大面积失效。这里把旧名字全部重新指向新令牌（或 0/none），
   两边都不出现被禁止的取值，纯粹是为了不让未改造页面失色。 */
:root {
  --fz-bg: var(--fz-paper);
  --fz-bg-alt: var(--fz-paper-2);
  --fz-surface: var(--fz-paper);
  --fz-card-bg: var(--fz-paper);
  --fz-text: var(--fz-ink);
  --fz-text-main: var(--fz-ink);
  --fz-text-muted: var(--fz-meta);
  --fz-border: var(--fz-rule);
  --fz-heading: var(--fz-ink);
  --fz-primary: var(--fz-red);
  --fz-primary-hover: var(--fz-red);
  --fz-accent-blue: var(--fz-red);
  --fz-accent-red: var(--fz-red);
  --fz-danger: var(--fz-red);
  --fz-success: var(--fz-ink);
  --fz-radius: 0px;
  --fz-shadow: none;
  --fz-shadow-md: none;
  --fz-tag-bg: var(--fz-paper-2);
  --fz-tag-color: var(--fz-ink);
  --fz-hover-bg: var(--fz-paper-2);
  --fz-font: var(--fz-sans);
}

/* -- reset -- */
* { box-sizing: border-box; margin: 0; padding: 0; }
html { background: var(--fz-paper); }
body {
  background: var(--fz-paper);
  color: var(--fz-ink);
  font-family: var(--fz-sans);
  font-size: 15px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}
a { color: var(--fz-ink); text-decoration: none; }
a:hover { color: var(--fz-red); }
img, video { max-width: 100%; }
button { font-family: inherit; }

.fz-serif { font-family: var(--fz-serif); }
.fz-sans { font-family: var(--fz-sans); }
.fz-mono { font-family: var(--fz-mono); }

/* -- U1.3 排版尺度 -- */
.fz-label {
  font-family: var(--fz-mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  color: var(--fz-meta);
  text-transform: uppercase;
}
.fz-h-lead {
  font-family: var(--fz-serif);
  font-size: 46px;
  line-height: 1.28;
  font-weight: 900;
  letter-spacing: 0.01em;
  text-wrap: pretty;
  margin: 0;
}
.fz-h-page {
  font-family: var(--fz-serif);
  font-size: 42px;
  line-height: 1.3;
  font-weight: 900;
  letter-spacing: 0.01em;
  text-wrap: pretty;
  margin: 0;
}
.fz-h-section {
  font-family: var(--fz-serif);
  font-size: 26px;
  line-height: 1.2;
  font-weight: 900;
  margin: 0;
}
.fz-h-list {
  font-family: var(--fz-serif);
  font-size: 22px;
  line-height: 1.35;
  font-weight: 700;
  margin: 0;
}
.fz-h-list-sm {
  font-family: var(--fz-serif);
  font-size: 17px;
  line-height: 1.35;
  font-weight: 700;
  margin: 0;
}
.fz-body {
  font-family: var(--fz-sans);
  font-size: 17px;
  line-height: 1.85;
  color: var(--fz-ink-2);
  max-width: 720px;
}
.fz-body-tight { font-family: var(--fz-sans); font-size: 16px; line-height: 1.8; color: var(--fz-ink); }
.fz-meta-text {
  font-family: var(--fz-mono);
  font-size: 13px;
  letter-spacing: 0.06em;
  color: var(--fz-meta);
}
.fz-tag-label {
  font-family: var(--fz-mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
.fz-tl-date {
  font-family: var(--fz-mono);
  font-size: 30px;
  font-weight: 500;
  line-height: 1;
  letter-spacing: -0.02em;
}
.fz-stamp {
  display: inline-block;
  font-family: var(--fz-mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  color: var(--fz-red);
  border: 1.5px solid var(--fz-red);
  padding: 2px 7px;
  transform: rotate(-3deg);
  white-space: nowrap;
}

/* -- rules -- */
.fz-rule { border: 0; border-top: 1px solid var(--fz-rule); margin: 0; }
.fz-rule-strong { border: 0; border-top: 3px solid var(--fz-rule-strong); margin: 0; }

/* -- layout -- */
.fz-wrap {
  max-width: var(--fz-max);
  margin: 0 auto;
  padding: 0 var(--fz-gutter);
}
.fz-container { max-width: var(--fz-max); margin: 0 auto; padding: 0 var(--fz-gutter); }

/* ==========================================================================
   Header — two-row masthead (home) / compact single row (inner pages)
   ========================================================================== */
.fz-masthead-line1 {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 40px;
  border-bottom: 1px solid var(--fz-rule);
}
.fz-masthead-live {
  display: flex;
  align-items: center;
  gap: 8px;
}
.fz-dot-red {
  width: 7px;
  height: 7px;
  background: var(--fz-red);
  border-radius: 50%;
  display: inline-block;
  flex-shrink: 0;
}
.fz-masthead-line2 {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  padding: 26px 0 18px 0;
}
.fz-brand-block { display: flex; align-items: center; gap: 16px; }
.fz-brand-square {
  font-family: var(--fz-serif);
  width: 52px;
  height: 52px;
  background: var(--fz-red);
  color: var(--fz-paper);
  font-size: 32px;
  font-weight: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  flex-shrink: 0;
}
.fz-brand-word {
  font-family: var(--fz-serif);
  font-size: 44px;
  font-weight: 900;
  line-height: 1;
  letter-spacing: 0.04em;
}
.fz-brand-tagline { font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.16em; color: var(--fz-meta); text-transform: uppercase; margin-top: 4px; }
.fz-masthead-right { display: flex; align-items: center; gap: 36px; }
.fz-primary-nav {
  font-family: var(--fz-serif);
  display: flex;
  gap: 28px;
  font-size: 17px;
  font-weight: 700;
}
.fz-primary-nav a.active { color: var(--fz-red); }
.fz-header-actions { display: flex; align-items: center; gap: 22px; }
.fz-search-icon { stroke: var(--fz-ink); }
.fz-header-login { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; }

/* Compact single-row header (inner pages) */
.fz-header-compact {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 56px;
  border-bottom: 1px solid var(--fz-rule);
}
.fz-header-compact-left { display: flex; align-items: center; gap: 12px; }
.fz-brand-square-sm {
  font-family: var(--fz-serif);
  width: 30px;
  height: 30px;
  background: var(--fz-red);
  color: var(--fz-paper);
  font-size: 18px;
  font-weight: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.fz-brand-word-sm { font-family: var(--fz-serif); font-size: 22px; font-weight: 900; letter-spacing: 0.04em; }
.fz-nav-compact {
  font-family: var(--fz-serif);
  display: flex;
  gap: 22px;
  font-size: 15px;
  font-weight: 700;
  margin-left: 28px;
}
.fz-nav-compact a.active { color: var(--fz-red); }

/* Mobile single-row header */
.fz-header-mobile {
  display: none;
}

/* Header dropdown (search / user menu) kept minimal & flat */
.fz-header-dropdown {
  position: absolute;
  right: 0;
  top: 100%;
  margin-top: 8px;
  background: var(--fz-paper);
  border: 1px solid var(--fz-rule-strong);
  min-width: 150px;
  white-space: nowrap;
  z-index: 1001;
}
.fz-header-dropdown a {
  display: block;
  padding: 9px 16px;
  font-size: 0.88rem;
  font-family: var(--fz-mono);
  color: var(--fz-ink);
  border-top: 1px solid var(--fz-rule);
}
.fz-header-dropdown a:first-child { border-top: none; }
.fz-header-dropdown button {
  display: block;
  width: 100%;
  text-align: left;
  padding: 9px 16px;
  font-size: 0.88rem;
  font-family: var(--fz-mono);
  color: var(--fz-red);
  background: none;
  border: none;
  border-top: 1px solid var(--fz-rule);
  cursor: pointer;
}

/* ==========================================================================
   Footer
   ========================================================================== */
.fz-footer {
  margin-top: 56px;
  border-top: 3px solid var(--fz-rule-strong);
  padding: 14px var(--fz-gutter) 40px;
}
.fz-footer-inner {
  max-width: var(--fz-max);
  margin: 0 auto;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}
.fz-footer-links { display: flex; gap: 26px; flex-wrap: wrap; }
.fz-footer-links a { font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--fz-ink); }
.fz-footer-note { font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--fz-meta); }

/* ==========================================================================
   U2.4 meta row / U2.3 stamp already above / U2.5 list row / U2.6 wire row / U2.7 timeline row
   ========================================================================== */
.fz-meta-row {
  font-family: var(--fz-mono);
  font-size: 13px;
  letter-spacing: 0.06em;
  color: var(--fz-meta);
}

.fz-list-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 11px 0;
  border-top: 1px solid var(--fz-rule);
}
.fz-list-row:last-child { border-bottom: 1px solid var(--fz-rule); }
.fz-list-name { font-family: var(--fz-serif); font-size: 17px; font-weight: 700; }
.fz-list-count { font-family: var(--fz-mono); font-size: 12px; color: var(--fz-meta); white-space: nowrap; }

.fz-wire-row {
  display: grid;
  grid-template-columns: 64px minmax(0, 1fr) 150px;
  gap: 20px;
  padding: 16px 0;
  border-top: 1px solid var(--fz-rule);
  align-items: start;
}
.fz-wire-row.fz-wire-compact { grid-template-columns: 44px minmax(0, 1fr); }
.fz-wire-time { font-family: var(--fz-mono); font-size: 13px; color: var(--fz-meta); padding-top: 3px; }
.fz-wire-text { font-size: 16px; line-height: 1.8; color: var(--fz-ink); }
.fz-wire-text.fz-wire-text-compact { font-size: 14px; line-height: 1.7; }
.fz-wire-acts { display: flex; gap: 16px; flex-wrap: wrap; font-family: var(--fz-mono); font-size: 11px; color: var(--fz-meta); letter-spacing: 0.08em; margin-top: 8px; }
.fz-wire-acts a, .fz-wire-acts button { color: var(--fz-meta); background: none; border: none; padding: 0; cursor: pointer; font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.08em; }
.fz-wire-acts a.fz-wire-event-link { color: var(--fz-red); }
.fz-wire-tags { display: flex; flex-wrap: wrap; gap: 4px 10px; font-family: var(--fz-mono); font-size: 12px; color: var(--fz-red); padding-top: 4px; }
.fz-wire-tags-inline { display: inline; font-family: var(--fz-mono); font-size: 12px; color: var(--fz-red); margin-left: 6px; }

.fz-tl-row {
  display: grid;
  grid-template-columns: 140px minmax(0, 1fr) 200px;
  gap: 32px;
  padding: 22px 0;
  border-top: 1px solid var(--fz-rule);
  align-items: start;
}
.fz-tl-row:last-child { border-bottom: 1px solid var(--fz-rule); }
.fz-tl-year { font-family: var(--fz-mono); font-size: 12px; color: var(--fz-meta); margin-top: 6px; letter-spacing: 0.1em; }
.fz-tl-title { font-family: var(--fz-serif); font-size: 22px; font-weight: 700; line-height: 1.35; margin: 0 0 8px 0; }
.fz-tl-sum { font-size: 14px; line-height: 1.7; color: var(--fz-ink-2); margin: 0; }
.fz-tl-meta { display: flex; flex-direction: column; gap: 8px; align-items: flex-end; }

/* U2.8 video / podcast entry */
.fz-video-entry {
  display: grid;
  grid-template-rows: 16px 48px 16px;
  gap: 8px;
  padding: 12px 0;
  border-top: 1px solid var(--fz-rule);
}
.fz-video-entry:last-child { border-bottom: 1px solid var(--fz-rule); }
.fz-video-entry-meta {
  font-family: var(--fz-mono);
  font-size: 11px;
  color: var(--fz-meta);
  letter-spacing: 0.08em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fz-video-entry-title {
  font-family: var(--fz-serif);
  font-size: 16px;
  font-weight: 700;
  line-height: 24px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  color: var(--fz-ink);
}
.fz-video-entry-cue {
  font-family: var(--fz-mono);
  font-size: 11px;
  color: var(--fz-red);
  letter-spacing: 0.1em;
  background: none;
  border: none;
  padding: 0;
  cursor: pointer;
  text-align: left;
}
.fz-video-player-wrap { margin-top: 10px; aspect-ratio: 16 / 9; background: var(--fz-ink); }
.fz-video-player-wrap iframe { width: 100%; height: 100%; border: 0; display: block; }

/* ==========================================================================
   Homepage
   ========================================================================== */
.fz-hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
  gap: 64px;
  padding: 36px 0 44px 0;
}
.fz-hero-main { display: flex; flex-direction: column; gap: 18px; }
.fz-hero-actions { display: flex; gap: 28px; margin-top: 6px; }
.fz-hero-actions a { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; }
.fz-hero-actions a.fz-action-primary { border-bottom: 1px solid var(--fz-ink); padding-bottom: 2px; }
.fz-hero-actions a.fz-action-secondary { color: var(--fz-meta); }
.fz-hero-subgrid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 40px;
  margin-top: 28px;
  padding-top: 22px;
  border-top: 1px solid var(--fz-rule);
}
.fz-hero-sub-item { display: flex; flex-direction: column; gap: 8px; }

.fz-wire-rail { display: flex; flex-direction: column; }
.fz-wire-rail-head { display: flex; justify-content: space-between; align-items: baseline; padding-bottom: 12px; }
.fz-wire-rail-foot {
  border-top: 1px solid var(--fz-rule);
  padding-top: 14px;
  display: flex;
  justify-content: space-between;
}
.fz-wire-rail-foot a { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; }
.fz-wire-rail-foot a.fz-action-secondary { color: var(--fz-meta); }

.fz-section-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 14px 0 6px 0;
}
.fz-section-head a { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; }

.fz-three-cols {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 56px;
  padding-top: 44px;
}
.fz-three-cols > div > .fz-label { padding-bottom: 10px; display: block; }

/* Homepage 精选帖子 (U11) — fills the area under the lead */
.fz-featured-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0 56px;
  padding-top: 8px;
}
.fz-featured-item {
  display: flex;
  flex-direction: column;
  gap: 5px;
  padding: 16px 0;
  border-bottom: 1px solid var(--fz-rule);
  color: inherit;
}
.fz-featured-meta { font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.06em; color: var(--fz-meta); }
.fz-featured-title { font-family: var(--fz-serif); font-size: 18px; line-height: 1.35; color: var(--fz-ink); }
.fz-featured-item:hover .fz-featured-title { color: var(--fz-red); }
.fz-featured-excerpt {
  font-size: 13px; line-height: 1.6; color: var(--fz-ink-soft, var(--fz-meta));
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
@media (max-width: 768px) {
  .fz-featured-grid { grid-template-columns: 1fr; gap: 0; }
}

/* Forum directory rows (U11.3) */
.fz-forum-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 90px minmax(0, 1.1fr);
  gap: 20px; align-items: center;
  padding: 16px 0; border-bottom: 1px solid var(--fz-rule);
}
.fz-forum-row-main { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.fz-forum-row-name { font-family: var(--fz-serif); font-size: 19px; color: var(--fz-ink); }
.fz-forum-row-name:hover { color: var(--fz-red); }
.fz-forum-row-desc { font-size: 12px; color: var(--fz-meta); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fz-forum-row-count { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.fz-forum-row-num { font-family: var(--fz-mono); font-size: 20px; color: var(--fz-ink); }
.fz-forum-row-last { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.fz-forum-row-last-title { font-size: 13px; color: var(--fz-ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fz-forum-row-last-title:hover { color: var(--fz-red); }
@media (max-width: 768px) {
  .fz-forum-row { grid-template-columns: 1fr auto; gap: 6px 16px; }
  .fz-forum-row-last { grid-column: 1 / -1; }
}

/* U13-C: forum two-column index, dynamic topic tabs, search, header/topic typeahead */

/* Forum index (/forums): left 8fr post list + right 4fr sticky board directory. */
.fz-forum-two-col {
  display: grid;
  grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
  gap: 56px;
  padding-top: 26px;
}
.fz-forum-main { min-width: 0; overflow: hidden; }
.fz-forum-side {
  display: flex;
  flex-direction: column;
  position: sticky;
  top: 18px;
  align-self: start;
  /* 不再给侧栏自己的滚动条：13 个板块一屏放得下，内滚+页滚是双滚动条 */
}
.fz-forum-side-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  padding: 10px 0;
  border-top: 1px solid var(--fz-rule);
  color: var(--fz-ink);
}
.fz-forum-side-row:last-child { border-bottom: 1px solid var(--fz-rule); }
.fz-forum-side-row:hover .fz-forum-side-name { color: var(--fz-red); }
.fz-forum-side-row-on { color: var(--fz-red); }
.fz-forum-side-row-on .fz-forum-side-name { color: var(--fz-red); }
.fz-forum-side-name { font-family: var(--fz-serif); font-size: 15px; }
.fz-forum-side-count { font-size: 12px; color: var(--fz-meta); }

/* Mobile: the sticky side directory collapses into a horizontally scrollable chip bar
   pinned above the post list; the two-column grid becomes a single column. */
.fz-forum-board-bar { display: none; }
@media (max-width: 768px) {
  .fz-forum-two-col { grid-template-columns: 1fr; gap: 22px; }
  .fz-forum-side { display: none; }
  .fz-forum-board-bar {
    display: flex;
    gap: 10px;
    overflow-x: auto;
    padding: 14px 0 4px;
    -webkit-overflow-scrolling: touch;
  }
  .fz-forum-board-chip {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    border: 1px solid var(--fz-rule-strong);
    font-family: var(--fz-mono);
    font-size: 12px;
    letter-spacing: 0.04em;
    color: var(--fz-ink);
    white-space: nowrap;
  }
  .fz-forum-board-chip-on { color: var(--fz-red); border-color: var(--fz-red); }
}

/* Header search: an icon that expands into a typeahead-backed input (U13-C item 3/4). */
.fz-search-widget { position: relative; display: flex; align-items: center; }
.fz-search-icon-btn { background: none; border: none; padding: 0; cursor: pointer; color: inherit; display: flex; }
.fz-search-form {
  display: none;
  position: absolute;
  top: 100%;
  right: 0;
  margin-top: 12px;
  padding: 10px;
  width: 300px;
  background: var(--fz-paper);
  border: 1px solid var(--fz-ink);
  z-index: 60;
}
.fz-search-widget.fz-search-open .fz-search-form { display: block; }
.fz-search-input { width: 100%; }

/* Generic front-end typeahead dropdown (initFzTypeahead, [data-fz-ta]) shared by the
   header search and the topics page search box. */
.fz-ta-wrap { position: relative; }
.fz-ta-results {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  margin-top: 4px;
  max-height: 260px;
  overflow-y: auto;
  background: var(--fz-paper);
  border: 1px solid var(--fz-ink);
  z-index: 70;
}
.fz-ta-item {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  padding: 8px 10px;
  font-size: 13px;
  color: var(--fz-ink);
  cursor: pointer;
  border-top: 1px solid var(--fz-rule);
}
.fz-ta-item:first-child { border-top: none; }
.fz-ta-item:hover, .fz-ta-item.fz-ta-item-active { background: var(--fz-hover, rgba(139,0,0,0.06)); color: var(--fz-red); }
.fz-ta-item-type { font-family: var(--fz-mono); font-size: 10px; letter-spacing: 0.06em; color: var(--fz-meta); white-space: nowrap; }
.fz-ta-empty { padding: 10px; font-size: 12px; color: var(--fz-meta); }

/* Memorial template (U12) */
.fz-mem-hero { padding: 30px 0 34px; border-bottom: 3px double var(--fz-rule-strong); }
.fz-mem-hero-grid { display: grid; grid-template-columns: 180px minmax(0, 1fr); gap: 40px; align-items: start; }
.fz-mem-portrait {
  width: 180px; height: 220px; border: 1px solid var(--fz-rule-strong);
  display: flex; align-items: center; justify-content: center; overflow: hidden;
  background: var(--fz-paper-2, rgba(0,0,0,0.02)); filter: grayscale(1);
}
.fz-mem-portrait img { width: 100%; height: 100%; object-fit: cover; }
.fz-mem-portrait-stamp { font-family: var(--fz-serif); font-size: 88px; color: var(--fz-red); }
.fz-mem-dates { font-size: 15px; letter-spacing: 0.1em; color: var(--fz-meta); }
.fz-mem-hero-body .fz-action-primary { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; border-bottom: 1px solid var(--fz-ink); padding-bottom: 2px; }
/* Memorials index */
.fz-mem-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; padding-top: 26px; }
.fz-mem-card { display: flex; flex-direction: column; gap: 10px; padding-bottom: 18px; border-bottom: 1px solid var(--fz-rule); color: inherit; }
.fz-mem-card-portrait {
  width: 100%; aspect-ratio: 4 / 5; border: 1px solid var(--fz-rule); overflow: hidden;
  display: flex; align-items: center; justify-content: center; filter: grayscale(1);
  background: var(--fz-paper-2, rgba(0,0,0,0.02));
}
.fz-mem-card-portrait img { width: 100%; height: 100%; object-fit: cover; }
.fz-mem-card-portrait span { font-family: var(--fz-serif); font-size: 56px; color: var(--fz-red); }
.fz-mem-card-name { font-family: var(--fz-serif); font-size: 20px; color: var(--fz-ink); }
.fz-mem-card:hover .fz-mem-card-name { color: var(--fz-red); }
.fz-mem-card-dates { font-family: var(--fz-mono); font-size: 12px; color: var(--fz-meta); }
@media (max-width: 900px) { .fz-mem-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 768px) {
  .fz-mem-hero-grid { grid-template-columns: 120px minmax(0, 1fr); gap: 22px; }
  .fz-mem-portrait { width: 120px; height: 150px; }
  .fz-mem-grid { grid-template-columns: 1fr 1fr; gap: 18px; }
}

/* ==========================================================================
   Event detail page
   ========================================================================== */
.fz-breadcrumb { padding: 22px 0 14px 0; }
.fz-event-meta-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 32px;
  margin-top: 26px;
  border-top: 3px solid var(--fz-rule-strong);
  border-bottom: 1px solid var(--fz-rule);
}
.fz-meta-cell { display: flex; flex-direction: column; gap: 8px; padding: 14px 0; }
.fz-meta-val { font-family: var(--fz-mono); font-size: 15px; font-weight: 500; }
.fz-importance-dots { font-family: var(--fz-mono); font-size: 13px; letter-spacing: 0.1em; }
.fz-importance-dots .on { color: var(--fz-red); }
.fz-importance-dots .off { color: var(--fz-mute); }

.fz-event-body-grid {
  display: grid;
  grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
  gap: 64px;
  padding-top: 30px;
}
.fz-event-main { display: flex; flex-direction: column; gap: 40px; }
.fz-event-side { display: flex; flex-direction: column; gap: 36px; }
.fz-event-summary {
  font-family: var(--fz-serif);
  font-size: 20px;
  font-weight: 700;
  line-height: 1.9;
  color: var(--fz-ink-2);
  margin: 0;
}

.fz-ev-row {
  display: grid;
  grid-template-columns: minmax(0, 2.2fr) 110px 110px minmax(0, 1.6fr);
  gap: 20px;
  padding: 14px 0;
  border-top: 1px solid var(--fz-rule);
  align-items: center;
}
.fz-ev-row.fz-ev-head { border-top: 2px solid var(--fz-rule-strong); padding: 8px 0; }
.fz-ev-row:last-child { border-bottom: 1px solid var(--fz-rule); }
.fz-ev-head-label { font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.12em; color: var(--fz-meta); }
.fz-ev-name { font-size: 15px; font-weight: 500; }
.fz-ev-sub { font-family: var(--fz-mono); font-size: 11px; color: var(--fz-meta); margin-top: 3px; }
.fz-ev-links { display: flex; gap: 16px; font-family: var(--fz-mono); font-size: 12px; }
.fz-ev-links a { border-bottom: 1px solid var(--fz-ink); padding-bottom: 1px; }
.fz-ev-links a.fz-ev-dead { color: var(--fz-meta); border-bottom-style: dashed; }
.fz-ev-links a.fz-ev-submit { color: var(--fz-red); border-color: var(--fz-red); }

.fz-ctx-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 40px minmax(0, 1fr) 40px minmax(0, 1fr);
  gap: 0;
  align-items: stretch;
}
.fz-ctx-box { border: 1px solid var(--fz-ink); padding: 16px 18px; display: flex; flex-direction: column; gap: 6px; }
.fz-ctx-box.fz-ctx-self { background: var(--fz-ink); color: var(--fz-paper); border-color: var(--fz-ink); }
.fz-ctx-box.fz-ctx-self a, .fz-ctx-box.fz-ctx-self .fz-label { color: var(--fz-paper); }
.fz-ctx-box.fz-ctx-empty { border-style: dashed; }
.fz-ctx-arrow { display: flex; align-items: center; justify-content: center; }

.fz-log-row { display: flex; gap: 14px; padding: 8px 0; border-top: 1px solid var(--fz-rule); font-family: var(--fz-mono); font-size: 12px; }
.fz-log-row:last-child { border-bottom: 1px solid var(--fz-rule); }
.fz-log-time { color: var(--fz-meta); white-space: nowrap; }

.fz-cov-row { display: flex; flex-direction: column; gap: 4px; padding: 12px 0; border-top: 1px solid var(--fz-rule); }
.fz-cov-row:first-child { border-top: 2px solid var(--fz-rule-strong); }
.fz-cov-row:last-child { border-bottom: 1px solid var(--fz-rule); }

.fz-side-actions { display: flex; gap: 22px; padding-bottom: 16px; border-bottom: 3px solid var(--fz-rule-strong); flex-wrap: wrap; }
.fz-side-actions a, .fz-side-actions button {
  font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em;
  background: none; border: none; padding: 0; cursor: pointer;
}
.fz-side-actions a.fz-action-primary, .fz-side-actions button.fz-action-primary { border-bottom: 1px solid var(--fz-ink); }
.fz-side-actions a.fz-action-secondary, .fz-side-actions button.fz-action-secondary { color: var(--fz-meta); }

.fz-tip-box { border: 1px solid var(--fz-ink); padding: 16px 18px; display: flex; flex-direction: column; gap: 8px; }
.fz-tip-box a { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; color: var(--fz-red); border-bottom: 1px solid var(--fz-red); align-self: flex-start; padding-bottom: 1px; }

/* ==========================================================================
   一句话 (wire) page — filters, composer, day groups
   ========================================================================== */
.fz-page-head-row {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  padding: 30px 0 18px 0;
  border-bottom: 3px solid var(--fz-rule-strong);
  flex-wrap: wrap;
  gap: 14px;
}
.fz-page-head-actions { display: flex; gap: 22px; }
.fz-page-head-actions a { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; border-bottom: 1px solid var(--fz-ink); }

.fz-filter-row { display: flex; gap: 28px; padding: 14px 0 0 0; flex-wrap: wrap; }
.fz-filter {
  font-family: var(--fz-mono);
  font-size: 12px;
  letter-spacing: 0.1em;
  padding: 6px 0;
  color: var(--fz-ink);
  border-bottom: 2px solid transparent;
}
.fz-filter.fz-filter-on { color: var(--fz-red); border-bottom-color: var(--fz-red); }

.fz-composer {
  display: flex;
  gap: 14px;
  align-items: center;
  margin-top: 18px;
  border: 1px solid var(--fz-ink);
  padding: 12px 16px;
}
.fz-composer-prompt { font-family: var(--fz-mono); font-size: 14px; color: var(--fz-red); }
.fz-composer-input {
  font-family: var(--fz-mono);
  font-size: 14px;
  color: var(--fz-ink);
  background: transparent;
  border: none;
  outline: none;
  flex-grow: 1;
}
.fz-composer-input::placeholder { color: var(--fz-meta); }
.fz-composer-count { font-family: var(--fz-mono); font-size: 11px; color: var(--fz-meta); letter-spacing: 0.1em; white-space: nowrap; }
.fz-composer-submit {
  font-family: var(--fz-mono);
  font-size: 12px;
  letter-spacing: 0.12em;
  background: var(--fz-ink);
  color: var(--fz-paper);
  padding: 8px 14px;
  border: none;
  cursor: pointer;
}

.fz-day-head { display: flex; align-items: baseline; gap: 14px; padding: 34px 0 10px 0; }
.fz-day-head-title { font-family: var(--fz-serif); font-size: 24px; font-weight: 900; }
.fz-day-head-sub { font-family: var(--fz-mono); font-size: 12px; color: var(--fz-meta); letter-spacing: 0.1em; }

.fz-side-row {
  display: flex; justify-content: space-between; align-items: baseline;
  padding: 10px 0; border-top: 1px solid var(--fz-rule);
}
.fz-side-row:last-child { border-bottom: 1px solid var(--fz-rule); }

.fz-pager { display: flex; justify-content: space-between; padding-top: 18px; align-items: center; flex-wrap: wrap; gap: 12px; }
.fz-pager a { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.12em; }
.fz-pager span { font-family: var(--fz-mono); font-size: 12px; color: var(--fz-meta); }

/* ==========================================================================
   Topic hub / forum head
   ========================================================================== */
.fz-topic-head-line {
  width: 48px;
  height: 3px;
  background: var(--fz-red);
  border: none;
  margin: 10px 0 14px;
}
.fz-topic-hero-stamp {
  font-family: var(--fz-serif);
  width: 52px;
  height: 52px;
  background: var(--fz-red);
  color: var(--fz-paper);
  font-size: 26px;
  font-weight: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.fz-topic-alias { font-family: var(--fz-serif); font-size: 20px; color: var(--fz-meta); }
.fz-topic-stat-row { font-family: var(--fz-mono); font-size: 12px; color: var(--fz-meta); letter-spacing: 0.06em; }

/* ==========================================================================
   Settings — fz_mode radio cards
   ========================================================================== */
.fz-mode-option {
  border: 1px solid var(--fz-rule);
  padding: 18px;
  display: flex;
  gap: 14px;
  align-items: flex-start;
  cursor: pointer;
}
.fz-mode-option.fz-mode-selected { border-color: var(--fz-red); }
.fz-mode-option input { margin-top: 4px; accent-color: var(--fz-red); }
.fz-mode-option-title { font-family: var(--fz-serif); font-size: 17px; font-weight: 700; }
.fz-mode-option-desc { font-family: var(--fz-sans); font-size: 13px; color: var(--fz-meta); margin-top: 4px; line-height: 1.6; }

/* ==========================================================================
   Mobile bottom nav (≤768px)
   ========================================================================== */
.fz-bottom-nav {
  display: none;
  position: fixed;
  left: 0; right: 0; bottom: 0;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  border-top: 1px solid var(--fz-rule);
  background: var(--fz-paper);
  z-index: 200;
}
.fz-bottom-nav a {
  font-family: var(--fz-mono);
  display: flex;
  align-items: center;
  justify-content: center;
  height: 56px;
  font-size: 11px;
  letter-spacing: 0.1em;
  color: var(--fz-ink);
}
.fz-bottom-nav a.active {
  color: var(--fz-red);
  border-top: 2px solid var(--fz-red);
  margin-top: -1px;
}

/* ==========================================================================
   Responsive: ≤768px (U3.5)
   ========================================================================== */
@media (max-width: 768px) {
  .fz-wrap, .fz-container, .fz-footer-inner, .fz-footer { padding-left: 18px; padding-right: 18px; }
  .fz-footer { padding-bottom: 88px; }

  .fz-masthead-line1, .fz-masthead-line2, .fz-header-compact { display: none; }
  .fz-header-mobile {
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 44px;
    border-bottom: 1px solid var(--fz-rule);
  }
  .fz-header-mobile .fz-brand-square-sm { width: 26px; height: 26px; font-size: 15px; }
  .fz-header-mobile .fz-brand-word-sm { font-size: 20px; }

  .fz-hero-grid, .fz-event-body-grid { grid-template-columns: 1fr; gap: 28px; }
  .fz-h-lead { font-size: 27px; line-height: 1.35; }
  .fz-h-page { font-size: 28px; }
  .fz-hero-subgrid { grid-template-columns: 1fr; }
  .fz-wire-row { grid-template-columns: 58px minmax(0, 1fr); }
  .fz-wire-row > .fz-list-count, .fz-wire-row > .fz-tl-meta { display: none; }
  .fz-tl-row { grid-template-columns: 58px minmax(0, 1fr); gap: 14px; }
  .fz-tl-row > .fz-tl-meta { grid-column: 1 / -1; align-items: flex-start; flex-direction: row; gap: 10px; }
  .fz-three-cols { grid-template-columns: 1fr; gap: 32px; }
  .fz-event-meta-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fz-ctx-grid { grid-template-columns: 1fr; gap: 12px; }
  .fz-ctx-arrow { transform: rotate(90deg); padding: 4px 0; }
  .fz-ev-row { grid-template-columns: 1fr; gap: 6px; }
  .fz-bottom-nav { display: grid; }

  body { padding-bottom: 0; }
}

/* ==========================================================================
   Compatibility layer — flat, no-shadow, no-radius, palette-corrected classes
   used by pages this pass does not redesign (forums / groups / topics list /
   user profile / admin). Kept so those pages keep rendering without pulling
   in the deleted --fz-primary/--fz-shadow*/--fz-radius token family.
   ========================================================================== */
.fz-main-layout { display: grid; grid-template-columns: 1fr 300px; gap: 24px; padding: 24px 0 48px; }
.fz-main-layout > * { min-width: 0; }
@media (max-width: 768px) { .fz-main-layout { grid-template-columns: 1fr; } }

.fz-card {
  background: var(--fz-paper);
  border: 1px solid var(--fz-rule);
  padding: 20px;
  margin-bottom: 20px;
}
.fz-card-title {
  font-family: var(--fz-serif);
  font-size: 1.1rem;
  font-weight: 700;
  margin-bottom: 14px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 2px solid var(--fz-rule-strong);
  color: var(--fz-ink);
  padding-bottom: 8px;
}

table, .admin-table { width: 100%; table-layout: auto; border-collapse: collapse; word-break: break-word; }
th, td { word-break: break-word; vertical-align: middle; border-top: 1px solid var(--fz-rule); padding: 8px; }
.fz-table-responsive { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }

.fz-topic-grid { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 16px; }
.fz-topic-chip {
  font-family: var(--fz-mono);
  color: var(--fz-ink);
  border: 1px solid var(--fz-rule-strong);
  padding: 4px 11px;
  font-size: 0.8rem;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.fz-topic-chip-blue { color: var(--fz-ink); }
.fz-topic-chip.active, .fz-tab-btn.active { color: var(--fz-red); border-color: var(--fz-red); }

.fz-item-list { list-style: none; }
.fz-item-row { display: flex; justify-content: space-between; align-items: baseline; padding: 10px 0; border-top: 1px solid var(--fz-rule); }
.fz-item-row:last-child { border-bottom: 1px solid var(--fz-rule); }
.fz-item-title { font-family: var(--fz-serif); font-weight: 700; font-size: 0.95rem; }
/* 论坛帖子列表标题行：行内文本流，板块标签跟标题同一行起头，长标题自然折行；不再用 flex 让标题整体掉行 */
.fz-item-headline { display: flex; align-items: baseline; gap: 8px; line-height: 1.5; min-width: 0; width: 100%; }
.fz-item-headline .fz-item-title { display: block; flex: 1 1 auto; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fz-item-tag { flex: 0 0 auto; white-space: nowrap; }
.fz-item-headline .fz-item-title { font-size: 1.05rem; }
.fz-item-meta { font-family: var(--fz-mono); font-size: 0.8rem; color: var(--fz-meta); white-space: nowrap; margin-left: 12px; }

.fz-article-header { margin-bottom: 20px; border-bottom: 1px solid var(--fz-rule); padding-bottom: 16px; }
.fz-article-title { font-family: var(--fz-serif); font-size: 1.8rem; font-weight: 900; color: var(--fz-ink); margin-bottom: 8px; line-height: 1.3; }
.fz-article-meta { font-family: var(--fz-mono); font-size: 0.8rem; color: var(--fz-meta); display: flex; gap: 12px; flex-wrap: wrap; }
.fz-article-body { font-size: 1.05rem; line-height: 1.85; color: var(--fz-ink-2); margin-bottom: 30px; }
.fz-article-body p { margin-bottom: 16px; }

/* 正文富文本（帖子/文章/回复）：全局 reset 清掉了列表内边距，序号会掉到栏外，这里补回来 */
.fz-body ol, .fz-body ul, .fz-article-body ol, .fz-article-body ul, .fz-reply-body ol, .fz-reply-body ul {
  padding-left: 1.7em; margin: 0 0 16px; list-style-position: outside;
}
.fz-body ol { list-style-type: decimal; }
.fz-body ul { list-style-type: disc; }
.fz-body li, .fz-article-body li, .fz-reply-body li { margin: 4px 0; }
.fz-body li > ol, .fz-body li > ul, .fz-article-body li > ol, .fz-article-body li > ul { margin: 4px 0 0; }
.fz-body li::marker, .fz-article-body li::marker, .fz-reply-body li::marker { font-family: var(--fz-mono); color: var(--fz-meta); }
.fz-body blockquote, .fz-article-body blockquote, .fz-reply-body blockquote {
  margin: 0 0 16px; padding: 4px 0 4px 16px; border-left: 3px solid var(--fz-rule-strong); color: var(--fz-meta);
}
.fz-body pre, .fz-article-body pre, .fz-reply-body pre {
  margin: 0 0 16px; padding: 12px 14px; overflow-x: auto; font-family: var(--fz-mono); font-size: 13px;
  border: 1px solid var(--fz-rule); background: rgba(0,0,0,0.03);
}
.fz-body table, .fz-article-body table { border-collapse: collapse; margin: 0 0 16px; max-width: 100%; }
.fz-body th, .fz-body td, .fz-article-body th, .fz-article-body td { border: 1px solid var(--fz-rule); padding: 6px 10px; }

.fz-source-banner { border: 1px solid var(--fz-rule); border-left: 3px solid var(--fz-red); padding: 10px 14px; font-size: 0.85rem; color: var(--fz-meta); margin-bottom: 20px; }

.fz-timeline { position: relative; padding-left: 24px; border-left: 2px solid var(--fz-rule); margin-left: 8px; }
.fz-timeline-node { position: relative; margin-bottom: 24px; }
.fz-timeline-node::before {
  content: ''; position: absolute; left: -29px; top: 4px;
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--fz-red); border: 3px solid var(--fz-red);
}
.fz-timeline-date { font-family: var(--fz-mono); font-weight: 700; font-size: 0.9rem; color: var(--fz-red); }
.fz-timeline-title { font-family: var(--fz-serif); font-weight: 700; font-size: 1.05rem; margin: 4px 0; color: var(--fz-ink); }
.fz-timeline-desc { font-size: 0.9rem; color: var(--fz-meta); }

.fz-floor-item { border-top: 1px solid var(--fz-rule); padding: 16px 0; }
.fz-floor-meta { display: flex; justify-content: space-between; font-size: 0.85rem; color: var(--fz-meta); margin-bottom: 8px; }
.fz-floor-badge { font-family: var(--fz-mono); border: 1px solid var(--fz-rule-strong); color: var(--fz-ink); padding: 2px 8px; font-weight: 600; font-size: 0.75rem; }

.fz-form-group { margin-bottom: 14px; }
.fz-form-label { display: block; font-weight: 600; font-size: 0.9rem; margin-bottom: 6px; color: var(--fz-ink); }
.fz-input, .fz-textarea, select {
  width: 100%; padding: 10px 12px;
  background: var(--fz-paper); color: var(--fz-ink);
  border: 1px solid var(--fz-rule-strong);
  font-family: inherit; font-size: 0.95rem;
}
select option { background: var(--fz-paper); color: var(--fz-ink); }
.fz-input:focus, .fz-textarea:focus, select:focus { outline: none; border-color: var(--fz-red); }
.fz-btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 8px 18px; background: var(--fz-ink); color: var(--fz-paper);
  border: none; font-weight: 600; cursor: pointer; font-family: var(--fz-mono); font-size: 0.85rem; letter-spacing: 0.06em;
}
.fz-btn:hover { background: var(--fz-red); color: #fff; text-decoration: none; }

.fz-tab-btn {
  font-family: var(--fz-mono);
  padding: 6px 14px; border: 1px solid var(--fz-rule-strong);
  background: var(--fz-paper); color: var(--fz-ink); cursor: pointer; font-size: 0.8rem;
}

.fz-video-card { text-decoration: none; color: inherit; border: 1px solid var(--fz-rule); display: flex; flex-direction: column; }
.fz-video-card-title { font-family: var(--fz-serif); font-size: 0.98rem; font-weight: 700; line-height: 1.5; margin: 0 0 10px; color: var(--fz-ink); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.fz-video-card-meta { display: flex; justify-content: space-between; align-items: center; font-family: var(--fz-mono); font-size: 0.8rem; color: var(--fz-meta); }

.fz-subchannel-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.fz-subchannel-pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 12px; font-family: var(--fz-mono); font-size: 0.78rem; text-decoration: none; color: var(--fz-ink); border: 1px solid var(--fz-rule-strong); }
.fz-subchannel-pill.active { background: var(--fz-ink); color: var(--fz-paper); border-color: var(--fz-ink); }

.fz-ai-notes, .fz-ai-article { border: 1px solid var(--fz-rule); padding: 22px 26px; line-height: 1.85; color: var(--fz-ink); margin-top: 24px; }
.fz-ai-notes-header, .fz-ai-article-header { font-family: var(--fz-serif); font-weight: 900; font-size: 1.15rem; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; color: var(--fz-red); border-bottom: 1px solid var(--fz-rule); padding-bottom: 12px; }
.fz-ai-article-body { font-size: 1.02rem; line-height: 1.9; color: var(--fz-ink); }
.fz-ai-article-body p { margin-bottom: 16px; }
.fz-ai-article-body h3 { font-family: var(--fz-serif); font-size: 1.18rem; font-weight: 700; margin-top: 24px; margin-bottom: 12px; border-left: 3px solid var(--fz-red); padding-left: 10px; }
.fz-ai-article-body h4 { font-size: 1.05rem; font-weight: 600; margin-top: 18px; margin-bottom: 10px; }

.fz-tweet-stream { display: flex; flex-direction: column; }
.fz-tweet-card { display: flex; gap: 14px; padding: 16px 0; border-top: 1px solid var(--fz-rule); }
.fz-tweet-avatar-col { flex-shrink: 0; }
.fz-tweet-avatar { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; display: flex; align-items: center; justify-content: center; }
.fz-tweet-avatar-default { background: var(--fz-ink); color: var(--fz-paper); font-weight: 700; font-size: 1.1rem; }
.fz-tweet-main-col { flex: 1; min-width: 0; }
.fz-tweet-header { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 6px; font-size: 0.92rem; }
.fz-tweet-author-name { font-weight: 700; color: var(--fz-ink); }
.fz-tweet-author-handle, .fz-tweet-dot, .fz-tweet-time { color: var(--fz-meta); font-family: var(--fz-mono); font-size: 0.8rem; }
.fz-tweet-content { font-size: 16px; line-height: 1.8; color: var(--fz-ink); word-break: break-word; }
.fz-tweet-inline-tags { display: inline; margin-left: 6px; white-space: normal; }
.fz-tweet-inline-tag { display: inline-flex; align-items: center; font-family: var(--fz-mono); padding: 1px 8px; margin: 0 3px 2px 0; font-size: 0.75rem; font-weight: 600; color: var(--fz-red); border: none; }
.fz-tweet-tag { color: var(--fz-red); font-weight: 600; }
.fz-tweet-link { color: var(--fz-ink); text-decoration: underline; word-break: break-all; }
.fz-tweet-event-badge { display: block; margin-top: 12px; padding: 10px 0; border-top: 1px solid var(--fz-rule); }
.fz-tweet-event-badge-tag { font-family: var(--fz-mono); font-size: 0.72rem; font-weight: 700; color: var(--fz-red); margin-bottom: 4px; }
.fz-tweet-event-badge-title { font-family: var(--fz-serif); font-size: 0.95rem; font-weight: 700; color: var(--fz-ink); margin-bottom: 4px; }
.fz-tweet-event-badge-desc { font-size: 0.85rem; color: var(--fz-meta); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.fz-tweet-media { border: 1px solid var(--fz-rule); max-height: 360px; overflow: hidden; }
.fz-tweet-media-img { width: 100%; height: 100%; max-height: 360px; object-fit: cover; display: block; }
.fz-tweet-footer { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 8px; padding-top: 6px; border-top: 1px solid var(--fz-rule); font-family: var(--fz-mono); font-size: 0.78rem; color: var(--fz-meta); }
.fz-tweet-action-btn { color: var(--fz-meta); font-family: var(--fz-mono); font-size: 0.78rem; display: inline-flex; align-items: center; gap: 4px; }
.fz-tweet-action-btn:hover { color: var(--fz-red); }
.fz-single-event-row:hover { border-color: var(--fz-red); }

.fz-category-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 10px; font-family: var(--fz-mono); font-size: 0.75rem; font-weight: 600; line-height: 1.2; border: 1px solid var(--fz-rule-strong); color: var(--fz-ink); }
.fz-category-badge-red { color: var(--fz-red); border-color: var(--fz-red); }

/* U6.2/U6.5: 语言切换与机器翻译提示行（极少量样式，不动令牌与版式） */
.fz-footer-lang { display: flex; gap: 10px; font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.08em; margin-top: 6px; }
.fz-footer-lang a { color: var(--fz-meta); }
.fz-footer-lang a:hover, .fz-footer-lang-on { color: var(--fz-red) !important; }
.fz-mt-banner { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.06em; color: var(--fz-meta); padding: 8px 0; border-bottom: 1px solid var(--fz-rule); }
.fz-mt-banner a { color: var(--fz-red); }
.fz-mt-zh-tag { color: var(--fz-meta); font-size: 11px; }
.fz-mt-preparing { font-family: var(--fz-mono); font-size: 12px; letter-spacing: 0.06em; color: var(--fz-meta); padding: 6px 0 14px; }
.fz-category-badge-purple, .fz-category-badge-blue, .fz-category-badge-amber, .fz-category-badge-green, .fz-category-badge-cyan, .fz-category-badge-yellow, .fz-category-badge-indigo, .fz-category-badge-pink, .fz-category-badge-gray { color: var(--fz-ink); border-color: var(--fz-rule-strong); }

/* 报头深浅切换按钮（U-fix 2026-09-08）：浅色显示月亮（点击转深色），深色显示太阳 */
.fz-theme-toggle { background: none; border: none; cursor: pointer; color: var(--fz-ink); display: inline-flex; align-items: center; padding: 0; }
.fz-theme-toggle:hover { color: var(--fz-red); }
.fz-theme-toggle .fz-icon-sun { display: none; }
.fz-theme-toggle .fz-icon-moon { display: inline-flex; }
[data-theme="dark"] .fz-theme-toggle .fz-icon-sun { display: inline-flex; }
[data-theme="dark"] .fz-theme-toggle .fz-icon-moon { display: none; }

/* U13-A home modules
   首页 = 若干行，每行是一个 12 栏 grid；模块用 --fz-w 决定占几栏
   （full=12 / wide=8 / half=6 / third=4），手机端一律降为整行。
   视觉沿用卷宗档案：纸白墨黑、朱砂单红、宋体标题、等宽元数据、细线分隔、无 emoji。 */
.hm-row {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 56px;
  align-items: start;
  padding: 26px 0 6px 0;
  border-top: 1px solid var(--fz-rule);
}
.hm-row:first-of-type { border-top: none; padding-top: 30px; }
.hm-mod { grid-column: span var(--fz-w, 12); min-width: 0; }
.hm-w-full { --fz-w: 12; }
.hm-w-wide { --fz-w: 8; }
.hm-w-half { --fz-w: 6; }
.hm-w-third { --fz-w: 4; }

.hm-head { border-bottom: 1px solid var(--fz-rule-strong); }
.hm-badge {
  margin-left: 10px;
  font-family: var(--fz-mono);
  letter-spacing: 0.16em;
  color: var(--fz-meta);
}
.hm-empty { padding: 14px 0; }
.hm-linkbtn { background: none; border: none; padding: 0; cursor: pointer; }
.hm-stamp-start { align-self: flex-start; }

/* 焦点 */
.hm-lead { gap: 18px; }
.hm-lead-kicker { color: var(--fz-red); }
.hm-lead-metarow { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.hm-cue { color: var(--fz-red); letter-spacing: 0.1em; }
.hm-type-lead .fz-hero-subgrid { margin-top: 24px; }

/* 卡片列表（推荐内容池 / 最新内容）：窄模块降为一列 */
.hm-w-third .fz-featured-grid,
.hm-w-half .fz-featured-grid { grid-template-columns: 1fr; gap: 0; }

/* 细行列表（论坛新帖 / 指定板块） */
.hm-thread-row {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 12px 0;
  border-bottom: 1px solid var(--fz-rule);
}
.hm-thread-title { font-family: var(--fz-serif); font-size: 17px; line-height: 1.4; color: var(--fz-ink); }
.hm-thread-row:hover .hm-thread-title { color: var(--fz-red); }
.hm-thread-meta { font-family: var(--fz-mono); font-size: 11px; letter-spacing: 0.06em; color: var(--fz-meta); }

/* 板块导航：1/2/3 列 */
.hm-nav-grid { display: grid; gap: 0 40px; padding-top: 4px; }
.hm-nav-cols-1 { grid-template-columns: minmax(0, 1fr); }
.hm-nav-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.hm-nav-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.hm-nav-item { padding: 11px 0; border-bottom: 1px solid var(--fz-rule); min-width: 0; }
.hm-nav-line { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.hm-nav-last {
  display: block;
  margin-top: 3px;
  font-size: 12px;
  color: var(--fz-meta);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.hm-nav-last:hover { color: var(--fz-red); }

/* 一句话栏 */
.hm-wire-sync { font-size: 11px; }

/* 自定义文字 */
.hm-note { padding: 18px 0; border-top: 1px solid var(--fz-rule-strong); }
.hm-note-label { display: block; padding-bottom: 10px; }
.hm-note-body {
  margin: 0;
  padding-left: 16px;
  border-left: 2px solid var(--fz-red);
  font-family: var(--fz-serif);
  font-size: 17px;
  line-height: 1.8;
  color: var(--fz-ink-2);
}

@media (max-width: 900px) {
  .hm-row { gap: 34px; }
  .hm-nav-cols-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
  .hm-row { display: block; padding-top: 20px; }
  .hm-mod + .hm-mod { margin-top: 32px; }
  .hm-nav-cols-2, .hm-nav-cols-3 { grid-template-columns: minmax(0, 1fr); }
}

/* ==========================================================================
   U14 mail pages — 找回密码 / 重置密码 / 邮箱验证结果 / 发送成功提示
   四个页面共用的单列窄版式，沿用卷宗档案的字体与红线语汇。
   ========================================================================== */
.fz-mail-page { max-width: 420px; margin: 56px auto 80px; }
.fz-mail-lead {
  text-align: center;
  margin: 0 0 24px;
  line-height: 1.8;
}
.fz-mail-label {
  display: block;
  font-family: var(--fz-mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  color: var(--fz-meta);
  margin-bottom: 6px;
}
.fz-mail-alert {
  font-family: var(--fz-mono);
  font-size: 13px;
  line-height: 1.7;
  border: 1px solid var(--fz-rule);
  padding: 10px 14px;
  margin-bottom: 20px;
}
.fz-mail-alert-err { border-color: var(--fz-red); color: var(--fz-red); }
.fz-mail-alert-warn { border-color: var(--fz-ink); }
.fz-mail-stamp {
  display: inline-block;
  font-family: var(--fz-mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  border: 1px solid var(--fz-ink);
  padding: 4px 10px;
  margin-bottom: 18px;
}
.fz-mail-stamp-err { border-color: var(--fz-red); color: var(--fz-red); }
.fz-mail-foot {
  margin-top: 22px;
  text-align: center;
  font-family: var(--fz-mono);
  font-size: 12px;
  letter-spacing: 0.08em;
  color: var(--fz-meta);
}
.fz-mail-foot a { border-bottom: 1px solid var(--fz-rule); padding-bottom: 2px; }

.fz-wire-tags a, .fz-wire-tags-inline a { color: var(--fz-red); }

/* 论坛 | 群组 一级切换 */
.fz-section-tabs { padding: 18px 0 6px; gap: 22px; }
.fz-section-tabs .fz-filter { font-family: var(--fz-serif); font-size: 18px; font-weight: 700; }
