/* === Block 0 === */
:root{
    /* ============ 主题色(默认: 🔵 克莱因蓝 IKB) ============
       切换主题: 从 references/themes-swiss.md 复制对应的 :root 块
       整体替换标有"主题色"注释的所有变量,其他散落的 var() 引用无需逐处改 */
    --paper:#fafaf8;          /* 主底色: 高级灰白 */
    --paper-rgb:250,250,248;
    --ink:#0a0a0a;            /* 文字主色: 近黑 */
    --ink-rgb:10,10,10;
    --grey-1:#f0f0ee;         /* 浅灰底 */
    --grey-2:#d4d4d2;         /* 中灰(分割线) */
    --grey-3:#737373;         /* 暗灰(辅助文字) */
    --accent:#002FA7;         /* 高亮色: 克莱因蓝 IKB */
    --accent-rgb:0,47,167;
    --accent-on:#ffffff;      /* accent 上的反色文字 */
    --accent-bright:#5B7BFF;  /* 亮底辅助高亮: IKB 提亮版 */
    --dark-emphasis:#FFD166;  /* 暗底正文高亮: 琥珀色 */

    /* ============ Carbon 文本角色 token (role-based,代替 opacity) ============
       亮底:  primary 主文 / secondary 次文 / helper 辅助 / placeholder 占位
       暗底:  inverse 自动反向 */
    --text-primary:#0a0a0a;        /* = ink, 100% */
    --text-secondary:#525252;      /* gray 70 */
    --text-helper:#737373;         /* gray 60 */
    --text-placeholder:#a3a3a3;    /* gray 40 */
    --text-on-color:#ffffff;       /* accent/dark 反色 */
    --border-subtle:#e0e0e0;       /* gray 20, 极细分隔 */
    --border-strong:#a3a3a3;       /* gray 40, 强分隔 */

    /* ============ 字体(跨主题固定) ============ */
    --sans:"Inter","Helvetica Neue","Helvetica","Arial","Segoe UI Variable","Segoe UI",system-ui,-apple-system,sans-serif;
    --sans-zh:"PingFang SC","Hiragino Sans GB","Source Han Sans SC","Noto Sans SC","Microsoft YaHei UI","Microsoft YaHei","微软雅黑",sans-serif;
    --mono:"JetBrains Mono","IBM Plex Mono","SF Mono","Cascadia Code","Consolas","Courier New",ui-monospace,monospace;

    /* ============ Carbon 2x Grid 间距模数 (基础 8px) ============
       参考: https://carbondesignsystem.com/elements/2x-grid/overview/
       任何 padding/gap/margin 优先用这套 token,确保 8px 基线对齐 */
    --sp-3:8px;     /* 02 token */
    --sp-4:12px;    /* 03 */
    --sp-5:16px;    /* 04 */
    --sp-6:24px;    /* 05 */
    --sp-7:32px;    /* 06 */
    --sp-8:40px;    /* 07 */
    --sp-9:48px;    /* 08 */
    --sp-10:64px;   /* 09 */
    --sp-11:80px;   /* 10 */
    --sp-12:96px;   /* 11 */
    --sp-13:160px;  /* 12 */

    /* ============ Carbon Motion tokens ============
       https://carbondesignsystem.com/guidelines/motion/overview/
       两套体系:productive (功能) 短 + 锐 / expressive (叙事) 长 + 软 */
    --ease-prod:cubic-bezier(.2,0,.38,.9);          /* productive standard */
    --ease-exp:cubic-bezier(.4,.14,.3,1);            /* expressive standard */
    --ease-entry-prod:cubic-bezier(0,0,.38,.9);     /* productive entrance */
    --ease-entry-exp:cubic-bezier(0,0,.3,1);         /* expressive entrance */
    --dur-fast-1:.07s;   /* 70ms */
    --dur-fast-2:.11s;   /* 110ms */
    --dur-mod-1:.15s;    /* 150ms */
    --dur-mod-2:.24s;    /* 240ms */
    --dur-slow-1:.4s;    /* 400ms */
    --dur-slow-2:.7s;    /* 700ms */

    /* 底部分页组件安全区: 主内容最低处不要进入这条区域 */
    --nav-safe-bottom:8vh;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  html,body{
    width:100%;height:100%;overflow:hidden;
    background:var(--paper);color:var(--ink);
    font-family:var(--sans),var(--sans-zh);
    font-feature-settings:"ss01","cv11";
    -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility
  }

  /* ============ WebGL 网格背景 ============ */
  canvas.bg{position:fixed;inset:0;width:100vw;height:100vh;z-index:0;display:block;opacity:.55;mix-blend-mode:multiply;pointer-events:none}
  body.dark-bg canvas.bg{mix-blend-mode:screen;opacity:.42}
  body.low-power canvas.bg,
  body.low-power canvas.ascii-bg{display:none!important}

  /* ============ Deck 容器 + 翻页 ============ */
  #deck{position:fixed;inset:0;width:10000vw;height:100vh;display:flex;flex-wrap:nowrap;transition:transform .9s cubic-bezier(.77,0,.175,1);z-index:10;will-change:transform}
  .slide{
    width:100vw;height:100vh;flex:0 0 100vw;
    position:relative;
    padding:5.5vh 5vw 7vh 5vw;
    display:flex;flex-direction:column;
    overflow:hidden;
    background:var(--paper);color:var(--ink);
  }
  .slide.grey{background:var(--grey-1)}
  .slide.dark{background:var(--ink);color:var(--paper)}
  .slide.dark .grey-only{display:none}
  .slide.accent{background:var(--accent);color:var(--accent-on)}
  .slide.accent .accent-block{background:var(--accent-on);color:var(--accent)}

  /* Hero 页透出网格背景多一点 */
  .slide.hero{background:transparent}
  .slide.hero.grey{background:rgba(var(--paper-rgb),.86);backdrop-filter:blur(1px)}
  .slide.hero.dark{background:rgba(var(--ink-rgb),.92);color:var(--paper)}

  /* ============ 装饰: 极细分隔线 + 点阵矩阵 ============ */
  .rule{width:100%;height:1px;background:currentColor;opacity:.18;margin:0}
  .rule.thick{height:2px;opacity:.85}
  .rule.accent{background:var(--accent);opacity:1;height:2px}
  .rule.v{width:1px;height:100%;margin:0}

  /* 点阵矩阵 (dot matrix) - 用 radial-gradient */
  .dots{
    background-image:radial-gradient(currentColor 1px, transparent 1px);
    background-size:12px 12px;
    background-position:0 0;
    opacity:.18;
  }
  .dots-fine{
    background-image:radial-gradient(currentColor 0.8px, transparent 0.8px);
    background-size:8px 8px;
    opacity:.14;
  }
  .dots-bold{
    background-image:radial-gradient(currentColor 1.4px, transparent 1.4px);
    background-size:18px 18px;
    opacity:.22;
  }

  /* ============ Chrome (顶部 meta) + Foot (底部) ============ */
  .chrome{
    display:flex;justify-content:space-between;align-items:flex-start;
    font-family:var(--mono);
    font-size:11px;letter-spacing:.16em;text-transform:uppercase;
    opacity:.7;margin-bottom:auto
  }
  .chrome .l,.chrome .r{display:flex;gap:1.6em;align-items:center}
  .chrome .sep{width:24px;height:1px;background:currentColor;opacity:.5}

  .foot{
    margin-top:auto;
    display:flex;justify-content:space-between;align-items:flex-end;
    font-family:var(--mono);
    font-size:11px;letter-spacing:.14em;text-transform:uppercase;
    opacity:.55;
    padding-top:2vh;
    border-top:1px solid currentColor;
    border-color:rgba(127,127,127,.25)
  }
  .foot .nb{font-family:var(--sans);font-weight:600;letter-spacing:.04em}

  /* ============ Tag / Kicker / Meta 标签 ============ */
  .kicker{
    font-family:var(--mono);
    font-size:11px;letter-spacing:.28em;text-transform:uppercase;
    opacity:.65;margin-bottom:2.4vh;
    display:inline-flex;align-items:center;gap:.8em
  }
  .kicker::before{
    content:"";width:24px;height:1px;background:currentColor;opacity:.6
  }
  .kicker.no-line::before{display:none}
  .kicker.accent{color:var(--accent);opacity:1;font-weight:600}

  .tag{
    display:inline-block;
    font-family:var(--mono);
    font-size:10px;letter-spacing:.22em;text-transform:uppercase;
    padding:5px 10px;border:1px solid currentColor;opacity:.85
  }
  .tag.solid{background:currentColor;color:var(--paper);border-color:transparent}
  .tag.accent{background:var(--accent);color:var(--accent-on);border-color:transparent;opacity:1}

  /* ============ 标题层级 (无衬线 · 极轻字重 · 极致字号对比) ============ */
  .h-hero{
    font-family:var(--sans),var(--sans-zh);
    font-weight:200;
    font-size:11vw;
    line-height:.92;
    letter-spacing:-.04em;
  }
  .h-hero-zh{
    font-family:var(--sans),var(--sans-zh);
    font-weight:200;
    font-size:8.4vw;
    line-height:.96;
    letter-spacing:-.025em;
  }
  .h-xl{
    font-family:var(--sans),var(--sans-zh);
    font-weight:200;
    font-size:6vw;
    line-height:1;
    letter-spacing:-.03em;
  }
  .h-xl-zh{
    font-family:var(--sans),var(--sans-zh);
    font-weight:200;
    font-size:5vw;
    line-height:1.05;
    letter-spacing:-.025em;
  }
  .h-md{
    font-family:var(--sans),var(--sans-zh);
    font-weight:300;
    font-size:2.6vw;
    line-height:1.18;
    letter-spacing:-.015em;
  }
  .h-sub{
    font-family:var(--sans),var(--sans-zh);
    font-weight:400;
    font-size:2.2vw;
    line-height:1.3;
    letter-spacing:-.01em;
    opacity:.7;
  }

  /* ============ 正文 / 引语 / 元数据 ============ */
  .lead{
    font-family:var(--sans),var(--sans-zh);
    font-weight:400;
    font-size:1.55vw;
    line-height:1.4;
    letter-spacing:-.005em;
    opacity:.86;
  }
  .body{
    font-family:var(--sans),var(--sans-zh);
    font-weight:400;
    font-size:max(13px,1.05vw);
    line-height:1.6;
    letter-spacing:0;
    opacity:.78;
  }
  .body-sm{
    font-family:var(--sans),var(--sans-zh);
    font-weight:400;
    font-size:max(11px,.84vw);
    line-height:1.55;
    opacity:.7;
  }
  .meta{
    font-family:var(--mono);
    font-size:max(10px,.78vw);
    letter-spacing:.18em;text-transform:uppercase;
    opacity:.6;
  }
  .meta-row{
    display:flex;gap:1.4em;align-items:baseline;flex-wrap:wrap;
    font-family:var(--mono);
    font-size:max(11px,.85vw);letter-spacing:.18em;text-transform:uppercase;
    opacity:.65;
  }
  .meta-row span:not(.dot){display:inline-block}
  .meta-row .dot{
    display:inline-block;width:4px;height:4px;border-radius:50%;
    background:currentColor;opacity:.5;vertical-align:middle
  }

  /* ============ KPI Hero (视觉英雄数据) ============ */
  .kpi-hero{
    font-family:var(--sans);
    font-weight:800;
    font-size:22vw;
    line-height:.82;
    letter-spacing:-.05em;
    font-feature-settings:"tnum","ss01";
  }
  .kpi-hero .unit{
    font-family:var(--sans),var(--sans-zh);
    font-weight:500;
    font-size:.18em;
    letter-spacing:0;
    opacity:.5;
    margin-left:.12em;
    vertical-align:.5em;
  }
  .kpi-hero.accent{color:var(--accent)}
  .kpi-big{
    font-family:var(--sans);
    font-weight:800;
    font-size:11vw;
    line-height:.85;
    letter-spacing:-.04em;
    font-feature-settings:"tnum"
  }
  .kpi-mid{
    font-family:var(--sans);
    font-weight:700;
    font-size:6vw;
    line-height:.88;
    letter-spacing:-.03em;
    font-feature-settings:"tnum"
  }

  /* ============ Stat Card (数据卡片 · 极简) ============ */
  .stat-card{
    display:flex;flex-direction:column;
    gap:.6vh;align-items:flex-start;
    padding-top:1.6vh;
    border-top:2px solid currentColor;
  }
  .stat-card.thin{border-top-width:1px;border-color:rgba(127,127,127,.4)}
  .stat-card.accent-top{border-top-color:var(--accent);border-top-width:3px}
  .stat-card .stat-label{
    font-family:var(--mono);
    font-size:max(10px,.78vw);
    letter-spacing:.24em;text-transform:uppercase;
    opacity:.6;
  }
  .stat-card .stat-nb{
    font-family:var(--sans);
    font-weight:800;
    font-size:5.6vw;
    line-height:.88;
    letter-spacing:-.035em;
    font-feature-settings:"tnum";
    margin-top:.4vh;
  }
  .stat-card .stat-nb .stat-unit{
    font-family:var(--sans),var(--sans-zh);
    font-weight:500;
    font-size:.32em;
    letter-spacing:0;
    opacity:.6;
    margin-left:.14em;
    vertical-align:.4em;
  }
  .stat-card .stat-note{
    font-family:var(--sans),var(--sans-zh);
    font-weight:400;
    font-size:max(12px,.95vw);
    line-height:1.5;
    opacity:.7;
    margin-top:.6vh;
  }
  .grid-4 .stat-card .stat-nb{font-size:4.6vw}
  .grid-3 .stat-card .stat-nb{font-size:6.4vw}
  .grid-6 .stat-card .stat-nb{font-size:4vw}

  /* ============ Accent Block (高亮色块包裹内容) ============ */
  .accent-block{
    background:var(--accent);color:var(--accent-on);
    padding:2.4vh 2vw;
  }
  .accent-block.tight{padding:1.4vh 1.4vw}
  .accent-block .h-md,.accent-block .h-xl,.accent-block .kpi-mid{color:var(--accent-on)}

  .ink-block{
    background:var(--ink);color:var(--paper);
    padding:2.4vh 2vw
  }
  .grey-block{
    background:var(--grey-1);
    padding:2.4vh 2vw
  }

  /* 高亮文字 (mark 风格) */
  .mark{
    background:var(--accent);color:var(--accent-on);
    padding:0 .2em;
    box-decoration-break:clone;
    -webkit-box-decoration-break:clone;
  }
  .mark.ink{background:var(--ink);color:var(--paper)}
  .underline-accent{
    background-image:linear-gradient(to bottom, transparent 70%, var(--accent) 70%, var(--accent) 96%, transparent 96%);
    padding:0 .05em
  }

  /* ============ Pipeline / Step ============ */
  .pipeline-section{margin-top:3.2vh;padding-top:2.2vh;border-top:1px solid rgba(127,127,127,.3)}
  .pipeline-section:first-of-type{border-top:0;padding-top:0;margin-top:2.4vh}
  .pipeline-label{
    font-family:var(--mono);
    font-size:max(10px,.82vw);
    letter-spacing:.24em;text-transform:uppercase;
    opacity:.6;margin-bottom:1.8vh;
  }
  .pipeline{
    display:grid;
    grid-template-columns:repeat(5,1fr);
    gap:1vw;
  }
  .pipeline[data-cols="3"]{grid-template-columns:repeat(3,1fr)}
  .pipeline[data-cols="4"]{grid-template-columns:repeat(4,1fr)}
  .pipeline[data-cols="6"]{grid-template-columns:repeat(6,1fr)}
  .step{
    display:flex;flex-direction:column;gap:.6vh;
    padding-top:1.2vh;
    border-top:2px solid currentColor;
  }
  .step.accent-top{border-top-color:var(--accent);border-top-width:3px}
  .step-nb{
    font-family:var(--mono);
    font-weight:500;
    font-size:1vw;
    opacity:.5;letter-spacing:.04em
  }
  .step-title{
    font-family:var(--sans),var(--sans-zh);
    font-weight:700;
    font-size:1.4vw;
    letter-spacing:-.01em;
    line-height:1.2;
  }
  .step-desc{
    font-family:var(--sans),var(--sans-zh);
    font-weight:400;
    font-size:max(11px,.88vw);
    line-height:1.45;
    opacity:.7;
  }

  /* ============ 网格系统 (模块化网格) ============ */
  .frame{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}
  .frame.grid-2-7-5,
  .frame.grid-2-6-6,
  .frame.grid-2-8-4,
  .frame.grid-2-4-8,
  .frame.grid-3-3,
  .frame.grid-12,
  .frame.grid-6,
  .frame.grid-4,
  .frame.grid-3{display:grid}

  /* 12 列模块化网格 (瑞士风核心) */
  .grid-12{
    display:grid;
    grid-template-columns:repeat(12,1fr);
    gap:2vh 1.2vw;
    align-items:start;
  }
  .span-2{grid-column:span 2}
  .span-3{grid-column:span 3}
  .span-4{grid-column:span 4}
  .span-5{grid-column:span 5}
  .span-6{grid-column:span 6}
  .span-7{grid-column:span 7}
  .span-8{grid-column:span 8}
  .span-9{grid-column:span 9}
  .span-12{grid-column:span 12}

  /* 经典分栏 */
  .grid-2-7-5{display:grid;grid-template-columns:7fr 5fr;gap:3vw 4vh;align-items:start}
  .grid-2-6-6{display:grid;grid-template-columns:1fr 1fr;gap:3vw 4vh;align-items:start}
  .grid-2-8-4{display:grid;grid-template-columns:8fr 4fr;gap:3vw 4vh;align-items:start}
  .grid-2-4-8{display:grid;grid-template-columns:4fr 8fr;gap:3vw 4vh;align-items:start}
  .grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:3vw 4vh;align-items:start}
  .grid-3-3{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:minmax(0,1fr);gap:2.4vh 2vw}
  .grid-4{display:grid;grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr);gap:3vh 3vw;flex:1;align-content:center}
  .grid-6{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,1fr);gap:3vh 2.4vw;flex:1;align-content:center}

  /* 工具类 */
  .col{display:flex;flex-direction:column;gap:2vh}
  .row{display:flex;align-items:center;gap:2vw}
  .fill{flex:1}
  .center{align-items:center;justify-content:center;text-align:center}
  .right{text-align:right;justify-self:end}
  .top{align-self:start}
  .bottom{align-self:end}
  .va-center{align-self:center}
  .nowrap{white-space:nowrap}

  /* 非对称定位 */
  .pos-absolute{position:absolute}
  .bottom-left{position:absolute;left:5vw;bottom:8vh;max-width:50vw}
  .bottom-right{position:absolute;right:5vw;bottom:8vh;max-width:50vw;text-align:right}
  .top-right{position:absolute;right:5vw;top:5.5vh;text-align:right}
  .top-left{position:absolute;left:5vw;top:5.5vh}

  /* ============ Callout (引用框 · 极简) ============ */
  .callout{
    padding:2vh 2vw;
    border-left:3px solid var(--accent);
    font-family:var(--sans),var(--sans-zh);
    font-size:max(13px,1vw);
    line-height:1.55;
    opacity:.9;
  }
  .callout.ink{border-left-color:currentColor}
  .callout .cite,.callout .callout-src{
    display:block;margin-top:1.2vh;
    font-family:var(--mono);
    font-size:10px;letter-spacing:.2em;text-transform:uppercase;
    opacity:.6;
  }

  .ico-lg{width:2.4vw;height:2.4vw;stroke-width:1.4;display:inline-block}
  .ico-md{width:1.6vw;height:1.6vw;stroke-width:1.6;display:inline-block;vertical-align:-.4em}
  .ico-sm{width:1vw;height:1vw;stroke-width:1.8;display:inline-block;vertical-align:-.15em;opacity:.7}

  /* ============ 几何小图标 (装饰) ============ */
  .geo-dot{width:.7vw;height:.7vw;border-radius:50%;background:var(--accent);display:inline-block;vertical-align:middle}
  .geo-square{width:.7vw;height:.7vw;background:var(--accent);display:inline-block;vertical-align:middle}
  .geo-line{width:2vw;height:2px;background:var(--accent);display:inline-block;vertical-align:middle}
  .geo-circle-o{width:.9vw;height:.9vw;border:2px solid currentColor;border-radius:50%;display:inline-block;vertical-align:middle}

  /* ============ 图片 frame-img ============ */
  .frame-img{overflow:hidden;position:relative;background:var(--paper);box-sizing:border-box;width:100%}
  .slide.dark .frame-img{background:rgba(255,255,255,.06)}
  .frame-img > img{width:100%;height:100%;object-fit:cover;object-position:center center;display:block}
  .frame-img.fit-contain > img{object-fit:contain;object-position:center center}
  .frame-img.pos-top > img{object-position:top center}
  .frame-img.pos-face > img{object-position:center 35%}
  .frame-img.r-16x9{aspect-ratio:16/9;max-height:64vh}
  .frame-img.r-21x9{aspect-ratio:21/9;max-height:54vh}
  .frame-img.r-16x10{aspect-ratio:16/10;max-height:56vh}
  .frame-img.r-4x3{aspect-ratio:4/3;max-height:56vh}
  .frame-img.r-3x2{aspect-ratio:3/2;max-height:46vh}
  .frame-img.r-3x4{aspect-ratio:3/4;max-height:60vh}
  .frame-img.r-1x1{aspect-ratio:1/1;max-height:50vh}
  .frame-img.h-16{height:16vh}
  .frame-img.h-18{height:18vh}
  .frame-img.h-22{height:22vh}
  .frame-img.h-26{height:26vh}
  .frame-img.h-28{height:28vh}
  .frame-img.h-32{height:32vh}
  .frame-img.swiss-lined{border-top:2px solid var(--accent)}
  .frame-img.swiss-keyline{border:0}

  /* P22 Image Hero: 下半屏内容区必须和图片拉开距离,不要贴在图下沿 */
  .image-hero-body{
    display:grid;grid-template-columns:6fr 6fr;gap:3vw;
    padding:6.6vh 5vw 4.4vh;flex:1;align-content:start
  }
  .image-hero-stats{
    display:grid;grid-template-columns:repeat(3,1fr);gap:2vw;align-items:start
  }
  .img-cap{
    display:block;margin-top:.8vh;
    font-family:var(--mono);
    font-size:max(10px,.78vw);
    letter-spacing:.2em;text-transform:uppercase;
    opacity:.6;
  }
  figure.frame-img,figure.tile{margin:0;display:flex;flex-direction:column;min-width:0}
  figure.tile > .frame-img{flex:0 0 auto}

  /* 瑞士风图文混排: 只用直角、发丝线、单一 accent；图像容器不加圆角/阴影 */
  .swiss-img-split{display:grid;grid-template-columns:5fr 7fr;gap:3vw;align-items:start;flex:1;min-height:0}
  .swiss-img-split.reverse{grid-template-columns:7fr 5fr}
  .swiss-img-split.align-bottom{align-items:end}
  .swiss-img-split.align-bottom .swiss-img-copy{align-self:end}
  .swiss-img-split.align-image-bottom{align-items:end;padding-bottom:var(--nav-safe-bottom)}
  .swiss-img-split.align-image-bottom .swiss-img-copy{align-self:end}
  .swiss-img-split.align-image-bottom figure.tile{align-self:end;position:relative}
  .swiss-img-split.align-image-bottom figure.tile > .swiss-img-caption{
    position:absolute;left:0;right:0;top:calc(100% + var(--sp-4));margin-top:0
  }
  .nav-safe-bottom{padding-bottom:var(--nav-safe-bottom)}
  .nav-safe-bottom-tight{padding-bottom:calc(var(--nav-safe-bottom) * .65)}
  .swiss-img-copy{display:flex;flex-direction:column;gap:var(--sp-6);min-width:0}
  .swiss-img-copy .rule{margin:0}
  .swiss-img-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-5);align-items:start;margin-top:var(--sp-7)}
  .swiss-img-grid.two{grid-template-columns:repeat(2,1fr)}
  .swiss-img-grid.tight{margin-top:0}
  .swiss-img-caption{
    display:flex;justify-content:space-between;gap:var(--sp-5);
    margin-top:var(--sp-4);
    font-family:var(--mono);font-size:max(9px,.68vw);
    letter-spacing:.16em;text-transform:uppercase;color:var(--text-helper);
    border-top:1px solid var(--border-subtle);padding-top:var(--sp-4)
  }
  .swiss-img-caption strong{
    font-family:var(--sans),var(--sans-zh);font-size:max(12px,.88vw);
    font-weight:600;letter-spacing:0;text-transform:none;color:var(--text-primary)
  }

  /* ============ Bar Chart (扁平几何图表) ============ */
  .bar-chart{display:flex;flex-direction:column;gap:1.4vh}
  .bar-row{display:grid;grid-template-columns:8em 1fr 4em;gap:1.4vw;align-items:center}
  .bar-row .bar-label{font-family:var(--mono);font-size:max(10px,.82vw);letter-spacing:.16em;text-transform:uppercase;opacity:.7}
  .bar-row .bar-track{height:14px;background:rgba(127,127,127,.18);position:relative}
  .bar-row .bar-fill{height:100%;background:var(--accent);position:absolute;left:0;top:0}
  .bar-row .bar-fill.ink{background:currentColor}
  .bar-row .bar-value{font-family:var(--sans);font-weight:700;font-size:max(13px,1.05vw);text-align:right;font-feature-settings:"tnum"}

  /* ============ 导航 ============ */
  /* 底部分页导航: 仅保留方块本身,无背景无描边 */
  #nav{position:fixed;left:50%;bottom:2vh;transform:translateX(-50%);z-index:30;display:flex;gap:10px;padding:0;background:transparent;border:0}
  #nav .dot{width:6px;height:6px;background:rgba(0,0,0,.28);cursor:pointer;transition:all .25s ease;border:0;padding:0;border-radius:0}
  #nav .dot:hover{background:rgba(0,0,0,.55)}
  #nav .dot.active{background:var(--accent);width:18px}
  body.dark-bg #nav .dot{background:rgba(255,255,255,.32)}
  body.dark-bg #nav .dot.active{background:var(--accent)}

  #hint{position:fixed;bottom:2.4vh;right:2.5vw;z-index:30;font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;opacity:.4;color:var(--ink-tint, currentColor)}
  body.dark-bg #hint{color:var(--paper);opacity:.4}
  body.low-power #hint{color:var(--accent);opacity:.72}
  body.dark-bg.low-power #hint{color:var(--paper);opacity:.72}

  /* ESC 索引页: 动画元素强制可见 (覆盖 motion-ready 的 opacity:0) */
  #overview [data-anim]{opacity:1!important;transform:none!important}
  #overview .slide *{animation:none!important;transition:none!important}

  /* 统一卡片样式 token: card-fill (默认灰底 · 中性) + card-ink (反转高对比) + card-accent (单一焦点) */
  .card-fill{background:#f5f5f4;border:0;color:var(--text-primary)}
  .card-ink{background:var(--ink);border:0;color:var(--paper)}
  .card-ink .t-meta,.card-ink .t-cat{color:rgba(255,255,255,.6)}
  .card-accent{background:var(--accent);border:0;color:var(--accent-on)}
  .card-accent .t-meta,.card-accent .t-cat{color:var(--accent-on)}

  /* ============ 动效 (与原模板一致) ============ */
  [data-anim]{opacity:1}
  body.motion-ready [data-anim]{opacity:0}
  body.motion-ready [data-anim="left"]{transform:translateX(-24px)}
  body.motion-ready [data-anim="right"]{transform:translateX(24px)}
  body.motion-ready [data-anim="line"]{opacity:0;transform:translateY(10px)}
  body.motion-ready [data-animate="pipeline"] [data-anim]{opacity:.15}
  body.low-power #deck{transition:none!important}
  body.low-power *,
  body.low-power *::before,
  body.low-power *::after{animation:none!important;transition:none!important}
  body.low-power.motion-ready [data-anim],
  body.low-power [data-anim]{opacity:1!important;transform:none!important}

  /* ============================================================
     Canvas mode + visual helper classes
     ============================================================ */

  /* Windows 适配:雅黑没有 ExtraLight 200,中文大字号字重补偿 */
  body.is-win .name-mega,
  body.is-win .num-mega,
  body.is-win .kpi-thin,
  body.is-win .tl-node .multi{
    font-weight:300;letter-spacing:-.02em;
  }
  body.is-win [style*="font-weight:200"]{font-weight:300 !important}

  /* 全屏铺满模式 · 关闭 WebGL · 卡片即页面 */
  body.canvas-mode{background:var(--paper)}
  body.canvas-mode canvas.bg{display:none !important}
  body.canvas-mode .slide{background:var(--paper);padding:0;align-items:stretch;justify-content:stretch}
  body.canvas-mode .slide.hero{background:var(--paper)}

  .canvas-card{
    width:100vw;
    height:100vh;
    background:var(--paper);color:var(--ink);
    padding:5.6vh 5vw 4.4vh;
    display:flex;flex-direction:column;
    position:relative;overflow:hidden;
    box-shadow:none;
    border-radius:0;
  }

  .slide.dark .canvas-card{background:var(--ink);color:var(--paper)}
  .slide.accent .canvas-card{background:var(--accent);color:var(--accent-on)}
  .slide.grey .canvas-card{background:var(--grey-1);color:var(--ink)}
  .slide.split .canvas-card{padding:0;flex-direction:row}

  /* ============ ASCII 点阵呼吸场 · IKB 封面/封底专用 ============
     用法:在 .canvas-card(或 split .half.b-accent)内首位插入 <canvas class="ascii-bg" aria-hidden="true">.
     动画由本文件底部的 ASCII IIFE 自动启动,所有 canvas.ascii-bg 都会被扫到.
     其他内容靠 .canvas-card > *:not(.ascii-bg){z-index:1} 自动浮在上层. */
  canvas.ascii-bg{
    position:absolute;inset:0;width:100%;height:100%;
    pointer-events:none;z-index:0;
    mix-blend-mode:screen;opacity:.92;
  }
  .canvas-card > *:not(.ascii-bg){position:relative;z-index:1}
  .slide.accent .canvas-card .chrome-min{color:rgba(255,255,255,.62)}
  .slide.accent .canvas-card .t-meta{color:rgba(255,255,255,.7)}
  .split-half > .half.b-accent .chrome-min{color:rgba(255,255,255,.62)}

  /* 编号目录页 · 超大数字 + 国家名风格 — 越大越细 */
  .num-mega{
    font-family:var(--sans);font-weight:200;
    font-size:9vw;line-height:1;letter-spacing:-.04em;
    font-feature-settings:"tnum"
  }
  .num-mega.thin{font-weight:200}
  .name-mega{
    font-family:var(--sans);font-weight:200;
    font-size:9vw;line-height:1;letter-spacing:-.035em;
  }
  .name-mega.muted{color:var(--grey-3)}

  /* 细体超大 KPI — 字号越大权重越低 */
  .kpi-thin{
    font-family:var(--sans);font-weight:200;
    font-size:14vw;line-height:.92;letter-spacing:-.045em;
    font-feature-settings:"tnum"
  }
  .kpi-thin .unit{font-size:.3em;font-weight:300;opacity:.55;margin-left:.15em;vertical-align:.6em}
  .kpi-thin.accent{color:var(--accent)}
  .kpi-thin-sm{
    font-family:var(--sans);font-weight:250;
    font-size:5.6vw;line-height:1.04;letter-spacing:-.03em;
    font-feature-settings:"tnum"
  }
  .kpi-thin-sm .unit{font-size:.3em;font-weight:300;opacity:.55;margin-left:.12em;vertical-align:.45em}

  /* 4 列细线 KPI 行 — 顶部一根 hairline,内部不再加竖线 */
  /* 4 列 KPI: 用纵向分割线建立网格感 (Carbon 2x grid 模数) */
  .kpi-row-4{
    display:grid;grid-template-columns:repeat(4,1fr);
    gap:0;padding-top:2.4vh;
    border-top:1px solid var(--grey-2)
  }
  .kpi-row-4 > .kpi-cell{
    padding:1.6vh 1.6vw 0;
    border-left:1px solid var(--grey-2)
  }
  .kpi-row-4 > .kpi-cell:first-child{padding-left:0;border-left:none}
  .kpi-cell .lbl{font-family:var(--mono);font-size:max(10px,.74vw);letter-spacing:.22em;text-transform:uppercase;opacity:.55;margin-bottom:1.2vh}
  .kpi-cell .nb{font-family:var(--sans);font-weight:250;font-size:3.2vw;line-height:1;letter-spacing:-.025em;font-feature-settings:"tnum"}
  .kpi-cell .nb .unit{font-size:.32em;font-weight:300;opacity:.6;margin-left:.1em;vertical-align:.4em}
  .kpi-cell .note{font-family:var(--sans),var(--sans-zh);font-size:max(11px,.82vw);line-height:1.5;opacity:.7;margin-top:1.2vh}

  /* 时间线轴 — 通用 axis token, 横纵共享
     axis 列 = 24px 固定宽,dot 直径 8px,绝对居中在 axis 列中线 (12px)
     虚线绝对定位 left:12px,与 dot 中心严格对齐 */
  .timeline-v{
    --tl-axis-w:24px;        /* axis 列固定宽度 */
    --tl-dot:8px;            /* 圆点直径 */
    position:relative;margin-top:var(--sp-7)
  }
  .timeline-v::before{
    content:"";position:absolute;
    left:calc(var(--tl-axis-w) / 2);
    transform:translateX(-50%);
    top:var(--sp-5);bottom:var(--sp-5);
    width:1px;
    background:repeating-linear-gradient(to bottom,currentColor 0 4px,transparent 4px 8px);
    opacity:.35;pointer-events:none;z-index:0
  }
  .tl-node{
    position:relative;
    display:grid;
    grid-template-columns:var(--tl-axis-w) minmax(0,7em) minmax(0,7.6em) 1fr;
    gap:0 var(--sp-5);
    align-items:center;
    padding:var(--sp-7) 0
  }
  /* 进度点: 纯色实心圆,无背景无描边,精确居中在 axis 列中线 */
  .tl-node .dot{
    width:var(--tl-dot);height:var(--tl-dot);
    border-radius:50%;
    background:currentColor;
    justify-self:center;
    z-index:1
  }
  .tl-node.accent .dot{background:var(--accent)}
  .tl-node .yr{
    font-family:var(--mono);font-weight:500;
    font-size:max(13px,1vw);letter-spacing:.04em
  }
  .tl-node .multi{
    font-family:var(--sans);font-weight:200;
    font-size:clamp(28px,2.8vw,56px);
    line-height:.95;letter-spacing:-.025em;
    white-space:nowrap;
    overflow:hidden;
    min-width:0
  }
  .tl-node .multi .unit{
    font-size:.36em;font-weight:300;opacity:.6;
    margin-left:.2em;
    vertical-align:.42em;
    letter-spacing:0
  }
  .tl-node.accent .multi{color:var(--accent)}
  .tl-node .desc{
    font-family:var(--sans),var(--sans-zh);
    font-size:max(12px,.9vw);line-height:1.55;opacity:.78;
    min-width:0
  }

  /* 横向时间线 (.timeline-h) — 与 .timeline-v 共享 axis token, 视觉语言一致 */
  .timeline-h{
    --tl-axis-w:8px;
    --tl-dot:8px;
    position:relative;
    flex:1;
    display:flex;align-items:center
  }
  .timeline-h::before{
    content:"";position:absolute;
    top:50%;left:5%;right:5%;height:1px;
    transform:translateY(-50%);
    background:repeating-linear-gradient(to right,currentColor 0 4px,transparent 4px 8px);
    opacity:.35;pointer-events:none;z-index:0
  }
  .timeline-h .tl-row{
    position:relative;width:100%;
    display:grid;grid-template-columns:repeat(5,1fr);
    align-items:center
  }
  .timeline-h .th-node{
    position:relative;display:flex;justify-content:center
  }
  /* 横向 dot: 8px 纯色实心,无描边无阴影 (与 P2 保持一致) */
  .timeline-h .th-node .dot{
    width:var(--tl-dot);height:var(--tl-dot);
    border-radius:50%;
    background:var(--ink);
    z-index:1;position:relative
  }
  .timeline-h .th-node.accent .dot{background:var(--accent)}
  .timeline-h .th-node .label{
    position:absolute;left:50%;transform:translateX(-50%);
    width:13vw;text-align:center;
    display:flex;flex-direction:column;gap:.4vh
  }
  .timeline-h .th-node.up .label{bottom:calc(50% + 22px)}
  .timeline-h .th-node.down .label{top:calc(50% + 22px)}
  .timeline-h .th-node .yr{
    font-family:var(--mono);font-size:max(10px,.74vw);letter-spacing:.06em;
    color:var(--text-helper);font-weight:500
  }
  .timeline-h .th-node.accent .yr{color:var(--accent)}
  .timeline-h .th-node .name{
    font-family:var(--sans);font-size:max(13px,1.05vw);font-weight:300;
    color:var(--text-primary);line-height:1.2;letter-spacing:-.005em
  }
  .timeline-h .th-node.accent .name{color:var(--accent)}
  .timeline-h .th-node .desc{
    font-family:var(--sans),var(--sans-zh);font-size:max(10px,.78vw);
    color:var(--text-secondary);font-weight:300;line-height:1.4
  }

  /* 几何图示 (参考图 5) — SVG-friendly 容器 */
  .geo-icon{width:5vw;height:5vw;display:block;margin-bottom:2.2vh;color:var(--ink);flex-shrink:0}
  .slide.dark .geo-icon{color:var(--paper)}
  .geo-icon svg{width:100%;height:100%;overflow:visible}
  .geo-icon .stroke{fill:none;stroke:currentColor;stroke-width:1.4}
  .geo-icon .stroke-accent{fill:none;stroke:var(--accent);stroke-width:1.4}
  .geo-icon .fill-accent{fill:var(--accent)}

  /* 卡片网格 (参考图 1 卡片漂浮) — 在 canvas-card 内部再分卡 */
  .sub-grid-3-2{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(2,1fr);gap:1.4vh 1.4vw;flex:1;align-content:stretch;margin-top:3vh}
  .sub-card{
    background:var(--grey-1);
    padding:2.4vh 1.6vw 2vh;
    display:flex;flex-direction:column;
    position:relative;border-radius:3px;
    min-height:0
  }
  .slide.dark .sub-card{background:rgba(255,255,255,.06)}
  .sub-card.accent{background:var(--accent);color:var(--accent-on)}
  .sub-card.ink{background:var(--ink);color:var(--paper)}
  .sub-card .nb-corner{
    position:absolute;top:1.6vh;right:1.4vw;
    font-family:var(--mono);font-size:max(10px,.78vw);
    letter-spacing:.18em;opacity:.55
  }
  .sub-card .ttl{font-family:var(--sans),var(--sans-zh);font-weight:500;font-size:max(15px,1.5vw);line-height:1.2;letter-spacing:-.015em;margin-bottom:1vh}
  .sub-card .desc{font-family:var(--sans),var(--sans-zh);font-size:max(11px,.86vw);line-height:1.55;opacity:.78;margin-top:auto}


  /* 三层架构纯色块拼图 (参考图 4 + 6) — 横排等高色块 */
  .stack-row{display:grid;grid-template-columns:repeat(3,1fr);gap:1.6vw;flex:1;margin-top:6vh;align-items:stretch}
  .stack-block{
    display:flex;flex-direction:column;
    padding:3.2vh 1.8vw 2.4vh;
    position:relative;
    min-height:0
  }
  .stack-block.b-accent{background:var(--accent);color:var(--accent-on)}
  .stack-block.b-grey{background:var(--grey-1);color:var(--ink)}
  .stack-block.b-ink{background:var(--ink);color:var(--paper)}
  .stack-block .layer-nb{font-family:var(--mono);font-size:max(11px,.82vw);letter-spacing:.22em;opacity:.65;margin-bottom:auto}
  .stack-block .layer-icon{margin-bottom:1.6vh}
  .stack-block .layer-icon svg{width:3vw;height:3vw}
  .stack-block .layer-icon .stroke{fill:none;stroke:currentColor;stroke-width:1.6}
  .stack-block .layer-ttl{font-family:var(--sans),var(--sans-zh);font-weight:400;font-size:max(17px,2vw);line-height:1.1;margin-top:1vh;letter-spacing:-.02em}
  .stack-block .layer-desc{font-family:var(--sans),var(--sans-zh);font-weight:400;font-size:max(11px,.88vw);line-height:1.55;opacity:.88;margin-top:1.4vh}

  .stack-block .layer-tag{font-family:var(--mono);font-size:max(9px,.7vw);letter-spacing:.2em;text-transform:uppercase;opacity:.7;margin-top:1.6vh;border-top:1px solid currentColor;padding-top:1vh}

  /* 不等高柱状 KPI 塔 (参考图 6) */
  .bar-towers{
    display:grid;grid-template-columns:repeat(4,1fr);
    gap:1.2vw;flex:1;align-items:end;margin-top:auto
  }
  .bar-tower{
    display:flex;flex-direction:column;justify-content:flex-end;
    min-height:0;height:100%
  }
  .bar-tower .cap{
    background:var(--grey-1);
    height:5.6vh;
    display:flex;align-items:center;justify-content:center;
    margin-bottom:.4vh
  }
  .bar-tower .cap svg{width:1.6vw;height:1.6vw;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
  .bar-tower .body-block{
    flex:0 1 auto;
    padding:2vh 1.2vw 2vh;
    display:flex;flex-direction:column;justify-content:flex-end;
    min-height:18vh
  }
  .bar-tower .body-block.h-1{min-height:22vh}
  .bar-tower .body-block.h-2{min-height:30vh}
  .bar-tower .body-block.h-3{min-height:38vh}
  .bar-tower .body-block.h-4{min-height:46vh}
  /* 默认所有 KPI 塔统一为浅描边卡 — 不抢戏;只有 .b-accent 突出为 IKB */
  .bar-tower .body-block{background:var(--paper);color:var(--ink);border:1px solid var(--grey-2)}
  .bar-tower .body-block.b-accent{background:var(--accent);color:var(--accent-on);border-color:var(--accent)}
  .bar-tower .lbl{font-family:var(--mono);font-size:max(10px,.78vw);letter-spacing:.2em;text-transform:uppercase;opacity:.65;margin-bottom:1vh}
  .bar-tower .nb{font-family:var(--sans);font-weight:250;font-size:max(20px,2.8vw);line-height:1;letter-spacing:-.03em;font-feature-settings:"tnum"}
  .bar-tower .body-block.b-accent .nb{font-weight:300}
  .bar-tower .nb .unit{font-size:.36em;font-weight:300;opacity:.7;margin-left:.08em;vertical-align:.4em}
  .bar-tower .sub{font-family:var(--sans),var(--sans-zh);font-size:max(11px,.84vw);opacity:.75;margin-top:1.2vh;line-height:1.5}
  .bar-tower .cap{background:var(--grey-1);color:var(--ink)}


  /* ============ Carbon Productive Type Tokens ============
     用于 PPT 中的"productive 时刻": 列表、表格行、说明文、章节标签
     固定 px 字号,密集紧凑;与 vw-based 的 Expressive 巨字形成双极对比 */

  /* category label / eyebrow / section tag — small, bold, uppercase */
  .t-cat{
    font-family:var(--mono);
    font-size:11px;font-weight:600;
    letter-spacing:.18em;text-transform:uppercase;
    color:var(--text-helper);line-height:1.3
  }
  .t-cat.accent{color:var(--accent)}
  .t-cat.on-dark{color:rgba(255,255,255,.78)}

  /* page chrome / breadcrumb / running header — extra-small mono */
  .t-meta{
    font-family:var(--mono);
    font-size:11px;font-weight:500;
    letter-spacing:.16em;text-transform:uppercase;
    color:var(--text-helper);line-height:1.45
  }

  /* helper / caption — tiny secondary text */
  .t-helper{
    font-family:var(--sans),var(--sans-zh);
    font-size:12px;font-weight:400;
    color:var(--text-helper);line-height:1.5;
    letter-spacing:.005em
  }

  /* body small — list items, table rows, captions */
  .t-body-sm{
    font-family:var(--sans),var(--sans-zh);
    font-size:14px;font-weight:400;
    color:var(--text-secondary);line-height:1.55;
    letter-spacing:0
  }

  /* body — paragraphs, descriptions */
  .t-body{
    font-family:var(--sans),var(--sans-zh);
    font-size:16px;font-weight:400;
    color:var(--text-primary);line-height:1.5;
    letter-spacing:-.005em
  }

  /* body emphasis — 强调正文 */
  .t-body-emp{
    font-family:var(--sans),var(--sans-zh);
    font-size:16px;font-weight:600;       /* SemiBold per Carbon */
    color:var(--text-primary);line-height:1.5;
    letter-spacing:-.005em
  }

  /* productive heading — section title within slide */
  .t-h-prod{
    font-family:var(--sans),var(--sans-zh);
    font-size:20px;font-weight:600;
    color:var(--text-primary);line-height:1.4;
    letter-spacing:-.01em
  }

  /* dark background variants */
  .slide.dark .t-cat,.slide.dark .t-meta,.slide.dark .t-helper{color:rgba(255,255,255,.62)}
  .slide.dark .t-body-sm{color:rgba(255,255,255,.78)}
  .slide.dark .t-body,.slide.dark .t-body-emp,.slide.dark .t-h-prod{color:var(--paper)}
  .split-half .half.b-ink .t-cat,.split-half .half.b-ink .t-meta,.split-half .half.b-ink .t-helper{color:rgba(255,255,255,.62)}
  .split-half .half.b-ink .t-body-sm{color:rgba(255,255,255,.78)}
  .split-half .half.b-ink .t-body,.split-half .half.b-ink .t-body-emp,.split-half .half.b-ink .t-h-prod{color:var(--paper)}

  /* 斜杠点阵装饰 (参考图 6 左下) */
  .hatch{
    background-image:repeating-linear-gradient(135deg,currentColor 0 1px,transparent 1px 8px);
    opacity:.55
  }

  /* ========== V3: 高级点阵装饰 — 圆点 / × 号 / 圆圈 ========== */
  /* 实心圆点矩阵 — 用于大面积装饰 */
  .dot-mat{
    --d:14px;
    background-image:radial-gradient(currentColor 1.4px,transparent 1.6px);
    background-size:var(--d) var(--d);
    background-position:0 0;
    opacity:.5
  }
  .dot-mat.lg{--d:22px}
  .dot-mat.xl{--d:34px}
  .dot-mat.dense{--d:9px;opacity:.62}

  /* 描边圆圈矩阵 — 工业感 */
  .ring-mat{
    --d:18px;
    background-image:
      radial-gradient(circle at 50% 50%,transparent 2px,currentColor 2px,currentColor 2.6px,transparent 2.7px);
    background-size:var(--d) var(--d);
    opacity:.55
  }
  .ring-mat.lg{--d:28px}

  /* × 号矩阵 — SVG mask 实现真正的 × 网格平铺 */
  .cross-mat{
    --d:22px;
    background-color:currentColor;
    -webkit-mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'><g stroke='black' stroke-width='1.4' stroke-linecap='round' fill='none'><line x1='8' y1='8' x2='14' y2='14'/><line x1='14' y1='8' x2='8' y2='14'/></g></svg>");
            mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'><g stroke='black' stroke-width='1.4' stroke-linecap='round' fill='none'><line x1='8' y1='8' x2='14' y2='14'/><line x1='14' y1='8' x2='8' y2='14'/></g></svg>");
    -webkit-mask-size:var(--d) var(--d);
            mask-size:var(--d) var(--d);
    -webkit-mask-repeat:repeat;mask-repeat:repeat;
    opacity:.42
  }
  .cross-mat.lg{--d:32px}

  /* ========== V3: 几何水平柱状图 ========== */
  /* 横向柱图: 标签列 + 柱体列 + 数值列 — 严格瑞士网格 */
  .h-bar-chart{
    display:grid;
    grid-template-columns:11em minmax(0,1fr) 8em;
    gap:1.6vh 1.6vw;
    align-items:center;
    margin-top:2.4vh;
    font-feature-settings:"tnum"
  }
  .h-bar-chart .row-lbl{
    font-family:var(--sans),var(--sans-zh);
    font-weight:500;font-size:max(13px,1vw);
    letter-spacing:-.005em;
    text-align:left
  }
  .h-bar-chart .row-track{
    height:3.2vh;
    background:var(--grey-1);
    position:relative;
    overflow:hidden
  }
  .h-bar-chart .row-fill{
    height:100%;
    background:var(--ink);
    transition:width 1s cubic-bezier(.5,0,.2,1)
  }
  .h-bar-chart .row-fill.accent{background:var(--accent)}
  .h-bar-chart .row-fill.grey{background:var(--grey-3)}
  .h-bar-chart .row-val{
    font-family:var(--sans);font-weight:250;
    font-size:max(16px,1.5vw);
    letter-spacing:-.02em;
    line-height:1
  }
  .h-bar-chart .row-val .unit{
    font-size:.5em;opacity:.55;font-weight:300;
    margin-left:.15em;letter-spacing:.04em
  }

  /* 垂直柱图: 用于 KPI 对比页(章节 P8) */
  .v-bar-chart{
    display:grid;
    grid-template-columns:repeat(var(--cols,4),1fr);
    align-items:end;
    gap:1.4vw;
    height:50vh;
    margin-top:3vh
  }
  .v-bar-chart .col{display:flex;flex-direction:column;gap:1.4vh;align-items:stretch;height:100%}
  .v-bar-chart .col-bar{
    flex:1 1 auto;
    background:var(--grey-1);
    border-top:2px solid var(--ink);
    position:relative;
    display:flex;align-items:flex-start;justify-content:center;
    padding-top:1vh
  }
  .v-bar-chart .col-bar.accent{background:var(--accent);border-top-color:var(--accent);color:var(--accent-on)}
  .v-bar-chart .col-bar.ink{background:var(--ink);color:var(--paper);border-top-color:var(--ink)}
  .v-bar-chart .col-bar .v{
    font-family:var(--sans);font-weight:250;
    font-size:max(18px,1.6vw);letter-spacing:-.02em
  }
  .v-bar-chart .col-lbl{
    font-family:var(--mono);font-size:max(10px,.74vw);
    letter-spacing:.18em;text-transform:uppercase;opacity:.6;
    text-align:center;flex:0 0 auto
  }

  /* 对仗对比双栏 (章节 P9) */
  .duo-compare{
    display:grid;grid-template-columns:1fr 1px 1fr;
    gap:0 3.4vw;
    flex:1;align-items:stretch;margin-top:8vh
  }
  .duo-compare .vrule{background:var(--grey-2);width:1px;align-self:stretch}
  .duo-compare .col{display:flex;flex-direction:column;gap:1.6vh;padding:0 .4vw}
  .duo-compare .col-tag{
    font-family:var(--mono);font-size:max(10px,.74vw);
    letter-spacing:.22em;text-transform:uppercase;
    color:var(--grey-3);
    display:flex;align-items:center;gap:.6vw
  }
  .duo-compare .col-tag .num{
    font-weight:600;color:var(--ink);
    border:1px solid var(--ink);
    padding:.2em .6em;font-size:.92em
  }
  .duo-compare .col.accent .col-tag .num{color:var(--accent);border-color:var(--accent)}
  .duo-compare .col-ttl{
    font-family:var(--sans),var(--sans-zh);font-weight:200;
    font-size:3.6vw;line-height:1;letter-spacing:-.03em
  }
  .duo-compare .col.accent .col-ttl{color:var(--accent)}
  .duo-compare .col-desc{
    font-family:var(--sans),var(--sans-zh);
    font-size:max(13px,1.04vw);line-height:1.55;opacity:.78;
    max-width:30vw
  }
  .duo-compare .col-list{
    list-style:none;display:flex;flex-direction:column;gap:1vh;
    margin-top:auto;padding-top:2vh;border-top:1px solid var(--grey-2)
  }
  .duo-compare .col-list li{
    font-family:var(--sans),var(--sans-zh);
    font-size:max(11px,.88vw);line-height:1.5;
    padding-left:1.4em;position:relative
  }
  .duo-compare .col-list li::before{
    content:"";position:absolute;left:0;top:.6em;
    width:.5em;height:1px;background:currentColor;opacity:.55
  }
  .duo-compare .col.accent .col-list li::before{background:var(--accent);opacity:1}

  /* 半屏 statement (参考图 7) */
  .split-half{display:grid;grid-template-columns:1fr 1fr;gap:0;flex:1;align-items:stretch}
  .split-half > .half{padding:5vh 3.4vw;display:flex;flex-direction:column;min-width:0}
  .split-half > .half.r-border{border-left:1px solid rgba(127,127,127,.22)}
  .split-half > .half.b-grey{background:var(--grey-1)}
  .split-half > .half.b-accent{background:var(--accent);color:var(--accent-on)}
  .split-half > .half.b-ink{background:var(--ink);color:var(--paper)}

  /* 极简页眉 — t-meta 风格 (Carbon productive label-01) */
  .canvas-card .chrome-min{
    display:flex;justify-content:space-between;align-items:flex-start;
    font-family:var(--mono);font-size:11px;font-weight:500;
    letter-spacing:.16em;text-transform:uppercase;
    color:var(--text-helper);
    flex:0 0 auto;
    margin-bottom:var(--sp-9);   /* 48px */
  }
  .canvas-card .chrome-min.tight{margin-bottom:var(--sp-7)}   /* 32px */
  .canvas-card .chrome-min .l, .canvas-card .chrome-min .r{
    max-width:48vw;line-height:1.5
  }
  .slide.dark .canvas-card .chrome-min,.split-half .half.b-ink .canvas-card .chrome-min{color:rgba(255,255,255,.62)}

  /* 响应式降级 */
  @media (max-width:900px){
    .h-hero{font-size:16vw}
    .h-hero-zh{font-size:13vw}
    .h-xl{font-size:9vw}
    .h-xl-zh{font-size:8vw}
    .kpi-hero{font-size:32vw}
    .kpi-big{font-size:16vw}
    .pipeline{grid-template-columns:repeat(2,1fr)}
    .grid-2-7-5,.grid-2-6-6,.grid-2-8-4,.grid-2-4-8{grid-template-columns:1fr}
    .grid-12{grid-template-columns:repeat(6,1fr)}
  }

  /* copy-edit pass: projector-legible meta/kicker text */
  .t-meta{font-size:clamp(13px,1.02vw,18px)!important;line-height:1.35!important;letter-spacing:.12em!important}
  .chrome-min{font-size:clamp(11px,.88vw,15px)!important;letter-spacing:.08em!important}
  .chrome-min .l,.chrome-min .r{font-size:inherit!important}
  .nb-corner{font-size:clamp(12px,.9vw,15px)!important}


  /* visual pass: image-backed low-text slides */
  .visual-card{background:var(--paper);border:1px solid var(--border-subtle);padding:1.2vh;display:grid;place-items:center;min-height:0}
  .visual-card img{width:100%;height:100%;object-fit:contain;display:block}
  .slide-visual-grid{flex:1;display:grid;grid-template-rows:minmax(0,1fr) auto;gap:2.2vh;min-height:0}
  .slide-visual-grid .visual-card{min-height:42vh}
  .visual-caption-row{display:grid;gap:.85vw;align-items:stretch}
  .visual-mini-card{background:var(--grey-1);padding:1.35vh 1vw;border:1px solid var(--border-subtle)}
  .visual-mini-card h3{font-family:var(--sans),var(--sans-zh);font-size:max(16px,1.18vw);line-height:1.1;font-weight:300;margin:0 0 .45vh;color:var(--text-primary);letter-spacing:-.02em}
  .visual-mini-card p{font-family:var(--sans),var(--sans-zh);font-size:max(11px,.82vw);line-height:1.38;font-weight:300;color:var(--text-secondary);margin:0}


  /* per-card visual pass: keep deck grid, add one visual per card */
  .card-art{width:100%;aspect-ratio:16/9;background:var(--paper);border:1px solid var(--border-subtle);display:grid;place-items:center;margin:0 0 1.2vh;overflow:hidden}
  .card-art img{width:100%;height:100%;object-fit:cover;display:block}
  .visual-card-grid{display:grid;gap:1vw;align-items:stretch;min-height:0}
  .visual-card-grid article{min-height:0}

/* === Block 1 === */
/* B/static + PDF export mode: all animation states visible, printable as one slide per page. */
@media print{
  @page{size:16in 9in;margin:0}
  html,body{width:100%;height:auto;background:var(--paper)!important;overflow:visible!important}
  #hint,#nav,#overview,canvas.bg{display:none!important}
  #deck{position:static!important;width:100%!important;height:auto!important;display:block!important;transform:none!important;transition:none!important;will-change:auto!important}
  .slide{page-break-after:always;break-after:page;width:16in!important;height:9in!important;min-height:9in!important;overflow:hidden!important;display:flex!important;position:relative!important;transform:none!important}
  .slide:last-child{page-break-after:auto;break-after:auto}
  body,*{animation:none!important;transition:none!important}
  [data-anim],.row-fill,.tl-node,.stack-block,.bar-tower,.sub-card,.col,.vrule,.kpi-cell,.card-fill,.card-accent,.card-ink{opacity:1!important;transform:none!important}
  canvas.ascii-bg{display:none!important}
}
body.low-power [data-anim],body.low-power .row-fill,body.low-power .tl-node,body.low-power .stack-block,body.low-power .bar-tower,body.low-power .sub-card,body.low-power .col,body.low-power .vrule,body.low-power .kpi-cell,body.low-power .card-fill,body.low-power .card-accent,body.low-power .card-ink{opacity:1!important;transform:none!important}

/* === Block 2 === */
/* Final deck overrides for PKM 2026-06-07 (carried forward from PKM 2026-05-22).
   Keep this as the single late-stage patch block; site output is generated from this canonical file. */

/* S07 plugin grid: constrain six cards/images without cropping. */
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article{
  min-width:0;
  height:100%;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article .card-art{
  flex:0 0 auto;
  height:18vh;
  max-height:18vh;
  margin-bottom:1vh;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article .card-art img{
  width:100%;
  height:100%;
  object-fit:contain;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article h3{
  margin-top:auto;
}

/* Projector legibility: improve small copy without touching thin display titles. */
.slide p[style*="font-weight:300"],
.slide span[style*="font-weight:300"],
.slide div[style*="font-weight:300"],
.slide li[style*="font-weight:300"],
.slide ul[style*="font-weight:300"],
.slide a[style*="font-weight:300"]{
  font-weight:400!important;
}

/* S10-S14 demo family: use S10 as visual baseline. */
#deck > section[data-slide-family="demo"] .lead,
#deck > section[data-slide-family="demo"] ul,
#deck > section[data-slide-family="demo"] li,
#deck > section[data-slide-family="demo"] li span:last-child,
#deck > section[data-slide-family="demo"] div[style*="font-family:var(--sans)"]{
  color:var(--text-secondary)!important;
  font-weight:400!important;
}
#deck > section[data-slide-family="demo"] li .t-meta,
#deck > section[data-slide-family="demo"] .t-meta{
  color:var(--accent)!important;
  font-weight:500!important;
}

/* S15 showcase: larger image area, contain not cover. */
#deck > section[data-slide="showcase"] .card-art{
  height:34vh!important;
  max-height:34vh!important;
  flex:0 0 34vh!important;
  padding:1.1vh!important;
  box-sizing:border-box!important;
  overflow:visible!important;
}
#deck > section[data-slide="showcase"] .card-art img{
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  object-position:center!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article{
  padding-top:.7vh!important;
  padding-bottom:.7vh!important;
}

/* S20/S21 appendix: hard-lock internal y-axis animation while leaving deck navigation intact. */
#deck > section[data-slide-family="appendix"]{
  transition:none!important;
}
#deck > section[data-slide-family="appendix"] [data-anim],
#deck > section[data-slide-family="appendix"] .canvas-card,
#deck > section[data-slide-family="appendix"] .canvas-card *{
  animation:none!important;
  transition:none!important;
  transform:none!important;
  opacity:1!important;
}


/* === Typography System · PKM 2026-06-07 ===
   Goal: projector-readable type without rewriting slide layouts.
   2026-06-06 trial: lift global weights by +200 for projector readability.
   This block is intentionally scoped through #deck and late in the cascade. */
:root{
  --fs-display-hero:min(8.4vw,14vh);
  --fs-display-xl:min(6.2vw,11vh);
  --fs-display-section:min(5.6vw,9.8vh);
  --fs-display-card:min(4.6vw,8vh);
  --fs-lead:max(17px,1.14vw);
  --fs-body:max(17px,1.04vw);
  --fs-body-sm:max(16px,.96vw);
  --fs-card-title:max(20px,1.28vw);
  --fs-card-body:max(17.5px,1.04vw);
  --fs-list:max(18px,1.12vw);
  --fs-meta:max(13px,.82vw);
  --fs-appendix:max(14px,.76vw);
  --fs-ui:max(12px,.72vw);
  --fs-chrome:max(13px,.78vw);
  --fw-display:400;
  --fw-title:500;
  --fw-body:600;
  --fw-emphasis:700;
  --fw-strong:900;
  --fw-ui:700;
  --lh-body:1.48;
  --lh-card:1.44;
}

/* Normalize body/lead/card/list copy. Avoid catch-all div overrides: target semantic text nodes only. */
#deck .lead{
  font-size:var(--fs-lead)!important;
  font-weight:var(--fw-body)!important;
  line-height:1.48!important;
}
#deck article h3{
  font-size:var(--fs-card-title)!important;
  font-weight:var(--fw-title)!important;
  line-height:1.12!important;
}
#deck article p{
  font-size:var(--fs-card-body)!important;
  font-weight:var(--fw-body)!important;
  line-height:var(--lh-card)!important;
}
#deck ul:not(#nav ul) > li{
  font-size:var(--fs-list)!important;
  font-weight:var(--fw-body)!important;
  line-height:1.48!important;
}
#deck a{
  font-size:var(--fs-card-body)!important;
  font-weight:var(--fw-body)!important;
}
#deck figcaption{
  font-size:var(--fs-body-sm)!important;
  font-weight:var(--fw-body)!important;
  line-height:1.45!important;
}
#deck .t-meta{
  font-size:var(--fs-meta)!important;
  font-weight:var(--fw-emphasis)!important;
}

/* Final typography sweep: every visible text node, including chrome/UI and inherited spans, has an explicit role. */
#hint,
#img-lightbox .hint{
  font-size:var(--fs-ui)!important;
  font-weight:var(--fw-ui)!important;
  line-height:1.35!important;
}
#deck .chrome-min,
#deck .chrome-min .l,
#deck .chrome-min .r{
  font-size:var(--fs-chrome)!important;
  font-weight:var(--fw-ui)!important;
  line-height:1.35!important;
}
#deck strong{
  font-size:inherit!important;
  font-weight:var(--fw-strong)!important;
  line-height:inherit!important;
}
#deck ul:not(#nav ul) > li > span:not(.t-meta){
  font-size:var(--fs-list)!important;
  font-weight:var(--fw-body)!important;
  line-height:1.48!important;
}

/* Dense / appendix slides: keep compact but not hairline-small. */
#deck > section[data-slide-family="appendix"] ul:not(#nav ul) > li,
#deck > section[data-slide-family="appendix"] ul:not(#nav ul) > li a,
#deck > section[data-slide-family="appendix"] a{
  font-size:var(--fs-appendix)!important;
  font-weight:var(--fw-emphasis)!important;
  line-height:1.3!important;
}

/* S17/S18 are text-heavy setup slides; lift card body above projector threshold. */
#deck > section:nth-of-type(17) article p,
#deck > section:nth-of-type(18) article p{
  font-size:max(16px,.92vw)!important;
  line-height:1.45!important;
}

/* S20 is dense appendix content; keep it readable while preventing canvas clipping. */
#deck > section[data-slide="appendix-skills-crons"] .canvas-card{
  max-height:calc(100vh - 5vh)!important;
}
#deck > section[data-slide="appendix-skills-crons"] .canvas-card > div:nth-child(2){
  padding:3.8vh 0 .5vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] .canvas-card > div:nth-child(2) > div{
  gap:.95vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] li{
  padding:.32vh 0!important;
}
#deck > section[data-slide="appendix-skills-crons"] .ts-section-title-ce5393{
  font-size:min(3.2vw,5.5vh)!important;
}
#deck > section[data-slide="appendix-skills-crons"] .ts-label-block-6a491e{
  font-size:max(13px,.8vw)!important;
  padding-top:.55vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] .ts-label-block-9f1d82{
  margin-top:.55vh!important;
  padding-top:.45vh!important;
}

/* Preserve display hierarchy while making projector text visibly heavier. */
#deck h1,#deck h2{
  font-weight:var(--fw-display);
}

/* === Block 3 === */
.zoomable{cursor:zoom-in;transition:filter .15s ease}
.zoomable:hover{filter:brightness(1.04)}
body.low-power #deck .zoomable{
  transform:none!important;
  will-change:auto!important;
}
#img-lightbox{
  position:fixed;inset:0;
  background:rgba(8,12,20,.92);
  display:none;align-items:center;justify-content:center;
  z-index:9999;padding:3vh 3vw;cursor:zoom-out;
  backdrop-filter:blur(8px);
}
#img-lightbox.open{display:flex}
#img-lightbox .lb-stage{
  width:96vw;height:92vh;max-width:1600px;
  display:grid;place-items:center;overflow:hidden;
  cursor:zoom-out;
}
#img-lightbox img{
  display:block;width:auto;height:auto;
  max-width:min(96vw,1600px);max-height:92vh;
  object-fit:contain;box-shadow:0 4vh 8vh rgba(0,0,0,.5);
  background:#fff;
  transform:translate3d(var(--lb-pan-x,0px),var(--lb-pan-y,0px),0) scale(var(--lb-focus-scale,1));
  transform-origin:center center;
  transition:transform .42s var(--ease-exp), box-shadow .18s var(--ease-prod);
  will-change:transform;
}
#img-lightbox.focus-mode .lb-stage{
  background:rgba(255,255,255,.05);
}
#img-lightbox .focus-label{
  position:absolute;top:2vh;left:3vw;
  color:rgba(255,255,255,.78);
  font-family:var(--mono,monospace);font-size:var(--fs-ui);
  font-weight:var(--fw-ui);letter-spacing:.12em;text-transform:uppercase;
  pointer-events:none;
}
#img-lightbox .hint{
  position:absolute;bottom:2vh;left:0;right:0;text-align:center;
  color:rgba(255,255,255,.55);
  font-family:var(--mono,monospace);font-size:var(--fs-ui);
  font-weight:var(--fw-ui);letter-spacing:.12em;pointer-events:none;
}

/* === Typography Source Cleanup Classes · moved from inline styles ===
   These classes preserve deliberate display/standalone typography while
   body/card/list/meta text is handled by semantic typography-system rules. */
#deck .ts-display-8c2594{font-size:min(8.4vw,14vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-9bcaff{font-size:min(6.2vw,11vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-b0173c{font-size:min(5.2vw,9vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-42bb6e{font-size:min(7vw,12.5vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-965d70{font-size:min(5.6vw,9.8vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-68820f{font-size:min(3.2vw,5.8vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-2b9833{font-size:min(4.6vw,8vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-standalone-body-9bf354{font-size:var(--fs-lead)!important;font-weight:var(--fw-body)!important}
#deck .ts-display-cef7f9{font-size:min(4.7vw,8.2vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-ddd29d{font-size:min(5.1vw,9vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-label-block-76c854{font-size:var(--fs-body)!important;font-weight:var(--fw-body)!important}
#deck .ts-display-1662b2{font-size:min(4.8vw,8.4vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-label-block-1f1bac{font-size:var(--fs-body)!important;font-weight:var(--fw-body)!important}
#deck .ts-display-8c399e{font-size:min(5vw,8.8vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-display-afbbc9{font-size:min(7vw,12vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-section-title-ce5393{font-size:min(3.5vw,6vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-label-block-6a491e{font-size:max(14px,1.05vw)!important;font-weight:var(--fw-ui)!important}
#deck .ts-inline-note-fcb1af{font-size:max(12px,.88vw)!important}
#deck .ts-inline-note-d998c2{font-size:var(--fs-appendix)!important;font-weight:var(--fw-body)!important}
#deck .ts-inline-note-2e04a0{font-size:var(--fs-appendix)!important;font-weight:var(--fw-body)!important}
#deck .ts-label-block-9f1d82{font-size:var(--fs-appendix)!important;font-weight:var(--fw-body)!important}
#deck .ts-display-c43a26{font-size:min(5.8vw,10.2vh)!important;font-weight:var(--fw-display)!important}
#deck .ts-standalone-body-917f0b{font-size:max(17px,1.3vw)!important;font-weight:var(--fw-body)!important}

/* === 2026-06-06 Local Balance Pass === */
#deck > section:nth-of-type(8) ul{
  color:var(--text-secondary)!important;
}
#deck > section:nth-of-type(8) h1{
  font-weight:300!important;
}
#deck > section:nth-of-type(8) .t-meta{
  font-weight:var(--fw-body)!important;
}
#deck > section:nth-of-type(8) ul:not(#nav ul) > li > span:not(.t-meta){
  color:var(--text-secondary)!important;
  font-weight:var(--fw-title)!important;
}

#deck > section[data-slide-family="appendix"] .canvas-card{
  max-height:calc(100vh - 4vh)!important;
  padding:3.2vh 5vw 2.6vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] .canvas-card > div:nth-child(2){
  padding:1.15vh 0 .35vh!important;
}
#deck > section[data-slide="appendix-resources"] .canvas-card{
  display:flex!important;
  flex-direction:column!important;
  overflow:hidden!important;
  --s21-item-size:var(--fs-list);
  --s21-item-line:1.42;
}
#deck > section[data-slide="appendix-resources"] .canvas-card > div:nth-child(2){
  padding:1.15vh 0 .35vh!important;
  gap:2.4vw!important;
}
#deck > section[data-slide="appendix-resources"] .canvas-card > div:nth-child(2) > div{
  gap:.9vh!important;
}
#deck > section[data-slide="appendix-resources"] h3{
  color:var(--text-primary)!important;
  font-weight:var(--fw-title)!important;
  padding-bottom:.8vh!important;
  border-bottom:2px solid var(--ink)!important;
}
#deck > section[data-slide="appendix-resources"] ul{
  margin:.2vh 0 .45vh!important;
}
#deck > section[data-slide="appendix-resources"] li{
  padding:.34vh 0 .38vh!important;
  border-top-color:rgba(17,17,17,.1)!important;
}
#deck > section[data-slide="appendix-resources"] ul:not(#nav ul) > li > a{
  color:var(--accent)!important;
  font-size:var(--s21-item-size)!important;
  font-weight:var(--fw-emphasis)!important;
  line-height:var(--s21-item-line)!important;
  text-decoration:none!important;
}
#deck > section[data-slide="appendix-resources"] ul:not(#nav ul) > li > span:not(.t-meta){
  color:var(--text-secondary)!important;
  font-size:var(--s21-item-size)!important;
  font-weight:var(--fw-body)!important;
  line-height:var(--s21-item-line)!important;
}
#deck > section[data-slide="appendix-resources"] .ts-section-title-ce5393{
  font-size:min(3.05vw,5.25vh)!important;
}
#deck > section[data-slide="appendix-resources"] .ts-label-block-6a491e{
  align-self:flex-start!important;
  width:max-content!important;
  max-width:100%!important;
  margin:.4vh 0 .05vh!important;
  padding:.28vh .55vw .2vh!important;
  border:1px solid rgba(var(--accent-rgb),.24)!important;
  border-radius:2px!important;
  background:rgba(var(--accent-rgb),.055)!important;
  color:var(--accent)!important;
  font-size:max(11px,.62vw)!important;
  font-weight:var(--fw-ui)!important;
  letter-spacing:.08em!important;
  line-height:1.15!important;
}

/* === 2026-06-06 Dense Slide Vertical Rhythm Pass ===
   Full canvas slides were visually sitting low after the projector-weight pass.
   Lift the content band and reserve more bottom breathing room near the nav. */
body.canvas-mode #deck > section:not([data-slide-family="appendix"]):not(.split) > .canvas-card{
  padding:4.4vh 5vw 5.8vh!important;
}
body.canvas-mode #deck > section:not([data-slide-family="appendix"]):not(.split) > .canvas-card > .chrome-min{
  margin-bottom:clamp(30px,4.4vh,40px)!important;
}

#deck > section[data-slide="showcase"] > .canvas-card > div:nth-child(2){
  gap:1.8vh!important;
}
#deck > section[data-slide="showcase"] .card-art{
  height:31vh!important;
  max-height:31vh!important;
  flex-basis:31vh!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article p{
  line-height:1.34!important;
}

#deck > section:nth-of-type(17) > .canvas-card > div:nth-child(2){
  gap:1vh!important;
}
#deck > section:nth-of-type(17) .visual-card-grid{
  gap:1.05vw!important;
}
#deck > section:nth-of-type(17) .visual-card-grid article{
  padding:.9vh .85vw!important;
}
#deck > section:nth-of-type(17) .card-art{
  margin-bottom:.8vh!important;
}
#deck > section:nth-of-type(17) article p{
  line-height:1.29!important;
}
#deck > section:nth-of-type(17) > .canvas-card > div:nth-child(2) > div:last-child{
  padding-top:.65vh!important;
}

#deck > section:nth-of-type(18) > .canvas-card > div:nth-child(2){
  grid-template-rows:auto auto!important;
  align-content:start!important;
  gap:2vh!important;
}
#deck > section:nth-of-type(18) div[style*="repeat(6"]{
  align-items:start!important;
}
#deck > section:nth-of-type(18) div[style*="repeat(6"] article{
  height:56vh!important;
  min-height:0!important;
  padding:1.2vh .95vw!important;
}
#deck > section:nth-of-type(18) article h3{
  margin-bottom:.55vh!important;
}
#deck > section:nth-of-type(18) article p{
  line-height:1.32!important;
}

/* === 2026-06-06 Visual QA Pass ===
   Avoid tall empty card interiors on projector screenshots; keep whitespace outside cards. */
#deck > section:nth-of-type(3) > .canvas-card > div:nth-child(2),
#deck > section[data-slide="obsidian-plugins"] > .canvas-card > div:nth-child(2),
#deck > section[data-slide="showcase"] > .canvas-card > div:nth-child(2){
  grid-template-rows:auto auto!important;
  align-content:start!important;
}
#deck > section:nth-of-type(3) .visual-card-grid,
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid,
#deck > section[data-slide="showcase"] .visual-card-grid{
  align-items:start!important;
  min-width:0!important;
  width:100%!important;
}
#deck > section:nth-of-type(3) .visual-card-grid{
  grid-template-columns:repeat(4,minmax(0,1fr))!important;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid{
  grid-template-columns:repeat(6,minmax(0,1fr))!important;
  gap:1vw!important;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article .card-art img{
  object-fit:contain!important;
  object-position:center!important;
}
#deck > section:nth-of-type(3) .visual-card-grid article,
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article,
#deck > section[data-slide="showcase"] .visual-card-grid article{
  height:auto!important;
  min-height:0!important;
}
#deck > section:nth-of-type(3) .card-art{
  height:22vh!important;
  max-height:22vh!important;
  margin-bottom:1vh!important;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article .card-art{
  height:15.5vh!important;
  max-height:15.5vh!important;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article h3{
  margin-top:0!important;
}
#deck > section[data-slide="showcase"] .card-art{
  height:24vh!important;
  max-height:24vh!important;
  flex-basis:24vh!important;
  overflow:hidden!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article{
  overflow:hidden!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article a{
  margin-top:1.2vh!important;
}
#deck > section[data-slide="demo-quick-capture"] figure img.zoomable{
  width:auto!important;
  height:calc(min(64vh,32vw) - 2.4vh)!important;
  max-width:100%!important;
  max-height:calc(min(64vh,32vw) - 2.4vh)!important;
  object-fit:contain!important;
}
/* S06: keep the restored Obsidian copy visually connected to its cards. */
#deck > section[data-slide="obsidian-workbench"] div[style*="margin-top:auto"]{
  margin-top:2.4vh!important;
}
#deck > section[data-slide="obsidian-workbench"] figure{
  box-shadow:0 1vh 2.4vh rgba(24,32,51,.1)!important;
}

#deck > section[data-slide="project-incubator"] > .canvas-card > div:nth-child(2){
  grid-template-columns:3.95fr 8.05fr!important;
}
#deck > section[data-slide="project-incubator"] > .canvas-card > div:nth-child(2) > div:last-child{
  height:min(64vh,43vw)!important;
}

/* === 2026-06-06 Showcase Copy Size Pass ===
   Enlarge copy on visual/card-heavy slides without changing their layout grids. */
#deck > section:nth-of-type(3) .visual-card-grid article p,
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article p,
#deck > section[data-slide="showcase"] .visual-card-grid article p,
#deck > section:nth-of-type(18) .visual-card-grid article p,
#deck > section:nth-of-type(19) div[style*="repeat(6"] article p{
  font-size:max(17.5px,1.04vw)!important;
  line-height:1.38!important;
}
#deck > section[data-slide="project-incubator"] .lead,
#deck > section[data-slide="project-incubator"] ul:not(#nav ul) > li,
#deck > section[data-slide="project-incubator"] ul:not(#nav ul) > li > span:not(.t-meta){
  font-size:max(18.5px,1.16vw)!important;
  line-height:1.48!important;
}
#deck > section:nth-of-type(19) div[style*="repeat(6"] article h3{
  font-size:max(20px,1.28vw)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article p,
#deck > section:nth-of-type(18) .visual-card-grid article p,
#deck > section:nth-of-type(19) div[style*="repeat(6"] article p{
  font-size:max(18.5px,1.1vw)!important;
  line-height:1.36!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article h3,
#deck > section:nth-of-type(18) .visual-card-grid article h3,
#deck > section:nth-of-type(19) div[style*="repeat(6"] article h3{
  font-size:max(21.5px,1.36vw)!important;
}
#deck > section[data-slide="project-incubator"] .lead,
#deck > section[data-slide="project-incubator"] ul:not(#nav ul) > li,
#deck > section[data-slide="project-incubator"] ul:not(#nav ul) > li > span:not(.t-meta){
  font-size:max(19.5px,1.22vw)!important;
  line-height:1.46!important;
}

/* === 2026-06-06 Demo Copy Size Pass ===
   S10-S14 are live-system showcase pages; make their explanatory copy fill the slide better. */
#deck > section[data-slide-family="demo"] .ts-display-ddd29d{
  font-size:min(5.45vw,9.6vh)!important;
}
#deck > section[data-slide-family="demo"] .lead{
  font-size:max(22px,1.38vw)!important;
  line-height:1.42!important;
  font-weight:var(--fw-body)!important;
}
#deck > section[data-slide-family="demo"] ul:not(#nav ul) > li,
#deck > section[data-slide-family="demo"] ul:not(#nav ul) > li > span:not(.t-meta),
#deck > section[data-slide-family="demo"] .ts-label-block-76c854{
  font-size:max(20.5px,1.28vw)!important;
  line-height:1.42!important;
  font-weight:var(--fw-body)!important;
}
#deck > section[data-slide-family="demo"] .t-meta{
  font-weight:var(--fw-emphasis)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article p{
  font-size:max(19.5px,1.16vw)!important;
  line-height:1.34!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article h3{
  font-size:max(23px,1.42vw)!important;
}

/* === 2026-06-06 Early Showcase Copy Size Pass ===
   S03-S08 introduce the system; make supporting copy read at projector distance. */
#deck > section:nth-of-type(3) .visual-card-grid article h3{
  font-size:max(23px,1.42vw)!important;
}
#deck > section:nth-of-type(3) .visual-card-grid article p{
  font-size:max(20px,1.2vw)!important;
  line-height:1.38!important;
}
#deck > section:nth-of-type(5) ul:not(#nav ul) > li,
#deck > section:nth-of-type(5) ul:not(#nav ul) > li > span:not(.t-meta){
  font-size:max(21px,1.3vw)!important;
  line-height:1.5!important;
}
#deck > section[data-slide="obsidian-workbench"] .lead{
  font-size:max(20px,1.24vw)!important;
  line-height:1.44!important;
}
#deck > section[data-slide="obsidian-workbench"] article h3{
  font-size:max(21px,1.3vw)!important;
}
#deck > section[data-slide="obsidian-workbench"] article p{
  font-size:max(18.5px,1.08vw)!important;
  line-height:1.36!important;
}
#deck > section[data-slide="obsidian-plugins"] .ts-standalone-body-9bf354{
  font-size:max(20px,1.24vw)!important;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article h3{
  font-size:max(22px,1.36vw)!important;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article p{
  font-size:max(18.5px,1.08vw)!important;
  line-height:1.32!important;
}
#deck > section:nth-of-type(8) ul:not(#nav ul) > li,
#deck > section:nth-of-type(8) ul:not(#nav ul) > li > span:not(.t-meta){
  font-size:max(23px,1.42vw)!important;
  line-height:1.48!important;
}
#deck > section:nth-of-type(2) article p{
  font-size:max(18.8px,1.12vw)!important;
  line-height:1.42!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article a{
  font-size:max(18.5px,1.1vw)!important;
  line-height:1.28!important;
}
#deck > section[data-contact-slide="true"] figcaption{
  font-size:max(18px,1.05vw)!important;
  line-height:1.36!important;
}
#deck > section[data-contact-slide="true"] .talk-resource-caption{
  display:flex!important;
  flex-direction:column!important;
  gap:.48vh!important;
}
#deck > section[data-contact-slide="true"] .talk-open-note{
  color:var(--text-secondary)!important;
  font-size:max(15px,.86vw)!important;
  line-height:1.34!important;
}
#deck > section[data-contact-slide="true"] .talk-pdf-link{
  width:fit-content!important;
  color:var(--accent)!important;
  font-size:max(16px,.94vw)!important;
  font-weight:600!important;
  line-height:1.28!important;
  text-decoration:none!important;
}
#deck > section[data-contact-slide="true"] .talk-pdf-link:hover{
  text-decoration:underline!important;
  text-underline-offset:.16em!important;
}

/* === 2026-06-06 S18 Bullet Card Pass ===
   Keep the restored copy, but break each decision card into scannable points. */
#deck > section:nth-of-type(18) > .canvas-card > div:nth-child(2){
  gap:1.45vh!important;
}
#deck > section:nth-of-type(18) .visual-card-grid{
  align-items:stretch!important;
}
#deck > section:nth-of-type(18) .visual-card-grid article{
  min-height:55vh!important;
  padding:1.2vh 1vw!important;
}
#deck > section:nth-of-type(18) .card-art{
  height:17.5vh!important;
  max-height:17.5vh!important;
  margin-bottom:.75vh!important;
  padding:.6vh!important;
  background:var(--paper)!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
}
#deck > section:nth-of-type(18) .card-art img{
  width:auto!important;
  height:100%!important;
  max-width:100%!important;
  max-height:100%!important;
  object-fit:contain!important;
  object-position:center!important;
}
#deck > section:nth-of-type(18) .card-bullets{
  list-style:disc!important;
  margin:.2vh 0 0!important;
  padding-left:1.05em!important;
  display:flex!important;
  flex-direction:column!important;
  gap:.72vh!important;
  color:var(--text-primary)!important;
}
#deck > section:nth-of-type(18) article[style*="background:var(--accent)"] .card-bullets{
  color:rgba(255,255,255,.96)!important;
}
#deck > section:nth-of-type(18) .card-bullets li{
  display:list-item!important;
  border-top:0!important;
  padding:0!important;
  font-size:max(19px,1.13vw)!important;
  line-height:1.34!important;
  font-weight:var(--fw-body)!important;
  color:inherit!important;
}
#deck > section:nth-of-type(18) .card-bullets li::before{
  content:none!important;
}
#deck > section:nth-of-type(18) .card-bullets li::marker{
  color:var(--accent);
}
#deck > section:nth-of-type(18) article[style*="background:var(--accent)"] .card-bullets li::marker{
  color:var(--dark-emphasis);
}
#deck > section:nth-of-type(18) .card-bullets strong{
  color:var(--accent)!important;
  font-weight:var(--fw-strong)!important;
}
#deck > section:nth-of-type(18) article[style*="background:var(--accent)"] .card-bullets strong{
  color:var(--dark-emphasis)!important;
  font-weight:var(--fw-strong)!important;
}

/* === 2026-06-06 Keyword Emphasis Pass === */
#deck p strong,
#deck li strong,
#deck span strong{
  color:var(--accent)!important;
}
#deck .dark p strong,
#deck .dark li strong,
#deck .accent p strong,
#deck .accent li strong,
#deck article[style*="background:var(--accent)"] p strong,
#deck article[style*="background:var(--accent)"] span strong{
  color:var(--dark-emphasis)!important;
}

/* === 2026-06-06 Requested Slide Polish Pass ===
   Scoped fixes from the final visual review; keep global typography unchanged. */
#deck > section:nth-of-type(3) > .canvas-card > div:nth-child(2){
  gap:2.9vh!important;
}
#deck > section:nth-of-type(3) .visual-card-grid{
  align-items:stretch!important;
  margin-top:1.1vh!important;
}
#deck > section:nth-of-type(3) .visual-card-grid article{
  height:46vh!important;
  min-height:46vh!important;
  justify-content:flex-start!important;
}

#deck > section:nth-of-type(5) ul:not(#nav ul) > li{
  display:grid!important;
  grid-template-columns:5.15em minmax(0,1fr)!important;
  column-gap:1.15vw!important;
  align-items:start!important;
  padding:1.05vh 0!important;
  text-indent:0!important;
}
#deck > section:nth-of-type(5) ul:not(#nav ul) > li strong{
  display:block!important;
  grid-column:1!important;
  white-space:nowrap!important;
  color:var(--accent)!important;
}

#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article p br{
  display:block!important;
  content:""!important;
  margin-bottom:.42vh!important;
}

#deck > section:nth-of-type(8) .t-meta{
  font-size:max(23px,1.42vw)!important;
  line-height:1.48!important;
  letter-spacing:.04em!important;
  font-weight:var(--fw-emphasis)!important;
}

#deck > section[data-slide-family="demo"] .t-meta{
  font-size:max(20.5px,1.28vw)!important;
  line-height:1.42!important;
  letter-spacing:.05em!important;
  font-weight:var(--fw-emphasis)!important;
}

#deck > section[data-slide="showcase"] .visual-card-grid{
  align-items:stretch!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article{
  height:65.5vh!important;
  min-height:65.5vh!important;
}
#deck > section[data-slide="showcase"] .card-art{
  height:25.5vh!important;
  max-height:25.5vh!important;
  flex:0 0 25.5vh!important;
  overflow:hidden!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  padding:.7vh!important;
  box-sizing:border-box!important;
}
#deck > section[data-slide="showcase"] .card-art img{
  width:auto!important;
  height:100%!important;
  max-width:100%!important;
  max-height:100%!important;
  object-fit:contain!important;
  object-position:center!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1){
  background:var(--grey-1)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1) h3{
  color:var(--text-primary)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1) p{
  color:var(--text-secondary)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1) p strong{
  color:var(--accent)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1) .t-meta,
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1) a{
  color:var(--accent)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1) .card-art,
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(1) a{
  border-color:var(--border-subtle)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(3){
  background:var(--accent)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(3) h3{
  color:var(--accent-on)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(3) p{
  color:rgba(255,255,255,.9)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(3) p strong{
  color:var(--dark-emphasis)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(3) .t-meta{
  color:rgba(255,255,255,.88)!important;
}
#deck > section[data-slide="showcase"] .visual-card-grid article:nth-child(3) .card-art{
  border-color:rgba(255,255,255,.22)!important;
}

#deck > section:nth-of-type(18) .visual-card-grid{
  width:min(100%,82vw)!important;
  justify-self:center!important;
  align-items:stretch!important;
  gap:1.25vw!important;
}
#deck > section:nth-of-type(18) .visual-card-grid article{
  min-height:60vh!important;
  padding:1.35vh 1.05vw!important;
}
#deck > section:nth-of-type(18) .card-art{
  height:19.6vh!important;
  max-height:19.6vh!important;
}

#deck > section:nth-of-type(19) .s19-card-points{
  list-style:disc!important;
  margin:0!important;
  padding-left:1.05em!important;
  display:flex!important;
  flex-direction:column!important;
  gap:.48vh!important;
  color:var(--text-primary)!important;
}
#deck > section:nth-of-type(19) article[style*="background:var(--accent)"] .s19-card-points{
  color:rgba(255,255,255,.96)!important;
}
#deck > section:nth-of-type(19) .s19-card-points li{
  display:list-item!important;
  border-top:0!important;
  padding:0!important;
  font-size:max(18px,1.05vw)!important;
  line-height:1.34!important;
  font-weight:var(--fw-body)!important;
  color:inherit!important;
}
#deck > section:nth-of-type(19) .s19-card-points li::before{
  content:none!important;
}
#deck > section:nth-of-type(19) .s19-card-points li::marker{
  color:var(--accent);
}
#deck > section:nth-of-type(19) article[style*="background:var(--accent)"] .s19-card-points li::marker,
#deck > section:nth-of-type(19) article[style*="background:var(--accent)"] .s19-card-points strong{
  color:var(--dark-emphasis)!important;
}

#deck > section:nth-of-type(20) .lead{
  font-size:max(25px,1.62vw)!important;
  line-height:1.5!important;
  max-width:62ch!important;
}

#deck > section[data-slide="appendix-skills-crons"] .canvas-card > div:nth-child(2){
  padding:1.55vh 0 .35vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] .canvas-card > div:nth-child(2) > div{
  gap:1.16vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] .ts-section-title-ce5393{
  font-size:min(3.55vw,6.1vh)!important;
  font-weight:var(--fw-title)!important;
}
#deck > section[data-slide="appendix-skills-crons"] .ts-label-block-6a491e{
  font-size:max(15px,1.08vw)!important;
  line-height:1.34!important;
  padding-top:.68vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] ul{
  margin:.2vh 0 .5vh!important;
}
#deck > section[data-slide="appendix-skills-crons"] li{
  padding:.44vh 0!important;
}
#deck > section[data-slide="appendix-skills-crons"] ul:not(#nav ul) > li,
#deck > section[data-slide="appendix-skills-crons"] ul:not(#nav ul) > li > span:not(.t-meta),
#deck > section[data-slide="appendix-skills-crons"] .ts-inline-note-d998c2,
#deck > section[data-slide="appendix-skills-crons"] .ts-inline-note-2e04a0{
  line-height:1.42!important;
}

/* S22 resources: category labels such as "知识库" should read like subheads. */
#deck > section[data-slide="appendix-resources"] .ts-label-block-6a491e{
  font-size:max(20px,1.28vw)!important;
  line-height:1.34!important;
  font-weight:var(--fw-emphasis)!important;
  padding:.34vh .6vw .28vh!important;
}

/* S07 plugin cards: keep all six cards at one consistent row height. */
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid{
  align-items:stretch!important;
}
#deck > section[data-slide="obsidian-plugins"] .visual-card-grid article{
  box-sizing:border-box!important;
  height:53.5vh!important;
  min-height:53.5vh!important;
}

/* S10-S12 financial scenario copy: heavier body, color-only keyword separation. */
#deck > section[data-slide-family="demo"] .ts-label-block-76c854{
  font-weight:600!important;
}
#deck > section[data-slide-family="demo"] .ts-label-block-76c854 strong{
  color:var(--accent)!important;
  font-weight:inherit!important;
}
#deck > section[data-slide-family="demo"] div.ts-label-block-76c854[style*="font-family:var(--sans)"],
#deck > section[data-slide-family="demo"] div.ts-label-block-76c854[style*="font-family:var(--sans)"] strong{
  font-weight:600!important;
}

/* S06/S16 screenshot handling after replacing abstract assets with real previews. */
#deck > section[data-slide="obsidian-workbench"] figure img.zoomable{
  object-position:center center!important;
}
#deck > section[data-slide="project-incubator"] figure img[src*="s16-incubator-vocal-coach"]{
  object-fit:contain!important;
  object-position:center center!important;
}
#deck > section[data-slide="project-incubator"] figure img[src*="s16-incubator-project-management"]{
  object-position:left top!important;
}
