/* ============================================================
 * Web PPT · Academic Clarity Design System
 * Cloud White canvas · Academic Blue brand · Cool neutrals
 * 方正大黑简体(标题) · 方正正中黑简体(正文) · 教学宣讲风格
 * ============================================================ */

/* ====== 方正字体 @font-face ====== */
@font-face {
  font-family: 'FZDaHei';
  src: url('./fonts/FZDaHeiJW.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: 'FZZZhongHei';
  src: url('./fonts/FZZZhongHeiJW.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html, body {
  width: 100%;
  height: 100%;
  overflow: hidden;
  background: #f8fafc;  /* Cloud White · 主背景 */
  color: #1e293b;       /* Slate 800 */
  font-family: 'FZZZhongHei', system-ui, -apple-system,
               "思源黑体 CN", "Source Han Sans CN",
               "PingFang SC", "Microsoft YaHei", Arial, sans-serif;
  font-size: 16px;
  line-height: 1.6;
  user-select: none;
  -webkit-user-select: none;
}

:root {
  /* ============ Academic Clarity · 完整色板 ============ */
  /* Primary surfaces */
  --bg-page:       #f8fafc;  /* Cloud White · 主画布 */
  --bg-card:       #ffffff;  /* Pure White · 卡片 */
  --bg-card-2:     #ffffff;  /* Pure White · 强对比元素 */
  --bg-sand:       #f1f5f9;  /* Slate 100 · 按钮底/浅灰 */
  --bg-dark:       #0f172a;  /* Slate 900 · 深色段落 */
  --bg-dark-2:     #1e293b;  /* Slate 800 · Dark Surface */

  /* Text (cool slate) */
  --text-title:    #0f172a;  /* Slate 900 · 标题 */
  --text-body:     #334155;  /* Slate 700 · 正文 */
  --text-sub:      #475569;  /* Slate 600 · 次要 */
  --text-muted:    #64748b;  /* Slate 500 · 辅助文字 */
  --text-dim:      #94a3b8;  /* Slate 400 · 弱化文字 */
  --text-on-dark:  #e2e8f0;  /* Slate 200 · 深底白字 */

  /* Brand */
  --brand-primary: #1e40af;  /* Academic Blue · CTA / 品牌主色 */
  --brand-coral:   #3b82f6;  /* Sky Blue · 次强调/链接 */

  /* Semantic */
  --accent-red:    #dc2626;  /* Error Red · 警示 */
  --accent-blue:   #2563eb;  /* Focus Blue · 仅输入焦点 */

  /* 辅助功能色 */
  --accent-olive:  #059669;  /* Emerald · 成功/正向 */
  --accent-amber:  #d97706;  /* Amber · 强调/数据 */

  /* Borders */
  --border-light:  #e2e8f0;  /* Slate 200 · 默认 */
  --border-warm:   #cbd5e1;  /* Slate 300 · 强调 */
  --border-dark:   #1e293b;  /* Slate 800 · 深色段落边框 */

  /* Font stacks */
  --font-title:    'FZDaHei', "思源黑体 CN", system-ui, sans-serif;
  --font-body:     'FZZZhongHei', "思源黑体 CN", system-ui, sans-serif;
  --font-serif:    Georgia, "思源宋体", "宋体", serif;

  /* Ring / Shadow */
  --ring-warm:     #e2e8f0;
  --ring-deep:     #cbd5e1;
  --shadow-ring:   0 0 0 1px var(--ring-warm);
  --shadow-whisper: rgba(0, 0, 0, 0.04) 0 4px 24px;
  --shadow-card:   rgba(0, 0, 0, 0.03) 0 2px 12px;

  /* Animation rhythm */
  --ease-editorial: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-slow:      cubic-bezier(0.25, 0.1, 0.25, 1);
  --dur-fast:       0.35s;
  --dur-normal:     0.5s;
  --dur-slow:       0.8s;

  /* 旧变量别名(保持 slides.css 引用不变) */
  --bg-page-2:          var(--bg-card);
  --bg-card-tint:       #f1f5f9;
  --brand-gold:         var(--accent-amber);
  --brand-gold-deep:    #d97706;
  --brand-gold-shadow:  #92400e;
  --brand-blue:         var(--brand-primary);
  --brand-blue-light:   var(--brand-coral);
  --brand-blue-deep:    var(--text-title);
  --brand-primary-2:    var(--brand-primary);
  --brand-secondary:    var(--brand-coral);
  --brand-light:        #eff6ff;
  --color-terracotta:   var(--brand-primary);
  --accent-gold:        var(--accent-amber);
  --accent-gold-2:      var(--brand-primary);
  --accent-gold-bg:     #eff6ff;
  --accent-red-2:       var(--accent-red);
  --accent-green:       var(--accent-olive);
  --accent-green-2:     var(--accent-olive);
  --accent-orange:      var(--brand-primary);
  --accent-orange-2:    var(--brand-coral);
  --accent-purple:      #6d28d9;
  --panel-bg:           transparent;
  --panel-border:       var(--border-warm);

  /* ============ 内容填充度 · 全镜头统一 ============
   * 所有 .slide 的内容(文字/图/留白)按此比例等比放大,
   * 提高 1920×1080 舞台的视觉填充度。
   *   1.00 = 原始尺寸
   *   1.07 = 默认 · 视觉放大 7%(对应吃掉每边 ~67px 留白,
   *          全镜头 60+px padding 可吸收,不剪裁内容元素)
   *   单页可用 .slide--sN { --content-scale: X } 覆盖。
   * ====================================== */
  --content-scale: 1.07;
}

/* ============ 舞台 · 1920x1080 ============ */
.deck {
  width: 1920px;
  height: 1080px;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%) scale(var(--stage-scale, 1));
  transform-origin: center center;
  overflow: hidden;
  background: var(--bg-page);  /* Cloud White */
}

/* 科技感网格背景 · 参考图风格 */
.deck-bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background-image:
    linear-gradient(rgba(30, 64, 175, 0.12) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30, 64, 175, 0.12) 1px, transparent 1px);
  background-size: 80px 80px;
}

/* 顶部蓝色辉光装饰条 */
.deck-bar-top {
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 5px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(30, 64, 175, 0.6) 20%,
    rgba(59, 130, 246, 1) 50%,
    rgba(30, 64, 175, 0.6) 80%,
    transparent 100%);
  box-shadow: 0 2px 16px rgba(59, 130, 246, 0.5);
  z-index: 10;
}

/* 底部蓝色辉光装饰条 */
.deck-bar-bottom {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  height: 5px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(30, 64, 175, 0.6) 20%,
    rgba(59, 130, 246, 1) 50%,
    rgba(30, 64, 175, 0.6) 80%,
    transparent 100%);
  box-shadow: 0 -2px 16px rgba(59, 130, 246, 0.5);
  z-index: 10;
}

/* 左侧装饰竖线 */
.deck-corner {
  display: block !important;
  position: absolute;
  z-index: 10;
  pointer-events: none;
}
.deck-corner.tl {
  top: 20px; left: 20px;
  width: 40px; height: 40px;
  border-top: 2px solid rgba(30, 64, 175, 0.3);
  border-left: 2px solid rgba(30, 64, 175, 0.3);
}
.deck-corner.tr {
  top: 20px; right: 20px;
  width: 40px; height: 40px;
  border-top: 2px solid rgba(30, 64, 175, 0.3);
  border-right: 2px solid rgba(30, 64, 175, 0.3);
}
.deck-corner.bl {
  bottom: 20px; left: 20px;
  width: 40px; height: 40px;
  border-bottom: 2px solid rgba(30, 64, 175, 0.3);
  border-left: 2px solid rgba(30, 64, 175, 0.3);
}
.deck-corner.br {
  bottom: 20px; right: 20px;
  width: 40px; height: 40px;
  border-bottom: 2px solid rgba(30, 64, 175, 0.3);
  border-right: 2px solid rgba(30, 64, 175, 0.3);
}
.deck-corner { display: none; }

/* ============ 顶部导航条 · 极简 ============ */
.deck-topbar {
  position: absolute; top: 0; left: 0; right: 0; height: 64px;
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 60px;
  z-index: 20;
  pointer-events: none;
  border-bottom: 1px solid var(--border-light);
}
.deck-title {
  font-family: var(--font-title);
  font-size: 20px;
  color: var(--text-title);
  letter-spacing: 0.2px;
  font-weight: 500;
}
.deck-title .meta {
  font-family: var(--font-body);
  color: var(--text-muted);
  font-weight: 400;
  margin-left: 14px;
  font-size: 15px;
  letter-spacing: 0.1px;
}

.deck-progress {
  display: flex; align-items: center; gap: 10px;
  font-size: 14px; color: var(--text-muted);
  font-family: "SF Mono", "Cascadia Code", Consolas, monospace;
}
.deck-progress .pagenum {
  color: var(--brand-primary);
  font-weight: 500;
  font-size: 18px;
  min-width: 40px;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.deck-progress .sep { opacity: 0.4; }
.deck-progress .total { opacity: 0.6; }

/* 镜头 1 片头: JS toggle 隐藏全局顶栏 */
.deck-topbar.hide { display: none; }

/* ============ 底部页码点 ============ */
.deck-bottom {
  position: absolute; bottom: 10px; left: 0; right: 0;
  display: flex; align-items: center; justify-content: center;
  gap: 14px;
  z-index: 20;
  pointer-events: auto;
  padding: 0 40px;
}
.dots {
  display: flex;
  gap: 4px;
  flex-wrap: nowrap;
  max-width: 1600px;
}
.dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--ring-warm);
  border: none;
  cursor: pointer;
  transition: all 0.2s ease;
  flex: 0 0 auto;
}
.dot.active {
  background: var(--brand-primary);
  width: 18px; border-radius: 4px;
  box-shadow: var(--shadow-ring);
}
.dot:hover { background: var(--brand-coral); }

/* ============ 分镜元信息(顶部)· 暖色极简 ============ */
.shot-meta {
  position: absolute;
  top: 14px; left: 60px;
  display: flex;
  gap: 10px;
  align-items: center;
  z-index: 15;
  pointer-events: none;
  font-family: var(--font-body);
}
.shot-no {
  background: var(--brand-primary);
  color: #ffffff;
  padding: 4px 12px;
  border-radius: 8px;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.2px;
}
.shot-time {
  background: var(--bg-sand);
  color: var(--text-sub);
  padding: 4px 10px;
  border-radius: 8px;
  font-size: 11px;
  font-family: "SF Mono", "Cascadia Code", Consolas, monospace;
}
.shot-type {
  padding: 4px 10px;
  border-radius: 8px;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.3px;
}
.shot-type.full { background: var(--text-title); color: #ffffff; }
.shot-type.pip  { background: var(--brand-primary); color: #ffffff; }
.shot-type.ms   { background: var(--accent-olive); color: #ffffff; }
.shot-desc {
  color: var(--text-muted);
  font-size: 12px;
  padding: 4px 10px;
}

/* ============ 底部旁白 · editorial 页脚风 ============ */
.shot-narration {
  position: absolute;
  left: 60px; right: 60px; bottom: 38px;
  padding: 16px 24px;
  background: var(--bg-card);
  color: var(--text-body);
  font-size: 15px;
  line-height: 1.6;
  border-radius: 12px;
  border: 1px solid var(--border-light);
  border-left: 3px solid var(--brand-primary);
  box-shadow: var(--shadow-card);
  z-index: 12;
  letter-spacing: 0;
  max-width: 1400px;
  font-family: var(--font-body);
}
.shot-narration .ntag {
  display: inline-block;
  background: var(--brand-primary);
  color: #ffffff;
  font-weight: 500;
  font-size: 10px;
  padding: 2px 8px;
  border-radius: 4px;
  margin-right: 10px;
  letter-spacing: 0.5px;
  vertical-align: middle;
  font-family: var(--font-body);
  text-transform: uppercase;
}
.slide--pip .shot-narration { right: 420px; }

/* ============ 幻灯片容器 ============ */
.slide {
  position: absolute; inset: 64px 0 40px 0;
  display: none;
  z-index: 5;
  padding: 26px 60px 16px 60px;
}
.slide.active {
  display: block;
  animation: slideIn var(--dur-normal, 0.6s) var(--ease-editorial, cubic-bezier(0.4,0,0.2,1));
  transform: scale(var(--content-scale, 1));     /* ★ 内容等比放大,填充度提升 */
  transform-origin: center center;               /* ★ 中心对齐,避免单边偏移 */
}
.slide-sbs.active, .slide-full.active { display: block; }

/* slideIn 动画:把 --content-scale 写进入场关键帧,避免动画结束时尺寸跳变 */
@keyframes slideIn {
  from { opacity: 0; transform: translateY(8px) scale(var(--content-scale, 1)); }
  to   { opacity: 1; transform: translateY(0)   scale(var(--content-scale, 1)); }
}

.slide-content {
  position: relative;
  height: 100%;
  overflow: hidden;
}

/* ============ AI 动画 iframe 容器 · 去边框融合 ============ */
.slide-anim {
  border-radius: 0;
  overflow: hidden;
  background: transparent;
  position: relative;
  border: none;
  box-shadow: none;
}
.slide-anim iframe {
  width: 100%; height: 100%;
  border: 0;
  display: block;
  background: transparent;
}
.slide-anim .anim-label {
  position: absolute;
  top: 10px; left: 12px;
  background: rgba(30, 64, 175, 0.1);
  color: var(--brand-primary);
  font-size: 12px;
  padding: 4px 10px;
  border-radius: 6px;
  letter-spacing: 0.3px;
  z-index: 2;
  pointer-events: none;
  font-weight: 500;
  font-family: var(--font-body);
}

/* ============ 矩形教师视频占位 ============ */
.slide-video {
  position: relative;
  border-radius: 12px;
  overflow: hidden;
  background: var(--bg-card);
  border: 1px solid var(--border-light);
}
.slide-video video, .slide-video .video-stub {
  width: 100%; height: 100%;
  object-fit: cover;
}
.video-stub {
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  background: var(--bg-card);
  color: var(--text-muted);
  font-size: 16px; letter-spacing: 0.3px;
  gap: 14px;
  position: relative;
}
.video-stub::before {
  content: "▶";
  width: 68px; height: 68px;
  border-radius: 50%;
  background: var(--bg-sand);
  border: 1px solid var(--ring-warm);
  color: var(--brand-primary);
  font-size: 24px;
  line-height: 68px;
  text-align: center;
  padding-left: 5px;
}
.video-stub .label {
  color: var(--text-title);
  font-weight: 500;
  letter-spacing: 0.3px;
  font-size: 16px;
}
.video-stub .hint-text {
  font-size: 11px;
  color: var(--text-dim);
  font-family: "SF Mono", "Cascadia Code", Consolas, monospace;
}

/* ============ FULL 分镜:Terracotta 圆框教师 ============ */
.teacher-circle {
  position: absolute;
  right: 46px; bottom: 24px;
  width: 210px; height: 210px;
  border-radius: 50%;
  overflow: hidden;
  border: 3px solid var(--brand-primary);
  box-shadow: var(--shadow-whisper),
              0 0 0 6px rgba(245, 244, 237, 0.9);
  z-index: 10;
  background: var(--bg-card);
}
.teacher-circle video, .teacher-circle .video-stub {
  width: 100%; height: 100%; object-fit: cover;
}
.teacher-circle .video-stub {
  font-size: 12px; letter-spacing: 0.3px;
  gap: 8px;
  background: var(--bg-card);
}
.teacher-circle .video-stub::before {
  width: 44px; height: 44px; font-size: 18px; line-height: 44px;
}
.teacher-circle .video-stub .label {
  font-size: 13px; letter-spacing: 0.5px;
}
.teacher-circle .video-stub .hint-text { display: none; }

/* ============ PIP 分镜:右侧抠像蒙板 ============ */
.teacher-mask {
  position: relative;
  height: 100%;
  background: transparent;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: center;
  overflow: hidden;
}
.teacher-mask video {
  width: 100%; height: 100%;
  object-fit: contain;
  background: transparent;
}
.teacher-mask .mask-stub {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  position: relative;
  background: transparent;
}
.teacher-mask .mask-stub::before {
  content: "";
  flex: 1;
  width: 78%;
  max-height: 80%;
  background: linear-gradient(180deg,
    rgba(30, 64, 175, 0.28) 0%,
    rgba(30, 64, 175, 0.12) 60%,
    rgba(30, 64, 175, 0.02) 100%);
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 140'><circle cx='50' cy='25' r='18'/><path d='M 18 140 Q 18 60 50 60 Q 82 60 82 140 Z'/></svg>") no-repeat center bottom / contain;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 140'><circle cx='50' cy='25' r='18'/><path d='M 18 140 Q 18 60 50 60 Q 82 60 82 140 Z'/></svg>") no-repeat center bottom / contain;
}
.teacher-mask .mask-stub .mask-label {
  position: absolute;
  bottom: 18px;
  color: var(--text-title);
  font-size: 13px;
  letter-spacing: 0.3px;
  font-weight: 500;
  background: var(--bg-card);
  padding: 4px 12px;
  border-radius: 8px;
  border: 1px solid var(--border-warm);
  box-shadow: var(--shadow-card);
  font-family: var(--font-body);
}
.teacher-mask .mask-stub .mask-hint {
  position: absolute;
  bottom: 0;
  color: var(--text-dim);
  font-size: 10px;
  letter-spacing: 0.1px;
  font-family: "SF Mono", "Cascadia Code", Consolas, monospace;
}

/* ============ 通用装饰 slide-head ============ */
.slide-head {
  display: flex; align-items: center; gap: 14px;
  margin-bottom: 18px;
}
.slide-head .chip {
  background: var(--brand-primary);
  color: #ffffff;
  padding: 5px 14px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0.3px;
  box-shadow: 0 0 0 1px rgba(30, 64, 175, 0.2);
  flex: 0 0 auto;
  font-family: var(--font-body);
}
.slide-head h2 {
  font-size: 36px;
  font-weight: 500;
  color: var(--text-title);
  letter-spacing: 0;
  line-height: 1.2;
  font-family: var(--font-title);
}
.slide-head .sub {
  color: var(--text-muted);
  font-size: 15px;
  letter-spacing: 0.1px;
  margin-left: auto;
  font-weight: 400;
  font-family: var(--font-body);
}

.golden-line {
  height: 1px;
  background: var(--border-warm);
  margin: 4px 0 18px 0;
}

/* ============ 通用卡片 · Ivory + border-cream ============ */
.card {
  background: var(--bg-card);
  border: 1px solid var(--border-light);
  border-radius: 10px;
  padding: 18px 24px;
  box-shadow: var(--shadow-card);
  position: relative;
}
.card.green  { border-left: 3px solid var(--accent-olive); }
.card.orange { border-left: 3px solid var(--brand-primary); }
.card.red    { border-left: 3px solid var(--accent-red); }
.card.gold   { border-left: 3px solid var(--accent-amber); }
.card.blue   { border-left: 3px solid var(--brand-coral); }

.card-tag {
  display: inline-block;
  font-size: 13px; font-weight: 500; letter-spacing: 0.3px;
  padding: 3px 12px;
  border-radius: 6px;
  margin-bottom: 10px;
  color: #ffffff;
  font-family: var(--font-body);
}
.card.green  .card-tag { background: var(--accent-olive); }
.card.orange .card-tag { background: var(--brand-primary); }
.card.red    .card-tag { background: var(--accent-red); }
.card.gold   .card-tag { background: var(--accent-amber); color: #ffffff; }
.card.blue   .card-tag { background: var(--brand-coral); }

.big-number {
  font-family: Georgia, "思源宋体", serif;
  font-size: 52px;
  font-weight: 500;
  color: var(--brand-primary);
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

/* ============ 通用动画 ============ */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes riseIn {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.92); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes popIn {
  0%   { opacity: 0; transform: scale(0.6); }
  60%  { opacity: 1; transform: scale(1.02); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes wipeRight {
  from { clip-path: inset(0 100% 0 0); opacity: 0; }
  to   { clip-path: inset(0 0 0 0); opacity: 1; }
}

.slide.active .stagger > * {
  animation: riseIn var(--dur-normal, 0.6s) var(--ease-editorial, cubic-bezier(0.4,0,0.2,1)) both;
}
.slide.active .stagger > :nth-child(1)  { animation-delay: 0.15s; }
.slide.active .stagger > :nth-child(2)  { animation-delay: 0.30s; }
.slide.active .stagger > :nth-child(3)  { animation-delay: 0.45s; }
.slide.active .stagger > :nth-child(4)  { animation-delay: 0.60s; }
.slide.active .stagger > :nth-child(5)  { animation-delay: 0.75s; }
.slide.active .stagger > :nth-child(6)  { animation-delay: 0.90s; }
.slide.active .stagger > :nth-child(7)  { animation-delay: 1.05s; }
.slide.active .stagger > :nth-child(8)  { animation-delay: 1.20s; }

/* ============ 左下开发提示 ============ */
.deck-tips {
  position: fixed;
  left: 16px; bottom: 16px;
  font-size: 11px;
  color: var(--text-dim);
  background: var(--bg-card);
  padding: 6px 12px;
  border-radius: 8px;
  font-family: "SF Mono", "Cascadia Code", Consolas, monospace;
  z-index: 9999;
  pointer-events: none;
  border: 1px solid var(--border-light);
}

/* ============ 录制按钮(右下固定)· Terracotta ============ */
.rec-btn {
  position: fixed;
  bottom: 20px; right: 20px;
  z-index: 10000;
  background: var(--brand-primary);
  color: #ffffff;
  border: none;
  border-radius: 10px;
  padding: 11px 22px;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.3px;
  cursor: pointer;
  box-shadow: 0 0 0 1px rgba(30, 64, 175, 0.3),
              var(--shadow-whisper);
  user-select: none;
  transition: transform 0.15s, box-shadow 0.15s;
  font-family: var(--font-body);
  display: flex;
  align-items: center;
  gap: 10px;
}
.rec-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 0 0 1px var(--brand-primary),
              rgba(0, 0, 0, 0.08) 0 6px 24px;
}
.rec-btn::before {
  content: "";
  width: 10px; height: 10px;
  border-radius: 50%;
  background: #ffffff;
  animation: recPulse 1.6s ease-in-out infinite;
}
@keyframes recPulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.4; transform: scale(0.7); }
}

/* ============ 录制区域虚线框 · Terracotta ============ */
.rec-safe-frame {
  position: fixed;
  pointer-events: none;
  border: 1px dashed rgba(30, 64, 175, 0.5);
  border-radius: 0;
  z-index: 9997;
}
.rec-safe-frame .rec-safe-label {
  position: absolute;
  top: -28px; left: 0;
  background: var(--brand-primary);
  color: #ffffff;
  padding: 4px 12px;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 500;
  font-family: "SF Mono", "Cascadia Code", Consolas, monospace;
  letter-spacing: 0.3px;
  white-space: nowrap;
}
.rec-safe-frame-corner {
  position: absolute;
  width: 16px; height: 16px;
  border: 2px solid var(--brand-primary);
}
.rec-safe-frame-corner.tl { top: -2px; left: -2px;   border-right: none; border-bottom: none; }
.rec-safe-frame-corner.tr { top: -2px; right: -2px;  border-left: none;  border-bottom: none; }
.rec-safe-frame-corner.bl { bottom: -2px; left: -2px;   border-right: none; border-top: none; }
.rec-safe-frame-corner.br { bottom: -2px; right: -2px;  border-left: none;  border-top: none; }

/* ============ 录制模式 ============ */
body.recording .deck-tips,
body.recording .rec-btn,
body.recording .rec-safe-frame,
body.recording .shot-meta,
body.recording .shot-narration,
body.recording .deck-topbar,
body.recording .deck-bottom,
body.recording .deck-bar-top,
body.recording .deck-bar-bottom,
body.recording .deck-corner {
  display: none !important;
}
body.recording .slide {
  inset: 0 !important;
}
body.recording .slide--full,
body.recording .slide--pip.active,
body.recording .slide--ms {
  padding-top: 80px !important;
  padding-bottom: 20px !important;
}

/* ============ Lottie 动画容器 · Claude Design System 融合 ============ */
.lottie-wrap {
  position: relative;
  border-radius: 12px;
  overflow: hidden;
  background: var(--bg-card);
  border: 1px solid var(--border-light);
  box-shadow: var(--shadow-card);
}
.lottie-wrap.lottie-full {
  position: absolute;
  inset: 0;
  border-radius: 0;
  border: none;
  background: transparent;
  box-shadow: none;
}
.lottie-wrap.lottie-center {
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  box-shadow: none;
}
.lottie-wrap canvas,
.lottie-wrap svg {
  width: 100% !important;
  height: 100% !important;
}
/* Lottie 标签(iframe 内) */
lottie-player {
  width: 100%;
  height: 100%;
  border: none;
  background: transparent;
}

/* ============ anime.js 交错动画辅助类 ============ */
.anim-stagger > * {
  opacity: 0;
}
.anim-stagger.active > * {
  opacity: 1;
}

/* ============ 星空闪烁层(shot 24b) ============ */
.starfield-layer {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 1;
}

/* ============ 图文交互增强 · 参考图风格 ============ */

/* 通用卡片增强 · 半透明毛玻璃 */
.slide-card {
  background: rgba(255, 255, 255, 0.85);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid rgba(30, 64, 175, 0.12);
  border-radius: 16px;
  box-shadow:
    0 4px 24px rgba(30, 64, 175, 0.06),
    0 1px 3px rgba(0, 0, 0, 0.04);
  padding: 32px 40px;
}

/* 圆形关系图容器 · 参考图核心元素 */
.eco-ring {
  position: relative;
  width: 480px;
  height: 480px;
  margin: 0 auto;
}
.eco-ring-center {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 120px; height: 120px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--brand-primary);
  border-radius: 50%;
  box-shadow: 0 0 40px rgba(30, 64, 175, 0.25);
  z-index: 2;
}
.eco-ring-center svg {
  width: 60px; height: 60px;
  fill: #ffffff;
}
.eco-ring-node {
  position: absolute;
  width: 72px; height: 72px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #ffffff;
  border: 2px solid rgba(30, 64, 175, 0.15);
  border-radius: 50%;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
  z-index: 3;
}
.eco-ring-node svg {
  width: 36px; height: 36px;
  fill: var(--brand-primary);
}

/* 标题增强 · 参考图大字风格 */
.slide-heading {
  font-family: var(--font-title);
  font-size: 56px;
  font-weight: 700;
  color: var(--text-title);
  line-height: 1.2;
  letter-spacing: -0.5px;
  margin-bottom: 16px;
}

/* 要点列表 · 参考图列表风格 */
.slide-points {
  list-style: none;
  padding: 0;
  margin: 0;
}
.slide-points li {
  font-family: var(--font-body);
  font-size: 28px;
  font-weight: 400;
  color: var(--text-body);
  line-height: 1.8;
  padding-left: 24px;
  position: relative;
  margin-bottom: 12px;
}
.slide-points li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 14px;
  width: 8px;
  height: 8px;
  background: var(--brand-primary);
  border-radius: 50%;
}

/* 底部注释 · 参考图半透明风格 */
.slide-caption {
  font-family: var(--font-body);
  font-size: 20px;
  color: var(--text-dim);
  letter-spacing: 1px;
  margin-top: 24px;
}

/* 数据高亮卡片 */
.data-highlight {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  padding: 8px 20px;
  background: rgba(30, 64, 175, 0.06);
  border-radius: 12px;
  border: 1px solid rgba(30, 64, 175, 0.12);
}
.data-highlight .num {
  font-family: var(--font-title);
  font-size: 48px;
  font-weight: 700;
  color: var(--brand-primary);
  line-height: 1;
}
.data-highlight .unit {
  font-family: var(--font-body);
  font-size: 20px;
  color: var(--text-muted);
}
