/* ==========================================================================
   SPACESENSE Gallery · 桌面端设计系统 v5.0 · P2 全站版
   --------------------------------------------------------------------------
   加载方式：<link rel="stylesheet" href="gallery-desktop.css" media="(min-width:1024px)">
   隔离原则（五层隔离 L1/L2 双保险）：
   - 本文件通过 link media 属性 + 文件内 @media 双保险，规则只在 ≥1024px 视口应用；
     注：Chrome 对 media 不匹配的 link 仍会下载文件（不阻塞渲染、规则不应用），
     渲染层面移动端零影响（P1 实测已验证 390/375 零回归）
   - token 单源：色彩/字体家族仍在 gallery-common.css :root 定义；
     本文件只覆盖桌面独立参数（容器/字号/间距/栅格），有且只有这一个归属地
   适用范围：全站 26 页（P2a 组件形态全量落地 + P2b 详情页推广，2026-09-01）

   版本记录：
   v2 修复（2026-09-01）：:root:root 提特异性压钉桩；组件级覆盖压页面内联
   v3 修正（2026-09-01）：末行补位仅 mod4=2 居中，mod4=1/3 守左轴
   P2 全站（2026-09-01）：设计稿 v1.1 十章形态表全量落地；
     hero 规则改 :has(.hero-img) 作用域（daily 文字 hero 不受 600px/54px 影响）；
     .cards 补 display:grid（ritz 桌面竖排 FAIL 修复）；h2 加强压制野生 clamp；
     tl 交错中线 / km 矩阵双列 / topnav 1440 轴对齐 / blockquote 左线上轴
   ========================================================================== */

@media (min-width: 1024px) {

  /* ── 桌面端导航下拉菜单：navlinks overflow 不能裁切 absolute 定位的下拉 ── */
  .topnav .navlinks { overflow: visible; }

  /* ---- L2 token 覆盖层：桌面独立参数 ----
     :root:root 特异性 (0,2,0)：压 common.css :root:root 钉桩（同特异性、本文件后加载胜）
     及页面内联 :root（特异性更低） */
  :root:root {
    /* 容器与页边距：1180→1440，1920 屏两侧各 240px（原 370px 显窄） */
    --maxw: 1440px;
    --page-x: 56px;
    --grid-gap: 32px;

    /* 字号阶梯 · 1.3 比率（移动档 1.25 不动）：45/35/27/21/16.5/13 */
    --font-display: 45px;
    --font-h1: 35px;
    --font-h2: 27px;
    --font-h3: 21px;
    --font-body: 16.5px;
    --font-small: 13px;

    /* P2 间距三层节奏：章节 64 / 组件 32 / 组件内 16 */
    --sec-gap: 64px;
    --block-gap: 32px;
    --comp-gap: 16px;
  }

  /* 正文字号显式锚定（引用 var 处自动随 token 走，此处兜底显式声明）
     v4.2 修复：原 body 选择器 (0,0,1) 与页面内联 body{16px} 同特异性且内联 <style>
     后于本文件 <link> 加载 → 实测 1440 档正文被钉回 16px（v4.2 基线量测证实）。
     html body (0,0,2) 压内联 body (0,0,1)，16.5px token 真正落地 */
  html body {
    font-size: var(--font-body);
  }

  /* ==================== 01 · topnav 顶栏 ====================
     A1 左轴：顶栏内容收进 1440 容器并吃 56px 页边距，与 main 内容左缘同轴；
     原 padding 直接挂在 .topnav 上，>1440 视口时顶栏内容与正文轴错位 */
  body .topnav {
    padding-left: 0;
    padding-right: 0;
  }
  body .topnav-in {
    max-width: var(--maxw);
    margin: 0 auto;
    padding-left: var(--page-x);
    padding-right: var(--page-x);
  }
  /* 导航全展开：桌面永不出现汉堡（common 本就仅 ≤480 显示，此处钉死） */
  body .topnav .hamburger {
    display: none;
  }

  /* ---- 组件级覆盖：页面内联硬编码 px 不消费 token，以 (0,1,1) 压制 ----
     全部规则仅 ≥1024px 生效；移动档内联媒体查询（≤768/≤480/≤380）与本层互斥 */

  /* 页边距：内联 .wrap{padding:0 32px / 0 var(--page-x)} → 统一锚定 56px token */
  body .wrap {
    padding-left: var(--page-x);
    padding-right: var(--page-x);
  }

  /* 标题阶梯：内联 h1{44px} / h2{24px} / h3{19px} → 1.3 比率 token */
  main h1 { font-size: var(--font-h1); }
  main h2 { font-size: var(--font-h2); }
  main h3 { font-size: var(--font-h3); font-family: var(--serif); }

  /* 栅格间距：内联 .grid{gap:28px} → 32px token */
  body .grid {
    gap: var(--grid-gap);
  }

  /* ==================== 02 · hero 封面（22 页 · :has 作用域） ====================
     :has(.hero-img) 圈定封面 hero；daily 等纯文字 hero 不受影响 */
  body header.hero:has(.hero-img) {
    min-height: 600px;
  }
  /* display 54px（待确认①默认案，仅服务 hero 不动全局阶梯） */
  body header.hero:has(.hero-img) h1 {
    font-size: 54px;
  }
  /* 遮罩与标题层级强化：底部压暗 +0.05，标题/导语加轻投影提可读性 */
  body header.hero:has(.hero-img) .hero-scrim {
    background: linear-gradient(180deg, rgba(21,19,17,.20) 0%, rgba(21,19,17,.12) 35%, rgba(21,19,17,.80) 100%);
  }
  body header.hero:has(.hero-img) .hero-title,
  body header.hero:has(.hero-img) .hero-sub {
    text-shadow: 0 1px 14px rgba(0,0,0,.35);
  }
  /* wave3 修复①：纯文字 hero（无 .hero-img，仅 daily index/item 两页命中）h1 归 token 35px——
     压页面内联 h1{clamp(28px,4vw,44px)}（1024 档实测 40.96px、1440 档 44px，超出 1.3 比率阶梯）；
     封面 hero 由上方 54px 规则服务不受影响；仅桌面断点生效，移动档 clamp 下限 28px 不变 */
  body header.hero:not(:has(.hero-img)) h1 {
    font-size: var(--font-h1);
  }

  /* ==================== 03 · sec-head 章节系统 ====================
     A3 基线对齐 + W1 归属比；压制野生 clamp() 与 flex-wrap 杂写 */
  body .sec-head {
    align-items: baseline;
    flex-wrap: nowrap;
    margin-bottom: 32px;
  }
  body .sec-head h2 {
    font-size: var(--font-h2);
    min-width: 0;
    overflow-wrap: anywhere;  /* nowrap 防溢出保险丝，仅在将溢出时断行 */
  }
  /* h2 27px 强压制：section h2 / main h2 / .sec-head h2 三级野生写法一并归 token */
  body h2,
  body section h2,
  body main h2 {
    font-size: var(--font-h2);
  }

  /* ==================== 04 · pcard / card 卡片栅格 ====================
     A2：4 列等宽、gap 恒 32、末行 mod4=2 居中补位（mod4=1/3 守左轴） */
  body .grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  body .grid > *:nth-child(4n+1):nth-last-child(2) {
    grid-column-start: 2;
  }
  /* ritz  FAIL 修复：.cards 桌面 display:block 竖排 → 4 列横排（补 display 声明） */
  body .cards {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--grid-gap);
  }
  body .cards > *:nth-child(4n+1):nth-last-child(2) {
    grid-column-start: 2;
  }
  body .chapters {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  /* 卡族栅格 gap 归 32 token（stats/chapters 的 1px 发丝网格是刻意设计，不动） */
  body .principles,
  body .facts,
  body .fact-grid,
  body .point-grid,
  body .colls-quotes,
  body .quotes,
  body .quote-grid,
  body .grid-2,
  body .fig-grid {
    gap: var(--grid-gap);
  }
  /* hover 微浮起 + 阴影（桌面独享，触屏无 hover 不受影响） */
  body .card,
  body .pcard {
    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
  }
  body .card:hover,
  body .pcard:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 24px rgba(21,21,21,.08);
  }
  /* wave3 修复③：fanho 作品卡 figure.shot 非 .card/.pcard 类，吃不到上方 hover 体系——
     补同一组微浮起+阴影反馈（内联 figure.shot:hover img{scale(1.025)} 图内缩放保留叠加）；
     transition 显式带 opacity .35s 兼容内联过滤渐隐；仅桌面断点，触屏无 hover 零副作用 */
  body figure.shot {
    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease, opacity .35s;
  }
  body figure.shot:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 24px rgba(21,21,21,.08);
    border-color: #D8CBB8;
  }

  /* ==================== 05 · table 表格 ====================
     默认案②：全容器宽（width:100% 随容器，天然成立）
     v4.2：行距 10→12px（--sp 标尺），收录信息类元数据网格呼吸；字号/层级见文末 v4.2 层 */
  body th,
  body td {
    padding: var(--sp-3) var(--sp-4);
  }

  /* ==================== 06 · tl 时间线（11 页 .tl + xieke .timeline 同构） ====================
     v6.0 重构（桌面组件波 · 任务一）：废「左右交错中线式」（nth-child 奇左偶右
     calc(50% - 44px)、圆点贴中轴）→「固定年份列 + 单侧竖线」式。
     布局几何（全部显式算式，禁经验值）：
       年份列宽      96px（最长年份串 "1996–2000"/"1968 / 1994" ≈ 74~78px
                    @14px serif + .08em 字距，96px 有余量；white-space:nowrap 兜底）
       年份→竖线缝   16px = var(--sp-4)
       竖线          2px 宽，left = 96 + 16 = 112px（线中心 113px）
       竖线→内容缝   32px = var(--sp-8)
       内容左缘      padding-left = 96 + 16 + 2 + 32 = 146px
       年份行盒      line-height 24px = var(--sp-6)，显式钉死使圆点 top 可计算
       圆点外径      10px（width/height 10 + border-box；内联 9px/1.5px 与 10px/2px
                    两轨归一，border-width 归 2px，颜色不碰）
       圆点 top      = (年份行盒 24 − 圆点外径 10) / 2 = 7px（与年份行垂直居中）
       圆点 left     = 竖线中心 113 − 圆点半径 5 = 108px（圆心压竖线中心）
     标题首行与年份行同高：h4{margin-top:0; line-height:24px} → 年份→圆点→标题
     三者同一水平带。条目间距内联 30px / 桌面旧 32px / xieke padding-26px 三轨
     → --sp-6 = 24px 归一。
     特异性：body 前缀 (0,1,1)~(0,2,1) 压各页内联 (0,1,0)~(0,2,0)；
     hot 强调色（内联 .tl-item.hot::before (0,2,1)）与 dark-sec 暗色（common.css
     (0,2,1) 系列）只声明颜色、特异性更高 → 几何归一后颜色自动保留，零冲突。 */
  body .tl,
  body .timeline {
    border-left: none;
    padding-left: 0;
    position: relative;
  }
  body .tl::before,
  body .timeline::before {
    content: "";
    position: absolute;
    top: 6px;
    bottom: 6px;
    left: 112px;              /* = 年份列 96 + 缝 16 */
    width: 2px;
    background: var(--line);
  }
  body .dark-sec .tl::before,
  body .dark-sec .timeline::before {
    background: #3a352d;
  }
  body .tl-item {
    width: 100%;
    margin: 0 0 var(--sp-6);  /* 三轨 → 24px 归一；xieke padding:0 0 26px 同被下句压掉 */
    padding: 0 0 0 146px;     /* = 年份列 96 + 缝 16 + 竖线 2 + 缝 32 */
  }
  body .tl-item:last-child {
    margin-bottom: 0;
  }
  /* 圆点几何归一：外径 10px、圆心 (113px, 12px)；颜色/bg/hot 全不碰 */
  body .tl-item::before {
    left: 108px;              /* = 竖线中心 113 − 圆点半径 5 */
    top: 7px;                 /* = (年份行盒 24 − 外径 10) / 2 */
    width: 10px;
    height: 10px;
    border-width: 2px;
  }
  /* 固定年份列：左置绝对定位、右对齐贴竖线；.yr 为 xieke 变体同年份位 */
  body .tl-when,
  body .tl-item .yr {
    position: absolute;
    left: 0;
    top: 0;
    width: 96px;
    text-align: right;
    line-height: 24px;        /* 行盒钉死：圆点 top 算式的分母 */
    white-space: nowrap;
  }
  body .tl-item h4 {
    margin-top: 0;            /* 拆内联 4px 顶距，标题首行与年份行同起 */
    line-height: 24px;        /* 与年份行盒同高 → 三者同一水平带 */
  }

  /* ==================== 07 · chip / tag 徽标族 ====================
     v4.0.5 对齐补丁已修双端，本层不做改动，仅回归验证 */

  /* ==================== 08 · ss-rel 相关推荐（辅级降权） ====================
     默认案③：4 列栅格 + 标题降一档 21px + 弱边框无阴影
     附：ss-net 知识网络桌面基底补齐（修复全站 >900px 无样式 bug） */
  body .ss-net-inner {
    padding: 40px 0 0;
    /* v6.0 任务三修：内联 .ss-net-inner{border:1px solid #E6E2DA; background:#EBE7DC}
       的米色全边框盒子残留——本节设计意图本是「顶部分隔线」，先 border:0 清四边
       再单留顶线，背景归透明（border-box 盒子同时造成底缘贴内容问题一并消除） */
    border: 0;
    border-top: 1px solid var(--line);
    background: transparent;
  }
  body .ss-net-head h2 {
    font-size: var(--font-h3);
  }
  /* v6.0 任务三 · ss-net 内部节奏逐项定死（--sp 标尺）：
     kicker→标题：内联 margin-top:10px off-scale → 12px；
     head 块：内 padding 20 / 外 margin 26 双 off-scale → 24/24（分隔线上下对称呼吸）；
     标签行→案例行：内联 margin-bottom:26px off-scale → 24px；
     h2 以下 .ss-sub margin-top:8px = --sp-2 原样合规不动 */
  body .ss-net-head h2 {
    margin: var(--sp-3) 0 0;
  }
  /* kicker 归块：内联 <span> 受 head 匿名行盒 strut（body 16.5px×1.75）下拉，
     实测文本顶距漂移 +9px（40 设计值 → 50）；display:block 后盒顶 = 行盒顶，
     kicker→h2 间距也收敛到 margin-top:12px 精确值 */
  body .ss-net-kicker {
    display: block;
  }
  body .ss-net-head {
    margin-bottom: var(--sp-6);
    padding-bottom: var(--sp-6);
  }
  body .ss-tags-row {
    margin-bottom: var(--sp-6);
  }
  body .ss-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }
  body .ss-row-label {
    display: block;
    font-size: 13px;  /* v4.2：12→13px 辅助文字提档 */
    color: var(--sub);
    letter-spacing: .08em;
    margin-bottom: var(--sp-3);  /* v6.0 任务三：10px off-scale → 12px 标尺化 */
  }
  body .ss-rel-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: var(--grid-gap);
  }
  body .ss-rel-card {
    display: block;
    padding: var(--sp-5);  /* v4.2：16→20px 上下内距 +4，卡片呼吸 */
    border: 1px solid var(--line);
    box-shadow: none;
    background: transparent;
  }
  body .ss-rel-name {
    display: block;
    font-size: 15px;  /* v4.2：14→15px，与副文 13px 拉开层级 */
    font-weight: 600;
    color: var(--ink);
    margin-bottom: var(--sp-2);  /* v4.2：6→8px 标题与副文间距松开 */
  }
  body .ss-rel-note {
    display: block;
    font-size: 13px;  /* v4.2：12.5→13px */
    color: var(--sub);
    line-height: 1.8;  /* v4.2：1.6→1.8 小字行高提档 */
    margin-bottom: var(--sp-3);  /* v4.2：8→12px */
  }
  body .ss-rel-shared {
    display: block;
    font-size: 12px;  /* v4.2：11→12px 微标签地板 */
    color: var(--sub);
    letter-spacing: .04em;
  }
  body .ss-net-more {
    margin-top: var(--sp-6);  /* v6.0 任务三：20 → 24px，与带内行距同档（--sp-6） */
    font-size: 13px;
  }

  /* ==================== 09 · km-* 知识矩阵（tags 页） ====================
     2 列栅格化消灭长条单列；:has 圈定容器，零 DOM 改动 */
  body section:has(> .km-dim) {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 32px;
  }
  body section:has(> .km-dim) > .km-cloud-title {
    grid-column: 1 / -1;
  }
  body section:has(> .km-tag) {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 32px;
  }
  body section:has(> .km-tag) > .km-sec-head {
    grid-column: 1 / -1;
  }
  /* wave3 修复②：km-tag 是 <section>，吃 common.css section{max-width;margin:0 auto}——
     网格轨道内 auto 边距使 stretch 失效，卡片收缩成 fit-content（330~434px 参差）各漂各的；
     清零两侧 auto 边距与 max-width → 恢复 stretch 充满列轨道（左右边距恒 0，即在列内居中），
     45 张卡统一 648px 列宽、左右缘双对齐；仅桌面断点，移动档单列满宽原样 */
  body .km-tag {
    margin: 0 0 24px;
    max-width: none;
  }

  /* ==================== 10 · blockquote 引用 ====================
     A4 边缘对齐：引用左线与正文左缘对齐（去掉 24px 缩进）；引文 19px；琥珀左线保留 */
  body blockquote,
  body .bq {
    margin-left: 0;
  }
  body blockquote,
  body .pull {
    font-size: 19px;
  }

  /* ==================== 11 · 空容器猎杀（v6.0 桌面组件波 · 任务二） ====================
     ① 注释空 div：10 个摄影师页 content JSON 末尾各有一条 tag:div + 纯 HTML 注释
       content（穿透 build.py 空节过滤——注释 strip 后非空字符串），渲染为
       <div><!-- ===== SPACESENSE 知识网络 ===== --></div>（main 直系、无 class）。
       自身 0 高但污染 DOM、干扰节距审计；:empty 对含空白文本节点失效 →
       :not(:has(*)) 精确狙杀「无 class 且无任何子元素」的 main 直系 div——
       hero-scrim 等有类元素不受影响；fanho 同位 div 内含 <script>（:has(*) 命中）
       保留不动；JS 注入物 ss-progress/ss-pos 均有 class 且挂在 body 层，零误伤。
     ② 真空标题/导语：aman <h3></h3>（素材索引节）、callahan/fanho/ishimoto/katsura/
       shirai/tange 六页 <p class="sec-sub"></p> 为内容层残留（build 原样透传），
       白吃 h3 / sec-sub（内联 margin:0 0 34px）下边距形成节内空洞；
       :empty 仅匹配真空（无文本节点），有内容的同类元素零影响。 */
  body main > div:not([class]):not(:has(*)) {
    display: none;
  }
  body main h3:empty,
  body main p.sec-sub:empty {
    display: none;
  }

  /* ==================== 章节节奏与容器 ==================== */
  /* A1 左轴：main 侧距 24 → 56 token，与 hero/section/topnav 共用同一根轴 */
  body main {
    padding-left: var(--page-x);
    padding-right: var(--page-x);
  }

  /* 章节节奏：组间 48→64（组内 ~30，归属比 ≥2:1）；
     水平 padding 归零——56 轴由 main 单层提供，
     否则 common section{... var(--page-x)} 与 main 双倍叠加成 112 断轴 */
  body main > section {
    padding: 64px 0;
  }

  /* dark-sec 暗色带：带缘上轴（56 轴由 main 提供），带内 32px 内距呼吸——
     面板逻辑：容器边在轴上，内容可比轴内缩；压页面 .dark-sec{48px 20px} 野生写法 */
  body main > section.dark-sec {
    padding: 64px 32px;
  }

  /* ss-net 容器：压页面 max-width:1180 硬编码与 0 10/16/24px 侧距野生写法——
     辅级带左右缘 = 容器缘（A4），带缘上 56 轴。
     v6.0 任务三修：margin-top 64→0——原与前一节 padding-bottom:64 双倍叠加出
     128px 空洞（加 inner padding-top 40，kicker 前实测 168px）；节间距标准值
     64px（--sp-16）由前一节 padding-bottom 单层提供，ss-net 不再自带顶距 */
  body .ss-net {
    max-width: none;
    margin: 0;
    padding: 0;
  }

  /* 页脚节奏归一：内联 margin-top:88px → 64px（8pt 刻度）；侧距对齐左轴 */
  body footer {
    margin-top: 64px;
    padding-left: var(--page-x);
    padding-right: var(--page-x);
  }

  /* ==================== wave2 · P16 中文排版工程（桌面断点专用） ====================
     heti（赫蹏）v0.9.6 本地 vendor：assets/vendor/heti/（禁外链 CDN，站点自包含）。
     策略：JS（heti-addon）在桌面断点由 gallery-common.js 调用 autoSpacing() 完成
     中西文混排间距 + 全角标点挤压；不引入 heti 主题层（避免与 v5.0 设计系统冲突），
     以下 6 条功能规则摘自 vendor/heti/heti.min.css（仅匹配 JS 运行时注入的自定义
     元素 <heti-spacing>/<heti-adjacent>，与存量样式零耦合）：
       .heti heti-spacing{display:inline}
       .heti .heti-spacing-start{margin-inline-end:.25em}
       .heti .heti-spacing-end{margin-inline-start:.25em}
       .heti heti-adjacent{display:inline;text-spacing-trim:space-all;unicode-bidi:isolate}
       .heti .heti-adjacent-half{margin-inline-end:-0.5em}
       .heti .heti-adjacent-quarter{margin-inline-end:-0.25em}
     移动端：JS 不执行 → 无注入元素 → 以下规则零命中，移动档零影响。 */
  heti-spacing { display: inline; }
  .heti-spacing-start { margin-inline-end: .25em; }
  .heti-spacing-end { margin-inline-start: .25em; }
  heti-adjacent { display: inline; text-spacing-trim: space-all; unicode-bidi: isolate; }
  .heti-adjacent-half { margin-inline-end: -.5em; }
  .heti-adjacent-quarter { margin-inline-end: -.25em; }

  /* ═══════════════════════════════════════════════════════
     v2 波一 · 桌面组件标准（§3 + §5 + §6）
     ═══════════════════════════════════════════════════════ */

  /* v2 §6 三级节奏 · h3 serif 确认（修复 #18） */
  /* h3 serif 已在上方 h3 规则中声明；h4 保持 sans，两者视觉明显不同 */

  /* v2 §3.1 图组桌面：3 列 + 跨栏 */
  body .gallery {
    grid-template-columns: repeat(3, 1fr);
  }
  body .gallery:has(.span7),
  body .gallery:has(.span5) {
    grid-template-columns: repeat(12, 1fr);
  }

  /* v2 §3.2 特征卡桌面：4 列（已由上方 §04 定义，此处确认不重复声明） */
  /* .cards grid: repeat(4, minmax(0, 1fr)) — section 04 */
  /* 末行残卡 mod4=2 居中 — section 04 */

  /* v2 §3.5 引文桌面：3 列封顶（修复 #9） */
  body .quote-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  /* v2 §3.3 表格：列宽档位桌面确认 */
  body .table-scroll .col-num,
  body .table-wrap .col-num { width: 56px; }
  body .table-scroll .col-name,
  body .table-wrap .col-name { width: 200px; }
  body .table-scroll .col-short,
  body .table-wrap .col-short { width: 120px; }
  body .table-scroll .col-mid,
  body .table-wrap .col-mid { width: 220px; }

  /* v2 §3.4 时间轴桌面几何确认（v6.0 已在上方定义，此处不重复） */
  /* 确认值：年份列 96px / 竖线 left=112px / 内容 padding-left=146px */

  /* v2 §5.3 字距桌面确认 */
  body .hero-kicker, body .sec-kicker {
    letter-spacing: .15em;
  }

    /* v4.2 回退（2026-09-01 主人实拍确认）：P16 两端对齐在 CJK+拉丁混排、无断词机制下
     强行撑满行 → 字间缝忽大忽小、"段落有长有短十分奇怪"（shangchengshi 文案叙事章节实证）。
     CJK 混排不做网页 justify：恢复左对齐；line-break:strict 禁则仍在 common.css 生效不动。
     显式声明 left 而非删除规则：文档化意图 + 防任何后续 justify 来源 */
  body main section p {
    text-align: left;
  }
}
/* ── v4.1 桌面排版呼吸（2026-09-01 主人：分节段落太近/文字过密） ──
   仅桌面生效（本文件 ≥1024px 才加载）；移动端由 common.css 原节奏接管，物理隔离零影响。
   标准：对齐/比例/间距/层次——间距档位沿用全站 --sp 标尺，不发明新数值 */
main section { padding-top: var(--sp-16); padding-bottom: var(--sp-16); }   /* 章节上下 48→64px：分节呼吸 */
main section p { margin-bottom: var(--sp-5); }                                /* 段落间距 16→20px（.prose p 维持 24px 不变） */
main section ul, main section ol { margin: var(--sp-4) 0 var(--sp-5); }       /* 列表块整体上下留白 */
main section li + li { margin-top: var(--sp-2); }                             /* 列表项间 +8px */
/* ── v4.2 桌面字号节奏（2026-09-01 主人连续两次：文字很密集、桌面多位置看得难受） ──
   仅桌面生效（本文件 <link media="(min-width:1024px)"> 物理隔离，移动档零影响，与 v4.1 同构）。
   主人标准：对齐/比例/间距/层次；画廊=信息密集知识站——密度靠结构出，不靠挤压出。
   间距一律沿用 --sp 标尺（4/8/12/16/20/24/32/40/48/64），不发明新数值。
   特异性依据：页面内联 <style> 位于本文件 <link> 之后，同特异性内联必胜——
   本层全部选择器加 body 前缀提一档：类规则 (0,1,2)~(0,2,3) 压内联 (0,1,1)~(0,2,2)；
   元素规则 (0,0,2)/(0,0,3) 压内联/common (0,0,1)。 */

/* R2 卡片/时间线正文 13.5→14.5px；小字行高 1.7→1.8 */
body .pcard p { font-size: 14.5px; line-height: 1.8; }
body .tl-item p { font-size: 14.5px; line-height: 1.8; }
body .callout { font-size: 14.5px; }        /* 14→14.5，lh 1.8 原样 */
body .gaps li { font-size: 14.5px; }        /* 14→14.5，列表正文与卡族同档 */

/* R3 卡片节奏：pcard 上下内距 22/20→24px（+4~2），标题 16→17px 与副文 14.5 拉开，
     标题与副文间距 8→12px 松开 */
body .pcard { padding: var(--sp-6) 22px; }
body .pcard h4 { font-size: 17px; margin: var(--sp-2) 0 var(--sp-3); }

/* R4 元数据网格（收录信息表）：字号归 14.5/13，label/value 层级拉开——
     common.css td{font-size:15px}/th{font-size:12px} 钉桩以 (0,0,3) 压过；
     value 柔一档 #4a463f（与 pcard 正文同色），label 列保持浓墨 600 */
body main table { font-size: 14.5px; }
body main td { font-size: 14.5px; line-height: 1.7; color: #4a463f; }
body main th { font-size: 13px; }
body main td:first-child { color: var(--ink); }
/* R4b 内联样式单元格治理：callahan/fanho/ishimoto/katsura/shirai/tange 六页档案表
   td/th 带 style="padding:8px 12px / 10px 12px; line-height:1.6" 手写钉桩（319 处），
   常规选择器永远压不过内联样式属性 → 桌面 !important 特赦，仅限带 style 的单元格；
   移动档本文件不加载，内联钉桩原样存活，零回归 */
body main td[style], body main th[style] {
  padding: var(--sp-3) var(--sp-4) !important;
  line-height: 1.7 !important;
}

/* R5 ss-net 知识网络带补充（卡/行标签/副文已原地改于 08 节）：
     kicker 11→12px；标签胶囊 12/13→统一 13px、内距 6/15→8/16 呼吸 */
body .ss-net-kicker { font-size: 12px; }
body .ss-tag { font-size: 13px; padding: var(--sp-2) var(--sp-4); }
/* 页脚辅助文字归 13px
   （实测页脚继承 16px），index/compare 12.5/12.8px——桌面统一 13px */
body footer { font-size: 13px; }

/* R6 总览卡阵（index .card 族，主人证据图同款）：desc 14→14.5、foot/go 12→13、
     case-no 11→12；foot 加 8px 间隙防两端元素挤行 */
body .card .desc { font-size: 14.5px; }
body .card .foot, body .card .go { font-size: 13px; }
body .card .foot { gap: var(--sp-2); }
body .card .case-no { font-size: 12px; }

/* R7 compare 矩阵页小字归队：列表/结论正文 →14.5 + 行高 1.75/1.8；
     辅助文字 12.5→13；微标签地板 12（ax-range 11.5、spec-end 10.5） */
body .vcard li, body .learn-card li, body .concl p { font-size: 14.5px; }
body .vcard li, body .learn-card li { line-height: 1.75; }
body .concl p { line-height: 1.8; }
body .note { font-size: 14.5px; }
body .spectrum-note, body .spec-legend, body .spectrum .sp-sub,
body .pos-card .tag, body blockquote.q footer { font-size: 13px; }
body .sec-kicker, body .pos-card .nm small { font-size: 13px; }
body .spec-axis .ax-range, body .spec-end { font-size: 12px; }

/* R8 fanho 作品图注：12.5/1.6→13/1.7；图注微标签 11→12；筛选按钮 12.5→13 */
body figure.shot figcaption { font-size: 13px; line-height: 1.7; }
body figure.shot figcaption .cap-tag, body figure.shot figcaption .src { font-size: 12px; }
body .tag-filter button { font-size: 13px; }
