/* 东方智慧主题 · 扩展（C2 创作者 / C8 组件 / 商城 / PWA / 专区 / 裂变 / 证书 / AI 助教 等）
 * P1-7 自 theme.css 拆出；必须在 theme.css 之后加载，级联顺序与拆分前一致。 */
/* ===== C2 创作者：入驻申请步骤 / 标签选择 / 优势卡片 ===== */
.apply-step .step-dots {
  display: flex; gap: 8px; justify-content: center; margin-bottom: 8px;
}
.apply-step .step-dots span {
  width: 34px; height: 34px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: var(--bg2); border: 1px solid var(--rule);
  color: var(--muted); font-size: 14px; font-weight: 600;
  transition: all .25s ease;
}
.apply-step .step-dots span.on {
  background: linear-gradient(135deg, var(--gold), #c9a86a);
  border-color: transparent; color: #1C1A17;
}
.apply-step .step-labels {
  display: flex; gap: 8px; justify-content: space-between; padding: 0 8px;
}
.apply-step .step-labels span {
  flex: 1; text-align: center; font-size: 12px; color: var(--muted);
  transition: color .25s ease;
}
.apply-step .step-labels span.on { color: var(--gold); font-weight: 600; }

.tag-pick { display: flex; flex-wrap: wrap; gap: 8px; }
.tag-pick-item {
  padding: 7px 14px; border-radius: 20px;
  background: var(--bg2); border: 1px solid var(--rule);
  color: var(--beige); font-size: 13px; cursor: pointer;
  transition: all .2s ease; user-select: none;
}
.tag-pick-item:hover { border-color: var(--gold); }
.tag-pick-item.on {
  background: linear-gradient(135deg, var(--gold), #c9a86a);
  border-color: transparent; color: #1C1A17; font-weight: 600;
}

.perf-card { text-align: center; padding: 20px 14px; }
.perf-card .perf-ic { font-size: 32px; margin-bottom: 8px; }
.perf-card b { display: block; font-size: 15px; margin-bottom: 6px; }
.perf-card small { color: var(--muted); font-size: 12.5px; line-height: 1.7; display: block; }

.id-upload input[type="checkbox"] { accent-color: var(--gold); }

.tag-row { display: flex; flex-wrap: wrap; gap: 8px; }
.tag {
  padding: 5px 12px; border-radius: 16px; font-size: 12px;
  background: var(--bg2); border: 1px solid var(--rule); color: var(--muted);
}
.tag-gold { border-color: rgba(154, 123, 79, .45); color: var(--gold); }

.progress { overflow: hidden; }

.instructor-join-card {
  background: linear-gradient(135deg, rgba(154, 123, 79, .16), rgba(123, 45, 59, .10));
  border: 1px solid rgba(154, 123, 79, .35);
  transition: border-color .2s ease;
}
.instructor-join-card:hover { border-color: var(--gold); }
/* 卡片内文字继承 a{color:--gold-light}，浅色主题下压在浅金底上只有 3.7:1 */
.instructor-join-card b { color: var(--gold-ink); }

.dash-grid-2 { grid-template-columns: 2fr 1fr; }
@media (max-width: 860px) {
  .dash-grid-2 { grid-template-columns: 1fr; }
}

/* ---------- C7 学习路径 ---------- */
.path-track { display: flex; align-items: stretch; gap: 6px; margin-top: 12px; flex-wrap: wrap; }
.path-step {
  flex: 1 1 90px; min-width: 88px; max-width: 150px;
  display: flex; flex-direction: column; align-items: center; gap: 6px;
  padding: 10px 8px; border-radius: 10px; text-align: center;
  background: var(--ink); border: 1px solid var(--line); position: relative;
}
.path-step .ps-ic {
  width: 26px; height: 26px; border-radius: 50%; font-size: 12px;
  display: grid; place-items: center; font-weight: 700;
  background: var(--ink-2); color: var(--muted);
}
.path-step .ps-t { font-size: 11.5px; color: var(--muted); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.path-step .ps-tag {
  position: absolute; top: 6px; right: 6px; font-size: 9px; color: var(--accent-ink);
  background: rgba(154,123,79,.2); padding: 1px 5px; border-radius: 8px;
}
.path-step.viber { border-color: var(--gold); }
.path-step.viber .ps-ic { background: var(--gold); color: #fff; }
.path-step.on { border-color: var(--wine); box-shadow: 0 0 0 1px var(--wine) inset; }
.path-step.on .ps-ic { background: var(--wine); color: #fff; }
.path-step.on .ps-t { color: var(--cream); font-weight: 600; }

/* ================= C8 课时播放器（视频 / 音频 / 图文） ================= */
.player { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; }
.pl-hint { padding: 46px 16px; text-align: center; color: var(--muted); font-size: 13.5px; }
.pl-head { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
.pl-stage { background: #000; }
.pl-media { width: 100%; display: block; max-height: 62vh; background: #000; }
.pl-media-audio { width: 100%; margin-top: 14px; }
.pl-audio-wrap {
  padding: 28px 16px; text-align: center; color: var(--on-dark);
  background: linear-gradient(135deg, rgba(123, 45, 59, .24), rgba(43, 34, 25, .92));
}
.pl-audio-cover {
  width: 76px; height: 76px; margin: 0 auto; border-radius: 50%;
  display: grid; place-items: center; font-size: 30px; color: var(--on-dark-3);
  background: radial-gradient(circle at 35% 30%, #3A2F22, #201B15);
  border: 1px solid rgba(154, 123, 79, .5);
}
.pl-title { margin: 12px 0 0; font-size: 20px; line-height: 1.45; }
.pl-article { padding: 16px; background: var(--surface); }
.pl-cover { width: 100%; border-radius: 10px; margin-bottom: 12px; display: block; }
.pl-body { margin-top: 10px; color: var(--beige); font-size: 14.5px; line-height: 1.9; }
.pl-body p { margin-bottom: 10px; }
.pl-transcript { margin: 0 12px 12px; border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; background: var(--ink-2); }
.pl-transcript summary { cursor: pointer; color: var(--gold-light); font-size: 13px; }
.pl-transcript .pl-body { margin-top: 8px; font-size: 13.5px; }
.pl-atts { margin: 0 12px 12px; }
.pl-atts > b { font-size: 13px; color: var(--gold-light); }
.pl-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 12px; border-top: 1px solid var(--line); flex-wrap: wrap; }

/* 自定义倍速控制：文案走 i18n，避免原生控件倍速菜单语言不随应用切换 */
.pl-speed { display: flex; align-items: center; gap: 6px; padding: 10px 12px; border-top: 1px solid var(--line); flex-wrap: wrap; }
.pl-speed-label { font-size: 12px; color: var(--muted); margin-right: 2px; }
.pl-speed-btn {
  background: var(--ink-2); border: 1px solid var(--line); color: var(--beige);
  border-radius: 999px; padding: 4px 12px; font-size: 12px; cursor: pointer; transition: all .15s;
}
.pl-speed-btn:hover { border-color: var(--gold-deep); color: var(--cream); }
.pl-speed-btn.on { background: var(--gold-deep); border-color: var(--gold-deep); color: #1A120B; font-weight: 600; }
.pl-speed--set { border-top: 0; padding: 0; gap: 5px; }
.pl-speed--set .pl-speed-btn { min-width: 34px; padding: 3px 7px; font-size: 12px; }

/* ---- v1.58 B4：字幕 CC 开关 / 叠加层位置·背景·描边 / 设置面板（施工书 S3-S4） ---- */
.pl-stage { position: relative; }
.pl-cc-overlay {
  position: absolute; left: 50%; transform: translateX(-50%); width: max-content; max-width: 92%;
  padding: 6px 14px; border-radius: 8px; text-align: center; line-height: 1.5; font-weight: 600;
  pointer-events: none; z-index: 3; white-space: pre-wrap; word-break: break-word;
}
.pl-cc-overlay:empty { display: none; }
.pl-cc-overlay.cc-off { display: none; }
.pl-cc-overlay.pos-bottom { bottom: 64px; }
.pl-cc-overlay.pos-top { top: 14px; }
.pl-cc-overlay.pos-center { top: 50%; transform: translate(-50%, -50%); }
.pl-cc-overlay.bg-none { background: transparent; }
.pl-cc-overlay.bg-semi { background: rgba(0, 0, 0, .55); }
.pl-cc-overlay.bg-solid { background: #000; }
.pl-cc-overlay.stroke { text-shadow: 0 1px 3px rgba(0,0,0,.95), 0 0 2px rgba(0,0,0,.9); }
.pl-cc-panel { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px; border-top: 1px solid var(--line); background: var(--ink-2); }
.pl-cc-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pl-cc-lbl { font-size: 12px; color: var(--muted); min-width: 34px; }
.pl-cc-fs { color: var(--cream); font-size: 13px; min-width: 20px; text-align: center; }
.cc-opt { background: var(--ink); border: 1px solid var(--line); color: var(--beige);
  border-radius: 999px; padding: 3px 11px; font-size: 12px; cursor: pointer; transition: all .15s; }
.cc-opt:hover { border-color: var(--gold-deep); color: var(--cream); }
.cc-opt.on { background: var(--gold-deep); border-color: var(--gold-deep); color: #1A120B; font-weight: 600; }
#plCcBtn.on { border-color: var(--gold-deep); color: var(--gold-light, #d8b84a); }

/* ================= C8 养生文化板块 ================= */
.wellness-hero {
  position: relative; padding: 24px 20px; border-radius: var(--radius); margin-bottom: 14px;
  /* 末尾的 #2A1F14 是底色：渐变本身是半透明的，浅色主题下会透出浅色页面底，
     导致固定浅色的标题/副标题压在浅底上「看不清」；加不透明底色后两种主题都稳定 */
  background: linear-gradient(135deg, rgba(123, 45, 59, .42), rgba(43, 34, 25, .92) 62%),
              radial-gradient(600px 240px at 88% -30%, rgba(154, 123, 79, .5), transparent 70%),
              #2A1F14;
  border: 1px solid rgba(154, 123, 79, .35);
}
/* 养生英雄区底色为近不透明深色（rgba(43,34,25,.92)），文字固定用深底专用色 */
.wellness-hero h1 { font-size: 23px; margin-bottom: 6px; color: var(--on-dark); }
.wellness-hero p { color: var(--on-dark-2); font-size: 13.5px; line-height: 1.8; }
.wh-tag {
  display: inline-block; margin-top: 10px; font-size: 11.5px; padding: 3px 10px; border-radius: 12px;
  color: var(--on-dark-2); background: rgba(154, 123, 79, .18); border: 1px solid rgba(154, 123, 79, .4);
}
.wellness-note {
  background: linear-gradient(135deg, rgba(154, 123, 79, .10), rgba(123, 45, 59, .08));
  border: 1px solid rgba(154, 123, 79, .32); border-radius: var(--radius); padding: 13px 15px;
}
.wellness-note .wn-top { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.wellness-note .wn-badge { font-size: 11.5px; padding: 2px 9px; border-radius: 10px; background: var(--gold-deep); color: #fff; }
.wellness-note .wn-grade { font-size: 11.5px; color: var(--accent-ink); }
.wellness-note .wn-text { color: var(--beige); font-size: 13.5px; line-height: 1.85; }
.wellness-note .wn-list { margin-top: 8px; padding-left: 18px; color: var(--beige); font-size: 13px; line-height: 1.9; }
.wellness-note .wn-list li { margin-bottom: 2px; }
.wellness-note .wn-list b { color: var(--gold-ink); }

/* ================= C8 通用上传控件（后台） ================= */
.up-field { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
/* .btn 自带 display:inline-flex 会盖掉 hidden 属性，上传区内的隐藏元素需强制不渲染 */
.up-field [hidden] { display: none !important; }
.up-field input[type="text"] { flex: 1; min-width: 170px; }
.up-btn { white-space: nowrap; }
.up-del { white-space: nowrap; }
.up-preview { margin-top: 8px; }
.up-preview img { max-width: 100%; max-height: 150px; border-radius: 8px; border: 1px solid var(--line); display: block; }
.up-preview audio, .up-preview video { width: 100%; margin-top: 6px; border-radius: 8px; }
.up-hint { font-size: 11.5px; color: var(--muted); margin-top: 4px; }
.up-row { display: flex; align-items: center; gap: 8px; padding: 6px 0; font-size: 12.5px; flex-wrap: wrap; }

/* ================= 多媒体列表控件（多图上传 / 拖动排序 / 首图设置） ================= */
.ml-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(86px, 1fr)); gap: 8px; margin-top: 6px; }
.ml-item { position: relative; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; background: var(--ink-2); cursor: grab; }
.ml-item.dragging { opacity: .45; }
.ml-thumb { width: 100%; aspect-ratio: 1 / 1; display: flex; align-items: center; justify-content: center; background: var(--ink); }
.ml-thumb img, .ml-thumb video { width: 100%; height: 100%; object-fit: cover; display: block; }
.ml-cover { position: absolute; top: 4px; left: 4px; background: var(--gold-deep); color: #1a1208; font-size: 10px; padding: 1px 5px; border-radius: 4px; font-weight: 700; }
.ml-tools { position: absolute; bottom: 0; left: 0; right: 0; display: flex; justify-content: center; gap: 2px; background: rgba(0, 0, 0, .55); padding: 3px 2px; opacity: 0; transition: opacity .15s; }
.ml-item:hover .ml-tools { opacity: 1; }
.ml-btn { background: transparent; border: none; color: #f3e6c8; font-size: 12px; line-height: 1; cursor: pointer; padding: 2px 5px; border-radius: 4px; }
.ml-btn:hover { background: rgba(255, 255, 255, .18); }
.ml-btn.ml-del:hover { background: var(--wine-deep); }
.ml-empty { border: 1px dashed var(--line); border-radius: 8px; padding: 14px; text-align: center; }
.ml-actions { display: flex; gap: 8px; align-items: center; margin-top: 8px; flex-wrap: wrap; }
.ml-url { flex: 1; min-width: 160px; background: var(--ink); border: 1px solid var(--line); color: var(--cream); border-radius: 8px; padding: 7px 10px; font-size: 12.5px; }

/* ================= 富文本在线编辑器（后台） ================= */
.rte-toolbar { display: flex; flex-wrap: wrap; gap: 4px; padding: 6px; border: 1px solid var(--line); border-bottom: none; border-radius: 8px 8px 0 0; background: var(--ink-2); }
.rte-btn { background: transparent; border: 1px solid transparent; color: var(--cream); font-size: 12px; padding: 4px 8px; border-radius: 6px; cursor: pointer; }
.rte-btn:hover { background: var(--ink); border-color: var(--line); }
.rte-body { min-height: 160px; max-height: 380px; overflow: auto; border: 1px solid var(--line); border-radius: 0 0 8px 8px; padding: 12px; background: var(--ink); color: var(--cream); font-size: 13.5px; line-height: 1.8; }
.rte-body:focus { outline: none; border-color: var(--gold-deep); }
.rte-body img { max-width: 100%; border-radius: 8px; }
.rte-body h2 { font-size: 17px; margin: 10px 0 6px; }
.rte-body h3 { font-size: 15px; margin: 8px 0 4px; }
.rte-body blockquote { border-left: 3px solid var(--gold-deep); margin: 8px 0; padding: 4px 12px; color: var(--beige); }
.rte-body ul, .rte-body ol { padding-left: 20px; }
.rte-body a { color: var(--gold-light); }

/* ================= R1 编辑类弹窗三态（标准 / 宽屏·左编辑右预览 / 全屏） ================= */
/* 尺寸切换条（仅编辑类弹窗由 modal(html,{editing:true}) 注入） */
.modal-sizebar { display: flex; align-items: center; gap: 6px; justify-content: flex-end; margin: -14px 0 10px; flex: 0 0 auto; }
.modal-sizebar .btn.on { border-color: var(--gold); color: var(--gold-light); }

/* 分栏骨架：标准态单列且隐藏预览；宽屏/全屏态左右分栏 */
.modal-split { display: grid; grid-template-columns: 1fr; }
.modal-split-main { min-width: 0; }
.modal-split-preview { display: none; }

/* 兜底：未带尺寸修饰的普通弹窗也可滚动（避免内容超屏却翻不到底部按钮） */
.modal { max-height: 90vh; overflow-y: auto; }

.modal--compact { width: min(760px, 94vw); max-height: 88vh; overflow: auto; }

.modal--wide {
  width: min(96vw, 1400px); max-width: none; max-height: 90vh; height: 90vh; box-sizing: border-box;
  display: flex; flex-direction: column; overflow: hidden;
}
.modal--wide .modal-split {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(320px, 420px); grid-template-rows: minmax(0, 1fr);
  gap: 16px; flex: 1; min-height: 0;
}
.modal--wide .modal-split-main { overflow: auto; max-height: 100%; min-height: 0; padding-right: 6px; }
.modal--wide .modal-split-preview { display: flex; flex-direction: column; min-height: 0; overflow: hidden; }

.modal--fullscreen {
  width: 100vw; height: var(--app-vh); max-height: none; border-radius: 0; box-sizing: border-box;
  display: flex; flex-direction: column; overflow: hidden;
}
.modal--fullscreen .modal-split {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(320px, 440px); grid-template-rows: minmax(0, 1fr);
  gap: 16px; flex: 1; min-height: 0;
}
.modal--fullscreen .modal-split-main { overflow: auto; max-height: 100%; min-height: 0; padding-right: 6px; }
.modal--fullscreen .modal-split-preview { display: flex; flex-direction: column; min-height: 0; overflow: hidden; }
.modal-bg--full { padding: 0; }

/* 右栏预览：亮/暗双主题实时镜像 · PC/平板/手机三端宽度 · 纵向可滚（含可见滚动条） */
.preview-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.preview-head .prev-tools { display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.preview-head .prev-theme, .preview-head .prev-dev { display: inline-flex; gap: 4px; }
.preview-head .btn.on { border-color: var(--gold); color: var(--gold-light); }
.preview-body {
  border: 1px solid var(--line); border-radius: 10px; background: #fff; color: #26221e;
  padding: 16px; overflow: auto; flex: 1; min-height: 0; line-height: 1.8; font-size: 14px; word-break: break-word;
  scrollbar-width: thin;
}
.preview-body::-webkit-scrollbar, .modal-split-main::-webkit-scrollbar { width: 10px; height: 10px; }
.preview-body::-webkit-scrollbar-thumb, .modal-split-main::-webkit-scrollbar-thumb { background: rgba(154, 123, 79, .5); border-radius: 6px; }
.preview-body::-webkit-scrollbar-track, .modal-split-main::-webkit-scrollbar-track { background: transparent; }
.modal-split-main { scrollbar-width: thin; }
.preview-body.dev-mobile { width: 375px; max-width: 100%; margin: 0 auto; }
.preview-body.dev-tablet { width: 768px; max-width: 100%; margin: 0 auto; }
.preview-body img { max-width: 100%; border-radius: 8px; }
.preview-body h1, .preview-body h2, .preview-body h3, .preview-body h4 { color: #1c1a17; margin: 16px 0 8px; line-height: 1.4; }
.preview-body h1 { font-size: 22px; } .preview-body h2 { font-size: 19px; }
.preview-body h3 { font-size: 17px; } .preview-body h4 { font-size: 15px; }
.preview-body p { margin: 8px 0; }
.preview-body ul, .preview-body ol { padding-left: 22px; margin: 8px 0; }
.preview-body blockquote { border-left: 3px solid #9a7b4f; margin: 12px 0; padding: 6px 14px; background: rgba(0, 0, 0, .035); border-radius: 0 8px 8px 0; }
.preview-body a { color: #7a5c33; text-decoration: underline; }
.preview-body hr { border: 0; border-top: 1px solid #e5e3dd; margin: 18px 0; }
.preview-body pre { background: rgba(0, 0, 0, .05); border: 1px solid #e5e3dd; border-radius: 10px; padding: 12px 14px; overflow-x: auto; }
.preview-body code { background: rgba(0, 0, 0, .05); border-radius: 4px; padding: 1px 5px; }
.preview-body pre code { background: none; padding: 0; }
.preview-body table { border-collapse: collapse; width: 100%; margin: 12px 0; }
.preview-body td, .preview-body th { border: 1px solid #ddd; padding: 6px 10px; text-align: left; }
.preview-body th { background: rgba(0, 0, 0, .035); }
.preview-body .cols-2, .preview-body .cols-3 { display: flex; gap: 18px; }
.preview-body .cols-2 > div, .preview-body .cols-3 > div { flex: 1 1 0; min-width: 0; }
/* 暗色前台预览（深色「尊享」主题模拟） */
.preview-body.ow-dark { background: #1c1a17; color: #e2d6bd; border-color: #3a342b; }
.preview-body.ow-dark h1, .preview-body.ow-dark h2, .preview-body.ow-dark h3, .preview-body.ow-dark h4 { color: #f4ead2; }
.preview-body.ow-dark blockquote { background: rgba(255, 255, 255, .05); border-left-color: #9a7b4f; }
.preview-body.ow-dark a { color: #d8b84a; }
.preview-body.ow-dark hr { border-top-color: #3a352e; }
.preview-body.ow-dark pre, .preview-body.ow-dark code { background: rgba(255, 255, 255, .06); border-color: #3a352e; }
.preview-body.ow-dark td, .preview-body.ow-dark th { border-color: #3a352e; }
.preview-body.ow-dark th { background: rgba(255, 255, 255, .05); }
@media (max-width: 860px) {
  .modal--wide .modal-split, .modal--fullscreen .modal-split { grid-template-columns: 1fr; grid-template-rows: auto; }
  .modal--wide .modal-split-preview, .modal--fullscreen .modal-split-preview { display: none; }
}

/* 订单买家单元格：可点击跳转会员 360 */
.order-buyer-cell { min-width: 180px; }
.order-buyer { display: flex; flex-direction: column; gap: 2px; line-height: 1.35; }
.order-buyer b { color: var(--gold-light); font-size: 13px; }
.order-buyer:hover b { color: var(--gold); text-decoration: underline; }
.order-buyer .badge { align-self: flex-start; margin-top: 2px; }

/* ================= C8 用户 360 详情（后台） ================= */
.ud-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.ud-dim { background: var(--ink-2); border: 1px solid var(--line); border-radius: 10px; padding: 12px; }
.ud-dim h4 { font-size: 13px; color: var(--gold-light); margin-bottom: 8px; }

/* ================= 商城（东方臻选 · 文化好物） ================= */
.cart-badge {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 17px; height: 17px; padding: 0 5px; border-radius: 9px;
  background: var(--wine); color: #fff; font-size: 10.5px; font-weight: 700;
  line-height: 1; margin-left: 6px; vertical-align: middle;
}

/* 英雄区底色恒为深色，文字用深底专用色（浅色主题不反转） */
.shop-hero {
  position: relative; margin-top: 12px; border-radius: 16px; overflow: hidden;
  padding: 26px 20px; background: linear-gradient(135deg, #2A1F14 0%, #3A2418 48%, #4A2A22 100%);
  border: 1px solid rgba(154, 123, 79, .35);
}
.shop-hero .sh-kicker { font-size: 11px; letter-spacing: .28em; color: var(--on-dark-3); margin-bottom: 8px; }
.shop-hero h1 { font-size: 24px; color: var(--on-dark); margin-bottom: 6px; }
.shop-hero p { color: var(--on-dark-2); font-size: 13.5px; }
.shop-hero .sh-note { margin-top: 8px; font-size: 12.5px; color: var(--on-dark-3); }
/* 右侧有绝对定位的购物车按钮，正文避让，避免窄屏标题被压住 */
.shop-hero .sh-inner { position: relative; z-index: 1; padding-right: 104px; }
@media (max-width: 520px) {
  .shop-hero { padding-top: 58px; }
  .shop-hero .sh-inner { padding-right: 0; }
}
.shop-cart-btn {
  position: absolute; top: 16px; right: 16px; display: inline-flex; align-items: center;
  background: rgba(28, 26, 23, .55); border: 1px solid rgba(154, 123, 79, .5);
  color: var(--on-dark); border-radius: 22px; padding: 8px 14px; font-size: 13px; cursor: pointer;
}
.shop-cart-btn:hover { border-color: var(--gold); }
/* v1.30 商城页头部动作组：心愿单 + 购物车并排（覆盖购物车按钮的绝对定位） */
.shop-hero-actions { position: absolute; top: 16px; right: 16px; display: flex; gap: 8px; align-items: center; }
.shop-hero-actions .shop-cart-btn { position: static; }
/* v1.30 商城页心愿单按钮 */
.shop-wish-link { text-decoration: none; }

.shop-ship-bar {
  display: flex; align-items: center; gap: 12px; margin-top: 12px; padding: 12px 14px;
  border-radius: 12px; background: var(--surface); border: 1px solid var(--line); flex-wrap: wrap;
}
.shop-ship-bar.ok { border-color: rgba(127, 176, 105, .5); }
.shop-ship-bar.warn { border-color: rgba(194, 94, 76, .45); }
.shop-ship-bar .ssb-ic { font-size: 18px; flex: 0 0 auto; }
.shop-ship-bar .ssb-main { flex: 1; min-width: 0; }
.shop-ship-bar .ssb-main b { display: block; font-size: 13.5px; color: var(--cream); }
.shop-ship-bar .ssb-main small { color: var(--muted); font-size: 12px; }
.shop-ship-bar select {
  background: var(--ink-2); border: 1px solid var(--line); color: var(--cream);
  border-radius: 8px; padding: 7px 9px; font-size: 12.5px; max-width: 180px;
}
/* 窄屏：国家下拉独占一行，避免说明文字被挤成竖条 */
@media (max-width: 560px) {
  .shop-ship-bar .ssb-main { flex: 1 1 60%; }
  .shop-ship-bar select { flex: 1 1 100%; max-width: none; }
}

.shop-search { display: flex; gap: 8px; margin-top: 12px; }
.shop-search input {
  flex: 1; min-width: 0; background: var(--ink-2); border: 1px solid var(--line);
  color: var(--cream); border-radius: 10px; padding: 10px 13px; font-size: 13.5px; outline: none;
}
.shop-search input:focus { border-color: var(--gold); }
.shop-search button {
  background: linear-gradient(135deg, var(--gold-light), var(--gold-deep)); color: #241a08;
  border: none; border-radius: 10px; padding: 0 18px; font-weight: 700; font-size: 13.5px; cursor: pointer;
}

.shop-cat-seg { margin-top: 12px; overflow-x: auto; }
/* 分类较多时按内容宽度横排并横向滚动，避免 .seg 的 flex:1 把标签挤到重叠 */
.shop-cat-seg a { flex: 0 0 auto; white-space: nowrap; padding: 8px 14px; }

/* 排序分段：与分类分段同款，但更轻量（不抢视觉焦点） */
.shop-sort-seg { margin-top: 8px; overflow-x: auto; }
.shop-sort-seg a { flex: 0 0 auto; white-space: nowrap; padding: 6px 12px; font-size: 12.5px; }

.shop-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-top: 12px; }
@media (min-width: 768px) { .shop-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1200px) { .shop-grid { grid-template-columns: repeat(4, 1fr); } }

.shop-card {
  display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--line);
  border-radius: 14px; overflow: hidden; color: inherit; transition: transform .18s, border-color .18s;
}
.shop-card:hover { transform: translateY(-3px); border-color: var(--gold); }
.shop-card .sc-cover {
  position: relative; aspect-ratio: 1 / 1; overflow: hidden;
  background: linear-gradient(135deg, var(--ink-2), var(--surface-2));
  display: flex; align-items: center; justify-content: center;
}
.shop-card .sc-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shop-card .sc-cover span { font-family: "SimSun", "Songti SC", serif; font-size: 26px; color: var(--gold-light); opacity: .75; }
.shop-card .sc-flag {
  position: absolute; top: 8px; left: 8px; background: rgba(94, 31, 43, .9); color: #fff;
  font-size: 11px; padding: 2px 8px; border-radius: 10px;
}
.shop-card .sc-body { padding: 10px 12px 12px; display: flex; flex-direction: column; gap: 3px; }
.shop-card .sc-body b {
  font-size: 13.5px; color: var(--cream); line-height: 1.4;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.shop-card .sc-body small { color: var(--muted); font-size: 11.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.shop-card .sc-foot { display: flex; align-items: baseline; gap: 6px; margin-top: 4px; flex-wrap: wrap; }
.shop-card .sc-price { color: var(--gold-ink); font-weight: 700; font-size: 15px; }
.shop-card .sc-compare { color: var(--muted); font-size: 11.5px; }
/* 售罄标记：跟在价格后同行展示，不再用角标定位 */
.shop-card .sc-flag-out { position: static; background: rgba(120, 120, 120, .85); }
/* 包邮标记：价格行内展示 */
.shop-card .sc-flag-free { position: static; background: rgba(127, 176, 105, .92); color: #10190f; }
/* 限时特惠标记（v1.23）：鎏金底 + 深字，价格行内展示 */
.shop-card .sc-flag-hot { position: static; background: linear-gradient(135deg, #c9a86a, #9a7b4f); color: #1c1a17; font-weight: 700; }

/* 商品详情 */
.shop-detail { display: grid; grid-template-columns: 1fr; gap: 16px; margin-top: 12px; }
@media (min-width: 900px) { .shop-detail { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; } }
.shop-gallery .sg-main {
  aspect-ratio: 1 / 1; border-radius: 14px; overflow: hidden; border: 1px solid var(--line);
  background: linear-gradient(135deg, var(--ink-2), var(--surface-2));
  display: flex; align-items: center; justify-content: center;
}
.shop-gallery .sg-main img { width: 100%; height: 100%; object-fit: cover; display: block; }
.shop-gallery .sg-main span { font-family: "SimSun", "Songti SC", serif; font-size: 44px; color: var(--gold-light); opacity: .7; }
.sg-thumbs { display: flex; gap: 8px; margin-top: 8px; overflow-x: auto; }
.sg-thumb {
  flex: 0 0 auto; width: 60px; height: 60px; border-radius: 9px; overflow: hidden;
  border: 1px solid var(--line); background: none; padding: 0; cursor: pointer;
}
.sg-thumb.on { border-color: var(--gold); }
.sg-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 商品视频：主区用 contain 防裁切，缩略图叠加播放标识 */
.shop-gallery .sg-main.is-video { aspect-ratio: 16 / 9; }
.shop-gallery .sg-main video { width: 100%; height: 100%; object-fit: contain; background: #000; display: block; }
.sg-thumb { position: relative; }
.sg-thumb .sg-thumb-ph { display: block; width: 100%; height: 100%; background: #000; }
.sg-thumb .sg-play {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 16px; line-height: 1; background: rgba(0, 0, 0, .3); pointer-events: none;
}

.sd-info h1 { font-size: 21px; margin: 8px 0 4px; color: var(--cream); }
.sd-sub { color: var(--muted); font-size: 13px; }
.sd-price { display: flex; align-items: baseline; gap: 10px; margin-top: 12px; flex-wrap: wrap; }
.sd-price b { font-size: 24px; color: var(--gold-ink); }
.sd-price s { color: var(--muted); font-size: 13px; }
.sd-tag { font-size: 11.5px; padding: 2px 9px; border-radius: 10px; background: rgba(154, 123, 79, .18); color: var(--accent-ink); }
.sd-tag-out { background: rgba(120, 120, 120, .25); color: var(--muted); }
.sd-tag-low { background: rgba(154, 123, 79, .28); }
.sd-tag-free { background: rgba(127, 176, 105, .22); color: var(--ok); }
.sd-tag-hot { background: linear-gradient(135deg, #c9a86a, #9a7b4f); color: #1c1a17; font-weight: 700; }
.sd-block { margin-top: 16px; }
.sd-label { font-size: 12.5px; color: var(--muted); margin-bottom: 8px; }
.sd-variants { display: flex; gap: 8px; flex-wrap: wrap; }
.sd-variant {
  background: var(--surface); border: 1px solid var(--line); color: var(--beige);
  border-radius: 9px; padding: 7px 12px; font-size: 12.5px; cursor: pointer;
}
.sd-variant.on { border-color: var(--gold); color: var(--gold-ink); background: rgba(154, 123, 79, .12); }
.sd-variant.is-out { opacity: .5; cursor: not-allowed; text-decoration: line-through; text-decoration-color: rgba(180, 120, 120, .6); }
.sd-qty {
  display: inline-flex; align-items: center; border: 1px solid var(--line);
  border-radius: 9px; overflow: hidden; background: var(--surface);
}
.sd-qty button { width: 36px; height: 34px; background: none; border: none; color: var(--cream); font-size: 16px; cursor: pointer; }
.sd-qty input {
  width: 52px; height: 34px; text-align: center; background: none; border: none;
  border-left: 1px solid var(--line); border-right: 1px solid var(--line);
  color: var(--cream); font-size: 14px; outline: none;
}
.sd-qty-sm button { width: 30px; height: 28px; font-size: 14px; }
.sd-qty-sm input { width: 40px; height: 28px; font-size: 12.5px; }
.shop-ship-note {
  margin-top: 14px; padding: 11px 13px; border-radius: 11px; background: var(--surface);
  border: 1px solid var(--line); display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.shop-ship-note.ok { border-color: rgba(127, 176, 105, .5); }
.shop-ship-note.warn { border-color: rgba(194, 94, 76, .45); }
.shop-ship-note .ssn-text { flex: 1; min-width: 150px; font-size: 12.5px; color: var(--beige); }
.shop-ship-note .ssn-ship { flex-basis: 100%; font-size: 12px; color: var(--gold-light); }
.shop-ship-note select {
  background: var(--ink-2); border: 1px solid var(--line); color: var(--cream);
  border-radius: 8px; padding: 6px 8px; font-size: 12.5px; max-width: 160px;
}
.sd-actions { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; }
.sd-desc { color: var(--beige); font-size: 13.5px; line-height: 1.9; white-space: pre-wrap; }
.sd-tags { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 14px; }
.sd-tags span { font-size: 11.5px; color: var(--muted); }

/* 图文详情：富文本正文 + 整宽长图堆叠 */
.sd-detail-card { margin-top: 16px; }
.sd-detail-head { border-bottom: 1px solid var(--line); padding-bottom: 10px; margin-bottom: 14px; }
.sd-rich { color: var(--beige); font-size: 14px; line-height: 1.9; word-break: break-word; }
.sd-rich img { max-width: 100%; height: auto; border-radius: 10px; display: block; margin: 10px auto; }
.sd-rich h1, .sd-rich h2, .sd-rich h3, .sd-rich h4 { color: var(--cream); margin: 16px 0 8px; line-height: 1.4; }
.sd-rich h2 { font-size: 18px; }
.sd-rich h3 { font-size: 16px; }
.sd-rich p { margin: 8px 0; }
.sd-rich ul, .sd-rich ol { padding-left: 22px; margin: 8px 0; }
.sd-rich blockquote { border-left: 3px solid var(--gold-deep); margin: 12px 0; padding: 6px 14px; background: var(--ink-2); border-radius: 0 8px 8px 0; color: var(--beige); }
.sd-rich a { color: var(--gold-light); text-decoration: underline; }
.sd-rich table { width: 100%; border-collapse: collapse; margin: 12px 0; font-size: 13px; }
.sd-rich th, .sd-rich td { border: 1px solid var(--line); padding: 6px 10px; text-align: left; }
/* v1.56 R2：分栏与行内语义标签（与后台编辑器同款结构，content_html 所有渲染点共用 .sd-rich） */
.sd-rich .cols-2, .sd-rich .cols-3 { display: flex; gap: 18px; margin: 12px 0; }
.sd-rich .cols-2 > div, .sd-rich .cols-3 > div { flex: 1 1 0; min-width: 0; }
.sd-rich mark { background: rgba(201, 162, 39, .28); color: inherit; padding: 0 2px; border-radius: 3px; }
.sd-rich sup, .sd-rich sub { font-size: 12px; }
.sd-rich small { font-size: 12px; color: var(--muted); }
.sd-rich code { font-family: ui-monospace, Menlo, Consolas, "Courier New", monospace; background: rgba(255, 255, 255, .06); border-radius: 4px; padding: 1px 5px; font-size: 13px; }
.sd-rich pre { background: rgba(255, 255, 255, .05); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; overflow-x: auto; font-size: 13px; line-height: 1.75; }
.sd-rich pre code { background: none; padding: 0; }
.sd-rich details { border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px; margin: 10px 0; }
.sd-rich summary { cursor: pointer; color: var(--cream); font-weight: 600; }
.sd-rich figure { margin: 12px 0; }
.sd-rich figcaption { font-size: 12px; color: rgba(190, 175, 150, .65); text-align: center; margin-top: 8px; }
@media (max-width: 560px) {
  .sd-rich .cols-2, .sd-rich .cols-3 { display: block; }
  .sd-rich .cols-2 > div, .sd-rich .cols-3 > div { margin-bottom: 12px; }
}
/* v1.64 P1.5：段落底色卡片（后台只存语义类名 ow-card--*，前台按亮/暗主题自动换色，无需编辑两套内容） */
.sd-rich .ow-card {
  margin: 14px 0; padding: 14px 16px; border-radius: 12px;
  border: 1px solid var(--line); color: inherit;
}
.sd-rich .ow-card > :first-child { margin-top: 0; }
.sd-rich .ow-card > :last-child { margin-bottom: 0; }
.sd-rich .ow-card--cream { background: rgba(247, 240, 225, .06); border-color: rgba(232, 220, 203, .18); }
.sd-rich .ow-card--sage  { background: rgba(160, 200, 170, .08); border-color: rgba(160, 200, 170, .20); }
.sd-rich .ow-card--blue  { background: rgba(160, 190, 220, .08); border-color: rgba(160, 190, 220, .20); }
.sd-rich .ow-card--rose  { background: rgba(220, 170, 180, .08); border-color: rgba(220, 170, 180, .20); }
.sd-rich .ow-card--warm  { background: rgba(230, 215, 195, .07); border-color: rgba(230, 215, 195, .18); }
/* 浅色主题：柔和实色底 + 同色系描边，保证正文对比度 */
:root[data-theme="light"] .sd-rich .ow-card--cream { background: #F8F1E2; border-color: #E8DBC3; }
:root[data-theme="light"] .sd-rich .ow-card--sage  { background: #EAF2E8; border-color: #D2E2CE; }
:root[data-theme="light"] .sd-rich .ow-card--blue  { background: #E8F0F6; border-color: #CFDFEA; }
:root[data-theme="light"] .sd-rich .ow-card--rose  { background: #F7EAEB; border-color: #EBD3D5; }
:root[data-theme="light"] .sd-rich .ow-card--warm  { background: #F2EDE5; border-color: #E2D8C8; }
/* v1.57 B3：L2 设计层覆盖展示（服务端 renderDesignSvg 模板生成的 SVG，装饰不挡交互） */
.sd-design-host { position: relative; }
.sd-design-host > .sd-rich { position: relative; z-index: 1; }
.sd-design-layer { position: absolute; inset: 0; pointer-events: none; z-index: 0; overflow: hidden; }
.sd-design-layer svg { display: block; }
.sd-long { display: block; margin-top: 12px; }
.sd-long img { width: 100%; height: auto; display: block; border-radius: 8px; margin-bottom: 8px; }

/* 商品评分入口（详情页标题下） */
.sd-rating {
  display: inline-flex; align-items: center; gap: 7px; margin-top: 6px; padding: 3px 0;
  background: none; border: none; cursor: pointer; color: var(--beige); font-size: 12.5px;
}
.sd-rating b { color: var(--gold-ink); font-size: 13px; }
.sd-rating .stars { font-size: 13px; }
.sd-rating:hover .muted { color: var(--gold-light); }

/* 买家评价区 */
.rv-card { margin-top: 16px; }
.rv-card-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
.rv-card-head h3 { margin: 0; font-size: 17px; color: var(--cream); }
.rv-summary { display: flex; gap: 26px; align-items: center; flex-wrap: wrap; margin: 14px 0 6px; }
.rv-score { text-align: center; min-width: 96px; }
.rv-score b { display: block; font-size: 32px; color: var(--gold-ink); line-height: 1.1; }
.rv-score .stars { font-size: 14px; }
.rv-dist { flex: 1; min-width: 200px; }
.rv-dist-row { display: flex; align-items: center; gap: 8px; margin: 3px 0; }
.rv-dist-k { flex: 0 0 40px; font-size: 11.5px; color: var(--muted); }
.rv-bar { flex: 1; height: 6px; border-radius: 3px; background: var(--line); overflow: hidden; }
.rv-bar i { display: block; height: 100%; background: var(--gold); border-radius: 3px; }
.rv-dist-n { flex: 0 0 26px; text-align: right; }
.rv-list { margin-top: 10px; }
.rv-item { padding: 14px 0; border-top: 1px solid var(--line); }
.rv-item:first-child { border-top: none; }
.rv-item-head { display: flex; gap: 10px; align-items: center; }
.rv-avatar {
  flex: 0 0 auto; width: 34px; height: 34px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--ink-2), var(--surface-2)); border: 1px solid var(--line);
  color: var(--gold-light); font-size: 14px;
}
.rv-item-meta b { display: block; font-size: 13px; color: var(--cream); }
.rv-item-meta .stars { font-size: 12px; }
.rv-text { margin: 9px 0 0; font-size: 13.5px; line-height: 1.8; color: var(--beige); white-space: pre-wrap; }
.rv-imgs { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.rv-imgs img {
  width: 84px; height: 84px; object-fit: cover; border-radius: 9px; border: 1px solid var(--line); display: block;
}
.rv-empty { margin: 14px 0 4px; }
/* 后台评价表：内联星级（实心金 + 空心灰） */
.rv-stars-inline { color: var(--gold); font-size: 13px; letter-spacing: 1px; white-space: nowrap; }
.rv-stars-inline i { color: var(--star-track); font-style: normal; }

/* 写评价弹层 */
.rv-sheet { max-height: 88vh; overflow-y: auto; }
.rv-stars { display: inline-flex; gap: 6px; }
.rv-star {
  background: none; border: none; cursor: pointer; font-size: 30px; line-height: 1;
  color: var(--star-track); padding: 0 2px; transition: transform .1s;
}
.rv-star.on { color: var(--gold); }
.rv-star:hover { transform: scale(1.12); }
.rv-thumbs { display: flex; gap: 8px; flex-wrap: wrap; }
.rv-thumb { position: relative; display: inline-block; }
.rv-thumb img { width: 72px; height: 72px; object-fit: cover; border-radius: 9px; border: 1px solid var(--line); display: block; }
.rv-thumb-del {
  position: absolute; top: -6px; right: -6px; width: 20px; height: 20px; border-radius: 50%;
  border: none; background: var(--wine-deep); color: #fff; font-size: 13px; line-height: 1; cursor: pointer;
  display: flex; align-items: center; justify-content: center; padding: 0;
}

/* 购物车抽屉 */
.shop-cart-sheet { max-height: 82vh; overflow-y: auto; }
.cart-line { display: flex; gap: 10px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--line); }
.cart-line:last-child { border-bottom: none; }
.cl-cover {
  flex: 0 0 auto; width: 52px; height: 52px; border-radius: 9px; overflow: hidden;
  background: linear-gradient(135deg, var(--ink-2), var(--surface-2));
  border: 1px solid var(--line); display: flex; align-items: center; justify-content: center;
}
.cl-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cl-cover span { font-family: "SimSun", "Songti SC", serif; font-size: 16px; color: var(--gold-light); opacity: .8; }
.cl-main { flex: 1; min-width: 0; }
.cl-main b { display: block; font-size: 13px; color: var(--cream); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cl-main small { color: var(--muted); font-size: 11.5px; }
.cl-price { color: var(--gold-ink); font-size: 13px; font-weight: 600; margin-top: 2px; }
.cl-side { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }
.cl-remove { background: none; border: none; color: var(--danger-ink); font-size: 11.5px; cursor: pointer; }
.cart-total { display: flex; justify-content: space-between; align-items: center; margin: 14px 0 10px; font-size: 14px; color: var(--beige); }
.cart-total b { color: var(--gold-ink); font-size: 19px; }
/* v1.35-P1 勾选结算 */
.cl-check { flex: 0 0 auto; width: 17px; height: 17px; accent-color: var(--gold); cursor: pointer; }
.cart-all { display: flex; justify-content: space-between; align-items: center; padding: 10px 0 2px; font-size: 12.5px; color: var(--beige); }
.cart-all label { display: flex; align-items: center; gap: 6px; cursor: pointer; }
.cart-all input { width: 15px; height: 15px; accent-color: var(--gold); cursor: pointer; }

/* 结算与商品订单行 */
.co-line { display: flex; gap: 10px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--line); }
.co-line-main { flex: 1; min-width: 0; }
.co-line-main b { display: block; font-size: 13px; color: var(--cream); }
.co-line-main small { color: var(--muted); font-size: 11.5px; }
.co-line-amt { color: var(--gold-ink); font-size: 13.5px; font-weight: 600; }
.co-sub { display: flex; justify-content: space-between; padding-top: 10px; font-size: 13.5px; color: var(--beige); }
.co-sub b { color: var(--gold-ink); }

/* 按需采购履约进度条 */
.soc-steps { display: flex; align-items: flex-start; margin: 12px 0 4px; }
.soc-step { flex: 1; text-align: center; position: relative; }
.soc-step .soc-dot { display: block; width: 10px; height: 10px; border-radius: 50%; background: var(--line); margin: 0 auto 5px; position: relative; z-index: 1; }
.soc-step.on .soc-dot { background: var(--gold); box-shadow: 0 0 0 3px rgba(154, 123, 79, .2); }
.soc-step small { font-size: 10.5px; color: var(--muted); }
.soc-step.on small { color: var(--gold-ink); }
/* 节点时间戳：小字换行展示，避免挤压步骤标题 */
.soc-step .soc-ts { display: block; font-size: 9.5px; font-style: normal; color: var(--muted); opacity: .75; margin-top: 1px; }
.soc-step:not(:last-child)::after {
  content: ''; position: absolute; top: 5px; left: 50%; width: 100%; height: 1px; background: var(--line);
}
.soc-step.on:not(:last-child)::after { background: var(--gold); }
.ud-kv { display: flex; justify-content: space-between; gap: 10px; font-size: 12.5px; padding: 3px 0; }
.ud-kv > span:first-child { color: var(--muted); }
.ud-tabs { display: flex; gap: 6px; flex-wrap: wrap; margin: 14px 0 10px; }
.ud-tab {
  padding: 6px 14px; border-radius: 16px; font-size: 12.5px;
  background: var(--ink-2); border: 1px solid var(--line); color: var(--muted); cursor: pointer;
}
.ud-tab.on { background: var(--gold-deep); color: #fff; border-color: var(--gold); }
.tree-node { padding-left: 16px; border-left: 1px dashed var(--line); margin-left: 8px; }
.tree-row { display: flex; align-items: center; gap: 8px; padding: 5px 0; font-size: 12.5px; flex-wrap: wrap; }
@media (max-width: 860px) { .ud-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .ud-grid { grid-template-columns: 1fr; } }

/* ================= C8 素材库（后台） ================= */
.media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
.media-card { background: var(--ink-2); border: 1px solid var(--line); border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; }
.media-thumb { height: 96px; background: var(--ink); display: grid; place-items: center; font-size: 26px; color: var(--gold-light); overflow: hidden; }
.media-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.media-info { padding: 8px 10px; font-size: 11.5px; color: var(--muted); }
.media-info b { display: block; color: var(--cream); font-size: 12.5px; margin-bottom: 3px; word-break: break-all; }

/* ================= P0 法务文本 / 积分中心 ================= */
.legal-meta { color: var(--muted); font-size: 12px; margin: 6px 0 12px; }
.legal-text { color: var(--beige); font-size: 14px; line-height: 1.95; word-break: break-word; }
.legal-body { max-height: 60vh; overflow-y: auto; padding-right: 4px; }
.agree-row {
  display: flex; align-items: flex-start; gap: 8px; margin-top: 4px;
  font-size: 12.5px; line-height: 1.7; color: var(--muted); cursor: pointer;
}
.agree-row input[type="checkbox"] { margin-top: 2px; accent-color: var(--gold); flex: none; }
.agree-row a { color: var(--gold-light); text-decoration: underline; }
.txt-muted { color: var(--muted); }

/* ================= P2 PWA：安装引导条 ================= */
.a2hs-bar {
  position: fixed; left: 50%; transform: translateX(-50%);
  bottom: calc(66px + env(safe-area-inset-bottom, 0px));
  width: min(calc(100% - 24px), 616px); z-index: 80;
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; border-radius: 14px;
  background: var(--surface-2); border: 1px solid var(--line);
  box-shadow: 0 10px 30px rgba(0, 0, 0, .38);
  animation: a2hs-in .28s ease;
}
@keyframes a2hs-in { from { opacity: 0; transform: translate(-50%, 12px); } to { opacity: 1; transform: translate(-50%, 0); } }
.a2hs-ic {
  flex: none; width: 34px; height: 34px; border-radius: 9px;
  border: 1px solid var(--accent-ink); color: var(--accent-ink);
  display: flex; align-items: center; justify-content: center;
  font-family: Georgia, "Songti SC", serif; font-size: 17px;
}
.a2hs-txt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.a2hs-txt b { color: var(--cream); font-size: 13px; font-weight: 600; }
.a2hs-txt small { color: var(--muted); font-size: 11px; }
.a2hs-go {
  flex: none; border: none; border-radius: 9px; cursor: pointer;
  background: var(--gold-deep); color: var(--on-dark);
  font-size: 12.5px; font-weight: 600; padding: 8px 16px;
}
.a2hs-go:active { opacity: .85; }
.a2hs-no {
  flex: none; width: 26px; height: 26px; border-radius: 50%;
  background: transparent; border: none; color: var(--muted);
  font-size: 17px; line-height: 1; cursor: pointer;
}
.a2hs-no:hover { color: var(--cream); }
@media (min-width: 1200px) { .a2hs-bar { bottom: 24px; } }

/* ================= 课程专区体系（免费 / 青铜 / 白银 / 黄金） ================= */
/* 专区徽标：文字色走 --zone-* 变量，明暗主题各自保证对比度 */
.zone-badge {
  display: inline-flex; align-items: center; gap: 3px; flex: none;
  padding: 1px 8px; border-radius: 999px; font-size: 10.5px; font-weight: 600;
  line-height: 17px; border: 1px solid transparent; white-space: nowrap;
}
.zone-badge.free   { background: rgba(127,176,105,.15); border-color: rgba(127,176,105,.42); color: var(--zone-free); }
.zone-badge.bronze { background: rgba(199,154,91,.16);  border-color: rgba(199,154,91,.45);  color: var(--zone-bronze); }
.zone-badge.silver { background: rgba(160,170,182,.18); border-color: rgba(160,170,182,.5);  color: var(--zone-silver); }
.zone-badge.gold   { background: rgba(154,123,79,.2);   border-color: rgba(154,123,79,.55);  color: var(--zone-gold); }
.zone-badge .zb-lock { font-size: 9px; }

/* 课程列表的专区 Tab：横向可滑，锁定的专区显示锁标与升级提示 */
.zone-tabs {
  display: flex; gap: 8px; overflow-x: auto; padding: 2px 2px 8px;
  -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.zone-tabs::-webkit-scrollbar { display: none; }
.zone-tab {
  flex: none; display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  min-width: 92px; padding: 9px 13px; border-radius: 12px; cursor: pointer;
  background: var(--surface); border: 1px solid var(--line); color: var(--beige);
  text-decoration: none; transition: border-color .18s, transform .18s;
}
.zone-tab:active { transform: scale(.98); }
.zone-tab .zt-name { font-size: 13.5px; font-weight: 600; display: flex; align-items: center; gap: 4px; }
.zone-tab .zt-count { font-size: 12px; color: var(--muted); }
.zone-tab.on { border-color: var(--gold); background: rgba(154,123,79,.14); }
.zone-tab.on .zt-name { color: var(--gold-ink); }
.zone-tab.locked .zt-name { color: var(--muted); }
.zone-tab .zt-lock { font-size: 10px; }
.zone-tab.z-gold.on { border-color: var(--zone-gold); }
.zone-tab.z-bronze.on { border-color: var(--zone-bronze); }
.zone-tab.z-silver.on { border-color: var(--zone-silver); }
.zone-tab.z-free.on { border-color: var(--zone-free); }

/* 专区导语横幅（进入某专区后展示解锁状态与开通引导） */
.zone-banner {
  display: flex; align-items: center; gap: 12px; margin: 4px 0 12px;
  padding: 12px 14px; border-radius: 12px; background: var(--surface);
  border: 1px solid var(--line);
}
.zone-banner .zb-ic { font-size: 24px; flex: none; }
.zone-banner .zb-txt { flex: 1; min-width: 0; }
.zone-banner .zb-txt b { display: block; font-size: 14px; color: var(--cream); }
.zone-banner .zb-txt small { font-size: 12.5px; color: var(--muted); line-height: 1.5; }
.zone-banner.z-free   { border-color: rgba(127,176,105,.4); }
.zone-banner.z-bronze { border-color: rgba(199,154,91,.42); }
.zone-banner.z-silver { border-color: rgba(160,170,182,.45); }
.zone-banner.z-gold   { border-color: rgba(154,123,79,.5); }
.zone-banner .btn { flex: none; }

/* 卡片右上角的锁定标记 */
.l-cover .zone-badge, .v-cover .zone-badge { position: absolute; top: 7px; left: 7px; z-index: 2; }
/* 列表卡封面仅 68px 宽：长语种角标（如 Signature）会压到右侧标题上，改为底部窄条（可略宽出封面、仍留 12px 间距不压标题） */
.l-cover .zone-badge {
  top: auto; bottom: 5px; left: 50%; transform: translateX(-50%);
  display: block; text-align: center;
  max-width: 84px; padding: 0 5px; font-size: 10px; line-height: 15px;
  overflow: hidden; text-overflow: ellipsis;
}
.l-cover .zone-badge .zb-lock { display: none; }
.l-cover, .v-cover { position: relative; }
/* 专区徽标压在恒为深色的课程封面上：明暗主题统一改用浅色文字 + 半透明深底，
   否则浅色主题下加深过的 --zone-* 会变成「深字压深底」看不清 */
.l-cover .zone-badge, .v-cover .zone-badge { background: rgba(20, 16, 12, .55); }
.l-cover .zone-badge.free,   .v-cover .zone-badge.free   { color: #AEDB94; border-color: rgba(174, 219, 148, .6); }
.l-cover .zone-badge.bronze, .v-cover .zone-badge.bronze { color: #ECC98C; border-color: rgba(236, 201, 140, .6); }
.l-cover .zone-badge.silver, .v-cover .zone-badge.silver { color: #DDE4EB; border-color: rgba(221, 228, 235, .6); }
.l-cover .zone-badge.gold,   .v-cover .zone-badge.gold   { color: #F4DEAF; border-color: rgba(244, 222, 175, .62); }

/* 详情页锁定态引导条 */
.lock-cta {
  margin-top: 12px; padding: 13px 15px; border-radius: 12px;
  background: rgba(154,123,79,.12); border: 1px solid rgba(154,123,79,.42);
}
.lock-cta b { display: block; font-size: 14px; color: var(--gold-ink); margin-bottom: 4px; }
.lock-cta p { font-size: 12.5px; color: var(--beige); margin: 0 0 10px; line-height: 1.6; }
.lock-cta .lc-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.lock-cta .lc-actions .btn { flex: 1 1 auto; min-width: 132px; }

/* 会员中心：已解锁专区清单 */
.zone-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.zone-cell {
  padding: 10px 12px; border-radius: 11px; background: var(--surface);
  border: 1px solid var(--line); display: flex; align-items: center; gap: 8px;
}
.zone-cell .zc-ic { font-size: 15px; }
.zone-cell b { font-size: 12.5px; font-weight: 600; color: var(--cream); }
.zone-cell small { display: block; font-size: 10.5px; color: var(--muted); }
.zone-cell.off { opacity: .62; }
.zone-cell.off b { color: var(--muted); }
@media (min-width: 768px) { .zone-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

/* ================= 好友助力 / 裂变活动 ================= */
.viral-ic {
  width: 64px; height: 64px; border-radius: 10px; flex: none;
  display: flex; align-items: center; justify-content: center;
  font-size: 28px; background: var(--surface); border: 1px solid var(--line);
}
.viral-progress {
  height: 8px; margin: 10px 0 6px; border-radius: 6px; overflow: hidden;
  background: var(--line);
}
.viral-progress i {
  display: block; height: 100%; border-radius: 6px;
  background: linear-gradient(90deg, var(--wine), var(--gold));
  transition: width .35s ease;
}

/* ================= 心愿单 / 收藏 ================= */
.shop-card { position: relative; }
.sc-wish {
  position: absolute; top: 8px; right: 8px; z-index: 3;
  width: 32px; height: 32px; border-radius: 50%; border: 1px solid rgba(255, 255, 255, .18);
  background: rgba(20, 14, 12, .55); color: #fff; font-size: 16px; line-height: 1;
  display: flex; align-items: center; justify-content: center; cursor: pointer;
  backdrop-filter: blur(4px); transition: transform .15s ease, background .15s ease;
}
.sc-wish:hover { transform: scale(1.08); }
.sc-wish.on { color: #ff5a7a; border-color: rgba(255, 90, 122, .6); }
.sd-wish {
  margin-left: 10px; padding: 6px 12px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--line); background: var(--surface); color: var(--cream);
  font-size: 13px; display: inline-flex; align-items: center; gap: 5px;
}
.sd-wish.on { color: #ff5a7a; border-color: rgba(255, 90, 122, .5); }
.wish-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px; }
.wish-card { position: relative; }
.wish-remove {
  position: absolute; top: 8px; right: 8px; z-index: 3; width: 28px; height: 28px; border-radius: 50%;
  border: 1px solid var(--line); background: rgba(20, 14, 12, .6); color: #ff5a7a; cursor: pointer;
}

/* ================= 满减 / 组合套餐 ================= */
.combo-bar { display: flex; flex-direction: column; gap: 8px; margin: 12px 0; }
.combo-item {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 14px; border-radius: 12px; border: 1px solid rgba(212, 175, 106, .4);
  background: linear-gradient(90deg, rgba(212, 175, 106, .12), rgba(122, 30, 44, .12));
}
.combo-tag {
  flex: none; padding: 2px 8px; border-radius: 6px; font-size: 11.5px; font-weight: 700;
  background: var(--gold); color: #201509;
}
.combo-title { font-size: 13.5px; color: var(--cream); font-weight: 600; }
.combo-label { font-size: 12px; color: var(--gold-ink); }
.combo-hint { margin-top: 10px; padding: 8px 12px; border-radius: 10px; background: rgba(127, 176, 105, .14); border: 1px solid rgba(127, 176, 105, .4); font-size: 12.5px; color: var(--cream); }
.combo-hint.warn { background: rgba(212, 175, 106, .12); border-color: rgba(212, 175, 106, .4); }

/* ================= 买家追评 / 卖家回复 ================= */
.rv-append {
  margin-top: 8px; padding: 10px 12px; border-radius: 10px;
  background: rgba(212, 175, 106, .08); border: 1px dashed rgba(212, 175, 106, .4);
}
.rv-append-label { font-size: 11.5px; color: var(--gold-ink); font-weight: 700; }
.rv-append p { margin: 4px 0 0; }
.rv-reply {
  margin-top: 8px; padding: 10px 12px; border-radius: 10px;
  background: rgba(122, 30, 44, .12); border-left: 3px solid var(--wine);
}
.rv-reply-label { font-size: 11.5px; color: var(--wine-light, #c98); font-weight: 700; }
.rv-reply p { margin: 4px 0 0; }
.rv-item-actions { margin-top: 8px; }

/* ================= 章节测验 ================= */
.quiz-block { margin-top: 18px; padding: 16px; border-radius: 14px; background: var(--surface); border: 1px solid var(--line); }
.quiz-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin-bottom: 10px; }
.quiz-head h3 { margin: 0; font-size: 16px; color: var(--cream); }
.quiz-item { padding: 12px 0; border-top: 1px solid var(--line); }
.quiz-item:first-of-type { border-top: none; }
.quiz-q { font-size: 14px; color: var(--cream); margin-bottom: 8px; font-weight: 600; }
.quiz-opts { display: flex; flex-direction: column; gap: 8px; }
.quiz-opt {
  display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 10px;
  border: 1px solid var(--line); background: var(--ink); color: var(--cream);
  font-size: 13.5px; text-align: left; cursor: pointer; transition: border-color .15s ease;
}
.quiz-opt:hover { border-color: var(--gold); }
.quiz-opt .qo-k { flex: none; width: 22px; height: 22px; border-radius: 50%; background: var(--line); display: flex; align-items: center; justify-content: center; font-size: 12px; }
.quiz-opt.on { border-color: var(--gold); }
.quiz-opt.correct { border-color: rgba(127, 176, 105, .8); background: rgba(127, 176, 105, .14); }
.quiz-opt.wrong { border-color: rgba(194, 94, 76, .8); background: rgba(194, 94, 76, .14); }
.quiz-exp { margin-top: 8px; font-size: 12.5px; color: var(--muted); }
.quiz-exp b { color: var(--gold-ink); }

/* ================= 随堂笔记 ================= */
.note-block { margin-top: 18px; }
.note-form { display: flex; gap: 8px; margin-bottom: 10px; }
.note-form input {
  flex: 1; min-width: 0; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--line);
  background: var(--ink); color: var(--cream); font-size: 13.5px; outline: none;
}
.note-list { display: flex; flex-direction: column; gap: 8px; }
.note-item { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; border-radius: 10px; background: var(--surface); border: 1px solid var(--line); }
.note-meta { flex: none; display: flex; flex-direction: column; align-items: flex-start; gap: 2px; min-width: 74px; }
.note-date { font-size: 11px; color: var(--muted); font-variant-numeric: tabular-nums; }
.note-time { flex: none; font-size: 12px; color: var(--gold-ink); cursor: pointer; font-variant-numeric: tabular-nums; }
.note-text { flex: 1; min-width: 0; font-size: 13.5px; color: var(--cream); word-break: break-word; }
.note-del { flex: none; border: none; background: none; color: var(--muted); cursor: pointer; font-size: 15px; }
.note-form textarea {
  flex: 1; min-width: 0; padding: 10px 12px; border-radius: 10px; border: 1px solid var(--line);
  background: var(--ink); color: var(--cream); font-size: 13.5px; outline: none; resize: vertical; font-family: inherit;
}
.note-form textarea:focus { border-color: var(--gold-deep); }
.note-item .note-time { background: none; border: none; padding: 0; font-family: inherit; }
.quiz-opt:disabled { cursor: default; opacity: .92; }
.pl-tools { display: flex; flex-wrap: wrap; gap: 8px; padding: 12px 0; border-bottom: 1px solid var(--line); }

/* ================= 邀请排行榜 ================= */
.lb-list { display: flex; flex-direction: column; gap: 6px; }
.lb-row { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 10px; background: var(--surface); border: 1px solid var(--line); }
.lb-row.me { border-color: var(--gold); background: rgba(212, 175, 106, .12); }
.lb-rank { flex: none; width: 30px; text-align: center; font-weight: 700; color: var(--gold-ink); font-size: 15px; }
.lb-name { flex: 1; min-width: 0; font-size: 13.5px; color: var(--cream); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lb-invites { flex: none; font-size: 12.5px; color: var(--muted); }
.lb-me-tip { margin-top: 10px; padding: 10px 12px; border-radius: 10px; background: rgba(212, 175, 106, .12); border: 1px solid rgba(212, 175, 106, .4); font-size: 13px; color: var(--cream); }
.lb-tab { white-space: nowrap; }
.lb-reward-head { font-size: 12.5px; color: var(--muted); }
.lb-rewards { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.lb-reward-row { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 10px; background: rgba(212, 175, 106, .08); border: 1px solid rgba(212, 175, 106, .28); }
.lb-reward-rank { flex: none; min-width: 76px; font-size: 12.5px; font-weight: 700; color: var(--gold-ink); }
.lb-reward-label { flex: 1; min-width: 0; font-size: 13px; color: var(--cream); }

/* ================= 结业证书 ================= */
.cert-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }
.cert-card {
  padding: 16px; border-radius: 14px; border: 1px solid rgba(212, 175, 106, .4);
  background: linear-gradient(140deg, rgba(212, 175, 106, .14), rgba(122, 30, 44, .16));
}
.cert-card .cc-no { font-size: 12px; color: var(--gold-ink); font-variant-numeric: tabular-nums; }
.cert-card h4 { margin: 6px 0 4px; font-size: 15px; color: var(--cream); }
.cert-card .cc-meta { font-size: 12px; color: var(--muted); }

/* ================= AI 助教会话 / 反馈 ================= */
.ai-sess-row { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 9px; border: 1px solid var(--line); background: var(--surface); }
.ai-sess-row.on { border-color: var(--gold); }
.ai-sess-title { flex: 1; min-width: 0; font-size: 13px; color: var(--cream); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.ai-sess-act { flex: none; border: none; background: none; color: var(--muted); cursor: pointer; font-size: 14px; padding: 2px 4px; }
.ai-fb { display: inline-flex; gap: 6px; margin-top: 6px; }
.ai-fb button { border: 1px solid var(--line); background: var(--surface); color: var(--muted); border-radius: 8px; padding: 3px 9px; font-size: 12px; cursor: pointer; }
.ai-fb button.on { border-color: var(--gold); color: var(--gold-ink); }
.ai-sugg { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.ai-sugg button { border: 1px dashed var(--line); background: transparent; color: var(--cream); border-radius: 999px; padding: 6px 12px; font-size: 12.5px; cursor: pointer; }
.ai-sugg button:hover { border-color: var(--gold); color: var(--gold-ink); }

/* ================= 课程 / 课时封面图（水墨素材） ================= */
/* 有封面：图片铺满容器并裁切；无封面：回落原「渐变 + 标题首字」占位 */
.v-cover.has-img, .l-cover.has-img { overflow: hidden; }
.v-cover.has-img img, .l-cover.has-img img {
  position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block;
}
/* 课时列表缩略图（左下角带序号，替代纯序号圆点） */
.ll-thumb {
  position: relative; width: 52px; height: 36px; border-radius: 8px; overflow: hidden;
  flex-shrink: 0; background: var(--ink-2); display: block;
}
.ll-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ll-thumb .ll-no {
  position: absolute; left: 4px; bottom: 2px; font-style: normal; font-size: 11px; font-weight: 700;
  color: #F4DEAF; text-shadow: 0 1px 3px rgba(0,0,0,.95), 0 0 6px rgba(0,0,0,.8);
}
/* 课程详情首屏：封面作底图，左侧压深渐变保证标题对比度（文字恒为深底专用色） */
.detail-hero .dh-bg { position: absolute; inset: 0; background-size: cover; background-position: center right; }
.detail-hero .dh-bg::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(100deg, rgba(18,14,10,.95) 0%, rgba(18,14,10,.86) 42%, rgba(18,14,10,.52) 100%);
}
.detail-hero.has-img > *:not(.dh-bg) { position: relative; z-index: 1; }
/* 音频播放器封面（原为 ♪ 占位圆） */
.pl-audio-cover.has-img { overflow: hidden; padding: 0; }
.pl-audio-cover.has-img img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* ================= v1.18 亮色为默认：养生 / 商城页头转亮（播放器仍恒深色） ================= */
/* 养生文化页头：白→浅米金渐变，墨褐宋体标题，角标改浅金底深金字 */
:root[data-theme="light"] .wellness-hero {
  background: linear-gradient(135deg, #FFFFFF 0%, #F5EEDF 100%);
  border-color: rgba(154, 123, 79, .35);
  box-shadow: 0 8px 24px rgba(120, 95, 55, .08);
}
:root[data-theme="light"] .wellness-hero h1 { color: var(--cream); }
:root[data-theme="light"] .wellness-hero p { color: var(--beige); }
:root[data-theme="light"] .wh-tag {
  color: var(--gold-ink); background: rgba(154, 123, 79, .14); border-color: rgba(154, 123, 79, .4);
}
/* 商城页头：白→浅米金→浅酒红晕染，购物车按钮改浅底深金字 */
:root[data-theme="light"] .shop-hero {
  background: linear-gradient(135deg, #FFFFFF 0%, #F7F0E2 55%, #F3E6E0 100%);
  border-color: rgba(154, 123, 79, .35);
  box-shadow: 0 8px 24px rgba(120, 95, 55, .08);
}
:root[data-theme="light"] .shop-hero .sh-kicker { color: var(--gold-ink); }
:root[data-theme="light"] .shop-hero h1 { color: var(--cream); }
:root[data-theme="light"] .shop-hero p { color: var(--beige); }
:root[data-theme="light"] .shop-hero .sh-note { color: var(--muted); }
:root[data-theme="light"] .shop-cart-btn {
  background: rgba(255, 255, 255, .82); border-color: rgba(154, 123, 79, .5); color: var(--gold-deep);
}

/* ================= v1.34-P2 商城 FAQ（原生 details 折叠，零 JS 开销） ================= */
.shop-faq { margin: 18px 0 8px; }
.shop-faq h2 { margin: 0 0 10px; font-size: 19px; }
.faq-item {
  border: 1px solid var(--line); border-radius: 12px; background: var(--surface);
  margin-bottom: 8px; overflow: hidden;
}
.faq-item summary {
  padding: 12px 14px; cursor: pointer; font-size: 14px; font-weight: 600; color: var(--cream);
  list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 8px;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after { content: "+"; flex: none; color: var(--gold-ink); font-size: 17px; transition: transform .18s ease; }
.faq-item[open] summary::after { transform: rotate(45deg); }
.faq-item[open] summary { border-bottom: 1px solid var(--line); }
.faq-item p { margin: 0; padding: 11px 14px; font-size: 13px; line-height: 1.75; color: var(--beige); }


/* ===== v1.38-r1 用户粘性：千人千面问候条 / 签到 / 成就徽章墙 / 庆祝弹层 ===== */
.ow-hi { margin-top: 12px; }
.ow-hi-cont {
  display: flex; align-items: center; gap: 10px; margin-top: 10px;
  background: var(--ink); border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px;
}
.ow-hi-cont .oc-ic { font-size: 20px; flex: none; }
.ow-hi-cont .oc-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.ow-hi-cont .oc-main b { font-size: 13px; color: var(--cream); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ow-hi-cont .oc-main small { font-size: 11px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.badge-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 10px; }
.badge-card {
  display: flex; flex-direction: column; align-items: center; text-align: center; gap: 4px;
  background: var(--ink); border: 1px solid var(--line); border-radius: 14px; padding: 14px 10px;
  filter: grayscale(1); opacity: .55; transition: filter .25s ease, opacity .25s ease, transform .2s ease;
}
.badge-card.on {
  filter: none; opacity: 1; border-color: rgba(201, 162, 39, .45);
  background: linear-gradient(160deg, rgba(201,162,39,.10), var(--ink) 55%);
  box-shadow: 0 4px 18px rgba(201, 162, 39, .12);
}
.badge-card:active { transform: scale(.97); }
.badge-card .bg-ic { font-size: 30px; line-height: 1.1; }
.badge-card .bg-name { font-size: 13px; color: var(--cream); }
.badge-card .bg-desc { font-size: 11px; color: var(--muted); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.badge-card .bg-pts { font-size: 11px; color: var(--muted); }
/* 庆祝弹层 */
.ow-cel { text-align: center; }
.ow-cel-hero { font-size: 52px; line-height: 1.2; animation: owCelPop .5s cubic-bezier(.2, 1.4, .4, 1) both; }
@keyframes owCelPop { 0% { transform: scale(.4) rotate(-8deg); opacity: 0; } 100% { transform: scale(1) rotate(0); opacity: 1; } }
.ow-cel-badges { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.ow-cel-badge {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  background: linear-gradient(160deg, rgba(201,162,39,.12), var(--ink) 60%);
  border: 1px solid rgba(201, 162, 39, .4); border-radius: 12px; padding: 12px 10px;
}
.ow-cel-badge .cb-ic { font-size: 28px; }
.ow-cel-badge b { font-size: 14px; color: var(--gold-light); }
.ow-cel-badge small { font-size: 11px; color: var(--muted); }
/* ===== v1.50 讲义正文排版（.sd-rich .lec1 作用域，适配深色阅读主题；规格见 v1.50 commit 说明） ===== */
.sd-rich .lec1 { font-size: 17px; line-height: 1.9; letter-spacing: .01em; color: var(--beige, #d9c9a8); }
@media (min-width: 768px) { .sd-rich .lec1 { font-size: 18px; } }
.sd-rich .lec1.lec1-lt { line-height: 1.75; letter-spacing: 0; }
.sd-rich .lec1 p { margin: 0 0 1.05em; }
.sd-rich .lec1 .lec1-kicker { font-size: 12.5px; letter-spacing: .14em; color: var(--gold-deep, #9a7b4f); font-weight: 600; margin: 0 0 12px; }
.sd-rich .lec1 figure { margin: 0 0 20px; }
.sd-rich .lec1 figure img { width: 100%; aspect-ratio: 16/9; object-fit: cover; border-radius: 12px; margin: 0; border: 1px solid rgba(201,162,39,.2); }
.sd-rich .lec1 figcaption { font-size: 12px; color: rgba(190,175,150,.65); text-align: center; margin-top: 8px; }
.sd-rich .lec1 .lec1-thesis { font-size: 19px; font-weight: 600; line-height: 1.75; color: var(--cream, #f4ead2); margin: 20px 0 8px; }
.sd-rich .lec1 .lec1-orn { display: flex; gap: 10px; justify-content: center; margin: 28px 0; }
.sd-rich .lec1 .lec1-orn i { width: 22px; height: 2px; background: var(--gold-deep, #9a7b4f); opacity: .65; border-radius: 2px; }
.sd-rich .lec1 .lec1-quote { text-align: center; margin: 30px 8px; }
.sd-rich .lec1 .lec1-qmark { display: block; font-family: "Songti SC","STSong","Noto Serif SC","Noto Serif CJK SC","SimSun",serif; font-size: 40px; line-height: 1; color: var(--gold, #c9a227); }
.sd-rich .lec1 .lec1-qt { font-family: "Songti SC","STSong","Noto Serif SC","Noto Serif CJK SC","SimSun",serif; font-size: 20px; font-weight: 600; line-height: 1.7; color: var(--cream, #f4ead2); max-width: 30em; margin: 4px auto 10px; }
.sd-rich .lec1 .lec1-qmean { font-size: 15px; line-height: 1.8; color: var(--beige, #d9c9a8); opacity: .88; max-width: 34em; margin: 0 auto 10px; }
.sd-rich .lec1 .lec1-qsrc { font-size: 13px; letter-spacing: .08em; color: var(--gold-deep, #9a7b4f); }
.sd-rich .lec1 h2 { font-family: "Songti SC","STSong","Noto Serif SC","Noto Serif CJK SC","SimSun",serif; font-size: 19px; font-weight: 700; color: var(--cream, #f4ead2); border-left: 3px solid var(--gold, #c9a227); padding-left: 11px; margin: 30px 0 14px; line-height: 1.4; }
.sd-rich .lec1 .lec1-research { background: var(--ink-2, rgba(255,255,255,.04)); border: 1px solid rgba(201,162,39,.22); border-radius: 12px; padding: 14px 16px; margin: 20px 0 8px; }
.sd-rich .lec1 .lec1-rk { display: block; font-size: 11.5px; letter-spacing: .12em; color: var(--gold-deep, #9a7b4f); font-weight: 700; margin-bottom: 6px; }
.sd-rich .lec1 .lec1-research p { font-size: 14.5px; line-height: 1.8; margin: 0 0 6px; color: var(--beige, #d9c9a8); opacity: .92; }
.sd-rich .lec1 .lec1-rnote { font-weight: 600; color: var(--cream, #f4ead2); margin-bottom: 0 !important; }
.sd-rich .lec1 .lec1-practice { background: var(--ink-2, rgba(255,255,255,.04)); border: 1px solid rgba(201,162,39,.4); border-radius: 14px; padding: 18px 20px; margin: 6px 0 8px; }
.sd-rich .lec1 .lec1-phead { font-size: 17px; font-weight: 700; color: var(--cream, #f4ead2); margin: 0 0 6px; }
.sd-rich .lec1 .lec1-pchip { display: inline-block; font-size: 12px; color: var(--gold-deep, #9a7b4f); border: 1px solid rgba(201,162,39,.4); border-radius: 999px; padding: 2px 10px; margin: 0 0 14px; }
.sd-rich .lec1 .lec1-practice ol { list-style: none; counter-reset: st; padding: 0; margin: 0; }
.sd-rich .lec1 .lec1-practice ol li { position: relative; padding-left: 38px; font-size: 16px; line-height: 1.8; margin: 0 0 12px; counter-increment: st; }
.sd-rich .lec1 .lec1-practice ol li:last-child { margin-bottom: 0; }
.sd-rich .lec1 .lec1-practice ol li::before { content: counter(st); position: absolute; left: 0; top: 3px; width: 24px; height: 24px; border-radius: 50%; background: linear-gradient(135deg, #d8b84a, #9a7b4f); color: #fff; font-size: 13px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.sd-rich .lec1 .lec1-phrase { border-left: 3px solid var(--gold, #c9a227); padding: 2px 0 2px 14px; margin: 14px 0; }
.sd-rich .lec1 .lec1-to { display: block; font-size: 13px; font-weight: 600; letter-spacing: .04em; color: var(--gold-deep, #9a7b4f); margin-bottom: 4px; }
.sd-rich .lec1 .lec1-phrase p { font-family: "Songti SC","STSong","Noto Serif SC","Noto Serif CJK SC","SimSun",serif; font-size: 17px; line-height: 1.75; color: var(--cream, #f4ead2); margin: 0; }
.sd-rich .lec1 .lec1-safe { background: rgba(217,154,58,.1); border-left: 4px solid #d99a3a; border-radius: 0 12px 12px 0; padding: 14px 16px; margin: 8px 0 20px; }
.sd-rich .lec1 .lec1-safe p { font-size: 15px; line-height: 1.8; color: #e8cda4; margin: 0; }
.sd-rich .lec1 .lec1-legal { text-align: center; font-size: 12.5px; opacity: .65; margin: 24px 0 0; }
/* ===== v1.50 end ===== */

/* ===== v1.52.6 评价行星星错位修复 =====
 * .notif-main b 的后代选择器会命中 .stars 内层灰轨 <b>（display:flex + font-size:13.5px），
 * 灰星被放大到 13.5px 而金星仍 11px，两层逐字错位呈「重叠」；外层 b 为 flex 时 .stars 还可能被压缩。
 * 这里把 .stars 内层恢复为普通行内文本，并禁止星级组件在 flex 里被压缩。 */
.notif-main .stars b { display: inline; font-size: inherit; }
.notif-main .stars { flex: 0 0 auto; white-space: nowrap; }

/* ===== v1.59 批次 B5：前台播放器增强（章节 / 水印 / 多源 / 文稿 / 波形 / AB / BGM / 定时） ===== */
/* —— 水印覆盖层（九宫格；位置由后台 media_json.watermark.pos 决定） */
.pl-wm { position: absolute; z-index: 6; max-width: 70%; pointer-events: none; color: #fff; font-weight: 600; letter-spacing: .06em; text-shadow: 0 1px 3px rgba(0,0,0,.9); line-height: 1.4; word-break: break-all; }
.pl-wm img { max-width: 100%; max-height: 64px; display: block; }
.pl-wm.p-tl { left: 12px; top: 12px; }
.pl-wm.p-tc { left: 50%; top: 12px; transform: translateX(-50%); text-align: center; }
.pl-wm.p-tr { right: 12px; top: 12px; text-align: right; }
.pl-wm.p-ml { left: 12px; top: 50%; transform: translateY(-50%); }
.pl-wm.p-mc { left: 50%; top: 50%; transform: translate(-50%, -50%); text-align: center; }
.pl-wm.p-mr { right: 12px; top: 50%; transform: translateY(-50%); text-align: right; }
.pl-wm.p-bl { left: 12px; bottom: 12px; }
.pl-wm.p-bc { left: 50%; bottom: 12px; transform: translateX(-50%); text-align: center; }
.pl-wm.p-br { right: 12px; bottom: 12px; text-align: right; }

/* —— 章节：分段条 + 悬停章名 + 章节列表 */
.pl-chapters { padding: 10px 12px 0; border-top: 1px solid var(--line); }
.pl-chbar { position: relative; height: 16px; border-radius: 8px; background: rgba(255,255,255,.07); cursor: pointer; overflow: visible; }
.pl-chfill { position: absolute; left: 0; top: 0; height: 100%; border-radius: 8px 0 0 8px; background: linear-gradient(90deg, rgba(212,175,55,.55), rgba(212,175,55,.28)); width: 0; pointer-events: none; }
.pl-chplay { position: absolute; top: -3px; width: 2px; height: 22px; background: var(--gold, #d4af37); box-shadow: 0 0 6px rgba(212,175,55,.7); pointer-events: none; left: 0; }
.pl-chseg { position: absolute; top: 0; height: 100%; border-right: 1px solid rgba(0,0,0,.55); cursor: pointer; }
.pl-chseg:hover { background: rgba(212,175,55,.22); }
.pl-chtip { position: absolute; top: -30px; transform: translateX(-50%); background: rgba(20,16,12,.94); color: var(--cream, #f4ead2); font-size: 11.5px; padding: 3px 8px; border-radius: 6px; white-space: nowrap; pointer-events: none; z-index: 9; }
.pl-chlist { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px 0 2px; }
.pl-chbtn { background: transparent; border: 1px solid var(--line); color: var(--beige, #e8dcc2); font-size: 12px; padding: 3px 9px; border-radius: 14px; cursor: pointer; max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pl-chbtn:hover { border-color: var(--gold-deep, #9a7b4f); color: var(--gold, #d4af37); }

/* —— 多清晰度源 */
.pl-quality { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; padding: 10px 12px; border-top: 1px solid var(--line); }
.pl-quality .q-opt { background: transparent; border: 1px solid var(--line); color: var(--beige, #e8dcc2); font-size: 12px; padding: 3px 10px; border-radius: 14px; cursor: pointer; }
.pl-quality .q-opt.on { background: var(--gold-deep, #9a7b4f); border-color: var(--gold-deep, #9a7b4f); color: #1a1208; font-weight: 600; }

/* —— 文稿 Tab（音频文字稿对齐） */
.pl-tabs { display: flex; gap: 6px; padding: 10px 12px 0; }
.pl-tab { background: transparent; border: 1px solid var(--line); color: var(--muted); font-size: 12.5px; padding: 4px 14px; border-radius: 14px; cursor: pointer; }
.pl-tab.on { background: var(--gold-deep, #9a7b4f); border-color: var(--gold-deep, #9a7b4f); color: #1a1208; font-weight: 600; }
.pl-script { max-height: 260px; overflow-y: auto; padding: 10px 12px; }
.pl-script-p { font-size: 14px; line-height: 1.9; color: var(--beige, #e8dcc2); padding: 5px 9px; margin: 0 0 4px; border-radius: 6px; border-left: 2px solid transparent; cursor: pointer; }
.pl-script-p:hover { background: rgba(255,255,255,.05); }
.pl-script-p.on { background: rgba(212,175,55,.14); border-left-color: var(--gold, #d4af37); color: var(--cream, #f4ead2); }

/* —— 音频波形 + AB 复听 */
.pl-wave-wrap { position: relative; margin-top: 12px; min-height: 62px; border-radius: 8px; background: rgba(255,255,255,.04); overflow: hidden; cursor: pointer; }
.pl-wave { min-height: 62px; }
.pl-wave audio { display: none; }
.pl-wave-fail { padding: 20px 12px; text-align: center; }
.pl-wave-ov { position: absolute; inset: 0; pointer-events: none; }
.pl-wave-cur { position: absolute; top: 0; width: 2px; height: 100%; background: var(--gold, #d4af37); box-shadow: 0 0 6px rgba(212,175,55,.75); left: 0; }
.pl-wave-ab { position: absolute; top: 0; height: 100%; background: rgba(212,175,55,.2); border-left: 2px solid var(--gold, #d4af37); border-right: 2px solid var(--gold, #d4af37); }
.pl-bgmaudio { display: none; }

/* —— 尾帧「下一课」卡 */
.pl-endcard { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 10px; padding: 12px 14px; border-radius: 12px; background: linear-gradient(135deg, rgba(154,123,79,.16), rgba(123,45,59,.12)); border: 1px solid rgba(154,123,79,.32); }
.pl-endcard b { color: var(--gold-ink, #d4af37); }
.pl-endcard span { flex: 1; min-width: 160px; }

@media (max-width: 860px) {
  .pl-script { max-height: 200px; }
  .pl-chbtn { max-width: 100%; }
}

/* ================= v1.60 批次 B6：富文本 / UGC / 横幅覆盖层 ================= */

/* —— 服务端消毒富文本通用排版（直播描述 / 训练营点评 / 门户区块 desc·body 共用） —— */
.rich-text { color: var(--beige, #e8dcc2); font-size: 14px; line-height: 1.85; word-break: break-word; overflow-wrap: anywhere; }
.rich-text p { margin: 6px 0; }
.rich-text ul, .rich-text ol { padding-left: 22px; margin: 8px 0; }
.rich-text li { margin: 2px 0; }
.rich-text blockquote { border-left: 3px solid var(--gold-deep, #8a6a35); margin: 10px 0; padding: 6px 14px; background: var(--ink-2, #241f1a); border-radius: 0 8px 8px 0; color: var(--beige, #e8dcc2); }
.rich-text img { max-width: 100%; height: auto; border-radius: 10px; display: block; margin: 10px auto; }
.rich-text a { color: var(--gold-light, #d4af37); text-decoration: underline; }
.rich-text h1, .rich-text h2, .rich-text h3, .rich-text h4 { color: var(--cream, #f4ead4); margin: 14px 0 8px; line-height: 1.4; }
.rich-text h2 { font-size: 17px; }
.rich-text h3 { font-size: 15.5px; }
.rich-text code { font-family: ui-monospace, Menlo, Consolas, "Courier New", monospace; background: rgba(255,255,255,.06); border-radius: 4px; padding: 1px 5px; font-size: 13px; }
.rich-text pre { background: rgba(255,255,255,.05); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; overflow-x: auto; font-size: 13px; line-height: 1.75; }
.rich-text table { width: 100%; border-collapse: collapse; margin: 12px 0; font-size: 13px; }
.rich-text th, .rich-text td { border: 1px solid var(--line); padding: 6px 10px; text-align: left; }
/* 列表卡片中的描述：压缩图片高度，避免撑破卡片 */
.l-desc { margin-top: 6px; font-size: 12.5px; }
.l-desc img { max-height: 120px; width: auto; margin: 6px 0; }

/* —— 法务正文（.legal-text.law-body）：标题层级 / 表格 / 引用 / 签署块 —— */
.legal-text.law-body h2 { color: var(--cream, #f4ead4); font-size: 17px; margin: 18px 0 8px; padding-left: 10px; border-left: 3px solid var(--gold, #d4af37); line-height: 1.4; }
.legal-text.law-body h3 { color: var(--cream, #f4ead4); font-size: 15px; margin: 14px 0 6px; }
.legal-text.law-body h4 { color: var(--cream, #f4ead4); font-size: 14px; margin: 12px 0 6px; }
.legal-text.law-body p { margin: 7px 0; }
.legal-text.law-body ul, .legal-text.law-body ol { padding-left: 24px; margin: 8px 0; }
.legal-text.law-body li { margin: 3px 0; }
.legal-text.law-body blockquote { border-left: 3px solid var(--gold-deep, #8a6a35); margin: 12px 0; padding: 8px 14px; background: var(--ink-2, #241f1a); border-radius: 0 8px 8px 0; color: var(--beige, #e8dcc2); }
.legal-text.law-body table { width: 100%; border-collapse: collapse; margin: 12px 0; font-size: 13px; }
.legal-text.law-body th, .legal-text.law-body td { border: 1px solid var(--line); padding: 6px 10px; text-align: left; }
.legal-text.law-body img { max-width: 100%; height: auto; border-radius: 8px; }
.legal-text.law-body a { color: var(--gold-light, #d4af37); text-decoration: underline; }
/* 签署块（与服务端/后台 law-sign 类名保持一致） */
.legal-text.law-body .law-sign { margin: 18px 0 6px; padding: 12px 14px; border: 1px dashed var(--rule, rgba(154,123,79,.4)); border-radius: 10px; background: rgba(154,123,79,.06); font-size: 13px; line-height: 1.9; }
.legal-text.law-body .law-sign p { margin: 2px 0; }

/* —— UGC 受限富文本展示（帖子 / 回复）：p/br/ul/ol/blockquote/pre/code/img/a —— */
.ugc-rich { color: var(--beige, #e8dcc2); font-size: 14px; line-height: 1.85; word-break: break-word; overflow-wrap: anywhere; }
.ugc-rich p { margin: 6px 0; }
.ugc-rich ul, .ugc-rich ol { padding-left: 22px; margin: 8px 0; }
.ugc-rich li { margin: 2px 0; }
.ugc-rich blockquote { border-left: 3px solid var(--gold-deep, #8a6a35); margin: 10px 0; padding: 6px 14px; background: var(--ink-2, #241f1a); border-radius: 0 8px 8px 0; color: var(--beige, #e8dcc2); }
.ugc-rich pre { background: rgba(255,255,255,.05); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; overflow-x: auto; font-size: 13px; line-height: 1.75; }
.ugc-rich code { font-family: ui-monospace, Menlo, Consolas, "Courier New", monospace; background: rgba(255,255,255,.06); border-radius: 4px; padding: 1px 5px; font-size: 13px; }
.ugc-rich pre code { background: none; padding: 0; }
.ugc-rich img { max-width: 100%; height: auto; border-radius: 10px; display: block; margin: 10px 0; }
.ugc-rich a { color: var(--gold-light, #d4af37); text-decoration: underline; }

/* —— UGC 编辑器（工具条 + 编辑区 + 表情面板） —— */
.ugc-editor { border: 1px solid var(--line); border-radius: 10px; background: var(--ink); overflow: hidden; }
.ugc-toolbar { display: flex; flex-wrap: wrap; gap: 2px; padding: 6px; border-bottom: 1px solid var(--line); background: rgba(255,255,255,.03); }
.ugc-tb { min-width: 30px; height: 28px; padding: 0 7px; background: transparent; border: 1px solid transparent; border-radius: 6px; color: var(--beige, #e8dcc2); font-size: 13px; cursor: pointer; }
.ugc-tb:hover { border-color: var(--gold-deep, #8a6a35); color: var(--gold-light, #d4af37); }
.ugc-tb[disabled] { opacity: .4; cursor: not-allowed; }
.ugc-area { min-height: 110px; max-height: 320px; overflow-y: auto; padding: 10px 12px; color: var(--cream, #f4ead4); font-size: 13.5px; line-height: 1.75; outline: none; }
.ugc-area:empty::before { content: attr(data-placeholder); color: var(--muted, #9b8f7a); }
.ugc-area img { max-width: 100%; height: auto; border-radius: 8px; display: block; margin: 8px 0; }
.ugc-area blockquote { border-left: 3px solid var(--gold-deep, #8a6a35); margin: 8px 0; padding: 4px 12px; background: var(--ink-2, #241f1a); border-radius: 0 8px 8px 0; }
.ugc-area pre { background: rgba(255,255,255,.05); border: 1px solid var(--line); border-radius: 8px; padding: 10px; overflow-x: auto; }
.u-emoji { display: flex; flex-wrap: wrap; gap: 2px; padding: 8px; border-bottom: 1px solid var(--line); background: rgba(255,255,255,.03); max-height: 132px; overflow-y: auto; }
.u-emoji[hidden] { display: none; }
.u-emoji button { width: 32px; height: 32px; font-size: 18px; line-height: 1; background: transparent; border: 1px solid transparent; border-radius: 6px; cursor: pointer; }
.u-emoji button:hover { background: var(--ink-2, #241f1a); border-color: var(--gold-deep, #8a6a35); }
.ugc-img-count { padding: 5px 12px; font-size: 11.5px; color: var(--muted, #9b8f7a); border-top: 1px solid var(--line); }
.ugc-img-count[hidden] { display: none; }

/* —— 首页横幅覆盖层（九宫格；.banner-slide 已在 theme.css 设 position:relative） —— */
.banner-ov { position: absolute; z-index: 2; max-width: 78%; line-height: 1.3; color: var(--on-dark, #fdf8ec); text-shadow: 0 2px 8px rgba(0,0,0,.55); }
.banner-ov.ov-text { pointer-events: none; }
.banner-ov.ov-btn { display: inline-block; padding: 7px 16px; border-radius: 22px; text-decoration: none; background: var(--gold-deep, #8a6a35); color: var(--on-dark, #fdf8ec); cursor: pointer; }
.ov-tl { left: 16px; top: 16px; }
.ov-tc { left: 50%; top: 16px; transform: translateX(-50%); text-align: center; }
.ov-tr { right: 16px; top: 16px; text-align: right; }
.ov-ml { left: 16px; top: 50%; transform: translateY(-50%); }
.ov-mc { left: 50%; top: 50%; transform: translate(-50%, -50%); text-align: center; }
.ov-mr { right: 16px; top: 50%; transform: translateY(-50%); text-align: right; }
.ov-bl { left: 16px; bottom: 16px; }
.ov-bc { left: 50%; bottom: 16px; transform: translateX(-50%); text-align: center; }
.ov-br { right: 16px; bottom: 16px; text-align: right; }
@media (min-width: 861px) {
  .ov-tl, .ov-ml, .ov-bl { left: 24px; }
  .ov-tr, .ov-mr, .ov-br { right: 24px; }
  .ov-tl, .ov-tc, .ov-tr { top: 24px; }
  .ov-bl, .ov-bc, .ov-br { bottom: 24px; }
}

/* ================================================================
   v1.64 P0：课时页版式重构（双栏 / 舞台锁高 / 五页签 / 底部动作条）
   改动范围仅前台课时页，零接口改动；所有规则以 .pl- 前缀追加，不影响后台编辑器
   ================================================================ */

/* ---------- 1. 版式骨架：桌面主区 + 右栏，平板单列 900，手机通栏 ---------- */
.pl-layout { display: block; }
.pl-main { min-width: 0; }
.pl-course-head { margin-top: 0; }
.pl-rail { display: flex; flex-direction: column; gap: 12px; margin-top: 14px; }
.pl-rail-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 12px; }
.pl-rail-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; }
.pl-rail-head b { font-size: 13.5px; color: var(--cream); letter-spacing: .02em; }
.plr-next-t { display: block; font-size: 13.5px; line-height: 1.5; color: var(--gold-ink); text-decoration: none; cursor: pointer; }
.plr-next-t:hover { text-decoration: underline; }
.pl-rail .pl-catalog { gap: 2px; margin: 0; padding: 0; }
.pl-rail .pl-catalog li { display: flex; align-items: center; gap: 8px; padding: 8px 9px; border: 1px solid transparent; border-radius: 8px; background: transparent; cursor: pointer; }
.pl-rail .pl-catalog li:hover { background: var(--surface-2); border-color: var(--line); }
.pl-rail .pl-catalog li.on { background: rgba(154, 123, 79, .14); border-color: rgba(154, 123, 79, .45); }
.plr-no { flex: none; width: 20px; height: 20px; border-radius: 50%; display: grid; place-items: center; font-size: 11px; background: var(--surface-2); color: var(--muted); }
.pl-rail .pl-catalog li.on .plr-no { background: var(--gold-deep); color: #FFF6E2; }
.plr-tt { flex: 1; min-width: 0; font-size: 13px; line-height: 1.45; color: var(--beige); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.pl-rail .pl-catalog li.on .plr-tt { color: var(--cream); font-weight: 600; }
.plr-tag { flex: none; font-size: 11px; color: var(--muted); white-space: nowrap; }
.pl-rail .pl-catalog li.done .plr-tag.ok { color: var(--gold-ink); font-weight: 700; }
@media (min-width: 768px) { .pl-layout { max-width: 900px; margin: 0 auto; } }
@media (min-width: 1200px) {
  .pl-layout {
    display: grid; grid-template-columns: minmax(0, 780px) 300px; gap: 24px;
    max-width: 1120px; margin: 0 auto; align-items: start;
  }
  .pl-rail { margin-top: 0; position: sticky; top: 16px; max-height: calc(var(--app-vh) - 32px); overflow-y: auto; }
  .pl-rail .pl-catalog { max-height: 44vh; overflow-y: auto; }
}

/* ---------- 1.1 目录折叠 + 三态符号（移动端默认收起，桌面右栏常显） ---------- */
.pl-cat-toggle { display: none; }
.pl-cat-cur { margin: -2px 0 8px; font-size: 12.5px; color: var(--muted); letter-spacing: .02em; }
.pl-rail .pl-catalog li.locked { opacity: .6; cursor: pointer; }
.pl-rail .pl-catalog li.locked:hover { background: var(--surface-2); border-color: var(--line); }
.pl-rail .pl-catalog li .plr-tag { font-size: 12px; opacity: .9; }
.pl-rail .pl-catalog li.done .plr-tag.ok { opacity: 1; }
.pl-rail .pl-catalog li.on .plr-tag { color: var(--cream); }
@media (max-width: 1199px) {
  #plRailCat .pl-rail-head { margin-bottom: 6px; }
  #plRailCat .pl-cat-toggle {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 56px; height: 32px; padding: 0 12px;
    border: 1px solid var(--line); border-radius: 999px; background: transparent;
    color: var(--gold-ink); font-size: 13px; cursor: pointer;
  }
  #plRailCat .pl-cat-toggle:hover { border-color: var(--gold-deep); }
  #plRailCat .pl-catalog { display: none; }
  #plRailCat.open .pl-catalog { display: flex; max-height: 56vh; overflow-y: auto; }
  #plRailCat.open .pl-cat-toggle { background: var(--surface-2); color: var(--cream); }
}

/* ---------- 2. 播放器头部：标题为主，元信息为辅 ---------- */
.player .pl-head { display: block; padding: 14px 16px 12px; border-bottom: 1px solid var(--line); }
.player .pl-htitle { margin: 0 0 8px; font-size: 20px; line-height: 1.5; font-weight: 700; color: var(--cream); word-break: break-word; }
.pl-hmeta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13.5px; color: var(--muted); }

/* ---------- 3. 舞台：16:9 锁高（max 62vh）+ contain，消 CLS；图文课不占舞台 ---------- */
.player .pl-stage { background: #000; position: relative; }
.pl-media-box {
  position: relative; width: 100%; aspect-ratio: 16 / 9; max-height: 62vh;
  background: #000; display: grid; place-items: center; overflow: hidden;
}
.pl-media-box .pl-media { width: 100%; height: 100%; max-height: none; object-fit: contain; display: block; }
.player .pl-stage .pl-audio-wrap { position: relative; padding: 24px 16px 18px; }
.player .pl-audio-cover { width: 68px; height: 68px; font-size: 26px; }
.pl-media-err {
  position: absolute; inset: 0; z-index: 5; display: grid; place-content: center; gap: 6px;
  padding: 16px; text-align: center; background: rgba(10, 8, 6, .88); color: var(--on-dark);
}
.pl-media-err b { font-size: 15px; }
.pl-media-err span { font-size: 12.5px; color: var(--on-dark-3); }
.player .pl-speed { padding: 8px 16px; }
.player .pl-chapters { padding: 10px 16px 0; }
.player .pl-quality { padding: 10px 16px; }

/* ---------- 4. 工具行 + 五页签 ---------- */
.player .pl-tools { padding: 8px 16px; border-bottom: 1px solid var(--line); gap: 8px; }
.player .pl-tools .btn-sm { font-size: 14.5px; padding: 7px 14px; }
.pl-tabs-main {
  display: flex; gap: 2px; padding: 0 12px; border-bottom: 1px solid var(--line);
  overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.pl-tabs-main::-webkit-scrollbar { display: none; }
.pl-tab-main {
  flex: none; background: none; border: 0; border-bottom: 2px solid transparent;
  padding: 13px 12px 11px; font-size: 15px; font-family: inherit; color: var(--muted);
  cursor: pointer; transition: color .16s, border-color .16s;
}
.pl-tab-main:hover { color: var(--cream); }
.pl-tab-main.on { color: var(--gold-ink); border-bottom-color: var(--gold); font-weight: 600; }
/* 移动端：英文/西语页签更长，收紧内距让 5 个页签尽量一屏放下 */
@media (max-width: 560px) {
  .pl-tabs-main { padding: 0 8px; gap: 0; }
  .pl-tab-main { padding: 13px 7px 11px; font-size: 15px; }
}
.pl-panels { min-height: 120px; }
.pl-panel { padding: 16px; font-size: 16.5px; line-height: 1.85; color: var(--beige); }
.pl-panel[hidden] { display: none; }

/* ---------- 5. 正文排版：图文 18/1.9 行宽 38em；音视频 18/1.8 ---------- */
.player .pl-body { margin-top: 0; font-size: var(--pl-doc-fs, 18px); line-height: 1.9; max-width: 38em; color: var(--beige); letter-spacing: .01em; }
.player .pl-body > p { margin: 0 0 1.1em; text-indent: 0; }
.player .pl-body > :last-child { margin-bottom: 0; }
.player .pl-panel-media .pl-body { font-size: var(--pl-doc-fs, 18px); line-height: 1.8; }
.player .pl-panel-media .sd-rich .lec1 { font-size: var(--pl-doc-fs, 18px); line-height: 1.8; }
.player .pl-cover { margin-bottom: 16px; }
.player .pl-article { padding: 0; background: transparent; }
.player .pl-body img { max-width: 100%; height: auto; }

/* ---------- 6. 逐字稿 / 笔记 / 附件 / 测验 在页签内的容器 ---------- */
.player .pl-panel .pl-atts { margin: 0; }
.player .pl-panel .note-block { margin-top: 0; }
.player .pl-panel .note-form { margin-bottom: 12px; }
.player .pl-panel .quiz-block { margin-top: 0; padding: 0; border: 0; background: transparent; }
.pl-empty { padding: 26px 12px; text-align: center; }
.pl-empty-ic { display: block; margin-bottom: 8px; font-size: 22px; line-height: 1; color: var(--gold-ink); }
.pl-empty p { margin: 0; font-size: 13.5px; line-height: 1.7; color: var(--empty-ink, var(--muted)); }

/* ---------- 7. 底部动作条：上一课 / 标记完成 / 下一课 ---------- */
.player .pl-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 16px; border-top: 1px solid var(--line); flex-wrap: wrap; background: var(--surface-2); }
.pl-bar-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pl-bar-actions .btn { white-space: nowrap; }
.pl-bar-actions .btn[disabled] { opacity: .45; cursor: not-allowed; }
@media (max-width: 560px) {
  .player .pl-bar { position: sticky; bottom: 0; z-index: 4; }
  .pl-bar-actions { width: 100%; }
  .pl-bar-actions .btn { flex: 1 1 auto; justify-content: center; }
  .pl-htitle { font-size: 18px; }
  .pl-rail .pl-catalog li { padding: 9px 10px; }
}

/* ---------- 8. 初始态：骨架屏占位（未选课时） ---------- */
.player .pl-hint { padding: 38px 16px 32px; text-align: center; }
.player .pl-hint p { margin: 14px 0 0; font-size: 13.5px; color: var(--empty-ink, var(--muted)); }
.pl-skel { display: flex; flex-direction: column; gap: 9px; max-width: 420px; margin: 0 auto; }
.pl-skel i {
  display: block; height: 10px; border-radius: 6px;
  background: linear-gradient(90deg, var(--ink-2) 0%, var(--surface-2) 50%, var(--ink-2) 100%);
  background-size: 220% 100%; animation: plShine 1.6s linear infinite;
}
.pl-skel i:nth-child(1) { height: 24px; width: 58%; }
.pl-skel i:nth-child(3) { width: 78%; }
@keyframes plShine { 0% { background-position: 180% 0; } 100% { background-position: -180% 0; } }


/* 舞台恒为深色（视频黑底 / 音频深色台），空状态与骨架文字必须用深底专用色，避免亮色主题「深字压黑底」 */
.pl-media-box .pl-empty-ic { color: var(--on-dark-3); }
.pl-media-box .pl-empty p { color: var(--on-dark-2); }

/* 组件自带 display:flex/grid 时会压过 UA 的 [hidden]{display:none}（错误卡 / CC 面板 / 尾帧卡 / 笔记编辑器），
   播放器内统一兜底，避免隐藏态组件常驻显示 */
.player [hidden] { display: none !important; }

/* ---------- 9. 未解锁课时：舞台内锁态卡（不弹窗） ---------- */
.player .pl-stage .pl-locked {
  min-height: 240px; padding: 32px 20px; display: grid; place-content: center;
  justify-items: center; gap: 8px; text-align: center; color: var(--on-dark);
}
.player .pl-locked .pl-lock-ic {
  width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center;
  font-size: 17px; font-weight: 600; letter-spacing: 0;
  color: var(--on-dark-2); border: 1px solid rgba(217, 185, 138, .38);
  background: rgba(123, 45, 59, .22);
}
.player .pl-locked b { font-size: 17px; line-height: 1.5; color: var(--on-dark); }
.player .pl-locked p { margin: 0 0 6px; font-size: 13.5px; line-height: 1.7; color: var(--on-dark-2); max-width: 30em; }
@media (max-width: 560px) {
  .player .pl-stage .pl-locked { min-height: 200px; padding: 24px 16px; }
}

/* ================= v1.65 P1/P2 ================= */

/* ---------- 10. 课时页专注模式（≥1200 收起左侧全局导航，主列拉到 780） ---------- */
@media (min-width: 1200px) {
  /* 专注模式：把 flex 行改成块流，顶栏回到顶部通栏，主列不再被 200px 顶栏列挤压 */
  body.ow-focus .app-shell { max-width: none; display: block; gap: 0; }
  body.ow-focus .app-side { display: none !important; }
  body.ow-focus .app-topbar { width: 100%; }
  body.ow-focus .app-main { margin-left: 0 !important; padding: 22px 24px 60px !important; }
  body.ow-focus .pl-layout { max-width: 1120px; margin: 0 auto; }
  body.ow-focus .pl-course-head .sec-title { font-size: 15.5px; }
}
.pl-course-head .pl-back {
  margin-right: 10px; font-size: 12.5px; color: var(--muted);
  text-decoration: none; white-space: nowrap;
}
.pl-course-head .pl-back:hover { color: var(--gold-ink); }

/* ---------- 11. 自研音频控制台 ---------- */
.player .pl-stage-audio { display: block; height: auto; padding: 0; background: transparent; }
.player .pl-audio-console {
  display: flex; gap: 16px; align-items: stretch; padding: 16px;
  border-radius: 16px; border: 1px solid var(--line); background: var(--surface);
}
.player .pl-audio-cover {
  flex: 0 0 96px; width: 96px; height: 96px; border-radius: 12px;
  display: grid; place-items: center; overflow: hidden;
  font-size: 30px; color: var(--gold-ink); background: var(--surface-2); border: 1px solid var(--line);
}
.player .pl-audio-cover.has-img { padding: 0; }
.player .pl-audio-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.player .pl-audio-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.player .pl-audio-head { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.player .pl-audio-title { font-size: 15.5px; line-height: 1.4; color: var(--cream); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.player .pl-audio-head > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.player .pl-stage-audio .pl-wave-wrap { margin: 0; height: 64px; min-height: 64px; background: var(--surface-2); }
.player .pl-stage-audio .pl-wave { height: 64px; min-height: 64px; }
/* 波形兜底：解码不可用或移动端时显示静态波形纹理 + 已播进度（不额外下载整段音频） */
.player .pl-stage-audio .pl-wave.pl-wave-empty {
  position: relative;
  background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="600" height="64" preserveAspectRatio="none"><g fill="%23A9855A" fill-opacity=".32"><rect x="0" y="16.5" width="3" height="31" rx="1.5"/><rect x="6" y="15.0" width="3" height="34" rx="1.5"/><rect x="12" y="14.0" width="3" height="36" rx="1.5"/><rect x="18" y="13.0" width="3" height="38" rx="1.5"/><rect x="24" y="13.0" width="3" height="38" rx="1.5"/><rect x="30" y="13.0" width="3" height="38" rx="1.5"/><rect x="36" y="13.5" width="3" height="37" rx="1.5"/><rect x="42" y="14.0" width="3" height="36" rx="1.5"/><rect x="48" y="15.0" width="3" height="34" rx="1.5"/><rect x="54" y="16.0" width="3" height="32" rx="1.5"/><rect x="60" y="16.5" width="3" height="31" rx="1.5"/><rect x="66" y="17.0" width="3" height="30" rx="1.5"/><rect x="72" y="17.0" width="3" height="30" rx="1.5"/><rect x="78" y="16.5" width="3" height="31" rx="1.5"/><rect x="84" y="16.0" width="3" height="32" rx="1.5"/><rect x="90" y="15.0" width="3" height="34" rx="1.5"/><rect x="96" y="14.5" width="3" height="35" rx="1.5"/><rect x="102" y="14.5" width="3" height="35" rx="1.5"/><rect x="108" y="14.0" width="3" height="36" rx="1.5"/><rect x="114" y="14.5" width="3" height="35" rx="1.5"/><rect x="120" y="15.5" width="3" height="33" rx="1.5"/><rect x="126" y="16.5" width="3" height="31" rx="1.5"/><rect x="132" y="18.0" width="3" height="28" rx="1.5"/><rect x="138" y="19.5" width="3" height="25" rx="1.5"/><rect x="144" y="20.5" width="3" height="23" rx="1.5"/><rect x="150" y="22.0" width="3" height="20" rx="1.5"/><rect x="156" y="21.5" width="3" height="21" rx="1.5"/><rect x="162" y="21.0" width="3" height="22" rx="1.5"/><rect x="168" y="19.5" width="3" height="25" rx="1.5"/><rect x="174" y="18.5" width="3" height="27" rx="1.5"/><rect x="180" y="17.0" width="3" height="30" rx="1.5"/><rect x="186" y="15.5" width="3" height="33" rx="1.5"/><rect x="192" y="14.5" width="3" height="35" rx="1.5"/><rect x="198" y="14.0" width="3" height="36" rx="1.5"/><rect x="204" y="13.5" width="3" height="37" rx="1.5"/><rect x="210" y="13.5" width="3" height="37" rx="1.5"/><rect x="216" y="14.0" width="3" height="36" rx="1.5"/><rect x="222" y="15.0" width="3" height="34" rx="1.5"/><rect x="228" y="15.5" width="3" height="33" rx="1.5"/><rect x="234" y="16.0" width="3" height="32" rx="1.5"/><rect x="240" y="16.5" width="3" height="31" rx="1.5"/><rect x="246" y="16.5" width="3" height="31" rx="1.5"/><rect x="252" y="16.5" width="3" height="31" rx="1.5"/><rect x="258" y="16.0" width="3" height="32" rx="1.5"/><rect x="264" y="15.0" width="3" height="34" rx="1.5"/><rect x="270" y="14.5" width="3" height="35" rx="1.5"/><rect x="276" y="13.5" width="3" height="37" rx="1.5"/><rect x="282" y="13.5" width="3" height="37" rx="1.5"/><rect x="288" y="13.5" width="3" height="37" rx="1.5"/><rect x="294" y="14.0" width="3" height="36" rx="1.5"/><rect x="300" y="14.5" width="3" height="35" rx="1.5"/><rect x="306" y="16.0" width="3" height="32" rx="1.5"/><rect x="312" y="17.0" width="3" height="30" rx="1.5"/><rect x="318" y="18.5" width="3" height="27" rx="1.5"/><rect x="324" y="20.0" width="3" height="24" rx="1.5"/><rect x="330" y="20.5" width="3" height="23" rx="1.5"/><rect x="336" y="21.5" width="3" height="21" rx="1.5"/><rect x="342" y="21.5" width="3" height="21" rx="1.5"/><rect x="348" y="20.5" width="3" height="23" rx="1.5"/><rect x="354" y="19.0" width="3" height="26" rx="1.5"/><rect x="360" y="18.0" width="3" height="28" rx="1.5"/><rect x="366" y="16.5" width="3" height="31" rx="1.5"/><rect x="372" y="15.5" width="3" height="33" rx="1.5"/><rect x="378" y="14.5" width="3" height="35" rx="1.5"/><rect x="384" y="14.5" width="3" height="35" rx="1.5"/><rect x="390" y="14.5" width="3" height="35" rx="1.5"/><rect x="396" y="15.0" width="3" height="34" rx="1.5"/><rect x="402" y="15.5" width="3" height="33" rx="1.5"/><rect x="408" y="16.5" width="3" height="31" rx="1.5"/><rect x="414" y="17.0" width="3" height="30" rx="1.5"/><rect x="420" y="17.0" width="3" height="30" rx="1.5"/><rect x="426" y="17.0" width="3" height="30" rx="1.5"/><rect x="432" y="16.5" width="3" height="31" rx="1.5"/><rect x="438" y="15.5" width="3" height="33" rx="1.5"/><rect x="444" y="14.5" width="3" height="35" rx="1.5"/><rect x="450" y="14.0" width="3" height="36" rx="1.5"/><rect x="456" y="13.0" width="3" height="38" rx="1.5"/><rect x="462" y="12.5" width="3" height="39" rx="1.5"/><rect x="468" y="13.0" width="3" height="38" rx="1.5"/><rect x="474" y="13.0" width="3" height="38" rx="1.5"/><rect x="480" y="14.0" width="3" height="36" rx="1.5"/><rect x="486" y="15.5" width="3" height="33" rx="1.5"/><rect x="492" y="16.5" width="3" height="31" rx="1.5"/><rect x="498" y="18.0" width="3" height="28" rx="1.5"/><rect x="504" y="19.0" width="3" height="26" rx="1.5"/><rect x="510" y="19.5" width="3" height="25" rx="1.5"/><rect x="516" y="20.0" width="3" height="24" rx="1.5"/><rect x="522" y="20.0" width="3" height="24" rx="1.5"/><rect x="528" y="20.0" width="3" height="24" rx="1.5"/><rect x="534" y="19.5" width="3" height="25" rx="1.5"/><rect x="540" y="18.5" width="3" height="27" rx="1.5"/><rect x="546" y="17.5" width="3" height="29" rx="1.5"/><rect x="552" y="16.5" width="3" height="31" rx="1.5"/><rect x="558" y="16.0" width="3" height="32" rx="1.5"/><rect x="564" y="15.5" width="3" height="33" rx="1.5"/><rect x="570" y="16.0" width="3" height="32" rx="1.5"/><rect x="576" y="16.5" width="3" height="31" rx="1.5"/><rect x="582" y="17.0" width="3" height="30" rx="1.5"/><rect x="588" y="17.5" width="3" height="29" rx="1.5"/><rect x="594" y="17.5" width="3" height="29" rx="1.5"/></g></svg>');
  background-size: 100% 100%;
  background-repeat: no-repeat;
}
.player .pl-stage-audio .pl-wave.pl-wave-empty::after {
  content: ''; position: absolute; left: 0; top: 0; bottom: 0;
  width: var(--pl-wave-p, 0%);
  background: rgba(212, 175, 55, .16);
  border-right: 1px solid rgba(212, 175, 55, .55);
  pointer-events: none;
}
.player .pl-audio-ctrl { display: flex; align-items: center; gap: 10px; }
.player .pl-audio-btn {
  width: 36px; height: 36px; padding: 0; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer;
  font-size: 12.5px; color: var(--cream); background: transparent; border: 1px solid var(--line);
}
.player .pl-audio-btn:hover { border-color: var(--gold-ink); color: var(--gold-ink); }
.player .pl-audio-play {
  width: 56px; height: 56px; font-size: 17px; font-weight: 600;
  color: #2A2622; background: var(--gold-ink); border-color: var(--gold-ink);
}
[data-theme="dark"] .player .pl-audio-play { color: #1C1A17; }
.player .pl-audio-play:hover { color: #2A2622; filter: brightness(1.05); }
.player .pl-audio-time { font-size: 12.5px; color: var(--muted); font-variant-numeric: tabular-nums; letter-spacing: .02em; }
.player .pl-audio-spacer { flex: 1; }
.player .pl-audio-chip {
  min-width: 40px; height: 32px; padding: 0 10px; border-radius: 999px;
  font-size: 13.5px; cursor: pointer; color: var(--muted);
  background: var(--surface-2); border: 1px solid var(--line);
}
.player .pl-audio-chip.on { color: var(--gold-ink); border-color: var(--gold-ink); }
.player .pl-media-audio { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; margin: 0; }
@media (max-width: 560px) {
  .player .pl-audio-console { flex-direction: column; gap: 12px; padding: 14px; }
  .player .pl-audio-cover { flex: 0 0 auto; width: 64px; height: 64px; border-radius: 10px; font-size: 22px; }
  .player .pl-audio-play { width: 48px; height: 48px; }
}

/* ---------- 12. 吸顶迷你条（仅 ≥768） ---------- */
.player .pl-mini {
  position: fixed; left: 0; right: 0; top: 0; z-index: 80;
  display: flex; align-items: center; gap: 12px; height: 56px; padding: 0 16px;
  background: var(--surface); border-bottom: 1px solid var(--line);
  box-shadow: 0 6px 18px rgba(0, 0, 0, .08);
}
.player .pl-mini-thumb {
  flex: 0 0 40px; width: 40px; height: 40px; border-radius: 8px; overflow: hidden;
  display: grid; place-items: center; cursor: pointer;
  font-size: 15px; color: var(--gold-ink); background: var(--surface-2); border: 1px solid var(--line);
}
.player .pl-mini-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.player .pl-mini-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.player .pl-mini-main b { font-size: 13.5px; line-height: 1.2; color: var(--cream); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; }
.player .pl-mini-bar { display: block; height: 3px; border-radius: 2px; background: var(--line); overflow: hidden; }
.player .pl-mini-bar i { display: block; height: 100%; width: 0; background: var(--gold-ink); }
.player .pl-mini-play {
  flex: 0 0 36px; width: 36px; height: 36px; padding: 0; border-radius: 50%;
  display: grid; place-items: center; cursor: pointer; font-size: 13px;
  color: #2A2622; background: var(--gold-ink); border: 1px solid var(--gold-ink);
}
[data-theme="dark"] .player .pl-mini-play { color: #1C1A17; }
@media (max-width: 767px) { .player .pl-mini { display: none !important; } }

/* ---------- 13. 图文阅读进度条 ---------- */
.player .pl-readbar {
  position: fixed; left: 0; right: 0; top: 0; height: 3px; z-index: 85;
  background: transparent; pointer-events: none;
}
.player .pl-readbar i { display: block; height: 100%; width: 0; background: var(--gold-ink); transition: width .12s linear; }

/* ---------- 14. 本节目录（右栏） ---------- */
.pl-rail .pl-toc-card[hidden] { display: none; }
.pl-rail .pl-toc { list-style: none; margin: 8px 0 0; padding: 0; max-height: 32vh; overflow-y: auto; }
.pl-rail .pl-toc li { margin: 0; }
.pl-rail .pl-toc a {
  display: block; padding: 5px 8px; font-size: 13px; line-height: 1.5; color: var(--muted);
  text-decoration: none; border-left: 2px solid transparent;
}
.pl-rail .pl-toc li.sub a { padding-left: 20px; font-size: 12.5px; }
.pl-rail .pl-toc li.on a { color: var(--gold-ink); border-left-color: var(--gold-ink); }
.pl-rail .pl-toc a:hover { color: var(--gold-ink); }

/* ---------- 15. 正文字号：固定 18px（A−/A/A＋ 档位按钮按用户决议下线） ---------- */
.player { --pl-doc-fs: 18px; }
.player .pl-panel-doc .pl-body { font-size: var(--pl-doc-fs); }
/* 图文正文：.sd-rich 原写死 14px，会盖掉正文字号；这里改为继承，标题用 em 缩放 */
.player .pl-panel-doc .pl-body .sd-rich { font-size: inherit; line-height: inherit; }
.player .pl-panel-doc .pl-body .sd-rich h2 { font-size: 1.18em; }
.player .pl-panel-doc .pl-body .sd-rich h3 { font-size: 1.05em; }
.player .pl-panel-doc .pl-body .sd-rich h4 { font-size: 1em; }

/* ================= P3 收听连续性（全局迷你条 / 继续收听卡 / 更多菜单 / 转写角标） ================= */
/* —— 全局迷你条：移动端吸底（Tab 栏上方），桌面右下浮卡 —— */
#gListen {
  position: fixed; left: 50%; transform: translateX(-50%);
  bottom: calc(64px + env(safe-area-inset-bottom, 0px) + 8px);
  width: min(94%, 640px); z-index: 80;
  display: flex; align-items: center; gap: 8px;
  background: var(--bar-bg-2, rgba(28,26,23,.92)); backdrop-filter: blur(14px);
  border: 1px solid var(--line); border-radius: 14px;
  padding: 8px 10px; box-shadow: 0 8px 28px rgba(0,0,0,.28);
}
#gListen[hidden] { display: none; }
#gListen .gl-cover {
  flex: 0 0 40px; width: 40px; height: 40px; border-radius: 10px; overflow: hidden;
  border: 1px solid var(--line); background: var(--gold-grad, #b98a3c); color: #fff;
  font-size: 18px; cursor: pointer; padding: 0; display: flex; align-items: center; justify-content: center;
}
#gListen .gl-cover img { width: 100%; height: 100%; object-fit: cover; }
#gListen .gl-main { flex: 1; min-width: 0; cursor: pointer; display: flex; flex-direction: column; gap: 3px; }
#gListen .gl-title { font-size: 14px; color: var(--cream); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#gListen .gl-meta { font-size: 13px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#gListen .gl-bar { height: 3px; border-radius: 2px; background: var(--line); overflow: hidden; }
#gListen .gl-bar i { display: block; height: 100%; width: 0; background: var(--gold-grad, #c9a35a); transition: width .4s linear; }
#gListen .gl-btn {
  flex: 0 0 34px; width: 34px; height: 34px; border-radius: 50%; border: 1px solid var(--line);
  background: transparent; color: var(--cream); font-size: 13px; cursor: pointer;
}
#gListen .gl-play { background: var(--gold-grad, #c9a35a); border-color: transparent; color: #fff; font-size: 12px; }
#gListen .gl-close {
  flex: 0 0 22px; width: 22px; height: 22px; border-radius: 50%; border: 0;
  background: transparent; color: var(--muted); font-size: 15px; cursor: pointer; line-height: 1;
}
#gListen .gl-wxhint {
  position: absolute; left: 8px; right: 8px; bottom: calc(100% + 6px); border-radius: 10px;
  background: rgba(0,0,0,.86); color: #fff; font-size: 12px; line-height: 1.5; padding: 8px 10px;
  display: flex; align-items: flex-start; gap: 8px;
}
/* hidden 属性必须真正隐藏：否则 display:flex 会覆盖 UA 的 [hidden] 规则，点「知道了」关不掉 */
#gListen .gl-wxhint[hidden] { display: none; }
#gListen .gl-wxhint b { cursor: pointer; color: var(--gold-ink); flex: 0 0 auto; font-weight: 600; white-space: nowrap; }
#gListen[hidden] .gl-wxhint { display: none; }
/* 桌面（≥1200）：Tab 已上移为顶部导航 → 右下浮卡 */
@media (min-width: 1200px) {
  #gListen { left: auto; right: 18px; bottom: 18px; transform: none; width: 360px; padding: 10px 12px; }
}
/* —— 继续收听卡（首页 / 学习页顶部）—— */
.glisten-card {
  display: flex; align-items: center; gap: 10px; cursor: pointer;
  border: 1px solid var(--line); border-radius: 14px; background: var(--surface);
  padding: 10px 12px; margin: 12px 0 0; text-decoration: none; color: var(--cream);
}
.glisten-card .glc-ic { flex: 0 0 34px; width: 34px; height: 34px; border-radius: 10px; background: var(--gold-grad, #c9a35a); display: flex; align-items: center; justify-content: center; font-size: 17px; }
.glisten-card .glc-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.glisten-card .glc-main b { font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.glisten-card .glc-go { flex: 0 0 auto; color: var(--gold-ink); font-size: 13px; font-weight: 600; }
/* 续播卡关闭按钮：触控热区 40×40，不挤压文字 */
.glisten-card { position: relative; padding-right: 40px; }
.glisten-card .glc-close {
  position: absolute; top: 2px; right: 0; width: 40px; height: 40px;
  border: none; background: none; color: var(--muted); font-size: 18px; line-height: 1;
  cursor: pointer; border-radius: 50%; padding: 0;
  display: flex; align-items: center; justify-content: center;
}
.glisten-card .glc-close:active { background: var(--surface-2); color: var(--cream); }
/* 顶栏：课程标题为该页唯一标题，保持轻量 */
.pl-course-head { align-items: center; gap: 10px; padding-bottom: 10px; }
.pl-course-head .sec-title { font-size: 16px; font-weight: 600; letter-spacing: .01em; }
.pl-course-head .pl-back { font-size: 13px; }

/* ================= v1.67 音频课沉浸歌词播放器（设计 A） =================
   舞台自带深色墨绿底，变量全部局部作用域，浅色/深色主题下都保持沉浸感；
   舞台之外（工具行 / 页签 / 面板）继续沿用全站主题变量。 */
.player .pl-imm {
  --pl-imm-ink: #0A0F0C;
  --pl-imm-gold: #C9A35A;
  --pl-imm-gold-deep: #9A7B4F;
  --pl-imm-cream: #EDE6D8;
  --pl-imm-muted: rgba(237, 230, 216, .45);
  --pl-imm-line: rgba(201, 163, 90, .18);
  /* 进度条「未播放轨道」底色：深底用浅米色，亮色主题必须整体反转（见下方 light 覆盖） */
  --pl-imm-track: rgba(237, 230, 216, .14);
  background:
    radial-gradient(92% 62% at 50% 0%, rgba(201, 163, 90, .13), transparent 62%),
    radial-gradient(110% 82% at 50% 34%, #182219 0%, #111913 46%, #0A0F0C 100%);
  color: var(--pl-imm-cream);
  padding: 26px 18px 16px;
  overflow: hidden;
}
.pl-imm-inner { position: relative; z-index: 1; }

/* —— 标题 / 元信息（上半部分：标题与「第 N 讲」等元信息，封面已下移至歌词之后）—— */
.pl-imm-top { display: flex; flex-direction: column; align-items: center; text-align: center; padding-bottom: 4px; }
.pl-imm-record-wrap {
  position: relative; width: 132px; height: 132px; display: grid; place-items: center;
  margin: 14px auto 4px;
}
.pl-imm-record-wrap::before {
  content: ''; position: absolute; inset: -16px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle, rgba(201, 163, 90, .22) 0%, rgba(201, 163, 90, .07) 46%, transparent 70%);
}
.pl-imm-record {
  position: relative; width: 124px; height: 124px; border-radius: 50%;
  border: 1px solid rgba(201, 163, 90, .55);
  box-shadow: 0 0 0 6px rgba(201, 163, 90, .05), 0 12px 30px rgba(0, 0, 0, .45), inset 0 0 22px rgba(0, 0, 0, .55);
  display: grid; place-items: center;
}
.pl-imm-disc {
  width: 88%; height: 88%; border-radius: 50%; overflow: hidden; display: grid; place-items: center;
  background: radial-gradient(circle at 34% 30%, #26362B 0%, #0C130F 68%);
  border: 1px solid rgba(201, 163, 90, .28);
  animation: plImmSpin 24s linear infinite;
  animation-play-state: paused;
}
.pl-imm.is-playing .pl-imm-disc { animation-play-state: running; }
.pl-imm-disc img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pl-imm-glyph {
  font-family: "Songti SC", "STSong", "Noto Serif SC", serif;
  font-size: 40px; line-height: 1; color: var(--pl-imm-gold);
  text-shadow: 0 0 18px rgba(201, 163, 90, .38);
}
.pl-imm-ring {
  position: absolute; inset: 0; border-radius: 50%; pointer-events: none;
  border: 1px solid rgba(201, 163, 90, .32);
}
.pl-imm-ring::after {
  content: ''; position: absolute; inset: 13px; border-radius: 50%;
  border: 1px dashed rgba(201, 163, 90, .16);
}
@keyframes plImmSpin { to { transform: rotate(360deg); } }

/* —— 标题 / 元信息 —— */
.pl-imm-title {
  margin: 2px 0 6px; font-size: 21px; line-height: 1.45; font-weight: 600;
  color: var(--pl-imm-cream); letter-spacing: .01em; max-width: 23em;
}
.pl-imm-meta {
  display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 6px;
  font-size: 13px; color: var(--pl-imm-muted); letter-spacing: .04em;
}
.pl-imm-meta i { font-style: normal; color: rgba(201, 163, 90, .5); }

/* —— 全量滚动歌词：只平移轨道，不滚动整页 —— */
.pl-lyr { position: relative; height: 330px; margin: 14px 0 0; }
.pl-lyr-view {
  position: absolute; inset: 0; overflow: hidden;
  -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 17%, #000 83%, transparent 100%);
  mask-image: linear-gradient(180deg, transparent 0, #000 17%, #000 83%, transparent 100%);
}
.pl-lyr-track {
  position: absolute; left: 0; right: 0; top: 0; padding: 165px 8px;
  transition: transform .55s cubic-bezier(.22, .61, .36, 1);
  will-change: transform;
}
.pl-lyr-line {
  margin: 0; padding: 7px 10px; text-align: center; line-height: 1.5;
  color: rgba(237, 230, 216, .34);
  font-size: max(15px, var(--pl-ly-fs, 15px));
  cursor: pointer; word-break: break-word;
  transition: color .22s ease, opacity .22s ease;
}
.pl-lyr-line.near {
  color: rgba(237, 230, 216, .58);
  font-size: calc(max(15px, var(--pl-ly-fs, 15px)) + 1px);
}
.pl-lyr-line.on {
  color: var(--pl-imm-gold);
  font-size: calc(var(--pl-ly-fs, 15px) + 8px);
  font-weight: 600;
  text-shadow: 0 0 20px rgba(201, 163, 90, .35);
}
.pl-lyr-line:hover { color: rgba(237, 230, 216, .82); }
.pl-lyr-line.on:hover { color: var(--pl-imm-gold); }
.pl-lyr-sub {
  display: block; margin-top: 3px; font-size: 12.5px; line-height: 1.45;
  font-weight: 400; text-shadow: none; color: rgba(237, 230, 216, .48);
}
.pl-lyr-line.on .pl-lyr-sub { color: rgba(237, 230, 216, .62); }
.pl-lyr-empty {
  position: absolute; inset: 0; display: grid; place-content: center; padding: 0 24px;
  text-align: center; font-size: 13px; color: var(--pl-imm-muted); letter-spacing: .04em;
}
/* —— 歌词字号（已收进设置面板）—— */
.pl-lyr-fs {
  display: inline-flex; align-items: center; gap: 2px; padding: 2px; border-radius: 999px;
  background: rgba(237, 230, 216, .05); border: 1px solid var(--pl-imm-line);
}
.pl-lyr-fs-btn {
  min-width: 30px; height: 26px; padding: 0 6px; border-radius: 999px; border: 0;
  background: none; color: rgba(237, 230, 216, .85); font-size: 13px; font-family: inherit; cursor: pointer;
}
.pl-lyr-fs-btn.on { background: var(--pl-imm-gold); color: #0A0F0C; font-weight: 600; }

/* —— 进度 / 时间 —— */
.pl-imm-progress { margin-top: 6px; }
.pl-imm-seek {
  position: relative; height: 22px; display: flex; align-items: center;
  cursor: pointer; touch-action: none; outline: none;
}
.pl-imm-seek::before {
  content: ''; position: absolute; left: 0; right: 0; height: 3px; border-radius: 2px;
  background: var(--pl-imm-track, rgba(237, 230, 216, .14));
}
.pl-imm-seek-fill {
  position: absolute; left: 0; height: 3px; border-radius: 2px;
  background: linear-gradient(90deg, var(--pl-imm-gold-deep), var(--pl-imm-gold));
  width: 0;
}
.pl-imm-seek-dot {
  position: absolute; left: 0; width: 10px; height: 10px; border-radius: 50%;
  background: var(--pl-imm-gold); box-shadow: 0 0 10px rgba(201, 163, 90, .6);
  transform: translateX(-50%); pointer-events: none;
}
.pl-imm-seek:focus-visible::before { box-shadow: 0 0 0 3px rgba(201, 163, 90, .28); }
/* 键盘焦点金环：播放器控制行 / 设置面板与设置弹层统一可达性 */
.player .pl-imm-side:focus-visible, .player .pl-imm-play:focus-visible, .player .pl-imm-pill:focus-visible,
.pl-set-btn:focus-visible, .pl-lyr-fs-btn:focus-visible, .pl-imm-pill:focus-visible {
  outline: 2px solid var(--gold, #d4af37); outline-offset: 2px;
}
.pl-imm-time {
  display: flex; justify-content: space-between; margin-top: 2px;
  font-size: 12px; color: var(--pl-imm-muted); font-variant-numeric: tabular-nums;
  letter-spacing: .04em;
}
.pl-imm-time .pl-imm-dur { color: rgba(237, 230, 216, .62); }

/* —— 控制行 —— */
.pl-imm-ctrl { display: flex; align-items: center; justify-content: center; gap: 16px; margin: 10px 0 8px; }
.pl-imm-side {
  width: 38px; height: 38px; border-radius: 50%; padding: 0;
  border: 1px solid var(--pl-imm-line); background: transparent;
  color: var(--pl-imm-muted); font-size: 20px; line-height: 1; font-family: inherit; cursor: pointer;
}
.pl-imm-side:disabled { opacity: .3; cursor: default; }
/* 静音图标按钮：SVG 双态（有声/静音），选中态描金 */
.pl-imm-mute { display: grid; place-items: center; }
.pl-imm-mute.muted { color: var(--pl-imm-gold); border-color: rgba(201, 163, 90, .5); }
.pl-imm-mute .ic-off { display: none; }
.pl-imm-mute.muted .ic-on { display: none; }
.pl-imm-mute.muted .ic-off { display: block; }
/* 目录卡滚动定位预留吸顶栏高度 */
#plRailCat { scroll-margin-top: 72px; }
.pl-imm-play {
  width: 62px; height: 62px; border-radius: 50%; border: 0; padding: 0;
  display: grid; place-items: center; cursor: pointer;
  background: linear-gradient(180deg, #D8B77A, var(--pl-imm-gold));
  color: #141A12; font-size: 20px; font-weight: 700; line-height: 1;
  box-shadow: 0 10px 28px rgba(201, 163, 90, .3);
}
.pl-imm-play:active { transform: scale(.97); }
.pl-imm-play.playing { font-size: 17px; }

/* —— 功能胶囊（低频小功能统一收进「设置」面板，此处只留入口）—— */
.pl-imm-pills { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 8px; margin-top: 4px; }
.pl-imm-pill {
  display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 0 14px;
  border-radius: 999px; border: 1px solid var(--pl-imm-line);
  background: rgba(237, 230, 216, .03); color: var(--pl-imm-muted);
  font-size: 13px; font-family: inherit; cursor: pointer;
}
.pl-imm-pill b { color: var(--pl-imm-gold); font-weight: 600; }
.pl-imm-pill.on { color: var(--pl-imm-cream); border-color: rgba(201, 163, 90, .48); }

/* —— 设置面板：字号 / 倍速 / 定时停 / 连播 / AB 复听 / 背景音（唯一低频功能收纳入口） —— */
.pl-imm-set {
  margin-top: 8px; padding: 2px 14px; border-radius: 14px;
  border: 1px solid var(--pl-imm-line); background: rgba(237, 230, 216, .035);
}
.pl-imm-set[hidden] { display: none; }
.pl-set-row {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 9px 0; border-bottom: 1px dashed rgba(201, 163, 90, .14);
}
.pl-set-row:last-child { border-bottom: 0; }
.pl-set-lbl { font-size: 13px; color: var(--pl-imm-muted); }
.pl-set-btn {
  display: inline-flex; align-items: center; gap: 6px; min-height: 30px; padding: 0 12px;
  border-radius: 999px; border: 1px solid var(--pl-imm-line);
  background: rgba(237, 230, 216, .04); color: var(--pl-imm-cream);
  font-size: 13px; font-family: inherit; cursor: pointer;
}
.pl-set-btn b { color: var(--pl-imm-gold); font-weight: 600; }
.pl-set-btn.on { border-color: rgba(201, 163, 90, .5); }
.pl-ab-tools { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; justify-content: flex-end; }
.pl-ab-tools .pl-set-btn { min-height: 26px; padding: 0 10px; font-size: 12.5px; }
.pl-ab-loop { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; color: var(--pl-imm-cream); cursor: pointer; }
.pl-ab-loop input { accent-color: var(--pl-imm-gold); }
.pl-ab-info { font-size: 12px; color: var(--pl-imm-gold); }
.pl-bgm-range { width: 140px; accent-color: var(--pl-imm-gold); }
.pl-set-kbd { padding: 9px 0 10px; font-size: 12px; line-height: 1.7; color: var(--pl-imm-muted); }

/* —— 课程章节横向条 —— */
.pl-chstrip { margin: 16px -18px 0; padding-top: 12px; border-top: 1px solid rgba(201, 163, 90, .12); }
.pl-chstrip-scroll {
  display: flex; gap: 8px; overflow-x: auto; padding: 0 18px 4px;
  scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.pl-chstrip-scroll::-webkit-scrollbar { display: none; }
.pl-chchip {
  flex: 0 0 auto; display: flex; align-items: center; gap: 6px; max-width: 190px;
  padding: 7px 12px; border-radius: 999px; border: 1px solid var(--pl-imm-line);
  background: rgba(237, 230, 216, .03); color: var(--pl-imm-muted);
  font-size: 13px; font-family: inherit; cursor: pointer;
}
.pl-chchip i {
  flex: none; font-style: normal; font-size: 11px; min-width: 17px; height: 17px; border-radius: 50%;
  display: grid; place-items: center; background: rgba(201, 163, 90, .12); color: var(--pl-imm-gold);
}
.pl-chchip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pl-chchip.on {
  border-color: rgba(201, 163, 90, .62); color: var(--pl-imm-cream);
  background: rgba(201, 163, 90, .1);
}
.pl-chchip.on i { background: var(--pl-imm-gold); color: #0A0F0C; }
.pl-chchip.locked { opacity: .45; }

/* 浅色主题下舞台随主题走（创始人修正案：亮色主题=亮色底播放器） */
:root[data-theme="light"] .player .pl-imm {
  --pl-imm-gold: #9A7B4F;
  --pl-imm-gold-deep: #7A5C33;
  --pl-imm-cream: #211D17;
  --pl-imm-muted: #554C3E;
  --pl-imm-line: rgba(154, 123, 79, .26);
  /* 亮色底：轨道要压成深色半透明，沿用深底的浅米色会与白底融为一体（用户反馈「底色没显示出来」） */
  --pl-imm-track: rgba(33, 29, 23, .22);
  background:
    radial-gradient(92% 62% at 50% 0%, rgba(154, 123, 79, .08), transparent 62%),
    radial-gradient(110% 82% at 50% 34%, #FFFFFF 0%, #FCFCFA 46%, #F7F6F3 100%);
  border-bottom: 1px solid var(--pl-imm-line);
}
/* 亮色底上歌词墨阶：未唱到的行压到足够浅但不失可读（当前行仍为深金强调） */
:root[data-theme="light"] .player .pl-imm .pl-imm-meta { color: #4A423A; }
:root[data-theme="light"] .player .pl-imm .pl-lyr-line { color: rgba(33, 29, 23, .42); }
:root[data-theme="light"] .player .pl-imm .pl-lyr-line.near { color: rgba(33, 29, 23, .66); }
:root[data-theme="light"] .player .pl-imm .pl-lyr-line.on { color: var(--pl-imm-gold-deep); }
:root[data-theme="light"] .player .pl-imm .pl-lyr-line.on:hover { color: var(--pl-imm-gold-deep); }
/* 亮色底进度条与时间：原样式沿用深底的浅米色（rgba(237,230,216,…)），亮色主题下几乎不可见 */
:root[data-theme="light"] .player .pl-imm .pl-imm-seek::before { background: var(--pl-imm-track, rgba(33, 29, 23, .22)); }
:root[data-theme="light"] .player .pl-imm .pl-imm-seek-dot { box-shadow: 0 0 8px rgba(154, 123, 79, .45); }
:root[data-theme="light"] .player .pl-imm .pl-imm-time { color: #3A332A; }
:root[data-theme="light"] .player .pl-imm .pl-imm-time .pl-imm-dur { color: rgba(58, 51, 42, .82); }
/* 亮色底唱片阴影收敛，避免一圈黑晕 */
:root[data-theme="light"] .player .pl-imm .pl-imm-record {
  border-color: rgba(154, 123, 79, .45);
  box-shadow: 0 0 0 9px rgba(154, 123, 79, .06), 0 14px 30px rgba(90, 70, 40, .18), inset 0 0 26px rgba(0, 0, 0, .35);
}
:root[data-theme="light"] .player .pl-imm .pl-imm-record-wrap::before {
  background: radial-gradient(circle, rgba(154, 123, 79, .16) 0%, rgba(154, 123, 79, .05) 46%, transparent 70%);
}
/* 亮色底上的次级胶囊/按钮：白底 + 细金边 */
:root[data-theme="light"] .player .pl-imm .pl-imm-pill,
:root[data-theme="light"] .player .pl-imm .pl-imm-side,
:root[data-theme="light"] .player .pl-imm .pl-chchip {
  background: rgba(255, 255, 255, .7);
}
/* 浅底上的文字压深：原先 #6B6152 的小字在米白底上偏灰，用户反馈「看不清」 */
:root[data-theme="light"] .player .pl-imm .pl-imm-pill,
:root[data-theme="light"] .player .pl-imm .pl-chchip { color: #3A332A; }
:root[data-theme="light"] .player .pl-imm .pl-imm-pill.on { color: var(--pl-imm-cream); border-color: rgba(154, 123, 79, .5); }
/* 歌词字号开关：白底深字；选中态用深金底 + 米白字（≥4.5:1），不再用中金底压米白 */
:root[data-theme="light"] .player .pl-imm .pl-lyr-fs { background: #F4F1E9; border-color: rgba(154, 123, 79, .34); }
:root[data-theme="light"] .player .pl-imm .pl-lyr-fs-btn { color: #3A332A; background: none; }
:root[data-theme="light"] .player .pl-imm .pl-lyr-fs-btn.on { background: var(--pl-imm-gold-deep); color: #FDF8EC; }
/* 设置面板（卡片化）：白卡 + 浅金线，行标签与按钮全部深墨色 */
:root[data-theme="light"] .player .pl-imm .pl-imm-set {
  background: #FFFFFF; border-color: rgba(154, 123, 79, .34);
}
:root[data-theme="light"] .player .pl-imm .pl-set-lbl { color: #4A423A; }
:root[data-theme="light"] .player .pl-imm .pl-set-btn {
  background: #F4F1E9; color: #211D17; border-color: rgba(154, 123, 79, .34);
}
:root[data-theme="light"] .player .pl-imm .pl-set-btn b { color: var(--pl-imm-gold-deep); }
:root[data-theme="light"] .player .pl-imm .pl-imm-set .pl-set-row { border-bottom-color: rgba(154, 123, 79, .18); }

@media (max-width: 560px) {
  /* 移动端：播放器整体收紧，让下方「记笔记/页签」在首屏露头，提示可继续下滑 */
  .player .pl-imm { padding: 14px 14px 10px; }
  .pl-imm-record-wrap { width: 84px; height: 84px; margin: 8px auto 0; }
  .pl-imm-record { width: 78px; height: 78px; }
  .pl-imm-glyph { font-size: 26px; }
  .pl-imm-ring::after { inset: 9px; }
  .pl-imm-title { font-size: 18px; margin: 0 0 4px; }
  .pl-imm-meta { font-size: 13px; }
  .pl-imm-progress { margin-top: 2px; }
  .pl-imm-ctrl { gap: 10px; margin: 8px 0 6px; }
  .pl-imm-play { width: 54px; height: 54px; }
  .pl-imm-side { width: 32px; height: 32px; font-size: 17px; }
  .pl-imm-pills { margin-top: 2px; }
  .pl-imm-pill { min-height: 28px; font-size: 13.5px; }
  .pl-lyr { height: 168px; margin: 10px 0 0; }
  .pl-lyr-track { padding: 84px 4px; }
  .pl-lyr-line { padding: 5px 8px; }
  .pl-chstrip { margin: 10px -14px 0; padding-top: 8px; }
  .pl-chstrip-scroll { padding-left: 14px; padding-right: 14px; }
  .pl-chchip { font-size: 13.5px; }
}
@media (prefers-reduced-motion: reduce) {
  .pl-imm-disc { animation: none !important; }
  .pl-lyr-track { transition: none; }
}

/* ---------- 商城关闭态（后台 shop_enabled=0，前台只显示「即将开放」） ---------- */
.shop-soon {
  max-width: 560px; margin: 48px auto; padding: 48px 26px; text-align: center;
  border: 1px solid var(--line); border-radius: 18px; background: var(--surface);
  box-shadow: 0 6px 20px rgba(60, 45, 25, .06);
}
.shop-soon .ss-badge {
  display: inline-block; padding: 4px 12px; border-radius: 999px;
  font-size: 12px; letter-spacing: .16em; color: var(--gold-ink);
  border: 1px solid rgba(154, 123, 79, .4);
}
.shop-soon h1 { margin: 16px 0 8px; font-size: 26px; color: var(--ink); }
.shop-soon .ss-lead { margin: 0; font-size: 20px; letter-spacing: .12em; color: var(--gold-ink); }
.shop-soon .ss-sub { margin: 12px 0 22px; font-size: 16px; line-height: 1.8; color: var(--muted); }
@media (max-width: 560px) {
  .shop-soon { margin: 20px 14px; padding: 40px 20px; }
  .shop-soon h1 { font-size: 24px; }
}

/* ============================================================
   前台改版（2026-10）· 货架式首页 / 课程列表（.ed-* / .sh-* 编辑部风）
   规范：只允许 CSS 变量取色（禁硬编码主题色）；正文 ≥14px；
   两主题正文对比度 ≥4.5:1；墨绿金仅作强调（按钮/徽章/当前态/会员条）。
   仪式感仅两处：今日一境细线带 + 课程扉页（第二批）。
   ============================================================ */

/* —— 版块标题：中文主张句（衬线）+ 英文小字 —— */
.ed-sec-head { display: flex; align-items: baseline; gap: 10px; margin: 34px 2px 12px; }
.ed-sec-head .t { font-size: 21px; font-weight: 700; color: var(--cream); }
.ed-sec-head .en { font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); }
.ed-sec-head .more { margin-left: auto; font-size: 14.5px; color: var(--gold-ink); text-decoration: none; white-space: nowrap; }
.ed-sec-head .more:active { opacity: 0.7; }

/* —— 首页 · 搜索胶囊 —— */
.sh-search {
  display: flex; align-items: center; gap: 8px; margin: 14px 0 0; height: 40px; padding: 0 14px;
  background: var(--surface); border: 1px solid var(--line); border-radius: 20px; color: var(--muted);
}
.sh-search svg { flex: none; }
.sh-search input {
  flex: 1; min-width: 0; border: none; outline: none; background: none; color: var(--cream);
  font-size: 14.5px; font-family: inherit; -webkit-appearance: none; appearance: none;
}
.sh-search input::placeholder { color: var(--muted); }

/* —— 今日一境：压缩为一条细线带（上下发丝线，不再是大色块） —— */
.sh-quote {
  display: flex; align-items: center; gap: 10px; margin: 20px 0 0; padding: 13px 0;
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  color: var(--cream); text-decoration: none;
}
.sh-seal {
  width: 24px; height: 24px; flex: none; border-radius: 5px; background: var(--wine); color: var(--on-dark);
  display: grid; place-items: center; font-size: 12px;
}
.sh-quote-tx {
  flex: 1; min-width: 0; font-size: 15.5px; letter-spacing: .04em; line-height: 1.5;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sh-quote-src { flex: none; font-size: 12.5px; color: var(--muted); letter-spacing: .06em; }

/* —— 为你推荐：主推大卡 —— */
.sh-hero {
  display: block; background: var(--surface); border: 1px solid var(--line); border-radius: 14px;
  overflow: hidden; text-decoration: none;
}
/* 封面高度随屏宽 16:9 收缩，大屏封顶 300px（写死 aspect-ratio + max-height 会让容器宽度塌缩） */
.sh-hero-cvr { position: relative; width: 100%; height: min(56.25vw, 300px); background: var(--surface-2); }
.sh-hero-cvr img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sh-hero-ph {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 52px; color: var(--gold-ink); font-family: "SimSun", "Songti SC", serif;
}
.sh-tagrow { position: absolute; left: 12px; top: 12px; display: flex; gap: 6px; }
.sh-tagrow span {
  font-size: 12px; letter-spacing: .02em; color: var(--on-dark); background: rgba(20, 18, 14, .58);
  border-radius: 6px; padding: 4px 9px; backdrop-filter: blur(6px);
}
.sh-hero-bd { padding: 14px 15px 16px; }
.sh-hero-bd h3 { margin: 0; font-size: 18px; line-height: 1.45; font-weight: 700; color: var(--cream); letter-spacing: .01em; }
.sh-hero-bd p {
  margin: 8px 0 0; font-size: 14px; line-height: 1.65; color: var(--muted);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.sh-meta { display: flex; align-items: center; gap: 7px; margin-top: 12px; font-size: 12.5px; color: var(--muted); }
.sh-av {
  width: 22px; height: 22px; border-radius: 50%; flex: none; background: var(--surface-2);
  border: 1px solid var(--line); display: flex; align-items: center; justify-content: center;
  font-size: 11px; color: var(--gold-ink);
}
.sh-dot { color: var(--muted); opacity: .6; }
.sh-price { margin-left: auto; font-size: 16px; font-weight: 700; color: var(--cream); white-space: nowrap; }

/* —— 为你推荐：双列小卡 —— */
.sh-grid2 { display: flex; gap: 12px; margin-top: 12px; }
.sh-mini {
  flex: 1; min-width: 0; background: var(--surface); border: 1px solid var(--line); border-radius: 12px;
  overflow: hidden; text-decoration: none;
}
.sh-mini-cvr { position: relative; aspect-ratio: 16 / 10; background: var(--surface-2); }
.sh-mini-cvr img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sh-mini-ph {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-size: 34px; color: var(--gold-ink); font-family: "SimSun", "Songti SC", serif;
}
.sh-mini-tag {
  position: absolute; left: 8px; top: 8px; font-size: 12px; color: var(--on-dark);
  background: rgba(20, 18, 14, .55); border-radius: 5px; padding: 3px 7px;
}
.sh-mini-bd { padding: 11px 12px 12px; }
.sh-mini-bd h4 {
  margin: 0; font-size: 14px; line-height: 1.5; font-weight: 600; color: var(--cream); min-height: 42px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.sh-mini-m {
  display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-top: 8px;
  font-size: 12.5px; color: var(--muted);
}
.sh-mini-m span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sh-mini-m b { flex: none; font-size: 13px; color: var(--cream); }

/* —— 按主题找课：2×2 四宫格 —— */
.sh-topics { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.sh-topic {
  position: relative; padding: 14px 14px 15px; overflow: hidden; text-decoration: none;
  background: var(--surface); border: 1px solid var(--line); border-radius: 12px;
}
.sh-topic b { display: block; font-size: 15px; font-weight: 600; color: var(--cream); letter-spacing: .02em; }
.sh-topic span { display: block; font-size: 12.5px; color: var(--muted); margin-top: 5px; }
.sh-topic-ch {
  position: absolute; right: 8px; bottom: -16px; font-size: 46px; line-height: 1;
  color: var(--cream); opacity: .06; font-weight: 700;
}

/* —— 讲师：三列头像卡 —— */
.sh-teachers { display: flex; gap: 10px; }
.sh-teacher {
  flex: 1; min-width: 0; padding: 14px 10px; text-align: center; text-decoration: none;
  background: var(--surface); border: 1px solid var(--line); border-radius: 12px;
}
.sh-t-ava {
  width: 54px; height: 54px; border-radius: 50%; margin: 0 auto 9px; overflow: hidden;
  background: var(--surface-2); border: 1px solid var(--line);
  display: flex; align-items: center; justify-content: center; font-size: 19px; color: var(--gold-ink);
}
.sh-t-ava img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sh-teacher b { display: block; font-size: 13.5px; font-weight: 600; color: var(--cream); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sh-teacher span:last-child {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  font-size: 12px; color: var(--muted); margin-top: 4px; line-height: 1.45;
}

/* —— 会员条：深墨绿一条（两主题恒深底，文字用固定浅色） —— */
.sh-vip {
  display: flex; align-items: center; gap: 12px; margin-top: 24px; padding: 14px 16px; border-radius: 13px;
  background: linear-gradient(135deg, var(--koi-green) 0%, var(--koi-green-deep) 100%);
  color: var(--on-dark); text-decoration: none;
}
.sh-vip-tx { flex: 1; min-width: 0; }
.sh-vip-tx b {
  display: block; font-size: 14px; font-weight: 600; letter-spacing: .02em; color: var(--on-dark);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sh-vip-tx span {
  display: block; font-size: 12.5px; color: var(--on-dark-2); opacity: .72; margin-top: 4px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sh-vip-rt { flex: none; text-align: right; }
.sh-vip-rt em { font-style: normal; font-size: 15px; font-weight: 700; color: var(--gold-light); }
.sh-vip-rt i { display: block; font-style: normal; font-size: 12px; color: var(--on-dark-2); opacity: .66; margin-top: 2px; }

/* —— 东方臻选：固定列宽货架（商品 1/2/3 件都左对齐，不留空洞；超出可横滑） —— */
.sh-prods {
  display: grid; grid-auto-flow: column; grid-auto-columns: clamp(96px, 28vw, 200px); gap: 10px;
  overflow-x: auto; overscroll-behavior-x: contain; padding-bottom: 2px; scrollbar-width: none;
}
.sh-prods::-webkit-scrollbar { display: none; }
.sh-prod { min-width: 0; text-decoration: none; }
.sh-prod-img {
  display: flex; align-items: center; justify-content: center; width: 100%; aspect-ratio: 1 / 1;
  border-radius: 10px; overflow: hidden; background: var(--surface-2); border: 1px solid var(--line);
  font-size: 30px; color: var(--gold-ink);
}
.sh-prod-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sh-prod b {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  font-size: 13.5px; font-weight: 500; line-height: 1.5; margin-top: 8px; color: var(--cream); min-height: 40px;
}
.sh-prod > span:last-child { display: block; font-size: 13px; font-weight: 700; margin-top: 3px; color: var(--cream); }

/* —— SEO h1：视觉隐藏、屏幕阅读器可见 —— */
.sh-sr {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden;
  clip-path: inset(50%); white-space: nowrap; border: 0;
}

/* —— 形态徽章：读 / 听 / 视·暂缓 —— */
.ed-badge {
  display: inline-flex; align-items: center; gap: 3px; font-size: 12px; line-height: 1;
  padding: 4px 8px; border-radius: 999px; border: 1px solid var(--line);
  color: var(--muted); background: var(--surface-2); white-space: nowrap;
}
.ed-badge.b-listen { color: var(--gold-deep); border-color: rgba(154, 123, 79, 0.4); background: rgba(154, 123, 79, 0.1); }
.ed-badge.b-video { opacity: 0.75; }

/* —— 书院页脚 —— */
.ed-foot { margin-top: 40px; padding: 26px 4px 34px; border-top: 1px solid var(--line); text-align: center; }
.ed-foot-brand { font-size: 17px; font-weight: 700; color: var(--cream); letter-spacing: 0.12em; }
.ed-foot-slogan { font-size: 12px; letter-spacing: 0.22em; color: var(--muted); margin-top: 6px; }
.ed-foot-links { display: flex; flex-wrap: wrap; gap: 6px 14px; justify-content: center; margin-top: 14px; }
.ed-foot-links a { font-size: 14px; color: var(--muted); text-decoration: none; }
.ed-foot-cr { font-size: 12px; color: var(--muted); margin-top: 14px; opacity: 0.8; }

/* —— 课程列表：编目式 —— */
.ed-cat-toolbar { display: flex; align-items: center; gap: 10px; margin: 14px 0 4px; }
.ed-form-tabs { display: flex; gap: 8px; flex: 1; overflow-x: auto; scrollbar-width: none; }
.ed-form-tabs::-webkit-scrollbar { display: none; }
.ed-ftab {
  flex: none; font-size: 14.5px; padding: 7px 16px; border-radius: 999px;
  border: 1px solid var(--line); color: var(--cream); text-decoration: none; background: var(--surface);
}
.ed-ftab.on { background: var(--gold-deep); border-color: var(--gold-deep); color: #FDF8EC; font-weight: 600; }
.ed-filter-btn {
  flex: none; display: inline-flex; align-items: center; gap: 5px; font-size: 14px;
  padding: 7px 14px; border-radius: 999px; border: 1px solid var(--line);
  background: var(--surface); color: var(--cream); cursor: pointer; font-family: inherit;
}
.ed-filter-btn .cnt { min-width: 16px; height: 16px; border-radius: 8px; background: var(--gold-deep); color: #FDF8EC; font-size: 11px; line-height: 16px; text-align: center; padding: 0 4px; }

.ed-cat-head { display: flex; align-items: baseline; gap: 8px; margin: 20px 2px 2px; }
.ed-cat-head .n { font-size: 24px; font-weight: 700; color: var(--cream); font-family: "SimSun", "Songti SC", serif; }
.ed-cat-head .en { font-size: 12px; letter-spacing: 0.2em; color: var(--muted); text-transform: uppercase; }
.ed-cat-count { font-size: 13px; color: var(--muted); margin-left: auto; }
.ed-cat-path { font-size: 13px; color: var(--gold-ink); text-decoration: none; }
.ed-cat-path:hover { text-decoration: underline; }

.ed-cat-row { display: flex; gap: 12px; padding: 16px 2px; border-bottom: 1px solid var(--line); text-decoration: none; align-items: flex-start; }
.ed-cat-idx { font-size: 15px; color: var(--muted); font-family: Georgia, "Times New Roman", serif; font-style: italic; min-width: 24px; padding-top: 3px; }
.ed-cat-body { flex: 1; min-width: 0; }
.ed-cat-title { font-size: 18px; font-weight: 700; color: var(--cream); line-height: 1.45; }
.ed-cat-sub { font-size: 15px; color: var(--muted); line-height: 1.55; margin-top: 5px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.ed-cat-meta { font-size: 13.5px; color: var(--muted); margin-top: 7px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ed-cat-side { flex: none; text-align: right; display: flex; flex-direction: column; align-items: flex-end; gap: 8px; padding-top: 3px; }
.ed-cat-price { font-size: 15px; font-weight: 700; color: var(--gold-ink); white-space: nowrap; }
.ed-cat-price.st-own { color: var(--ok); }
.ed-cat-price.st-free { color: var(--ok); }
.ed-cat-price.st-lock { font-weight: 400; font-size: 14px; color: var(--muted); }

/* —— 筛选侧滑（底部 sheet，复用全局弹层机制） —— */
.ed-sheet-grp { padding: 12px 0 2px; }
.ed-sheet-grp .g-t { font-size: 14px; font-weight: 700; color: var(--muted); letter-spacing: 0.06em; margin-bottom: 10px; }
.ed-opts { display: flex; flex-wrap: wrap; gap: 8px; }
.ed-opt {
  font-size: 14.5px; padding: 8px 16px; border-radius: 999px; border: 1px solid var(--line);
  color: var(--cream); background: var(--surface); cursor: pointer; text-decoration: none; font-family: inherit;
}
.ed-opt.on { background: var(--gold-deep); border-color: var(--gold-deep); color: #FDF8EC; }
.ed-opt.locked { opacity: 0.6; }
.ed-sheet-foot { display: flex; gap: 10px; margin-top: 18px; }
.ed-sheet-foot .btn { flex: 1; }

/* —— 专区提示条（选中专区时的轻提示） —— */
.ed-zone-tip { display: flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--muted); background: var(--sec-bg); border: 1px solid var(--sec-line); border-radius: 10px; padding: 10px 12px; margin: 12px 0 2px; line-height: 1.55; }

/* —— 课程扉页（第二批：单线金框装裱，全站仅首页金句区外的第二处仪式感） —— */
.ed-folio { margin: 14px 0 6px; padding: 4px; border: 1px solid var(--folio-frame, var(--line)); border-radius: 4px; }
.ed-folio-in { padding: 22px 20px 20px; border: 1px solid var(--folio-inner, rgba(154, 123, 79, 0.34)); border-radius: 2px; }
.ed-folio-kicker { font-size: 12.5px; letter-spacing: 0.26em; text-transform: uppercase; color: var(--muted); }
.ed-folio-cover { margin: 14px 0 16px; border-radius: 3px; overflow: hidden; background: var(--surface-2); }
.ed-folio-cover img { width: 100%; max-height: 260px; object-fit: cover; display: block; }
.ed-folio h1 { font-size: 26px; line-height: 1.42; font-weight: 700; color: var(--cream); margin: 10px 0 8px; letter-spacing: 0.01em; }
.ed-folio-sub { font-size: 16px; line-height: 1.7; color: var(--muted); margin: 0 0 12px; }
.ed-folio-meta { display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap; font-size: 13.5px; color: var(--muted); }
.ed-folio-meta a { color: var(--gold-ink); text-decoration: none; }
.ed-folio-act { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; }
.ed-folio-act .btn { flex: 1 1 auto; min-width: 132px; }
:root[data-theme="dark"] { --folio-frame: rgba(253, 248, 236, 0.2); --folio-inner: rgba(217, 185, 138, 0.38); }
:root[data-theme="light"] { --folio-frame: rgba(33, 29, 23, 0.2); --folio-inner: rgba(154, 123, 79, 0.42); }

/* 形态说明卡：视频版暂缓（全站统一话术「视频版本精心制作中」） */
.ed-form-note {
  display: flex; gap: 12px; align-items: flex-start; margin: 16px 0 0;
  padding: 14px 16px; border: 1px dashed var(--line); border-radius: 12px; background: var(--surface-2);
}
.ed-form-note .ic { font-size: 20px; line-height: 1.2; }
.ed-form-note .t { font-size: 16px; font-weight: 700; color: var(--cream); }
.ed-form-note .d { font-size: 14.5px; color: var(--muted); line-height: 1.65; margin-top: 4px; }

/* —— 桌面/大屏增强 —— */
@media (min-width: 760px) {
  .sh-quote-tx { font-size: 16.5px; }
  .sh-teachers { gap: 14px; }
}
/* 极窄屏续播卡：「开始收听 ›」与关闭 × 会挤在一起，改为只留箭头 */
@media (max-width: 360px) {
  .glisten-card { padding-right: 42px; }
  .glisten-card .glc-go { font-size: 0; }
  .glisten-card .glc-go::after { content: '›'; font-size: 19px; }
}

/* —— 学习页：视频暂缓说明卡（不渲染占位视频） —— */
.pl-media-box.pl-video-soon {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px; text-align: center; padding: 40px 22px; min-height: 260px;
  background: var(--surface-2); border: 1px dashed var(--line); border-radius: 14px;
}
.pl-video-soon b { font-family: "Songti SC", "SimSun", "Noto Serif SC", serif; font-size: 19px; font-weight: 700; color: var(--cream); letter-spacing: 0.02em; }
.pl-video-soon span { font-size: 15px; color: var(--muted); line-height: 1.8; max-width: 520px; }


/* ================================================================
   学习小结 + 课程讨论（播放器讲义底部 / 讨论页签）· 全变量随主题适配
   ================================================================ */
.pl-sum { margin-top: 16px; border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; background: var(--surface); }
.pl-sum-head { margin-bottom: 10px; }
.pl-sum-head b { font-size: 14.5px; color: var(--cream); letter-spacing: .04em; }
.pl-sum-points { margin: 0 0 10px; padding-left: 20px; }
.pl-sum-points li { font-size: 16px; line-height: 1.7; color: var(--beige); margin: 3px 0; }
.pl-sum-quote { margin: 4px 0 10px; padding: 10px 14px; border-left: 3px solid var(--gold); border-radius: 0 10px 10px 0; background: var(--surface-2); font-size: 16px; line-height: 1.6; color: var(--gold-ink); }
.pl-sum-row { display: flex; gap: 10px; margin-top: 8px; font-size: 16px; line-height: 1.7; color: var(--beige); }
.pl-sum-k { flex: none; color: var(--gold-ink); font-weight: 600; }
.pl-talk { display: flex; flex-direction: column; gap: 12px; }
.pl-talk-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.pl-talk-head b { font-size: 15px; color: var(--cream); }
.pl-talk-compose { border: 1px solid var(--line); border-radius: 12px; padding: 10px; background: var(--surface); }
.pl-talk-compose textarea { width: 100%; border: none; background: transparent; color: var(--cream); font-size: 15px; line-height: 1.6; resize: vertical; min-height: 64px; outline: none; }
.pl-talk-login { font-size: 14px; color: var(--muted); }
.pl-talk-login a { color: var(--gold-ink); font-weight: 600; text-decoration: none; }
.pl-talk-list { display: flex; flex-direction: column; gap: 10px; }
.pl-talk-item { border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; background: var(--surface); }
.pl-talk-meta { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.pl-talk-meta b { font-size: 13.5px; color: var(--cream); }
.pl-talk-body { font-size: 16px; line-height: 1.7; color: var(--beige); overflow-wrap: anywhere; }
.pl-talk-body img { max-width: 100%; border-radius: 8px; }
.pl-talk-body p { margin: 0 0 6px; }
.pl-talk-acts { display: flex; gap: 14px; margin-top: 8px; }
.pl-talk-act { font-size: 13px; color: var(--muted); background: none; border: none; padding: 0; cursor: pointer; text-decoration: none; }
.pl-talk-act:hover { color: var(--gold-ink); }
.pl-talk-act.on { color: var(--gold-ink); }

/* ===== P1-1 课时作业（实修打卡） ===== */
.pl-hw { padding: 2px 0 8px; }
.pl-hw-card { border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; background: var(--surface); margin-bottom: 12px; }
.pl-hw-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.pl-hw-head b { font-size: 14.5px; color: var(--cream); letter-spacing: .04em; }
.pl-hw-act { padding: 10px 14px; border-left: 3px solid var(--gold); background: var(--surface-2); border-radius: 0 10px 10px 0; font-size: 15px; line-height: 1.75; color: var(--beige); margin: 6px 0; }
.pl-hw-refl { font-size: 15px; line-height: 1.75; color: var(--beige); margin-top: 6px; }
.pl-hw-k { color: var(--gold-ink); font-weight: 600; margin-right: 8px; }
.pl-hw-ta { width: 100%; min-height: 96px; background: var(--surface-2); border: 1px solid var(--line); border-radius: 9px; color: var(--beige); padding: 10px; font-size: 14px; line-height: 1.7; resize: vertical; outline: none; }
.pl-hw-ta::placeholder { color: var(--muted, #9a9086); }
.pl-hw-login { font-size: 14px; color: var(--beige); text-align: center; padding: 16px; }
.pl-hw-item { border-top: 1px solid var(--line); padding: 10px 0; }
.pl-hw-item:first-child { border-top: 0; }
.pl-hw-imeta { display: flex; gap: 8px; align-items: baseline; margin-bottom: 4px; }
.pl-hw-imeta b { font-size: 13px; color: var(--gold-ink); }
.pl-hw-ibody { font-size: 14.5px; line-height: 1.75; color: var(--beige); white-space: pre-wrap; word-break: break-word; }
.pl-hw-like { margin-top: 6px; background: transparent; border: 1px solid var(--line); border-radius: 999px; padding: 3px 12px; font-size: 12.5px; color: var(--beige); cursor: pointer; }
.pl-hw-like.on { border-color: var(--gold); color: var(--gold-ink); }

/* ===== v105 · 课程列表/训练营封面图 ===== */
/* 课程编目行：封面缩略图（有图时替代编号位，编号以小角标保留） */
.ed-cat-cover { position: relative; width: 56px; height: 74px; border-radius: 8px; overflow: hidden; flex-shrink: 0; box-shadow: 0 1px 5px rgba(0,0,0,.22); }
.ed-cat-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ed-cat-idx.on-cover { position: absolute; left: 4px; bottom: 3px; min-width: 0; padding: 0; font-size: 10.5px; font-style: normal; color: #fff; text-shadow: 0 1px 3px rgba(0,0,0,.85); }
/* 横向卡封面：有图铺满（v-cover 已有 place-items 居中，img 覆盖之） */
.v-cover.has-img { padding: 0; overflow: hidden; }
.v-cover.has-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 训练营列表卡封面 */
.l-cover.has-img { padding: 0; overflow: hidden; background: none; border-radius: 12px; }
.l-cover.has-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* 训练营详情 hero 背景图（JS 内联 style 注入，规则保证文字可读） */
.detail-hero[style*="background-image"] h1, .detail-hero[style*="background-image"] .dh-meta { text-shadow: 0 1px 4px rgba(0,0,0,.6); }

/* v1.81 品牌前台露出：列表卡片 / 筛选行 / 详情页徽标 */
.sc-brand { display:inline-flex; align-items:center; gap:4px; font-size:11px; line-height:1.4;
  color:#a08a5c; border:1px solid rgba(200,164,92,.35); border-radius:3px; padding:1px 6px; margin-bottom:5px; letter-spacing:.02em; }
.sc-brand img { width:14px; height:14px; object-fit:contain; border-radius:2px; }
.shop-brand-seg { margin-top:-2px; }
.shop-brand-seg a .small { opacity:.65; }
.sd-brand { display:inline-flex; align-items:center; gap:6px; font-size:12px; color:#c8a45c;
  border:1px solid rgba(200,164,92,.45); border-radius:4px; padding:2px 8px; }
.sd-brand img { width:16px; height:16px; object-fit:contain; border-radius:2px; }

/* ===== 支持团队（tip）· v108：结账页/感谢页共用，全用主题变量自适应深浅色 ===== */
.tip-head { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.tip-head b { font-size:15px; }
.tip-head small { color:var(--muted); font-size:12px; }
.tip-chips { display:flex; gap:8px; flex-wrap:wrap; margin-top:10px; }
.tip-chip { padding:8px 16px; border-radius:999px; border:1px solid var(--line);
  background:transparent; color:inherit; cursor:pointer; font-size:14px; line-height:1.2;
  transition:border-color .15s, background .15s, color .15s; }
.tip-chip:hover { border-color:var(--gold); color:var(--gold); }
.tip-chip.active { border-color:var(--gold); background:rgba(154,123,79,.14); color:var(--gold); font-weight:600; }
#tipCustomWrap { display:flex; align-items:center; gap:6px; }
#tipCustomWrap .tip-cur { font-weight:600; color:var(--gold); }
#tipCustomWrap input { width:110px; padding:8px 10px; border-radius:8px; border:1px solid var(--line);
  background:transparent; color:inherit; font-size:14px; }
#tipCustomWrap input:focus { outline:none; border-color:var(--gold); }


/* v1.71 支付通道「推荐」角标可读性修复：原用 var(--gold-light)（深色模式下是深棕）压酒红底几乎不可读，
   改为固定奶白 + 加大字号加粗，深浅主题通读 */
.payment-provider-card .pp-recommend {
  padding: 3px 10px; border-radius: 20px; font-size: 12px; font-weight: 600;
  letter-spacing: .5px; line-height: 1.5; white-space: nowrap;
  background: linear-gradient(135deg, var(--wine), var(--wine-deep));
  color: #FFF7E8; flex-shrink: 0;
}

/* v1.71 收货地址表单：12 栅格 + 当地语言主标签 / 界面语言副标签 */
.addr-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 10px 12px; }
.addr-c6 { grid-column: span 6; }
.addr-c12 { grid-column: span 12; }
@media (max-width: 520px) { .addr-grid { grid-template-columns: 1fr; } .addr-c6 { grid-column: span 1; } }
.af-sub { display: block; margin-top: 2px; font-size: 12px; color: var(--muted); font-weight: 400; }
.af-hint { margin: -2px 0 8px; font-size: 12px; color: var(--muted); }
