* { box-sizing: border-box; }
html, body { margin: 0; min-height: 100%; font-family: "Noto Sans SC", "Microsoft YaHei", sans-serif; color: var(--ink); background: radial-gradient(circle at 90% 0%, rgba(196,22,28,.05), transparent 28%), var(--canvas); }
body { font-size: var(--text-md); letter-spacing: .01em; }
a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; }
button { cursor: pointer; }
.global-header { position: fixed; inset: 0 0 auto 0; z-index: 60; height: 78px; display: flex; align-items: center; justify-content: space-between; padding: 0 42px; background: rgba(255,255,255,.94); border-bottom: 1px solid rgba(232,232,234,.8); box-shadow: 0 4px 18px rgba(32,33,36,.04); backdrop-filter: blur(12px); }
.brand { display: flex; align-items: center; gap: 12px; }
.brand-mark { display: none; }
.brand-copy { display: grid; gap: 2px; }
.brand-copy strong { font-size: 18px; letter-spacing: .02em; }
.brand-copy small { color: var(--muted); font-size: 11px; letter-spacing: .08em; }
.header-actions { display: flex; align-items: center; gap: 18px; color: var(--muted); }
.quota { padding: 8px 12px; border-radius: 999px; background: var(--red-soft); color: var(--red-dark); font-size: 13px; white-space: nowrap; }
.quota b { color: var(--red); font-size: 16px; }
.header-link, .user-trigger, .sidebar-setting { border: 0; background: transparent; color: inherit; white-space: nowrap; }
.header-actions a.header-link { color: var(--muted); font-size: 13px; text-decoration: none; cursor: pointer; }
.header-actions a.header-link:hover { color: var(--red); }
/* 项目切换器：一个工作区 = 一个项目，切项目即切整套数据 */
.project-switcher { position: relative; }
.project-trigger { display: flex; align-items: center; gap: 8px; max-width: 210px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 999px; background: #fff; color: var(--ink); font-size: 13px; cursor: pointer; }
.project-trigger:hover { border-color: var(--red); color: var(--red-dark); }
.project-dot { width: 7px; height: 7px; flex: 0 0 auto; border-radius: 50%; background: var(--red); }
.project-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.project-dropdown { position: absolute; top: calc(100% + 8px); left: 0; min-width: 240px; max-height: 340px; overflow: auto; padding: 8px 0; border: 1px solid var(--line); border-radius: 12px; background: #fff; box-shadow: 0 12px 28px rgba(32,33,36,.12); z-index: 22; }
.project-dropdown-title { padding: 8px 16px 6px; color: var(--muted-light); font-size: 11px; }
.project-option { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; padding: 10px 16px; border: 0; background: transparent; color: var(--ink); font-size: 13px; text-align: left; cursor: pointer; text-decoration: none; }
.project-option:hover { background: var(--red-soft); color: var(--red-dark); }
.project-option.active { color: var(--red); font-weight: 700; }
.project-option-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.project-check { flex: 0 0 auto; color: var(--muted-light); font-size: 11px; font-weight: 400; }
.project-new { border-top: 1px solid var(--line); margin-top: 6px; padding-top: 12px; color: var(--red-dark); }
.project-manage { color: var(--muted); font-size: 12px; }
.user-trigger { display: flex; align-items: center; gap: 8px; color: var(--ink); }
.avatar { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; background: var(--gold-soft); color: var(--red-dark); font-weight: 700; }
.chevron { color: var(--muted-light); }
.user-menu { position: relative; }
.user-dropdown { position: absolute; top: calc(100% + 8px); right: 0; min-width: 160px; padding: 8px 0; border: 1px solid var(--line); border-radius: 12px; background: #fff; box-shadow: 0 12px 28px rgba(32,33,36,.12); z-index: 20; }
.user-dropdown-item { display: block; width: 100%; padding: 10px 16px; border: 0; background: transparent; color: var(--ink); font-size: 13px; text-align: left; cursor: pointer; }
.user-dropdown-item:hover { background: var(--red-soft); color: var(--red-dark); }
.user-dropdown-info { color: var(--muted); font-size: 12px; cursor: default; }
.user-dropdown-info:hover { background: transparent; color: var(--muted); }
.sidebar { position: fixed; top: 78px; bottom: 0; left: 0; z-index: 55; width: 264px; display: flex; flex-direction: column; justify-content: space-between; padding: 30px 16px 22px; background: rgba(251,251,252,.92); border-right: 1px solid rgba(232,232,234,.9); }
.sidebar-nav { display: grid; gap: 8px; }
.nav-item { display: flex; align-items: center; min-height: 46px; padding: 0 22px; border-radius: 12px; color: var(--muted); font-weight: 600; transition: .2s ease; }
.nav-item:hover { color: var(--red); background: var(--red-soft); }
.nav-item.active { color: var(--red-dark); background: var(--red-soft); box-shadow: inset 3px 0 var(--red); }
.nav-icon { display: none; }
.sidebar-bottom { display: grid; gap: 14px; }
.sidebar-tip { display: flex; align-items: center; gap: 10px; padding: 16px 12px; border: 1px solid #f1dfc1; border-radius: 13px; background: linear-gradient(135deg,#fffaf0,#fff); }
.tip-icon { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 50%; color: var(--gold); background: var(--gold-soft); font-size: 18px; }
.sidebar-tip div { display: grid; gap: 4px; }
.sidebar-tip strong { font-size: 13px; }
.sidebar-tip small { color: var(--muted); font-size: 11px; }
.sidebar-setting { justify-self: start; padding: 4px 12px; color: var(--muted); }
/* 底部 58px 是原内容留白，再加 46px 给固定页脚让位，避免遮住最后一行内容 */
.main { min-height: 100vh; padding: 114px 58px 104px 322px; }
.page-shell { max-width: 1240px; margin: 0 auto; }
/* 站点页脚（备案信息公示，国家强制）。固定贴左栏右侧、全站可见；
   文案保持小字弱化，不干扰主内容，但链接必须真实可点。 */
.site-footer { position: fixed; left: 264px; right: 0; bottom: 0; z-index: 50; background: rgba(255,255,255,.96); border-top: 1px solid var(--line, rgba(0,0,0,.08)); padding: 9px 58px; }
.site-footer-inner { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 18px; font-size: 12px; color: var(--muted); }
.site-footer-copy { color: var(--muted); }
.site-footer-beian { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); text-decoration: none; }
.site-footer-beian:hover { color: var(--red); }
.site-footer-beian.is-pending { opacity: .72; }
.site-footer-shield { width: 12px; height: 14px; flex: none; background: #b8b8b8; clip-path: polygon(50% 0, 100% 18%, 100% 62%, 50% 100%, 0 62%, 0 18%); }
/* 案例图水印（2026-09-19）：满屏斜向平铺「企鹅视觉」Logo，参数 S3（用户选定）。
   容器负责建立定位上下文，.case-watermark 铺满其上。
   平铺用 CSS background-repeat 复用同一张 Logo，零额外请求。

   ★尺寸口径：background-size 用【元素自身宽度的百分比】（不查祖先容器）。
     为什么不用 cqw：cqw 相对最近的 container-type 祖先解析；灯箱卡片没有
     container-type，会一路退到 viewport(1440px)，使 16cqw 变成 230.4px
     —— 比目标大 1.37 倍（2026-09-19 用户反馈"太大太密"的根因）。
     当前档位 A3（09-22 用户要求整页 6-9 个 Logo、Logo 大小不变）：灯箱水印层 1064px 宽 × 15.56% = 166px（格），
     格内 Logo 120px（占格 72%），整页约 7.5 格。A2.5 档整页只有约 3 格、可见 1-2 个，太稀。
     留白由 tile SVG 承担（不是靠 background-size）—— 这样"格子大 + Logo 小"才成立。
     同时天然满足"随容器等比缩放"：缩略图 218px 宽 → 格 72.7px、Logo 24.6px。

   ★必须写两个值：单值 + auto 会按【图片自身纵横比】算高度。图片是纯 Logo
     (1063×268)，auto 会得到错误的贴片高，平铺变成压扁的条带。
     显式给出 245:300 —— Logo 居中、四周留白，就是 S3 原版的 pattern 矩形。 */
.case-media { position: relative; display: block; overflow: hidden; }
.case-media > img { display: block; width: 100%; }
.case-watermark { position: absolute; inset: 0; pointer-events: none; opacity: var(--wm-op, .1);
  background-image: var(--wm-logo); background-repeat: repeat;
  background-size: var(--wm-tile-size, 15.56%) var(--wm-tile-h, 33.5%);
  background-position: 0 0;
  transform: rotate(var(--wm-angle, -24deg)) scale(1.6);
  transform-origin: center;
  filter: var(--wm-shadow, none); }
.eyebrow { display: inline-flex; align-items: center; gap: 8px; color: var(--red); font-size: 12px; font-weight: 800; letter-spacing: .12em; }
.eyebrow::before { content: ""; width: 18px; height: 2px; background: var(--gold); }
.page-heading { display: flex; justify-content: space-between; align-items: end; gap: 24px; margin-bottom: 34px; }
.page-heading-actions { display: flex; align-items: center; gap: 12px; }
h1 { margin: 12px 0 8px; font-size: 34px; letter-spacing: -.04em; }
h2 { margin: 0; font-size: 22px; }
.lead { margin: 0; color: var(--muted); line-height: 1.75; }
.card { border: 1px solid rgba(232,232,234,.9); border-radius: 20px; background: rgba(255,255,255,.96); box-shadow: 0 10px 28px rgba(32,33,36,.055); }
.hero-card { position: relative; overflow: hidden; padding: 48px 52px; background: linear-gradient(120deg,#fff,#fff7f4 72%,#fff1ef); }
.hero-card::after { content: "国创"; position: absolute; right: 50px; bottom: -20px; color: rgba(196,22,28,.05); font-size: 150px; font-weight: 900; letter-spacing: -.12em; }
.hero-card > * { position: relative; z-index: 1; }
.hero-card h1 { max-width: 640px; font-size: 44px; line-height: 1.18; }
.hero-card .lead { max-width: 600px; }
.hero-actions { display: flex; gap: 12px; margin-top: 28px; }
.btn { min-height: 44px; padding: 0 19px; border: 1px solid transparent; border-radius: 11px; font-weight: 700; letter-spacing: .01em; white-space: nowrap; transition: transform .18s ease, box-shadow .18s ease, background .18s ease; }
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn-primary { color: #fff; background: linear-gradient(135deg, var(--red), #d72a2f); box-shadow: 0 8px 18px rgba(196,22,28,.2); }
.btn-primary:hover { background: var(--red-dark); }
.btn-secondary { color: var(--red-dark); border-color: #e4c5c6; background: linear-gradient(180deg,#fff,#fffafa); }
.btn-ghost { color: var(--muted); border-color: var(--line); background: #fff; }
.btn-ghost:hover, .btn-secondary:hover { border-color: #d9a6a8; color: var(--red-dark); box-shadow: 0 6px 14px rgba(196,22,28,.08); }
.btn-danger { color: #a3473d; border-color: #f0d5d3; background: #fff7f7; }
.btn-danger:hover { color: #fff; border-color: #c4161c; background: #c4161c; box-shadow: 0 6px 14px rgba(196,22,28,.12); }
.project-row-actions { display: flex; gap: 8px; }
.section-title { display: flex; align-items: center; justify-content: space-between; margin: 38px 0 16px; }
.section-title h2 { letter-spacing: -.02em; }
.section-title small { padding: 5px 9px; border-radius: 99px; background: #f8f1e5; color: #876d37; }
.section-title small { color: var(--muted); }
.mode-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 18px; }
.mode-card { min-height: 220px; padding: 26px; transition: .2s ease; }
.mode-card:hover, .mode-card.selected { border-color: #e7b7b9; box-shadow: 0 12px 28px rgba(196,22,28,.1); transform: translateY(-2px); }
.mode-icon { width: 48px; height: 48px; display: grid; place-items: center; margin-bottom: 18px; border-radius: 14px; color: var(--red); background: var(--red-soft); font-size: 24px; }
.mode-card h2 { margin-bottom: 10px; }
.mode-card p { min-height: 48px; margin: 0; color: var(--muted); line-height: 1.65; }
/* 自定义生成入口的引导提示（2026-09-15）：有的用户不知道"只想为一页内容生成 PPT"该点哪 */
.mode-card .mode-hint { display: block; margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--line); color: var(--red); font-size: 12px; line-height: 1.6; }
.mode-card .mode-hint b { color: var(--red); }
/* 本机存储提醒（2026-09-15）：不做云端备份，引导用户下载留存 */
.storage-hint { display: block; margin-top: 6px; color: var(--muted-light); font-size: 12px; line-height: 1.6; }
/* BP 封面历史版本（2026-09-15）：缩略图行，点击零积分切换 */
.bp-cover-history { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--line); }
.bpch-label { display: block; margin-bottom: 8px; font-size: 12px; font-weight: 700; color: var(--ink); }
.bpch-thumbs { display: flex; flex-wrap: wrap; gap: 8px; }
.bpch-thumb { width: 64px; height: 90px; padding: 0; border: 2px solid var(--line); border-radius: 8px; background: #f1f1f3; overflow: hidden; cursor: pointer; }
.bpch-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bpch-thumb:hover { border-color: var(--red); }
.bpch-thumb.is-current { border-color: var(--red); }
.bp-cover-history small { display: block; margin-top: 8px; color: var(--muted-light); font-size: 11px; }
.mode-meta { display: flex; gap: 8px; margin-top: 20px; }
.chip { padding: 5px 9px; border-radius: 999px; color: var(--muted); background: #f6f6f7; font-size: 12px; }
.steps { display: grid; grid-template-columns: repeat(4,1fr); gap: 12px; }
.step { display: flex; align-items: center; gap: 10px; padding: 16px; border-radius: 12px; background: #fff; border: 1px solid var(--line); }
.step-num { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 50%; color: var(--red); background: var(--red-soft); font-weight: 800; }
.step span:last-child { color: var(--muted); font-size: 13px; }
.progress-head { display: flex; justify-content: space-between; align-items: center; margin: 24px 0 10px; }
.progress-track { height: 8px; overflow: hidden; border-radius: 99px; background: #f0e6e6; }
.progress-bar { height: 100%; border-radius: inherit; background: linear-gradient(90deg,var(--red),var(--gold)); }
.guide-layout { display: grid; grid-template-columns: 1fr 300px; gap: 24px; align-items: start; }
.form-card { padding: 30px; }
.form-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 18px; }
.field { display: grid; gap: 8px; }
.field.full { grid-column: 1 / -1; }
.field label { font-weight: 700; }
.field label em { color: var(--red); font-style: normal; }
.field input, .field textarea, .field select { width: 100%; border: 1px solid var(--line-strong); border-radius: 9px; padding: 12px 13px; outline: 0; background: #fff; color: var(--ink); }
.field textarea { min-height: 120px; resize: vertical; line-height: 1.6; }
.field input:focus, .field textarea:focus, .field select:focus { border-color: var(--red); box-shadow: 0 0 0 3px var(--red-soft); }
.side-card { padding: 22px; }
.side-card h3 { margin: 0 0 16px; font-size: 16px; }
.side-list { display: grid; gap: 13px; margin: 0; padding: 0; list-style: none; }
.side-list li { display: flex; gap: 10px; color: var(--muted); line-height: 1.55; }
.side-list li::before { content: "✓"; color: var(--success); font-weight: 800; }
.toolbar { display: flex; justify-content: space-between; gap: 12px; margin-top: 24px; }
.toolbar .right { display: flex; gap: 10px; }
.track-grid, .style-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 16px; }
.choice-card { padding: 22px; border: 1px solid var(--line); border-radius: 14px; background: #fff; text-align: left; }
.choice-card.active { border-color: var(--red); box-shadow: 0 0 0 3px var(--red-soft); }
.choice-card h3 { margin: 0 0 8px; }
.choice-card p { margin: 0; color: var(--muted); line-height: 1.6; }
.choice-card .choice-tag { display: inline-block; margin-bottom: 22px; padding: 4px 8px; border-radius: 5px; color: var(--red-dark); background: var(--red-soft); font-size: 12px; }
.upload-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 14px; }
.upload-box { min-height: 130px; display: grid; place-items: center; gap: 4px; padding: 20px; border: 1px dashed #d8a8aa; border-radius: 13px; background: #fffafa; text-align: center; }
.upload-box strong { color: var(--red-dark); }
.upload-box span { color: var(--muted); font-size: 12px; }
.sample-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 16px; }
.slide-thumb { overflow: hidden; min-height: 260px; border: 1px solid var(--line); border-radius: 12px; background: #fff; }
.slide-thumb.cover { color: #fff; background: linear-gradient(145deg,var(--red-dark),var(--red)); }
.slide-thumb .slide-inner { min-height: 260px; padding: 22px; display: flex; flex-direction: column; justify-content: space-between; }
.slide-thumb h3 { margin: 0; font-size: 19px; line-height: 1.35; }
.slide-thumb p { margin: 0; color: inherit; opacity: .72; line-height: 1.6; }
/* 【踩坑】原来这里是 display:flex。提示文案里含 <b> 标签，flex 会把每段文字和每个 <b>
   都变成独立 flex item，nowrap 下被压到 min-content（中文 = 1 个字宽），于是整段文字逐字竖排、
   看起来像乱码。普通文字块不要用 flex。 */
.preview-note { margin-top: 20px; padding: 13px 16px; border-radius: 10px; font-size: 12.5px; line-height: 1.75; color: #785d29; background: var(--gold-soft); }
.preview-note b { font-weight: 600; }
/* 工具栏下方的说明行。
   【易错点】不要直接往 .toolbar 里塞 <p>：.toolbar 是 flex 且卡片本身也是 flex 容器，
   说明文字会被当成第三个 flex 子项压成一条窄柱，文字竖着排、非常难看（实测踩过）。
   所以说明单独成块放在工具栏之后，占满整行。 */
.inline-note { margin-top: 14px; padding: 12px 16px; border-radius: 10px; color: #785d29; background: var(--gold-soft); font-size: 13px; line-height: 1.75; }
.inline-note b { color: #5f4718; }
@media (max-width: 720px) { .toolbar .right { flex-wrap: wrap; } }
.price-box { display: grid; gap: 13px; margin-top: 20px; padding: 20px; border-radius: 13px; background: #fff8f0; }
.price-row { display: flex; justify-content: space-between; color: var(--muted); }
.price-row.total { padding-top: 14px; border-top: 1px solid #ecdabf; color: var(--ink); font-size: 18px; font-weight: 800; }
.price-row.total strong { color: var(--red); font-size: 28px; }
.status-list { display: grid; gap: 0; margin: 26px 0; }
.status-item { position: relative; display: flex; gap: 16px; min-height: 68px; }
.status-item::before { content: ""; position: absolute; left: 14px; top: 30px; bottom: -4px; width: 1px; background: var(--line); }
.status-item:last-child::before { display: none; }
.status-dot { position: relative; z-index: 1; width: 29px; height: 29px; display: grid; place-items: center; border-radius: 50%; color: var(--muted-light); background: #f1f1f2; }
.status-item.done .status-dot, .status-item.active .status-dot { color: #fff; background: var(--red); }
.status-item.active .status-dot { box-shadow: 0 0 0 5px var(--red-soft); }
.status-text strong { display: block; margin-bottom: 5px; }
.status-text small { color: var(--muted); }
.success-box { padding: 38px; text-align: center; border: 1px solid #f0ddd1; background: linear-gradient(145deg,#fffaf4,#fff); }
.success-icon { width: 66px; height: 66px; display: grid; place-items: center; margin: 0 auto 18px; border-radius: 50%; color: #fff; background: var(--success); font-size: 34px; }
.success-box h1 { margin-top: 0; }
.result-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 12px; margin: 28px auto; max-width: 720px; }
.result-stat { padding: 16px; border-radius: 11px; background: #fff; border: 1px solid var(--line); }
.result-stat strong { display: block; color: var(--red); font-size: 24px; }
.result-stat span { color: var(--muted); font-size: 12px; }
.empty { padding: 52px; color: var(--muted); text-align: center; }
.route-loading { padding: 40px; color: var(--muted); }
@media (max-width: 1050px) { .sidebar { width: 220px; } .main { padding-left: 252px; padding-right: 24px; } .guide-layout { grid-template-columns: 1fr; } }
@media (max-width: 760px) { .global-header { padding: 0 16px; } .header-link, .sidebar-tip { display: none; } .sidebar { top: 78px; width: 200px; padding: 18px 12px; } .nav-item { justify-content: flex-start; padding: 0 12px; } .main { padding: 110px 16px 32px 216px; } h1, .hero-card h1 { font-size: 28px; } .mode-grid, .track-grid, .style-grid, .sample-grid, .form-grid, .upload-grid { grid-template-columns: 1fr; } .steps { grid-template-columns: repeat(2,1fr); } .page-heading { display: block; } }

/* 需求版向导组件 */
/* 【2026-09-15】实际只有 7 步（选择比赛→…→费用确认），原来写 8 列会多出一个空列，看着比例不对 */
.steps-wide { grid-template-columns: repeat(7, minmax(0, 1fr)); margin-bottom: 24px; }
.steps-wide .step { min-height: 64px; padding: 10px 12px; }
.steps-wide .step.current { border-color: var(--red); background: var(--red-soft); }
.steps-wide .step.done .step-num { color: #fff; background: var(--success); }
.competition-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.reference-choice { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-bottom: 16px; }
.reference-card { min-height: 110px; padding: 20px; border: 1px solid var(--line); border-radius: 13px; background: #fff; text-align: left; }
.reference-card.active { border-color: var(--red); background: var(--red-soft); box-shadow: 0 0 0 3px rgba(196,22,28,.08); }
.reference-card b, .reference-card span { display: block; }
.reference-card span { margin-top: 8px; color: var(--muted); font-size: 13px; line-height: 1.55; }
.template-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 14px 0 20px; }
.template-mini { padding: 10px; border: 1px solid var(--line); border-radius: 11px; background: #fff; text-align: left; }
.template-mini.active { border-color: var(--red); }
.template-mini span { display: block; height: 66px; margin-bottom: 8px; border-radius: 8px; background: linear-gradient(135deg, var(--red-dark), var(--gold)); }
.template-mini:nth-child(2) span { background: linear-gradient(135deg, #10284e, #4d8bb7); }
.template-mini:nth-child(3) span { background: linear-gradient(135deg, #1f5b43, #8db86d); }
.upload-reference { display: grid; gap: 8px; padding: 16px; border: 1px dashed #d8a8aa; border-radius: 12px; background: #fffafa; }
.upload-file-state { color: var(--muted); font-size: 13px; }
.ai-field { position: relative; }
.ai-status { display: block; min-height: 18px; margin-top: 7px; color: var(--muted); font-size: 12px; line-height: 1.5; }
.ai-status.generating { color: var(--red); }
.ai-status.success { color: #3f8b61; }
.ai-status.error { color: #b44f49; }
.ai-field textarea { min-height: 132px; padding-bottom: 48px; }
.ai-global-status { display: inline-flex; align-items: center; min-height: 32px; margin-top: 12px; padding: 0 12px; border-radius: 8px; color: var(--muted); background: #faf7f3; font-size: 12px; line-height: 1.6; }
.ai-global-status.generating { color: var(--red); background: #fff4ed; }
.ai-global-status.success { color: #3f8b61; background: #eff8f1; }
.ai-global-status.error { color: #b44f49; background: #fff1f0; }
.btn-ai { position: absolute; right: 10px; bottom: 10px; min-height: 32px; padding: 0 10px; color: var(--red-dark); border-color: #e7c9c9; font-size: 12px; }
.btn-ai.is-generating { color: var(--red); background: #fff4ed; border-color: #e6aaa0; }
.check-row { display: grid; grid-template-columns: 18px auto 1fr; align-items: center; gap: 8px; margin-top: 22px; padding: 14px; border-radius: 10px; background: #faf7f2; }
.check-row small { color: var(--muted); }
.generation-actions { display: flex; gap: 10px; align-items: center; margin-top: 24px; }
.generation-rule { display: grid; gap: 8px; padding: 18px; border-left: 4px solid var(--gold); border-radius: 9px; background: var(--gold-soft); }
/* 【2026-09-15】模板已更换时用琥珀色警示，与普通「模板已锁定」区分 */
.generation-rule.is-switched { border-color: #f0c47a; background: linear-gradient(180deg,#fffaf0,#fffdf8); }
.generation-rule.is-switched b { color: #a15c00; }
.generation-rule span { color: #785d29; line-height: 1.6; }
.page-counter { margin-top: 26px; color: var(--red-dark); font-size: 20px; font-weight: 800; }
.content-summary { display: grid; gap: 5px; margin-bottom: 20px; padding: 16px; border-radius: 11px; background: var(--red-soft); }
.content-summary span, .content-summary small { color: var(--muted); }
.outline-list { display: grid; gap: 10px; }
.outline-item { display: grid; grid-template-columns: 34px 1fr auto; align-items: center; gap: 12px; padding: 16px; border: 1px solid var(--line); border-radius: 11px; }
.outline-item > span { color: var(--red); font-weight: 800; }
.outline-item b, .outline-item p { display: block; margin: 0; }
.outline-item p { margin-top: 5px; color: var(--muted); font-size: 13px; }
.price-box { margin-bottom: 18px; }
.pay-methods { display: flex; flex-wrap: wrap; gap: 18px; margin-top: 16px; color: var(--muted); }
.project-row { display: grid; grid-template-columns: minmax(0, 1fr) 220px 80px auto; align-items: center; gap: 16px; padding: 18px 22px; border-bottom: 1px solid var(--line); }
.project-row:last-child { border-bottom: 0; }
.project-row span { color: var(--muted); font-size: 13px; }
.contact-card, .tutorial-card { display: grid; grid-template-columns: 260px 1fr; align-items: center; gap: 34px; padding: 32px; }
.qr-placeholder, .video-placeholder { display: grid; place-items: center; min-height: 220px; border: 1px dashed #d8a8aa; border-radius: 14px; color: var(--muted); background: repeating-linear-gradient(45deg, #fffafa, #fffafa 10px, #fff 10px, #fff 20px); }
.qr-img { width: 100%; max-width: 220px; border-radius: 14px; border: 1px solid var(--line); }
.tutorial-card { grid-template-columns: 1.25fr 1fr; }
.video-placeholder { min-height: 260px; }

/* 比赛日历：桌面端横向时间轴 */
.calendar-reference { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 34px; align-items: stretch; padding: 28px 30px; overflow: hidden; }
.calendar-countdown { display: grid; place-items: center; align-content: center; min-height: 154px; padding: 18px; border-radius: 16px; background: linear-gradient(145deg, var(--red-soft), #fff7f1); }
.calendar-countdown strong { color: var(--red); font-size: 64px; line-height: .95; letter-spacing: -.06em; }
.calendar-countdown span { margin-top: 10px; color: var(--red-dark); font-size: 14px; font-weight: 700; text-align: center; }
.calendar-timeline { position: relative; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: start; gap: 0; padding: 22px 8px 0; }
.calendar-timeline::before { content: ""; position: absolute; top: 30px; left: 10%; right: 10%; height: 2px; background: linear-gradient(90deg, var(--red), var(--gold), #e0e1e3); }
.calendar-event { position: relative; z-index: 1; display: grid; justify-items: center; gap: 13px; text-align: center; }
.calendar-dot { width: 18px; height: 18px; border: 4px solid #fff; border-radius: 50%; background: #dfe1e3; box-shadow: 0 0 0 1px #dfe1e3; }
.calendar-event.current .calendar-dot { background: var(--red); box-shadow: 0 0 0 1px var(--red), 0 0 0 6px var(--red-soft); }
.calendar-event.upcoming .calendar-dot { background: var(--gold); box-shadow: 0 0 0 1px var(--gold); }
.calendar-event div { display: grid; gap: 6px; }
.calendar-event strong { color: var(--ink); font-size: 15px; }
.calendar-event small { color: var(--muted); font-size: 13px; }
@media (max-width: 1050px) { .steps-wide { grid-template-columns: repeat(4, minmax(0, 1fr)); } .competition-grid { grid-template-columns: repeat(2, minmax(0,1fr)); } .project-row { grid-template-columns: 1fr 1fr; } }
@media (max-width: 760px) { .steps-wide { grid-template-columns: repeat(2, minmax(0,1fr)); } .competition-grid, .reference-choice, .template-grid, .contact-card, .tutorial-card { grid-template-columns: 1fr; }
.content-export-result { display: grid; gap: 10px; margin-top: 18px; padding: 16px; border: 1px solid #f1dfc1; border-radius: 10px; background: #fffaf0; }
.calendar-reference { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
.calendar-timeline { grid-template-columns: 1fr; gap: 16px; padding: 0 0 0 28px; }
.calendar-timeline::before { top: 8px; bottom: 8px; left: 8px; right: auto; width: 2px; height: auto; background: linear-gradient(180deg, var(--red), var(--gold), #e0e1e3); }
.calendar-event { grid-template-columns: 18px 1fr; display: grid; justify-items: start; gap: 12px; text-align: left; }
.calendar-event .calendar-dot { grid-column: 1; grid-row: 1; }
.calendar-event div { grid-column: 2; grid-row: 1; }
.check-row { grid-template-columns: 18px 1fr; } .check-row small { grid-column: 2; } .outline-item { grid-template-columns: 30px 1fr; } .outline-item .btn { grid-column: 2; justify-self: start; } }

/* 一玄式工作流：组别 / 事实对齐 / 大纲确认 */
.context-brief { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 22px; padding: 12px 16px; border-radius: 11px; background: var(--red-soft); color: var(--red-dark); font-weight: 700; font-size: 14px; }
.context-brief::before { content: "参赛定位"; padding: 3px 9px; border-radius: 999px; background: var(--red); color: #fff; font-size: 12px; }
.group-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.align-card { display: grid; gap: 18px; }
.align-progress { color: var(--red); font-size: 13px; font-weight: 800; letter-spacing: .06em; }
.align-question { margin: 0; font-size: 24px; letter-spacing: -.02em; }
.align-options { display: grid; gap: 12px; }
.align-option { display: flex; align-items: flex-start; gap: 14px; padding: 16px 18px; border: 1px solid var(--line); border-radius: 13px; background: #fff; text-align: left; transition: .18s ease; }
.align-option:hover { border-color: #d9a6a8; background: #fffafa; }
.align-option.selected { border-color: var(--red); background: var(--red-soft); box-shadow: 0 0 0 3px rgba(196,22,28,.08); }
.align-option-num { width: 30px; height: 30px; flex: none; display: grid; place-items: center; border-radius: 50%; color: var(--red-dark); background: var(--red-soft); font-weight: 800; }
.align-option.selected .align-option-num { color: #fff; background: var(--red); }
.align-option b { display: flex; align-items: center; gap: 8px; font-size: 15px; }
.align-option small { display: block; margin-top: 4px; color: var(--muted); font-size: 13px; line-height: 1.55; }
.align-recommend { padding: 2px 8px; border-radius: 999px; color: #785d29; background: var(--gold-soft); font-style: normal; font-size: 11px; font-weight: 700; }
.align-history { padding: 10px 14px; border-radius: 9px; color: var(--success); background: #f0f9f3; font-size: 13px; }
.align-actions { display: flex; gap: 10px; align-items: center; }
.align-actions input { flex: 1; padding: 11px 13px; border: 1px solid var(--line-strong); border-radius: 9px; outline: 0; }
.align-actions input:focus { border-color: var(--red); box-shadow: 0 0 0 3px var(--red-soft); }
.outline-versions { display: grid; gap: 12px; }
.outline-version { display: flex; align-items: flex-start; gap: 14px; padding: 16px 18px; border: 1px solid var(--line); border-radius: 13px; background: #fff; text-align: left; transition: .18s ease; }
.outline-version:hover { border-color: #d9a6a8; }
.outline-version.active { border-color: var(--red); background: var(--red-soft); box-shadow: 0 0 0 3px rgba(196,22,28,.08); }
.outline-version b { display: flex; align-items: center; gap: 8px; font-size: 15px; }
.outline-version small { display: block; margin-top: 4px; color: var(--muted); font-size: 13px; line-height: 1.55; }
.outline-table { overflow: hidden; border: 1px solid var(--line); border-radius: 12px; }
.outline-table-head, .outline-table-row { display: grid; grid-template-columns: 160px 90px 1fr; align-items: center; gap: 12px; padding: 12px 16px; }
.outline-table-head { background: #faf7f2; color: var(--muted); font-size: 12px; font-weight: 800; letter-spacing: .04em; }
.outline-table-row { border-top: 1px solid var(--line); }
.outline-table-row b { font-size: 14px; }
.outline-table-row span { color: var(--red); font-weight: 800; font-size: 13px; }
.outline-table-row small { color: var(--muted); font-size: 13px; }
.outline-pages-table .outline-table-head, .outline-pages-table .outline-table-row { grid-template-columns: 64px 110px 180px 1fr; }
.outline-pages-table .outline-page-section { color: var(--muted); font-weight: 600; font-size: 12px; }
.outline-page-input { width: 100%; border: 1px solid transparent; border-radius: 8px; background: transparent; padding: 6px 8px; font-size: 13px; color: inherit; font-family: inherit; }
.outline-page-input:hover { border-color: var(--line); }
.outline-page-input:focus { border-color: var(--red); outline: none; background: #fff; }
.outline-pages-table .outline-table-row small .outline-page-input { color: var(--muted); }
.outline-ai-status { margin: 10px 0 0; font-size: 13px; }
.outline-ai-status.generating { padding: 10px 14px; border-radius: 10px; background: #fdf6ec; color: #9a6a1a; }
.outline-ai-status.success { padding: 10px 14px; border-radius: 10px; background: #eef7ee; color: #2f7a38; }
.outline-ai-status.error { padding: 10px 14px; border-radius: 10px; background: #fdeeee; color: var(--red); }
@media (max-width: 760px) { .group-grid { grid-template-columns: 1fr; } .align-actions { flex-wrap: wrap; } .outline-table-head, .outline-table-row { grid-template-columns: 1fr 80px; } .outline-table-row small { grid-column: 1 / -1; } }

/* 逐页草稿工作区 */
.draft-layout { display: grid; grid-template-columns: 180px 230px minmax(0, 1fr); gap: 16px; align-items: start; }
.draft-pipeline, .draft-pages, .draft-editor { min-height: 680px; }
.draft-pipeline, .draft-pages { padding: 18px 16px; }
.draft-pipeline h3 { margin: 0 0 18px; font-size: 16px; }
.pipeline-stage { display: grid; grid-template-columns: 22px 1fr; gap: 8px; align-items: center; padding: 13px 4px; border-left: 2px solid var(--line); color: var(--muted); }
.pipeline-stage.active { border-left-color: var(--gold); color: var(--ink); background: #fffaf0; }
.pipeline-stage.completed { border-left-color: var(--success); color: var(--ink); }
.pipeline-dot { color: var(--muted-light); font-weight: 800; }
.pipeline-stage.active .pipeline-dot { color: var(--gold); }
.pipeline-stage.completed .pipeline-dot { color: var(--success); }
.pipeline-stage small { grid-column: 2; color: var(--muted); font-size: 11px; }
.draft-pages-head, .draft-editor-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.draft-pages-head { padding-bottom: 14px; border-bottom: 1px solid var(--line); }
.draft-pages-head small { color: var(--muted); font-size: 12px; }
.draft-page-list { display: grid; gap: 6px; margin-top: 14px; max-height: 610px; overflow: auto; padding-right: 2px; }
.draft-page-item { display: grid; grid-template-columns: 28px 1fr; gap: 8px; padding: 10px 8px; border: 1px solid transparent; border-radius: 9px; background: #fff; text-align: left; }
.draft-page-item:hover { background: var(--red-soft); }
.draft-page-item.active { border-color: #e5b7b8; background: var(--red-soft); }
.draft-page-item > span:first-child { color: var(--red); font-size: 12px; font-weight: 800; }
.draft-page-item b, .draft-page-item small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.draft-page-item b { font-size: 12px; }
.draft-page-item small { margin-top: 3px; color: var(--muted); font-size: 11px; }
.draft-editor { padding: 22px; }
.draft-editor-head { padding-bottom: 16px; border-bottom: 1px solid var(--line); }
.draft-editor-head > div { flex: 1; display: grid; gap: 8px; }
.draft-editor-head input { width: 100%; border: 0; padding: 0; outline: 0; color: var(--ink); font-size: 22px; font-weight: 800; }
.draft-zone { display: grid; gap: 8px; margin-top: 16px; padding: 16px; border-radius: 11px; }
.draft-zone label { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-weight: 800; }
.draft-zone label small { color: var(--muted); font-size: 12px; font-weight: 400; }
.draft-zone textarea { width: 100%; min-height: 84px; resize: vertical; border: 1px solid rgba(0,0,0,.06); border-radius: 8px; padding: 11px; outline: 0; color: var(--ink); background: rgba(255,255,255,.78); line-height: 1.65; }
.draft-zone textarea:focus { border-color: var(--red); box-shadow: 0 0 0 3px var(--red-soft); }
.draft-zone-body { background: #fff8f0; }
.draft-zone-body textarea { min-height: 220px; line-height: 1.75; }
.draft-zone-script textarea { min-height: 120px; }
.draft-zone-evidence textarea { min-height: 96px; }
.draft-zone-script { background: #f8f4ff; }
.draft-zone-evidence { background: #f0f9f3; }
.draft-zone-image { background: #f1f6fb; }
.draft-zone-image p { margin: 0; color: var(--muted); line-height: 1.6; }
.style-choice small { display: flex; flex-wrap: wrap; gap: 5px; }
.style-tag { display: inline-block; margin-right: 4px; padding: 3px 7px; border-radius: 999px; color: var(--muted); background: #f5f5f6; font-size: 11px; font-style: normal; }
.style-choice.active .style-tag { background: #fff; }
@media (max-width: 1100px) { .draft-layout { grid-template-columns: 170px 220px minmax(0, 1fr); } }
@media (max-width: 850px) { .draft-layout { grid-template-columns: 1fr 1fr; } .draft-editor { grid-column: 1 / -1; min-height: auto; } }
@media (max-width: 600px) { .draft-layout { grid-template-columns: 1fr; } .draft-editor { grid-column: auto; } .draft-pipeline, .draft-pages { min-height: auto; } }

/* PPT 生成结果工作区 */
.preview-heading { align-items: center; }
.preview-actions { display: flex; align-items: center; gap: 10px; }
.preview-workspace { display: grid; grid-template-columns: 220px minmax(0, 1fr) 260px; gap: 16px; align-items: stretch; }
.preview-sidebar, .preview-stage, .preview-inspector { min-height: 680px; min-width: 0; /* 防止 grid 子项被内容撑破 */ }
/* 【2026-09-15】右栏里「根据反馈重新生成本页（30 积分）」这类长按钮，
   因为 .btn 全局 white-space: nowrap，会把宽度撑出卡片。
   这里对右栏内的按钮放开换行并占满宽度，文字居中。 */
.preview-inspector .btn { width: 100%; max-width: 100%; white-space: normal; text-align: center; line-height: 1.35; padding: 10px 14px; min-height: 42px; }
.preview-inspector .preview-note, .preview-inspector .preview-cta, .preview-inspector > * { max-width: 100%; }
.preview-sidebar, .preview-inspector { padding: 16px; }
.preview-sidebar-head, .preview-stage-top, .preview-stage-bottom { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.preview-sidebar-head { padding-bottom: 14px; border-bottom: 1px solid var(--line); }
.preview-sidebar-head span, .preview-stage-top > span:first-child { color: var(--muted); font-size: 12px; }
.preview-page-list { display: grid; gap: 9px; margin-top: 14px; max-height: 610px; overflow: auto; }
.preview-page-item { display: grid; grid-template-columns: 28px 58px 1fr; gap: 8px; align-items: center; padding: 8px; border: 1px solid transparent; border-radius: 9px; background: #fff; text-align: left; }
.preview-page-item:hover { background: var(--red-soft); }
.preview-page-item.active { border-color: #e5b7b8; background: var(--red-soft); }
.preview-page-num { color: var(--red); font-size: 11px; font-weight: 800; }
.preview-page-thumb { display: grid; place-items: center; aspect-ratio: 16 / 10; border-radius: 4px; color: var(--muted); background: #f0f1f2; font-size: 9px; }
.preview-page-thumb.cover { color: #fff; background: linear-gradient(145deg,var(--red-dark),var(--red)); }
.preview-page-item b { overflow: hidden; color: var(--ink); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.preview-stage { display: flex; flex-direction: column; padding: 18px; background: #fafafa; }
.status-pill { padding: 4px 9px; border-radius: 999px; font-size: 11px; font-weight: 700; }
.status-pill.generated { color: var(--success); background: #eef8f1; }
.large-slide { display: flex; flex: 1; flex-direction: column; justify-content: center; gap: 18px; min-height: 480px; margin: 18px 0; padding: 48px; border: 1px solid var(--line); border-radius: 5px; background: #fff; box-shadow: 0 16px 32px rgba(32,33,36,.1); }
.large-slide.cover { color: #fff; background: linear-gradient(145deg,var(--red-dark),var(--red)); }
.large-slide h2 { max-width: 82%; font-size: clamp(26px, 3vw, 42px); line-height: 1.2; }
.large-slide p { max-width: 78%; margin: 0; color: var(--muted); font-size: 17px; line-height: 1.75; white-space: pre-wrap; }
.large-slide.cover p { color: var(--gold-soft); }
.large-slide small { margin-top: auto; color: var(--muted-light); }
.large-slide.cover small { color: #eadcbf; }
.preview-inspector { display: grid; align-content: start; gap: 18px; }
.preview-meta { display: grid; gap: 5px; padding: 13px; border-radius: 10px; background: var(--red-soft); }
.preview-meta small { color: var(--muted); }
.preview-inspector textarea { min-height: 190px; }
@media (max-width: 1080px) { .preview-workspace { grid-template-columns: 190px minmax(0, 1fr); } .preview-inspector { grid-column: 1 / -1; min-height: auto; } }
@media (max-width: 680px) { .preview-workspace { grid-template-columns: 1fr; } .preview-sidebar { min-height: auto; } .preview-page-list { display: flex; max-height: none; overflow-x: auto; padding-bottom: 5px; } .preview-page-item { min-width: 150px; } .preview-stage { min-height: 520px; } .large-slide { min-height: 380px; padding: 24px; } .preview-actions { flex-wrap: wrap; justify-content: end; } }

/* BR-3 结构化 PPT 编辑器 */
.editor-heading { align-items: center; }
.editor-actions { display: flex; align-items: center; gap: 10px; }
.save-state { color: var(--success); font-size: 13px; font-weight: 700; }
/* 【2026-09-17 修复·编辑器右栏溢出】实测：三列布局下右栏固定 280px，而其内容最小宽度约 413px
   → 输入框/文本域超出卡片右边界，整个页面横向溢出 76px（1440 视口下 doc scrollWidth 1516）。
   两处根因：① 第三列宽度不够且不可收缩；② grid 子项默认 min-width:auto，被最宽的子内容顶开。
   修法：右栏给足宽度并允许收缩 + 子项 min-width:0 + 把降为两列的断点从 1100 提到 1280
   （1280 及以下三列会把中间画布挤到 334px，反而更难用）。 */
.editor-layout { display: grid; grid-template-columns: 250px minmax(0, 1fr) minmax(280px, 320px); gap: 18px; align-items: start; }
.editor-inspector { min-width: 0; }
.editor-inspector > * { min-width: 0; max-width: 100%; }
.editor-inspector input, .editor-inspector textarea, .editor-inspector select { width: 100%; min-width: 0; box-sizing: border-box; }
.editor-sidebar, .editor-stage, .editor-inspector { min-height: 620px; }
.editor-sidebar { padding: 16px; }
.editor-sidebar-head, .inspector-head, .editor-tabs, .editor-stage-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.editor-sidebar-head { padding: 4px 2px 14px; border-bottom: 1px solid var(--line); }
.btn-small { min-height: 32px; padding: 0 10px; font-size: 12px; }
.editor-project-switch { display: grid; gap: 6px; padding: 14px 0; }
.editor-project-switch label, .inspector-head span { color: var(--muted); font-size: 12px; }
.editor-project-switch select { width: 100%; padding: 9px; border: 1px solid var(--line-strong); border-radius: 8px; background: #fff; }
.slide-list { display: grid; gap: 8px; }
.slide-list-item { position: relative; display: grid; grid-template-columns: 30px minmax(0, 1fr) 18px; align-items: center; gap: 8px; padding: 10px; border: 1px solid transparent; border-radius: 10px; color: var(--ink); background: #fff; text-align: left; }
.slide-list-item:hover { background: var(--red-soft); }
.slide-list-item.active { border-color: #e7b7b9; background: var(--red-soft); }
.slide-number { color: var(--red); font-size: 12px; font-weight: 800; }
.slide-list-item b, .slide-list-item small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.slide-list-item b { font-size: 12px; }
.slide-list-item small { margin-top: 3px; color: var(--muted); font-size: 11px; }
.slide-list-item i { color: var(--muted-light); font-style: normal; text-align: center; }
.slide-list-item i:hover { color: var(--danger); }
.slide-list-item { cursor: grab; }
.slide-list-item.dragging { opacity: .5; cursor: grabbing; }
.slide-list-item.drag-over { border-color: #C4161C; background: var(--red-soft); box-shadow: inset 0 0 0 2px rgba(196,22,28,.35); }
.editor-stage { padding: 18px; background: #fafafa; }
.editor-tabs { padding-bottom: 14px; border-bottom: 1px solid var(--line); color: var(--muted); font-size: 13px; }
.editor-tabs .active { color: var(--red-dark); font-weight: 800; }
.editor-page-count { margin-left: auto; }
.editor-canvas { aspect-ratio: 16 / 9; display: flex; flex-direction: column; justify-content: center; gap: 18px; margin: 36px auto; padding: 48px; border: 1px solid var(--line); border-radius: 4px; background: #fff; box-shadow: 0 15px 35px rgba(33,20,20,.10); }
.editor-canvas.cover { color: #fff; background: linear-gradient(145deg, var(--red-dark), var(--red)); }
.editor-canvas h2 { max-width: 85%; font-size: clamp(22px, 3vw, 36px); line-height: 1.25; }
.editor-canvas p { max-width: 78%; margin: 0; color: var(--muted); font-size: 16px; line-height: 1.75; white-space: pre-wrap; }
.editor-canvas.cover p { color: var(--gold-soft); }
.editor-canvas small { margin-top: auto; color: var(--muted-light); }
.editor-canvas.cover small { color: #eadcbf; }
.editor-stage-toolbar { color: var(--muted); font-size: 12px; }
.editor-inspector { display: grid; align-content: start; gap: 18px; padding: 20px; }
.editor-inspector .field { gap: 8px; min-width: 0; }
.editor-inspector textarea { min-height: 220px; }
/* 编辑器右栏里允许换行：按钮文案较长（含积分与剩余次数），nowrap 会把右栏顶宽 */
.editor-inspector .btn { white-space: normal; max-width: 100%; line-height: 1.4; }
.editor-inspector .inspector-note { overflow-wrap: anywhere; }
.inspector-note { padding: 12px; border-radius: 9px; color: var(--muted); background: #faf7f2; font-size: 12px; line-height: 1.8; }
.editor-empty { display: grid; place-items: center; min-height: 420px; color: var(--muted); }
@media (max-width: 1280px) { .editor-layout { grid-template-columns: 220px minmax(0, 1fr); } .editor-inspector { grid-column: 1 / -1; min-height: auto; } }
@media (max-width: 760px) { .editor-layout { grid-template-columns: 1fr; } .editor-sidebar, .editor-stage { min-height: auto; } .editor-canvas { margin: 22px auto; padding: 24px; } .editor-actions { flex-wrap: wrap; justify-content: end; } }

/* ===== 模板市场（模板先行） ===== */
.template-hero { display: grid; grid-template-columns: minmax(0,1fr) 260px; gap: 28px; align-items: center; margin: 22px 0 18px; padding: 28px 30px; border-radius: 18px; color: #fff; background: linear-gradient(135deg, #8d0f14 0%, #c4161c 55%, #e6b95c 130%); box-shadow: 0 18px 40px rgba(141,15,20,.22); }
.template-hero h2 { margin: 6px 0 8px; font-size: 24px; }
.template-hero p { margin: 0; opacity: .88; font-size: 14px; line-height: 1.8; }
.template-hero .eyebrow { color: rgba(255,255,255,.72); }
.template-hero-preview { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.template-hero-preview span { display: block; height: 88px; border-radius: 10px; background: rgba(255,255,255,.16); border: 1px solid rgba(255,255,255,.35); box-shadow: inset 0 0 0 6px rgba(255,255,255,.08); }
.template-filter { display: flex; flex-wrap: wrap; gap: 10px; margin: 6px 0 18px; }
.template-filter-hint{margin:8px 0 0;font-size:12px;color:var(--text-3,#8a8f98);letter-spacing:.2px}
.filter-chip { padding: 8px 18px; border-radius: 999px; border: 1px solid #e6d9cf; background: #fff; color: var(--muted); font-size: 13px; cursor: pointer; transition: all .2s ease; }
.filter-chip:hover { border-color: var(--red); color: var(--red); }
.filter-chip.active { background: linear-gradient(135deg, var(--red), #c4161c); border-color: transparent; color: #fff; box-shadow: 0 8px 18px rgba(196,22,28,.25); }
.template-market-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; margin-bottom: 22px; }
.template-market-card { border-radius: 16px; background: #fff; border: 2px solid transparent; box-shadow: 0 10px 28px rgba(80, 30, 20, .08); overflow: hidden; transition: all .22s ease; }
.template-market-card:hover { transform: translateY(-3px); box-shadow: 0 16px 36px rgba(80, 30, 20, .14); }
.template-market-card.selected { border-color: var(--red); box-shadow: 0 16px 38px rgba(196,22,28,.18); }
.template-select-area { display: block; width: 100%; padding: 0; border: 0; background: none; text-align: left; cursor: pointer; }
.template-pages { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; padding: 14px 14px 0; }
.mini-page { position: relative; aspect-ratio: 16 / 9; border-radius: 8px; color: #fff; padding: 0; display: flex; flex-direction: column; justify-content: flex-end; overflow: hidden; background: var(--line); cursor: pointer; transition: transform .2s ease, box-shadow .2s ease; }
.mini-page:hover { transform: translateY(-2px); box-shadow: 0 8px 18px rgba(80,30,20,.18); }
.mini-page-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; background: #f6f1ec; }
.mini-page.has-image .mini-page-img { display: block; }
.mini-page:not(.has-image) .mini-page-img { display: none; }
.mini-page-meta { position: relative; z-index: 1; padding: 6px 8px; background: linear-gradient(180deg, rgba(0,0,0,0), rgba(0,0,0,.55)); color: #fff; }
.mini-page small { font-size: 10px; opacity: .85; letter-spacing: 1px; }
.mini-page b { font-size: 11px; font-weight: 600; line-height: 1.3; }
.mini-page:not(.has-image) { background: linear-gradient(145deg, var(--red), #c4161c 60%, #e6b95c); }
.mini-page:not(.has-image) .mini-page-meta { padding: 8px; }

/* 模板大图查看器 */
.template-lightbox { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; background: rgba(20,8,6,.78); padding: 30px; opacity: 0; pointer-events: none; transition: opacity .2s ease; }
.template-lightbox.is-open { opacity: 1; pointer-events: auto; }
.template-lightbox-card { position: relative; max-width: min(960px, 92vw); width: 100%; }
.template-lightbox-card img { display: block; width: 100%; border-radius: 16px; background: #000; box-shadow: 0 30px 60px rgba(0,0,0,.4); }
.template-lightbox-meta { display: flex; align-items: center; justify-content: space-between; margin-top: 14px; color: #fff; }
.template-lightbox-meta b { font-size: 15px; }
.template-lightbox-meta small { color: rgba(255,255,255,.7); font-size: 12px; }
.template-lightbox-close { position: absolute; top: -16px; right: -16px; width: 36px; height: 36px; border-radius: 50%; background: #fff; color: #8d0f14; border: 0; cursor: pointer; font-size: 18px; box-shadow: 0 8px 20px rgba(0,0,0,.3); }
.template-card-info { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; padding: 14px 16px 8px; }
.template-card-info h3 { margin: 0 0 6px; font-size: 16px; color: var(--ink); }
.template-card-info p { margin: 0; font-size: 12.5px; color: var(--muted); line-height: 1.7; }
.template-open, .template-selected { flex-shrink: 0; padding: 5px 14px; border-radius: 999px; font-size: 12px; }
.template-open { border: 1px solid #e0d5cc; color: var(--muted); }
.template-selected { background: linear-gradient(135deg, var(--red), #c4161c); color: #fff; }
.template-tags { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 16px 14px; }
.template-tags i { font-style: normal; font-size: 11px; padding: 3px 10px; border-radius: 999px; background: #faf3ee; color: #a0522d; }
.template-footer { display: flex; justify-content: space-between; align-items: center; gap: 18px; padding: 18px 22px; position: sticky; bottom: 16px; }
.template-footer strong { display: block; font-size: 15px; margin-bottom: 4px; }
.template-footer span { font-size: 12.5px; color: var(--muted); }
.template-footer-actions { display: flex; gap: 12px; flex-shrink: 0; }
.generation-rule { display: flex; flex-direction: column; gap: 6px; padding: 16px 18px; border-radius: 12px; background: #faf3ee; border: 1px dashed #e3c9b8; margin-bottom: 16px; }
.generation-rule b { color: var(--red); }
.generation-rule span { font-size: 13px; color: var(--muted); }
@media (max-width: 900px) { .template-hero { grid-template-columns: 1fr; } .template-hero-preview { display: none; } .template-footer { flex-direction: column; align-items: stretch; } .template-footer-actions { justify-content: flex-end; } }

/* ===== 预览工作区 · 样稿确认操作栏 ===== */
.preview-cta { display: flex; justify-content: space-between; align-items: center; gap: 18px; margin-top: 18px; padding: 18px 24px; border: 1px solid #f0ddd2; background: linear-gradient(135deg, #fffaf5 0%, #fdf1e8 100%); box-shadow: 0 14px 34px rgba(141, 15, 20, .10); }
.preview-cta-text strong { display: block; font-size: 16px; color: var(--ink); margin-bottom: 4px; }
.preview-cta-text span { font-size: 13px; color: var(--muted); line-height: 1.7; }
.preview-cta-actions { display: flex; gap: 12px; flex-shrink: 0; }
.sample-chip { background: #faf3ee; color: #a0522d; border: 1px dashed #e3c9b8; }
@media (max-width: 900px) { .preview-cta { flex-direction: column; align-items: stretch; } .preview-cta-actions { justify-content: flex-end; } }

/* ===== 一玄式逐页生成任务状态 ===== */
.generating-heading-meta { display: flex; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.generation-overview { margin: 20px 0; padding: 22px 24px; }
.generation-overview-top { display: flex; justify-content: space-between; align-items: center; gap: 16px; }
.generation-overview-top strong { display: block; font-size: 17px; margin-bottom: 5px; }
.generation-overview-top span { color: var(--muted); font-size: 13px; }
.generation-overview-top > b { color: var(--red); font-size: 30px; }
.generation-overview .progress-track { height: 10px; margin: 18px 0 12px; }
.generation-stats { display: flex; gap: 26px; flex-wrap: wrap; color: var(--muted); font-size: 12px; }
.generation-stats b { color: var(--ink); font-size: 14px; }
.generation-layout { display: grid; grid-template-columns: minmax(0, 1.18fr) minmax(300px, .82fr); gap: 20px; align-items: start; }
.generation-stage-card, .generation-current-card { padding: 20px; }
.generation-card-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 16px; }
.generation-card-head strong { display: block; font-size: 16px; margin-bottom: 5px; }
.generation-card-head span:not(.status-pill) { display: block; color: var(--muted); font-size: 12px; line-height: 1.6; }
.generation-page-list { display: flex; flex-direction: column; gap: 8px; max-height: 560px; overflow: auto; padding-right: 4px; }
.generation-page-row { display: grid; grid-template-columns: 28px 68px minmax(0,1fr) auto; align-items: center; gap: 12px; min-height: 76px; padding: 9px 10px; border: 1px solid #eee5de; border-radius: 12px; background: #fff; transition: all .2s ease; }
.generation-page-row.current { border-color: #df9d8f; background: #fff8f4; box-shadow: 0 5px 14px rgba(196,22,28,.08); }
.generation-page-row.completed { background: #fffdfb; }
.generation-page-row.failed { border-color: #e4a2a2; background: #fff3f3; }
.generation-page-num { color: #b2a39a; font-size: 12px; font-weight: 700; }
.generation-page-thumb { display: grid; place-items: center; height: 56px; border-radius: 8px; color: #aa978a; background: linear-gradient(145deg, #f3ebe5, #e8ddd5); font-size: 22px; overflow: hidden; }
.generation-page-thumb img { width: 100%; height: 100%; object-fit: cover; border-radius: 8px; display: block; }

/* ===== 页面内弹窗（替代原生 confirm/alert，避免被浏览器"阻止更多对话框"拦截） ===== */
.ui-dialog-overlay { position: fixed; inset: 0; z-index: 90; display: none; align-items: center; justify-content: center; background: rgba(24,16,14,.45); backdrop-filter: blur(3px); }
.ui-dialog-overlay.is-open { display: flex; }
.ui-dialog-card { width: min(420px, calc(100vw - 48px)); padding: 24px 26px 20px; border-radius: 16px; background: #fff; box-shadow: 0 24px 64px rgba(32,20,16,.28); animation: uiDialogIn .18s ease; }
@keyframes uiDialogIn { from { opacity: 0; transform: translateY(14px) scale(.97); } to { opacity: 1; transform: none; } }
.ui-dialog-title { display: block; font-size: 17px; font-weight: 700; color: var(--ink); }
.ui-dialog-message { margin: 12px 0 20px; font-size: 14px; line-height: 1.7; color: #53565c; white-space: pre-wrap; word-break: break-word; }
.ui-dialog-actions { display: flex; justify-content: flex-end; gap: 10px; }
/* 三选一弹窗（扣费确认 + 「先去备赛工具箱」这类额外出口）。
   【易错点】不能只靠 flex-wrap：三个按钮在 420px 宽的卡片里正好差几个像素放不下，
   "取消"会被挤到第二行、旁边留一块空白，看起来很像是布局坏了。
   所以这里让按钮组自己均分宽度并允许文字收缩，保证始终一行。 */
.ui-dialog-actions { flex-wrap: wrap; row-gap: 8px; }
.ui-dialog-actions .btn { min-width: 0; }
.ui-dialog-actions .btn-small { padding: 6px 12px; font-size: 13px; white-space: nowrap; }
/* 按钮数 ≥3 时：整体等宽铺满，视觉上是一组并列选项而不是"主按钮 + 零散挂件"。
   用显式类而不是 :has()，兼容性更稳，也不依赖 DOM 计数。 */
/* 【排版注意｜2026-09-13】这里不要用"均分宽度"（flex:1 1 0）：
   三个按钮的文案长度差异很大（「确认生成」4 字 vs「先去备赛工具箱（零积分）」12 字），
   均分会让中间那个被压到截断。改成按内容自适应宽度：
   - 主按钮给一点额外内边距，视觉权重最高
   - 次要按钮按文案撑开，允许收缩但优先保持不换行
   配合下面的卡片加宽，三个按钮在 ≥520px 都能一行放下；
   更窄时竖排（见 media query），竖排反序让主按钮落在最下方、贴近拇指。 */
.ui-dialog-actions.is-multi { justify-content: center; }
.ui-dialog-actions.is-multi > button {
  flex: 0 1 auto;
  white-space: nowrap;
  padding-left: 14px;
  padding-right: 14px;
}
.ui-dialog-actions.is-multi > button.btn-primary { flex: 0 0 auto; }
/* 三个按钮需要更多横向空间，否则文案会被压到换行 */
.ui-dialog-card:has(.ui-dialog-actions.is-multi) { width: min(560px, calc(100vw - 40px)); }
@media (max-width: 560px) {
  .ui-dialog-actions.is-multi { flex-direction: column-reverse; }
  .ui-dialog-actions.is-multi > button { width: 100%; }
}
.ui-dialog-card .field { margin: 14px 0 20px; }
.ui-dialog-card .field label { display: block; margin-bottom: 8px; font-size: 13px; color: var(--muted); }
.ui-dialog-input { width: 100%; min-height: 42px; padding: 0 12px; border: 1px solid var(--line); border-radius: 10px; background: #fff; color: var(--ink); font-size: 14px; box-sizing: border-box; }
.ui-dialog-input:focus { outline: none; border-color: var(--red); box-shadow: 0 0 0 3px rgba(196,22,28,.08); }

/* 我的项目：项目卡片墙，一个项目 = 一个工作区 */
.workspace-current { margin-bottom: 22px; }
.workspace-current .eyebrow { display: block; margin-bottom: 6px; }
.workspace-current h2 { margin: 0 0 8px; font-size: 22px; }
.workspace-current p { margin: 0; color: var(--muted); font-size: 13px; line-height: 1.75; }
.workspace-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.workspace-card { display: flex; flex-direction: column; gap: 12px; }
.workspace-card-active { border-color: var(--red); box-shadow: 0 10px 30px rgba(196,22,28,.10); }
.workspace-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.workspace-card-title { min-width: 0; }
.workspace-card-title h2 { margin: 0 0 6px; font-size: 17px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.workspace-card-title small { color: var(--muted-light); font-size: 12px; }
.workspace-badge { flex: 0 0 auto; padding: 4px 10px; border-radius: 999px; background: var(--red-soft); color: var(--red-dark); font-size: 11px; font-weight: 700; }
.workspace-progress { height: 6px; border-radius: 999px; background: var(--red-soft); overflow: hidden; }
.workspace-progress-bar { height: 100%; border-radius: 999px; background: var(--red); transition: width .3s ease; }
.workspace-progress-text { display: flex; justify-content: space-between; color: var(--muted-light); font-size: 12px; }
.workspace-features { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.workspace-feature { display: block; min-width: 0; padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; background: #fff; text-decoration: none; cursor: pointer; }
.workspace-feature:hover { border-color: var(--red); background: var(--red-soft); }
.workspace-feature b { display: block; color: var(--ink); font-size: 13px; }
.workspace-feature small { display: block; margin-top: 4px; color: var(--muted-light); font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.workspace-feature.done { border-color: #cfe6d8; background: #f3faf5; }
.workspace-feature.done b { color: #2f6b47; }
.workspace-feature.done small { color: #5f9b78; }
.workspace-card-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: auto; padding-top: 4px; }
@media (max-width: 1080px) { .workspace-grid { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 720px) { .workspace-features { grid-template-columns: minmax(0, 1fr); } }

/* ===== 产品选择器（工作台：A.PPT / B.计划书 / C.评审，可多选也可单选）===== */
.deliverable-board { margin-bottom: 8px; }
.deliverable-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-top: 4px; }
.deliverable { display: flex; flex-direction: column; gap: 10px; min-width: 0; padding: 16px 16px 14px; border: 1px solid var(--line); border-radius: 12px; background: #fff; transition: border-color .2s ease, box-shadow .2s ease; }
.deliverable:hover { border-color: var(--red); box-shadow: 0 8px 22px rgba(196,22,28,.08); }
.deliverable.is-done { border-color: #cfe6d8; background: #f7fcf9; }
.deliverable.is-blocked { opacity: .72; }
.deliverable.is-blocked:hover { border-color: var(--line); box-shadow: none; }
/* 勾选行做成整块可点，避免只能精准点到小方框 */
.deliverable-pick { display: flex; align-items: center; gap: 8px; cursor: pointer; }
.deliverable-pick input { flex: 0 0 auto; width: 16px; height: 16px; accent-color: var(--red); cursor: pointer; }
.deliverable-pick input:disabled { cursor: not-allowed; }
.deliverable-code { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 6px; background: var(--red-soft); color: var(--red-dark); font-size: 12px; font-weight: 700; }
.deliverable-name { min-width: 0; color: var(--ink); font-size: 15px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.deliverable-lead { margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.7; }
.deliverable-status { display: flex; align-items: baseline; gap: 8px; padding: 8px 10px; border-radius: 9px; background: #faf8f6; }
.deliverable-status i { flex: 0 0 auto; font-size: 11px; font-style: normal; font-weight: 700; color: var(--muted-light); }
.deliverable-status b { min-width: 0; color: var(--ink); font-size: 12px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.deliverable-status.is-ready { background: var(--red-soft); }
.deliverable-status.is-ready i { color: var(--red-dark); }
.deliverable-status.is-done { background: #eef8f2; }
.deliverable-status.is-done i, .deliverable-status.is-done b { color: #2f6b47; }
/* 联动说明：告诉用户"后做的会用到先做的什么"，这是"产品可拆分"的关键说服点 */
.deliverable-borrow { margin: 0; padding: 0 0 0 16px; list-style: none; }
.deliverable-borrow li { position: relative; color: var(--muted-light); font-size: 11.5px; line-height: 1.65; }
.deliverable-borrow li + li { margin-top: 3px; }
.deliverable-borrow li::before { content: '↳'; position: absolute; left: -15px; color: var(--red); font-size: 11px; }
.deliverable-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: auto; padding-top: 10px; border-top: 1px dashed var(--line); }
.deliverable-price { min-width: 0; color: var(--muted-light); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.deliverable-open { flex: 0 0 auto; padding: 5px 12px; border: 1px solid var(--line); border-radius: 999px; color: var(--ink); font-size: 12px; text-decoration: none; cursor: pointer; }
.deliverable-open:hover { border-color: var(--red); background: var(--red-soft); color: var(--red-dark); }
@media (max-width: 1080px) { .deliverable-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 720px) { .deliverable-grid { grid-template-columns: minmax(0, 1fr); } }

/* 项目卡片上的三件可交付物一行条 */
.deliverable-strip { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.deliverable-chip { display: flex; align-items: center; gap: 6px; min-width: 0; padding: 8px 10px; border: 1px solid var(--line); border-radius: 9px; background: #fff; text-decoration: none; cursor: pointer; }
.deliverable-chip:hover { border-color: var(--red); background: var(--red-soft); }
.deliverable-chip i { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 17px; height: 17px; border-radius: 5px; background: var(--red-soft); color: var(--red-dark); font-size: 11px; font-style: normal; font-weight: 700; }
.deliverable-chip b { min-width: 0; color: var(--ink); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.deliverable-chip span { flex: 0 0 auto; margin-left: auto; color: var(--muted-light); font-size: 11px; }
.deliverable-chip.is-ready i { background: var(--red); color: #fff; }
.deliverable-chip.is-done { border-color: #cfe6d8; background: #f3faf5; }
.deliverable-chip.is-done i { background: #d9efe3; color: #2f6b47; }
.deliverable-chip.is-done b { color: #2f6b47; }
.deliverable-chip.is-done span { color: #5f9b78; }
.deliverable-chip.is-blocked { opacity: .7; }
.deliverable-chip.is-blocked:hover { border-color: var(--line); background: #fff; }
@media (max-width: 720px) { .deliverable-strip { grid-template-columns: minmax(0, 1fr); } }

/* 提示条里的行动按钮：提示"去补某样内容"时给一条明确的路，而不是让用户自己找菜单 */
.qb-notice-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 10px; }
.qb-notice-actions span { color: var(--muted-light); font-size: 11.5px; }

/* 从 PPT 生成完成页跳来评审时的"等你确认"高亮：提示"材料备好了，点我才扣费"。
   只做呼吸式描边，不做闪烁，避免在表单密集的页面里显得吵。 */
.btn.is-pending { animation: pendingPulse 2s ease-in-out infinite; }
@keyframes pendingPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(196,22,28,.42); }
  50% { box-shadow: 0 0 0 7px rgba(196,22,28,0); }
}
@media (prefers-reduced-motion: reduce) { .btn.is-pending { animation: none; box-shadow: 0 0 0 3px rgba(196,22,28,.18); } }

/* 有真实生成图的容器：去掉内边距按 16:9 完整显示，不再用 cover 裁切 */
.large-slide.has-image, .editor-canvas.has-image, .generation-current-preview.has-image { padding: 0; min-height: 0; display: block; overflow: hidden; background: #16100e; }
.large-slide.has-image { border: none; box-shadow: 0 16px 32px rgba(32,33,36,.1); flex: 0 0 auto; }
.editor-canvas.has-image { margin: 36px auto; border: none; }
.slide-full-img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: contain; }
/* 赛事 Logo 叠加层（2026-09-17）：AI 画的 logo/校徽往往不准，改为用户在预览与导出时确定性叠加。
   .slide-media 与图片同为 16:9，保证叠加位置与导出结果一致（图片是 contain，容器必须同比例才不会错位）。 */
.slide-media { position: relative; width: 100%; aspect-ratio: 16 / 9; }
.slide-media .slide-full-img { width: 100%; height: 100%; }
.slide-logo { position: absolute; object-fit: contain; pointer-events: none; }
.slide-logo.is-top-left { top: 3%; left: 2.5%; }
.slide-logo.is-top-center { top: 3%; left: 50%; transform: translateX(-50%); }
.slide-logo.is-top-right { top: 3%; right: 2.5%; }
.slide-logo.is-bottom-left { bottom: 4%; left: 2.5%; }
.slide-logo.is-bottom-right { bottom: 4%; right: 2.5%; }
.logo-row { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.logo-thumb { width: 84px; height: 46px; flex: none; display: flex; align-items: center; justify-content: center; border: 1px solid var(--line); border-radius: 8px; background: #fff; overflow: hidden; }
.logo-thumb img { width: 100%; height: 100%; object-fit: contain; }
.logo-hint { display: block; margin-top: 8px; color: var(--muted-light); font-size: 11px; line-height: 1.6; }
/* 内置赛事 Logo 库（2026-09-17）：素材放在 assets/competition-logos/，用户点选即用，不用自己去找 */
.logo-library { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line); }
.logo-library[hidden] { display: none; }
.logo-library-label { display: block; margin-bottom: 8px; color: var(--muted); font-size: 12px; }
.logo-library-items { display: flex; flex-wrap: wrap; gap: 8px; }
.logo-library-item { width: 76px; height: 44px; padding: 4px; display: flex; align-items: center; justify-content: center; border: 1px solid var(--line); border-radius: 8px; background: #fff; cursor: pointer; overflow: hidden; }
.logo-library-item:hover { border-color: var(--red); box-shadow: 0 4px 12px rgba(196,22,28,.12); }
.logo-library-item img { /* 【09-22 修复】grid+place-items 下 max-height:100% 不生效，方图(职规赛.png 400×400)溢出按钮压住下一行；改显式尺寸+contain+外层裁切 */ width: 100%; height: 100%; object-fit: contain; }
/* 服务端"改了没重启"提示条（2026-09-17）：避免用户反复遇到"功能没反应" */
.server-restart-banner { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin: 0 0 16px; padding: 12px 16px; border: 1px solid #f0c9a0; border-left: 4px solid #e08a2e; border-radius: 10px; background: #fff8ee; }
.server-restart-banner b { display: block; margin-bottom: 3px; color: #8a4b00; font-size: 13px; }
.server-restart-banner span { color: #7a5a33; font-size: 12px; line-height: 1.6; }
.server-restart-banner .btn { flex: none; }

/* 免费样稿：占位图上压一条角标，明确"这是模板版式示意，不是最终视觉" */
.large-slide.has-image { position: relative; }
.slide-placeholder-tag { position: absolute; top: 14px; left: 14px; z-index: 2; padding: 6px 12px; border-radius: 999px; background: rgba(24,16,12,.72); color: #f4e3c2; font-size: 12.5px; letter-spacing: .02em; backdrop-filter: blur(2px); }

/* 预览工作区批量生成状态条 */
.preview-gen-status { display: flex; align-items: center; gap: 12px; margin: 0 0 16px; padding: 14px 18px; border-radius: 12px; background: #fff7ed; border: 1px solid #f5d9ae; color: #8a5a12; font-size: 14px; }
.preview-gen-status .gen-spinner { width: 16px; height: 16px; border-radius: 50%; border: 2px solid #e8c98a; border-top-color: #c4161c; animation: genSpin 0.9s linear infinite; }
@keyframes genSpin { to { transform: rotate(360deg); } }
.preview-gen-status b { color: #c4161c; }
.generation-page-thumb.cover { color: #fff; background: linear-gradient(145deg, #8d0f14, #c4161c 60%, #e6b95c); }
.generation-page-row.generating .generation-page-thumb { color: var(--red); background: #fff0ea; }
.generation-page-info { min-width: 0; }
.generation-page-info strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink); font-size: 13px; }
.generation-page-info small { display: block; margin-top: 4px; color: var(--muted); font-size: 11px; }
.generation-row-progress { height: 4px; margin-top: 8px; overflow: hidden; border-radius: 999px; background: #eee8e3; }
.generation-row-progress i { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--red), var(--gold)); transition: width .3s ease; }
.generation-page-status { min-width: 82px; color: var(--muted); font-size: 11px; text-align: right; }
.generation-page-row.completed .generation-page-status { color: #5e9270; }
.generation-page-row.generating .generation-page-status { color: var(--red); font-weight: 700; }
.generation-current-card { position: sticky; top: 18px; }
.generation-current-preview { min-height: 258px; display: flex; flex-direction: column; justify-content: center; padding: 24px; border-radius: 14px; color: #fff; background: linear-gradient(145deg, #f1e8e1, #dacdc3); box-shadow: inset 0 0 0 1px rgba(255,255,255,.35); }
.generation-current-preview.cover { background: linear-gradient(145deg, #8d0f14 0%, #c4161c 56%, #e6b95c 120%); }
.generation-current-preview .eyebrow { color: rgba(255,255,255,.75); }
.generation-current-preview h2 { max-width: 90%; margin: 10px 0; font-size: 25px; line-height: 1.25; }
.generation-current-preview p { max-width: 90%; margin: 0 0 20px; color: rgba(255,255,255,.84); font-size: 13px; line-height: 1.8; }
.generation-current-preview small { color: rgba(255,255,255,.72); font-size: 11px; }
.generation-current-detail { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 14px; }
.generation-current-detail > div { padding: 12px; border-radius: 10px; background: #faf6f2; }
.generation-current-detail span, .generation-current-detail b { display: block; }
.generation-current-detail span { margin-bottom: 5px; color: var(--muted); font-size: 11px; }
.generation-current-detail b { color: var(--ink); font-size: 13px; }
.generation-note { margin-top: 18px; }
@media (max-width: 900px) { .generating-heading-meta { justify-content: flex-start; } .generation-layout { grid-template-columns: 1fr; } .generation-current-card { position: static; } }
@media (max-width: 620px) { .generation-page-row { grid-template-columns: 24px 54px minmax(0,1fr); gap: 8px; } .generation-page-thumb { height: 48px; } .generation-page-status { grid-column: 3; text-align: left; } .generation-stats { gap: 12px; } }

/* ===== 编辑器单页重生成费用确认 ===== */
.editor-regenerate-button { width: 100%; margin-top: 4px; }
.editor-regenerate-modal[hidden] { display: none; }
.editor-regenerate-modal { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: 24px; }
.editor-regenerate-backdrop { position: absolute; inset: 0; background: rgba(35, 21, 18, .42); backdrop-filter: blur(3px); }
.editor-regenerate-dialog { position: relative; z-index: 1; width: min(520px, 100%); padding: 28px; box-shadow: 0 24px 70px rgba(35, 21, 18, .24); }
.editor-modal-close { position: absolute; top: 16px; right: 18px; width: 32px; height: 32px; border: 0; border-radius: 50%; background: #faf3ee; color: var(--muted); font-size: 22px; line-height: 1; cursor: pointer; }
.editor-regenerate-dialog h2 { margin: 7px 0 8px; font-size: 22px; color: var(--ink); }
.modal-lead { margin: 0 0 20px; color: var(--muted); font-size: 13px; line-height: 1.7; }
.modal-summary { display: grid; gap: 1px; margin: 16px 0; overflow: hidden; border: 1px solid #eee3db; border-radius: 12px; background: #eee3db; }
.modal-summary > div { display: flex; justify-content: space-between; align-items: center; gap: 18px; padding: 13px 15px; background: #fffdfa; }
.modal-summary span, .modal-feedback > span { color: var(--muted); font-size: 12px; }
.modal-summary strong { color: var(--ink); font-size: 13px; text-align: right; }
.modal-summary .modal-price { color: var(--red); font-size: 19px; }
.modal-feedback { padding: 14px 15px; border-radius: 11px; background: #faf3ee; }
.modal-feedback p { margin: 7px 0 0; color: var(--ink); font-size: 13px; line-height: 1.7; word-break: break-word; }
.editor-modal-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 22px; }
@media (max-width: 560px) { .editor-regenerate-modal { padding: 14px; } .editor-regenerate-dialog { padding: 23px 18px 18px; } .modal-summary > div { align-items: flex-start; flex-direction: column; gap: 4px; } .modal-summary strong { text-align: left; } .editor-modal-actions { flex-direction: column-reverse; } .editor-modal-actions .btn { width: 100%; } }

/* ===== 比赛日历详情 ===== */
.calendar-detail { display: grid; grid-template-columns: 250px minmax(0, 1fr); gap: 24px; padding: 24px; }
.calendar-detail-count { padding: 24px; border-radius: 14px; background: linear-gradient(145deg, #8d0f14, #c4161c 62%, #e6b95c); color: #fff; }
.calendar-detail-count strong, .calendar-detail-count span, .calendar-detail-count small { display: block; }
.calendar-detail-count strong { font-size: 54px; line-height: 1; }
.calendar-detail-count span { margin-top: 10px; font-size: 14px; }
.calendar-detail-count small { margin-top: 28px; color: rgba(255,255,255,.76); line-height: 1.7; }
.calendar-detail-list { display: grid; gap: 10px; }
.calendar-detail-item { display: grid; grid-template-columns: 1fr auto; gap: 4px 18px; padding: 16px 18px; border: 1px solid #eee3db; border-radius: 12px; background: #fffdfa; }
.calendar-detail-item.current { border-color: #e6a196; background: #fff7f2; }
.calendar-detail-item b { color: var(--ink); }
/* 比赛日历 · 自定义管理 */
.calendar-detail-item.past { opacity: .58; }
.calendar-detail-item.past b { color: var(--muted); }
.calendar-category-tag { display: inline-block; margin-left: 10px; padding: 1px 9px; border-radius: 999px; background: var(--red-soft); color: var(--red-dark); font-size: 12px; font-style: normal; font-weight: 700; vertical-align: 1px; }
.calendar-item-actions { grid-column: 1 / -1; display: flex; gap: 8px; margin-top: 6px; }
.calendar-form-card { margin-top: 18px; }
.calendar-form-card .form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.calendar-form-hint { color: var(--muted); align-self: center; }
@media(max-width:700px){ .calendar-form-card .form-grid { grid-template-columns: 1fr; } }
.calendar-detail-item span { color: var(--red); font-size: 13px; font-weight: 700; }
.calendar-detail-item small { grid-column: 1 / -1; color: var(--muted); font-size: 12px; }
@media (max-width: 700px) { .calendar-detail { grid-template-columns: 1fr; } }

/* ===== 快速生成：内容输入工作区 ===== */
.quick-setup { margin-bottom: 16px; }
.quick-versions { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.quick-version { display: grid; gap: 4px; text-align: left; padding: 14px 16px; border-radius: 12px; border: 1px solid var(--line); background: rgba(255,255,255,.7); cursor: pointer; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; }
.quick-version:hover { border-color: #e5b7b8; }
.quick-version.active { border-color: var(--red); background: #fff7f2; box-shadow: 0 0 0 3px var(--red-soft); }
.quick-version b { font-size: 15px; color: var(--ink); }
.quick-version small { color: var(--muted); font-size: 12px; }
.quick-duration { margin-top: 18px; padding-top: 16px; border-top: 1px dashed var(--line); }
.quick-duration > label { display: block; font-weight: 700; color: var(--ink); margin-bottom: 10px; }
.quick-duration-options { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.quick-duration-btn { display: grid; gap: 2px; text-align: left; padding: 12px 14px; border-radius: 10px; border: 1px solid var(--line); background: rgba(255,255,255,.7); cursor: pointer; font-size: 14px; color: var(--ink); font-weight: 700; transition: border-color .2s ease, box-shadow .2s ease, background .2s ease; }
.quick-duration-btn:hover { border-color: #e5b7b8; }
.quick-duration-btn.active { border-color: var(--red); background: #fff7f2; box-shadow: 0 0 0 3px var(--red-soft); }
.quick-duration-btn small { color: var(--muted); font-size: 11px; font-weight: 400; }
.quick-duration > small { display: block; margin-top: 10px; color: var(--muted); font-size: 12px; }
.quick-layout { display: grid; grid-template-columns: 250px minmax(0, 1fr); gap: 16px; align-items: start; }
.quick-pages { min-height: 680px; padding: 18px 16px; }
.quick-editor { min-height: 680px; padding: 22px; }
.quick-image-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.quick-reference-confirmed { display: flex; align-items: center; gap: 12px; width: 100%; padding: 10px 12px; border: 1px solid #b8dfc1; border-radius: 10px; background: #f2fbf4; }
.quick-reference-preview { width: 112px; height: 63px; flex: 0 0 auto; object-fit: cover; border-radius: 7px; border: 1px solid #c8ddcc; background: #fff; }
.quick-reference-copy { display: grid; gap: 3px; min-width: 0; flex: 1; }
.quick-reference-copy strong { color: #24743c; font-size: 13px; }
.quick-reference-copy span { overflow: hidden; color: var(--ink); font-size: 13px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.quick-reference-copy small { color: #5e8067; font-size: 12px; }
.quick-reference-empty { display: grid; gap: 3px; align-content: center; min-height: 50px; color: var(--muted); }
.quick-reference-empty span { color: var(--ink); font-size: 13px; font-weight: 700; }
.quick-reference-empty small { font-size: 12px; }
.quick-result.is-generating { border-color: #e9c98f; background: #fffaf0; }
.quick-generating-card { display: grid; justify-items: center; gap: 8px; padding: 28px 18px; text-align: center; }
.quick-generating-card strong { color: var(--red-dark); font-size: 16px; }
.quick-generating-card span, .quick-generating-card small { color: var(--muted); font-size: 12.5px; line-height: 1.6; }
.quick-spinner { width: 28px; height: 28px; border: 3px solid #f2d7c8; border-top-color: var(--red); border-radius: 50%; animation: quick-spin .9s linear infinite; }
.quick-result-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; color: var(--ink); font-size: 13px; }
.quick-result-error { display: block; margin-top: 8px; color: var(--red); font-size: 12px; line-height: 1.5; }
@keyframes quick-spin { to { transform: rotate(360deg); } }
@media(max-width:620px){ .quick-reference-confirmed { align-items: flex-start; flex-wrap: wrap; } .quick-reference-confirmed .btn { margin-left: 124px; } }
.quick-upload-status { color: var(--muted); font-size: 12.5px; }
.quick-upload-status.is-reading { color: var(--red-dark); font-weight: 700; }
.quick-ai-banner { display: flex; align-items: center; gap: 12px; min-height: 56px; margin: 0 0 14px; padding: 10px 16px; border: 1px solid #efd0a0; border-radius: 12px; background: linear-gradient(100deg, #fff8e9, #fff2e7); box-shadow: 0 5px 16px rgba(153, 76, 22, .1); color: var(--ink); }
.quick-ai-banner-mark { display: grid; place-items: center; width: 26px; height: 26px; flex: 0 0 auto; border-radius: 50%; background: var(--red); color: #fff; font-size: 14px; font-weight: 800; }
.quick-ai-banner-copy { display: grid; gap: 3px; min-width: 0; }
.quick-ai-banner-copy strong { color: var(--red-dark); font-size: 14px; }
.quick-ai-banner-copy small { color: #795f50; font-size: 12.5px; line-height: 1.5; }
.quick-ai-banner.generating { border-color: #e9a18e; background: linear-gradient(100deg, #fff2ee, #fff8e8); animation: quick-banner-pulse 1.8s ease-in-out infinite; }
.quick-ai-banner.generating .quick-ai-banner-mark { animation: quick-banner-dot 1s ease-in-out infinite; }
.quick-ai-banner.success { border-color: #aad7b4; background: linear-gradient(100deg, #f0fbf2, #fffdf1); }
.quick-ai-banner.success .quick-ai-banner-mark { background: #2f914a; }
.quick-ai-banner.error { border-color: #e4a4a4; background: #fff1f1; }
.quick-ai-banner.error .quick-ai-banner-mark { background: #b3131b; }
.quick-upload-status.success { color: #278045; font-weight: 700; }
@keyframes quick-banner-pulse { 50% { box-shadow: 0 5px 24px rgba(183, 54, 29, .2); } }
@keyframes quick-banner-dot { 50% { opacity: .4; transform: scale(.82); } }
.quick-image-thumb { width: 88px; height: 50px; object-fit: cover; border-radius: 6px; border: 1px solid var(--line); }
.quick-item-thumb { display: block; width: 100%; height: 46px; object-fit: cover; border-radius: 6px; margin-top: 6px; border: 1px solid var(--line); }
.draft-page-item.is-generating { border-color: #e6a196; animation: quick-pulse 1.4s ease-in-out infinite; }
@keyframes quick-pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(196, 22, 28, 0); } 50% { box-shadow: 0 0 0 3px rgba(196, 22, 28, .14); } }
.quick-result { margin-top: 16px; }
.quick-preview { border-radius: 12px; overflow: hidden; border: 1px solid var(--line); background: #fff; }
.quick-preview img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
.quick-preview-empty { padding: 26px; border: 1px dashed var(--line); border-radius: 12px; color: var(--muted); font-size: 13px; text-align: center; background: rgba(255,255,255,.5); }
@media (max-width: 950px) { .quick-layout { grid-template-columns: 1fr; } .quick-pages { min-height: auto; } .quick-versions { grid-template-columns: 1fr; } }
/* 材料上传（第四步） */
.material-card { margin-top: 6px; padding: 16px; border: 1px dashed rgba(141,15,20,.28); border-radius: 12px; background: rgba(141,15,20,.03); }
.material-card > label { color: var(--ink, #3b3b3b); font-weight: 600; }
.material-list { display: flex; flex-direction: column; gap: 8px; margin: 10px 0; }
.material-item { display: flex; align-items: center; gap: 10px; padding: 10px 14px; background: #fff; border: 1px solid var(--line, #e8e0d6); border-radius: 10px; box-shadow: 0 2px 8px rgba(34,22,10,.05); }
.material-item b { font-size: 14px; color: #2f2a24; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.material-item small { color: var(--muted, #8a8d93); font-size: 12px; white-space: nowrap; }
.material-item i { cursor: pointer; font-style: normal; width: 22px; height: 22px; line-height: 20px; text-align: center; border-radius: 50%; color: #8d0f14; border: 1px solid rgba(141,15,20,.3); font-size: 14px; }
.material-item i:hover { background: #8d0f14; color: #fff; }
.material-upload-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.material-upload-row small { color: var(--muted, #8a8d93); font-size: 12px; }

/* 生图失败降级提示 */
.generation-fallback-notice, .editor-fallback-notice { margin-top: 14px; padding: 11px 14px; border: 1px solid rgba(181, 123, 21, .32); border-radius: 10px; background: #fff8e8; color: #7a5310; font-size: 13px; line-height: 1.6; }
.editor-canvas.is-fallback::after { content: '模板预览图'; position: absolute; top: 14px; right: 14px; padding: 5px 9px; border-radius: 999px; background: rgba(255, 248, 232, .92); color: #7a5310; font-size: 11px; }
.editor-canvas { position: relative; }

/* 快速模式自定义页数 */
.quick-custom-pages { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:16px; padding:14px 16px; border:1px solid rgba(196,22,28,.16); border-radius:10px; background:#fffaf5; }
.quick-custom-pages label { font-weight:700; color:var(--ink,#202124); }
.quick-custom-pages input { width:110px; padding:9px 10px; border:1px solid var(--line,#e8e0d6); border-radius:8px; font-size:14px; }
.quick-custom-pages small { color:var(--muted,#8a8d93); }
.inspector-warning { color:#9a6313; }

/* 二次编辑 · 快速生成 / 完整生成 */
.draft-zone-feedback textarea, .generation-current-editor textarea { min-height: 64px; }
.generation-current-editor { margin-top: 18px; padding-top: 16px; border-top: 1px dashed rgba(196,22,28,.18); }
.generation-current-editor h4 { font-size: 14px; font-weight: 700; color: #2f2a24; margin: 0 0 6px; }
.generation-current-hint { color: var(--muted, #8a8d93); font-size: 12px; margin: 0 0 10px; }
.generation-current-editor textarea { width: 100%; min-height: 64px; padding: 10px 12px; border: 1px solid var(--line, #e8e0d6); border-radius: 8px; font-size: 13px; resize: vertical; }
.generation-current-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; align-items: center; }
.generation-page-button { text-align: left; background: #fff; border: 1px solid #eee5de; width: 100%; border-radius: 12px; cursor: pointer; }
.generation-page-button:hover { border-color: #df9d8f; background: #fff8f4; }

/* ===== 图文教程 ===== */
.tutorial-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-bottom: 22px; }
.tutorial-fact { padding: 18px; border-radius: 14px; background: #fff; border: 1px solid #efe3dc; box-shadow: 0 8px 20px rgba(80,30,20,.05); }
.tutorial-fact b { display: block; font-size: 19px; color: #c4161c; }
.tutorial-fact span { display: block; margin-top: 6px; font-size: 13px; color: #776b67; line-height: 1.7; }
.tutorial-steps { display: grid; gap: 18px; }
.tutorial-step { padding: 22px; border-radius: 16px; background: #fff; border: 1px solid #efe3dc; box-shadow: 0 10px 26px rgba(80,30,20,.06); }
.tutorial-step-head { display: flex; align-items: flex-start; gap: 14px; margin-bottom: 14px; }
.tutorial-step-no { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; font-weight: 800; font-size: 15px; color: #fff; background: linear-gradient(145deg, #8d0f14, #c4161c); }
.tutorial-step-head h3 { margin: 0 0 6px; font-size: 18px; }
.tutorial-step-head p { margin: 0; color: #776b67; font-size: 13px; line-height: 1.75; }
.tutorial-step ul { margin: 0 0 16px; padding-left: 20px; }
.tutorial-step li { margin-bottom: 6px; font-size: 13.5px; color: #4a413e; line-height: 1.75; }
.tutorial-step li b { color: #c4161c; }
.tutorial-shot { width: 100%; border-radius: 12px; border: 1px solid #eee3dc; display: block; background: #faf7f5; }
.tutorial-tip { margin: 14px 0 0; padding: 12px 14px; border-radius: 10px; background: #fdf6ef; border: 1px solid #f0e0cf; font-size: 12.5px; color: #8a6a4a; line-height: 1.75; }
.tutorial-faq { display: grid; gap: 12px; }
.tutorial-faq-item { padding: 16px 18px; border-radius: 12px; background: #fcfaf8; border: 1px solid #efe7e1; }
.tutorial-faq-item strong { display: block; margin-bottom: 6px; font-size: 14px; }
.tutorial-faq-item p { margin: 0; font-size: 13px; color: #6b5f5a; line-height: 1.8; }
.tutorial-contact { display: flex; gap: 18px; align-items: center; flex-wrap: wrap; }
@media (max-width: 820px) { .tutorial-facts { grid-template-columns: 1fr; } }

/* ===== 积分明细 ===== */
.credit-stats { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; }
.credit-stat { padding:20px 22px; }
.credit-stat span { display:block; font-size:13px; color:#776b67; }
.credit-stat b { display:block; margin:8px 0 4px; font-size:30px; color:#c4161c; line-height:1; }
.credit-stat small { font-size:12px; color:#a08e86; }
.price-list { display:grid; gap:2px; }
.price-line { display:flex; justify-content:space-between; align-items:center; gap:16px; padding:13px 0; border-bottom:1px dashed #efe3dc; }
.price-line:last-child { border-bottom:0; }
.price-line span { font-size:13.5px; color:#4a413e; }
.price-line span small { display:block; margin-top:4px; font-size:11.5px; color:#a08e86; }
.price-line b { font-size:14px; color:#c4161c; white-space:nowrap; }
.pack-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(248px,1fr)); gap:12px; }
.pack-cell { display:flex; flex-direction:column; align-items:flex-start; gap:10px; padding:14px 16px; border-radius:12px; background:#fcfaf8; border:1px solid #efe7e1; }
.pack-cell.hot { background:#fdf1ee; border-color:#f2c9c2; box-shadow:0 8px 20px rgba(196,22,28,.08); }
.pack-cell-name { font-size:13.5px; font-weight:700; color:#282323; }
.pack-cell-name i { display:inline-block; margin-left:6px; padding:2px 7px; border-radius:6px; background:#c4161c; color:#fff; font-size:10.5px; font-style:normal; vertical-align:middle; }
.pack-cell-name small { display:block; margin-top:4px; font-weight:400; font-size:11.5px; color:#776b67; }
.pack-cell-price { text-align:left; font-size:17px; font-weight:800; color:#c4161c; white-space:nowrap; }
.pack-cell-price small { display:block; margin-top:3px; font-size:10.5px; font-weight:400; color:#a08e86; }
.tx-list { display:grid; gap:8px; }
.tx-item { display:grid; grid-template-columns:minmax(0,1fr) 130px 96px; align-items:center; gap:14px; padding:13px 16px; border-radius:12px; background:#fcfaf8; border:1px solid #efe7e1; }
.tx-item.is-spend { background:#fdfaf8; }
.tx-title { font-size:13.5px; font-weight:700; color:#3a322f; }
.tx-title small { display:block; margin-top:4px; font-weight:400; font-size:11.5px; color:#a08e86; }
.tx-time { font-size:12px; color:#8a7f7a; }
.tx-amount { text-align:right; font-size:14.5px; font-weight:800; color:#c4161c; }
.tx-item.is-gain .tx-amount { color:#1a8a4a; }
.tx-amount small { display:block; margin-top:3px; font-size:11px; font-weight:400; color:#a08e86; }
.tx-after { text-align:right; font-size:12px; color:#8a7f7a; }
@media (max-width:820px) { .credit-stats { grid-template-columns:1fr; } .tx-item { grid-template-columns:minmax(0,1fr) auto; } .tx-after { display:none; } }

/* ===== 模板库 · 适用赛事筛选 ===== */
.template-filter-comp { margin-top:10px; padding-top:12px; border-top:1px dashed #efe3dc; }
.template-filter-label { display:inline-block; margin-right:6px; font-size:12.5px; color:#a08e86; }

/* ===== AI 生成等待态 · 醒目化（统一视觉语言） ===== */
@keyframes ai-stripes { from { background-position: 0 0; } to { background-position: 56px 0; } }
@keyframes ai-glow { 0%,100% { box-shadow: 0 0 0 0 rgba(196,22,28,.16), 0 10px 24px rgba(196,22,28,.10); } 50% { box-shadow: 0 0 0 7px rgba(196,22,28,.09), 0 14px 34px rgba(196,22,28,.20); } }
@keyframes ai-spin { to { transform: rotate(360deg); } }

/* 运行中容器：底部流动条纹 */
.ai-busy { position: relative; overflow: hidden; }
.ai-busy::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 5px; pointer-events: none;
  background-image: linear-gradient(115deg, rgba(196,22,28,.9) 0 25%, rgba(230,185,92,.95) 25% 50%, rgba(196,22,28,.9) 50% 75%, rgba(230,185,92,.95) 75% 100%);
  background-size: 56px 100%; animation: ai-stripes .8s linear infinite; }

/* 顶部状态横幅 */
.quick-ai-banner { min-height: 66px; border-left: 5px solid #e0a24a; }
.quick-ai-banner-copy strong { font-size: 17px; }
.quick-ai-banner-copy small { font-size: 13px; }
.quick-ai-banner.generating { border-left-color: var(--red); animation: ai-glow 2s ease-in-out infinite; }
.quick-ai-banner.generating .quick-ai-banner-mark { background: transparent; position: relative; }
.quick-ai-banner.generating .quick-ai-banner-mark::before { content: ""; position: absolute; inset: 1px; border-radius: 50%; border: 3px solid rgba(196,22,28,.22); border-top-color: var(--red); animation: ai-spin .8s linear infinite; }
.quick-ai-banner.generating .quick-ai-banner-mark { color: transparent; }
.quick-ai-banner.error { border-left-color: #b3131b; }
.quick-ai-banner.success { border-left-color: #2f914a; }

/* 单页 / 批量生成中卡片 */
.quick-generating-card { padding: 46px 22px; gap: 13px; border-radius: 16px;
  background: linear-gradient(120deg, #fff5f0, #fffbf2 45%, #fff5f0); border: 1px solid #f0c9b6; }
.quick-generating-card strong { font-size: 19px; }
.quick-generating-card span { font-size: 13.5px; max-width: 540px; }
.quick-generating-card .quick-spinner { width: 46px; height: 46px; border-width: 4px; border-color: rgba(196,22,28,.16); border-top-color: var(--red); box-shadow: 0 0 0 9px rgba(196,22,28,.05); }
.quick-result.is-generating { border-color: #e9a98f; background: #fffaf4; }

/* 预览工作区批量生成提示 */
.preview-gen-status { padding: 18px 22px; border-radius: 14px; font-size: 15px; font-weight: 600; border-left: 5px solid var(--red); animation: ai-glow 2s ease-in-out infinite; }
.preview-gen-status .gen-spinner { width: 22px; height: 22px; border-width: 3px; flex: 0 0 auto; }

/* 页面列表项：生成中 */
.draft-page-item.is-generating, .quick-page-item.is-generating { border-color: #e6a196; background: #fff7f2; animation: quick-pulse 1.4s ease-in-out infinite; }
.draft-page-item.is-generating small, .quick-page-item.is-generating small { color: var(--red); font-weight: 800; }

/* 状态标签 */
.status-pill.pending { color: #a35b12; background: #fff4e3; border: 1px solid #f0d3a8; }
.status-pill.generating { color: #fff; background: linear-gradient(90deg, var(--red), #e2691f); animation: ai-glow 1.8s ease-in-out infinite; }

/* 进度条流动高光 */
.progress-track { position: relative; }
.progress-track.is-running::after { content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image: linear-gradient(115deg, rgba(255,255,255,.5) 0 18%, rgba(255,255,255,0) 18% 100%);
  background-size: 26px 100%; animation: ai-stripes .9s linear infinite; }
.generation-overview.ai-busy { padding-bottom: 26px; }

/* 生成中禁用按钮的可见反馈 */
.btn-primary:disabled { cursor: progress; opacity: .82; }

@media (prefers-reduced-motion: reduce) {
  .ai-busy::after, .progress-track.is-running::after, .quick-ai-banner.generating, .preview-gen-status, .status-pill.generating { animation: none; }
}

/* ===== 客服卡片 / 落地页开通卡 ===== */
.contact-inline { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
.contact-inline .wechat-id { font-family: Consolas, Monaco, monospace; font-size: 15px; letter-spacing: .04em; padding: 8px 14px; border-radius: 10px; background: #fdf9f6; border: 1px dashed #e2cfc6; color: #a3473d; }
.open-contact { display: flex; gap: 16px; align-items: center; padding: 16px; border-radius: 14px; background: #fdf9f6; border: 1px solid #f0e4dd; }
.open-contact img { width: 118px; height: 118px; flex: 0 0 auto; border-radius: 10px; background: #fff; border: 1px solid #ece0d9; object-fit: contain; padding: 4px; }
.open-contact-copy { min-width: 0; display: grid; gap: 8px; justify-items: start; }
.open-contact-label { font-size: 12px; font-weight: 700; color: #a3473d; letter-spacing: .08em; }
.open-contact-id { font-family: Consolas, Monaco, monospace; font-size: 16px; letter-spacing: .05em; padding: 7px 12px; border-radius: 9px; background: #fff; border: 1px dashed #e2cfc6; color: #a3473d; }
@media (max-width: 560px) { .open-contact { flex-direction: column; text-align: center; } .open-contact-copy { justify-items: center; } }

/* ===== 备赛工具箱 ===== */
.tool-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 18px; }
.tool-card { display: flex; flex-direction: column; gap: 14px; padding: 24px; border-radius: 16px; background: #fff; border: 1px solid var(--line, #efe3dc); box-shadow: 0 10px 26px rgba(80,30,20,.06); }
.tool-head { display: flex; gap: 14px; align-items: flex-start; }
.tool-icon { flex: 0 0 auto; width: 46px; height: 46px; border-radius: 13px; display: grid; place-items: center; font-size: 21px; color: #fff; background: linear-gradient(145deg, #8d0f14, #c4161c); }
.tool-card h2 { margin: 0 0 6px; font-size: 18px; }
.tool-card p { margin: 0; font-size: 13px; line-height: 1.8; color: #776b67; }
.tool-tags { display: flex; flex-wrap: wrap; gap: 8px; }
.tool-tags i { font-style: normal; font-size: 11.5px; padding: 4px 10px; border-radius: 999px; background: #fdf4f1; color: #a3473d; border: 1px solid #f2ddd6; }
.tool-actions { margin-top: auto; }
.tool-actions .btn { width: 100%; }
.toolbox-note { margin-top: 18px; }

/* ===== 企鹅视觉服务推介（广告植入）===== */
.ad-band { margin: 0 0 18px; padding: 26px 28px; border-radius: 18px; color: #fff;
  background: linear-gradient(135deg, #6e0b10 0%, #a8171c 52%, #ca4a1e 100%); box-shadow: 0 14px 34px rgba(120,20,20,.22); }
.ad-band.is-compact { padding: 20px 22px; }
.ad-band .eyebrow { color: rgba(255,255,255,.8); }
.ad-band h2 { margin: 6px 0 8px; font-size: 21px; color: #fff; }
.ad-band.is-compact h2 { font-size: 18px; }
.ad-band p { margin: 0 0 14px; font-size: 13.5px; line-height: 1.85; color: rgba(255,255,255,.92); max-width: 760px; }
.ad-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 10px; margin: 0 0 14px; }
.ad-stat { padding: 10px 12px; border-radius: 12px; background: rgba(255,255,255,.13); border: 1px solid rgba(255,255,255,.18); }
.ad-stat b { display: block; font-size: 19px; line-height: 1.2; }
.ad-stat span { display: block; margin-top: 2px; font-size: 11.5px; color: rgba(255,255,255,.85); }
.ad-points { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.ad-points i { font-style: normal; font-size: 11.5px; padding: 4px 10px; border-radius: 999px; background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.2); }
.ad-band-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ad-wechat { font-size: 13px; padding: 8px 14px; border-radius: 10px; background: rgba(0,0,0,.18); border: 1px dashed rgba(255,255,255,.45); }
.ad-wechat b { font-family: Consolas, Monaco, monospace; letter-spacing: .04em; }
.ad-band .btn-ghost { background: transparent; border-color: rgba(255,255,255,.55); color: #fff; }
.ad-band .btn-ghost:hover { background: rgba(255,255,255,.14); color: #fff; }
.ad-band-wrap.is-after-export { margin-bottom: 6px; }

/* ===== 真实案例页 ===== */
.case-intro { margin-bottom: 18px; }
.company-strip { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin-top: 12px; }
/* 只放 1 张"整块排版好"的长图时，占满整行并限高，避免被拉成一条细长条 */
.company-strip.is-single { grid-template-columns: 1fr; }
.company-strip.is-single .company-shot img { max-height: 560px; object-fit: contain; background: #faf7f2; }
.company-shot { padding: 0; border: 1px solid var(--line, #efe3dc); border-radius: 12px; background: #fff; overflow: hidden; cursor: pointer; }
.company-shot img { width: 100%; display: block; aspect-ratio: 4 / 3; object-fit: cover; object-position: top; }
.company-shot small { display: block; padding: 7px 8px; font-size: 11.5px; color: #776b67; }
.case-filter { display: flex; flex-wrap: wrap; gap: 10px; margin: 10px 0 16px; }
.case-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(212px, 1fr)); gap: 14px; }
.case-item { padding: 0; border: 1px solid var(--line, #efe3dc); border-radius: 12px; background: #fff; overflow: hidden; cursor: pointer; box-shadow: 0 8px 20px rgba(80,30,20,.06); }
.case-item img { width: 100%; display: block; aspect-ratio: 16 / 9; object-fit: cover; }
.case-item span { display: block; padding: 8px 10px; font-size: 11.5px; color: #776b67; text-align: left; }
.case-item:hover { border-color: #e0a9a2; box-shadow: 0 12px 26px rgba(80,30,20,.12); }
.case-footnote { margin: 16px 0 0; font-size: 12px; color: #a08e86; }

/* ===== 评委问题库 ===== */
.qb-setup { margin-bottom: 18px; }
.qb-setup-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
.qb-setup-head h2 { margin: 0; font-size: 19px; }
.qb-setup-head small { font-size: 12.5px; color: #a08e86; }
.qb-setup-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; }
/* 行业自动带入的说明（2026-09-18）：让用户知道这个值是项目里已有的，不是凭空出现 */
.qb-auto-hint { display: block; margin-top: 6px; color: var(--muted-light); font-size: 11px; line-height: 1.6; }
.qb-notice { margin-top: 14px; padding: 12px 14px; border-radius: 12px; font-size: 13px; line-height: 1.75; color: #6d5f5a; background: #fbf6f4; border: 1px solid #f1e3dd; }
.qb-notice b { color: #4a413e; }
.qb-notice.is-ok { color: #1f6b3a; background: #f2faf4; border-color: #cfe9d8; }
.qb-notice.is-ok b { color: #175a30; }
.qb-actions { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 16px; }
.qb-hint { font-size: 12px; color: #a08e86; line-height: 1.7; min-width: 0; }
.qb-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin: 0 0 14px; }
.qb-meta { font-size: 13px; color: #776b67; }
.qb-meta b { color: var(--red, #c4161c); }
.qb-toolbar-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.qb-groups { display: flex; flex-direction: column; gap: 16px; }
.qb-group { padding: 24px 26px; border-radius: 16px; background: #fff; border: 1px solid var(--line, #efe3dc); box-shadow: 0 10px 26px rgba(80, 30, 20, .05); }
.qb-group-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
.qb-group-head h3 { margin: 0; font-size: 16.5px; }
.qb-item { padding: 14px 0; border-top: 1px dashed #efe3dc; }
.qb-item:first-of-type { border-top: 0; }
.qb-q { display: flex; align-items: flex-start; gap: 10px; font-size: 14.5px; line-height: 1.7; color: #3b332f; }
.qb-q b { font-weight: 600; min-width: 0; overflow-wrap: anywhere; }
.qb-tag { flex: none; padding: 2px 8px; border-radius: 6px; font-size: 11px; font-weight: 500; color: #fff; background: #c4161c; }
.qb-tag-财务 { background: #b3701a; }
.qb-tag-比赛 { background: #c4161c; }
.qb-tag-行业 { background: #1f5f8b; }
.qb-tag-技巧 { background: #5b6b7a; }
.qb-index { flex: none; min-width: 18px; font-size: 12px; color: #b8a9a2; font-variant-numeric: tabular-nums; }
.qb-a, .qb-trap { margin-top: 8px; padding: 10px 12px; border-radius: 10px; background: #fbf7f5; font-size: 13px; }
.qb-trap { background: #fdf5f4; }
.qb-label { display: inline-block; margin-bottom: 5px; font-size: 11.5px; font-weight: 500; letter-spacing: .04em; color: #a3714a; }
.qb-trap .qb-label { color: #b23a3a; }
.qb-a p, .qb-trap p { margin: 0; line-height: 1.8; color: #5d534f; overflow-wrap: anywhere; }
.qb-points { margin: 8px 0 0; padding-left: 22px; font-size: 13px; line-height: 1.85; color: #5d534f; }
.qb-points li { overflow-wrap: anywhere; }
@media (max-width: 720px) {
  .qb-group { padding: 18px 16px; }
  .qb-toolbar { flex-direction: column; align-items: stretch; }
  .qb-actions { align-items: stretch; }
  .qb-actions .btn { width: 100%; }
}

/* ===== AI 评审 ===== */
.review-setup { margin-bottom: 18px; }
.review-readiness { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 16px; }
.review-ready { padding: 12px 14px; border-radius: 12px; background: #fbf7f5; border: 1px solid #f1e3dd; }
.review-ready b { display: block; margin-bottom: 4px; font-size: 13.5px; color: #8a7b74; }
.review-ready small { font-size: 12px; line-height: 1.65; color: #a08e86; }
.review-ready.is-ok { background: #f2faf4; border-color: #cfe9d8; }
.review-ready.is-ok b { color: #1f6b3a; }
.review-summary { display: flex; gap: 28px; flex-wrap: wrap; margin-bottom: 16px; align-items: flex-start; }
.review-total { flex: none; min-width: 150px; display: flex; flex-direction: column; justify-content: center; }
.review-total b { font-size: 54px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.review-total b.is-high { color: #1f6b3a; }
.review-total b.is-mid { color: #b3701a; }
.review-total b.is-low { color: #c4161c; }
.review-total small { margin-top: 4px; font-size: 12px; color: #a08e86; line-height: 1.6; }
/* 维度网格：min 取 215px，保证 1440 视口下 4 个维度落成 2×2；
   曾用 190px 时 auto-fit 会算成 3 列，第 4 个维度被挤成孤行，视觉上像「掉出卡片外」。 */
.review-dims { flex: 1 1 440px; min-width: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(215px, 1fr)); gap: 16px; align-content: start; }
.review-dim { padding: 14px 16px; border-radius: 14px; background: #fdfaf9; border: 1px solid #f3e8e2; }
.review-dim-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.review-dim-head b { font-size: 13.5px; color: #4a413e; }
.review-dim-weight { font-size: 11.5px; color: #b8a9a2; }
.review-dim-score { margin: 6px 0 8px; font-size: 26px; font-weight: 600; font-variant-numeric: tabular-nums; color: #4a413e; }
.review-dim-score small { margin-left: 3px; font-size: 12px; font-weight: 400; color: #a08e86; }
.review-dim-score.is-high { color: #1f6b3a; }
.review-dim-score.is-mid { color: #b3701a; }
.review-dim-score.is-low { color: #c4161c; }
.review-bar { height: 6px; border-radius: 99px; background: #f1e6e1; overflow: hidden; }
.review-bar-fill { height: 100%; border-radius: 99px; background: #c4161c; transition: width .4s ease; }
.review-bar-fill.is-high { background: linear-gradient(90deg, #2f8a53, #48a56c); }
.review-bar-fill.is-mid { background: linear-gradient(90deg, #c98a2a, #e0b35a); }
.review-bar-fill.is-low { background: linear-gradient(90deg, #a8121a, #c4161c); }
.review-dim-comment { margin: 10px 0 0; font-size: 12.5px; line-height: 1.75; color: #776b67; overflow-wrap: anywhere; }
.review-block { margin-bottom: 16px; }
.review-block h2 { margin: 0 0 12px; font-size: 17px; }
.review-suggestions { margin: 0; padding-left: 22px; font-size: 14px; line-height: 1.9; color: #4a413e; }
.review-suggestions li { overflow-wrap: anywhere; }
.review-missing { display: flex; flex-wrap: wrap; gap: 8px; }
.review-hint { margin: 12px 0 0; font-size: 12.5px; line-height: 1.7; color: #a08e86; }

/* ===== 商业计划书（A4 成册排版）=====
   .bp-doc 的配色由 12 个 CSS 变量驱动（bp-layout.js 的 docVars 写在行内 style 上），
   换版式只改变量值，预览 DOM 无需重建。
   【注意】Word 侧不认这套变量，bp-layout.js 会把令牌内联展开，两处不要互相依赖。 */
.bp-layouts { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; }
.bp-layout {
  display: flex; flex-direction: column; gap: 10px; text-align: left; cursor: pointer;
  border: 1px solid #ece2dd; border-radius: 12px; padding: 14px 15px; background: #fff; transition: .16s;
}
.bp-layout:hover { border-color: #d9c8c0; }
.bp-layout.active { border-color: #c4161c; background: #fff7f5; box-shadow: 0 0 0 2px rgba(196,22,28,.10); }
/* 版式色板：外层带渐变底（行内 style 注入该版的 primary→accent），内层留白做出「一块卡片」的观感 */
.bp-layout-swatch {
  display: block; height: 34px; border-radius: 8px; border: 1px solid rgba(0,0,0,.06);
  position: relative; overflow: hidden;
}
.bp-layout-swatch i {
  position: absolute; left: 10px; top: 9px; width: 34px; height: 16px;
  border-radius: 4px; background: rgba(255,255,255,.86);
}
.bp-layout-name { font-size: 14px; font-weight: 600; color: #2b2320; }
.bp-layout:focus-visible { outline: 2px solid #c4161c; outline-offset: 2px; }
.bp-layout-desc { font-size: 12px; line-height: 1.65; color: #a08e86; }

.bp-opts { display: grid; grid-template-columns: repeat(auto-fit, minmax(258px, 1fr)); gap: 10px; margin: 4px 0 16px; }
.bp-opt {
  display: flex; align-items: flex-start; gap: 9px; font-size: 13px; color: #4a413e; cursor: pointer;
  border: 1px solid #ece2dd; border-radius: 10px; padding: 11px 13px; background: #fff; transition: .16s;
}
.bp-opt:hover { border-color: #d9c8c0; }
.bp-opt input { accent-color: #c4161c; margin-top: 2px; flex: 0 0 auto; }
.bp-opt > span { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.bp-opt b { font-size: 13.5px; font-weight: 600; color: #2b2320; }
.bp-opt small { font-size: 12px; line-height: 1.6; color: #a08e86; }
.bp-opt.is-disabled { color: #bdb2ac; cursor: not-allowed; background: #fbfafb; }
.bp-opt.is-disabled b { color: #bdb2ac; }
.bp-opt:has(input:checked) { border-color: #c4161c; background: #fff7f5; }

.bp-info { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.bp-info span { font-size: 12px; padding: 4px 11px; border-radius: 99px; background: #f4f1ef; color: #a08e86; }
.bp-info span.is-on { background: #fff0f0; color: #c4161c; }
/* 【2026-09-15】<i>标签</i><b>值</b> 默认是斜体+粗体，两段字体观感不一致；
   统一为正常字形，仅用颜色与字重区分标签/值。 */
.bp-info span i, .bp-info span b { font-style: normal; font-weight: 500; letter-spacing: 0; font-family: inherit; }
.bp-info span i { color: #a08e86; }
.bp-info span b { color: #c4161c; font-weight: 600; }
/* 「已排版内容」卡片头部与「成册预览」卡片头部：左标题右说明，窄屏自动换行 */
.bp-info-head, .bp-stage-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.bp-info-head h2, .bp-stage-head h2 { margin: 0; font-size: 17px; }
.bp-info-head small, .bp-stage-head small { font-size: 12.5px; line-height: 1.7; color: #a08e86; }
.bp-stage-head { margin-bottom: 14px; }
.bp-info > .bp-info-head, .bp-info > .bp-toolbar { flex-basis: 100%; }
/* 预览舞台：A4 宽 210mm 按容器宽等比缩放，高度同步裁剪 */
.bp-stage { background: #e9e9eb; border-radius: 12px; padding: 18px; overflow: hidden; }
.bp-zoom { width: 210mm; transform-origin: top left; }
.bp-doc {
  background: transparent; color: var(--bp-ink, #202124); font-family: var(--bp-font, "Microsoft YaHei","PingFang SC",sans-serif);
  font-size: 10pt; line-height: 1.75; text-align: left;
}
.bp-sheet { padding: 20mm 17mm; box-sizing: border-box; background: #fff; min-height: 297mm; margin-bottom: 6mm; }
.bp-flow { padding: 0; }
.bp-chapter { padding: 20mm 17mm; box-sizing: border-box; background: #fff; margin-bottom: 6mm; }

/* 封面（纯版式） */
.bp-cover { display: flex; flex-direction: column; }
.bp-cover-band { height: 8mm; background: var(--bp-primary, #C4161C); }
.bp-cover-brand { text-align: right; font-size: 8.5pt; color: var(--bp-muted, #73767C); margin-top: 6mm; }
.bp-cover-dot { display: inline-block; width: 3px; height: 3px; background: var(--bp-accent, #D2A958); margin: 0 7px 2px; }
.bp-cover-main { flex: 1; display: flex; flex-direction: column; justify-content: center; padding: 8mm 0; }
.bp-cover-kicker { font-size: 11pt; letter-spacing: .55em; color: var(--bp-accent, #D2A958); margin-bottom: 9mm; }
.bp-cover-title {
  font-family: var(--bp-head-font, "SimSun",serif); font-size: 30pt; font-weight: 700;
  color: var(--bp-primary-dark, #8D0F14); line-height: 1.35; margin: 0; word-break: break-all;
}
.bp-cover-rule { width: 46mm; height: 1.2mm; background: var(--bp-accent, #D2A958); margin: 9mm 0; }
.bp-cover-sub { font-size: 12pt; color: var(--bp-sub, #4A4D52); letter-spacing: .04em; }
.bp-cover-meta { border-top: .4mm solid var(--bp-line, #E8E8EA); padding-top: 5mm; }
.bp-cover-meta-row { display: flex; font-size: 10pt; padding: 2.4mm 0; border-bottom: .3mm solid #F1F1F3; }
.bp-cover-meta-row span { width: 30mm; flex: none; color: var(--bp-muted, #73767C); }
.bp-cover-meta-row b { color: var(--bp-ink, #202124); font-weight: 600; }
.bp-cover-foot {
  margin-top: 10mm; padding-top: 4mm; border-top: .3mm solid var(--bp-line, #E8E8EA);
  font-size: 8.5pt; color: var(--bp-muted, #73767C); line-height: 1.7;
}

/* 封面（AI 封面图版）：整页铺那张生成图 —— 不叠文字、不压阴影
   【2026-09-15 用户要求】封面只要生成的那一张图。
   已移除 .bp-cover-photo-veil / .bp-cover-photo-inner / .bp-cover-photo-meta ——
   它们正是用户看到的「灰色阴影带」和「乡村农业 · 日期 · 企鹅视觉」那行编制单位小字。
   高度由 .bp-sheet 的 min-height 保证（打印模式下 257mm），所以清空内容也不会塌。 */
.bp-cover-photo { position: relative; overflow: hidden; padding: 0; display: flex; }
.bp-cover-photo-bg { position: absolute; inset: 0; background-size: cover; background-position: center; }

/* 页眉 / 章标题 / 小节 */
.bp-page-head {
  display: flex; justify-content: space-between; font-size: 8.5pt; color: var(--bp-muted, #73767C);
  padding-bottom: 2.6mm; border-bottom: .4mm solid var(--bp-line, #E8E8EA); margin-bottom: 9mm;
}
.bp-chapter-title {
  display: flex; align-items: center; gap: 5mm; margin-bottom: 8mm; padding-bottom: 3.6mm;
  border-bottom: .6mm solid var(--bp-primary, #C4161C); break-after: avoid; page-break-after: avoid;
}
.bp-chapter-no {
  width: 14mm; height: 14mm; flex: none; background: var(--bp-primary, #C4161C); color: #fff;
  font-size: 16pt; font-weight: 600; display: flex; align-items: center; justify-content: center;
}
.bp-chapter-title h2 { font-family: var(--bp-head-font, inherit); font-size: 19pt; font-weight: 600; color: var(--bp-primary-dark, #8D0F14); margin: 0; line-height: 1.3; }
.bp-chapter-sub { font-size: 9pt; color: var(--bp-muted, #73767C); margin-top: 1mm; }
.bp-sec { margin-bottom: 7mm; }
.bp-sec-head { display: flex; align-items: baseline; gap: 3mm; break-after: avoid; page-break-after: avoid; }
.bp-sec-no { font-size: 10pt; font-weight: 600; color: var(--bp-accent, #D2A958); flex: none; }
.bp-sec-title {
  font-family: var(--bp-head-font, inherit); font-size: 11.5pt; font-weight: 600; color: var(--bp-primary-dark, #8D0F14);
  margin: 0 0 3mm 0; padding-left: 3mm; border-left: 1mm solid var(--bp-primary, #C4161C); line-height: 1.4;
}

/* 指标卡 / 键值表 */
.bp-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 3mm; }
.bp-metric {
  border: .3mm solid var(--bp-line, #E8E8EA); border-top: 1mm solid var(--bp-primary, #C4161C); padding: 3.5mm 4mm;
  break-inside: avoid; page-break-inside: avoid;
}
.bp-metric-k { font-size: 8.5pt; color: var(--bp-muted, #73767C); }
.bp-metric-v { font-size: 13pt; font-weight: 600; margin: 1mm 0; color: var(--bp-ink, #202124); overflow-wrap: anywhere; }
.bp-metric-d { font-size: 8pt; color: var(--bp-muted, #73767C); line-height: 1.6; }
.bp-kv { border: .3mm solid var(--bp-line, #E8E8EA); }
.bp-kv-row {
  display: flex; padding: 2.6mm 4mm; border-bottom: .3mm solid var(--bp-line, #E8E8EA);
  font-size: 10pt; break-inside: avoid; page-break-inside: avoid;
}
.bp-kv-row:last-child { border-bottom: none; }
.bp-kv-k { width: 46mm; flex: none; color: var(--bp-muted, #73767C); }
.bp-kv-v { flex: 1; color: var(--bp-ink, #202124); overflow-wrap: anywhere; }

/* 数据表 */
.bp-table { width: 100%; border-collapse: collapse; font-size: 9.5pt; }
.bp-table th {
  background: var(--bp-light, #FFF0F0); color: var(--bp-primary-dark, #8D0F14); font-weight: 600;
  border: .3mm solid var(--bp-line, #E8E8EA); padding: 2.6mm 3mm; text-align: center;
}
.bp-table td { border: .3mm solid var(--bp-line, #E8E8EA); padding: 2.6mm 3mm; text-align: right; }
.bp-table td.l { text-align: left; }
.bp-table tr { break-inside: avoid; page-break-inside: avoid; }
.bp-table thead { display: table-header-group; }
.bp-table tr.hl td { background: var(--bp-light-accent, #FBF6EA); color: var(--bp-primary-dark, #8D0F14); font-weight: 600; }

/* 百分比条 / 图表 / 文本块 */
.bp-bar-row { display: flex; align-items: center; gap: 3mm; margin: 2mm 0; break-inside: avoid; page-break-inside: avoid; }
.bp-bar-n { width: 38mm; flex: none; font-size: 9.5pt; color: var(--bp-sub, #4A4D52); }
.bp-bar-track { flex: 1; height: 3.6mm; background: #F1F1F3; overflow: hidden; }
.bp-bar-fill { display: block; height: 100%; min-width: .6mm; background: var(--bp-primary, #C4161C); }
.bp-bar-p { width: 12mm; flex: none; text-align: right; font-size: 9.5pt; font-weight: 600; color: var(--bp-primary-dark, #8D0F14); }
.bp-figure { margin: 0; border: .3mm solid var(--bp-line, #E8E8EA); padding: 3mm; background: #fff; break-inside: avoid; page-break-inside: avoid; }
.bp-figure svg { display: block; height: auto; }
.bp-figure figcaption { font-size: 8.5pt; color: var(--bp-muted, #73767C); text-align: center; margin-top: 2mm; }
.bp-para { font-size: 10pt; line-height: 1.9; color: var(--bp-ink, #202124); overflow-wrap: anywhere; }
.bp-summary {
  background: var(--bp-light-accent, #FBF6EA); border: .3mm solid var(--bp-accent, #D2A958);
  padding: 4mm 5mm; font-size: 10pt; line-height: 1.9; overflow-wrap: anywhere;
  break-inside: avoid; page-break-inside: avoid;
}
.bp-note { font-size: 8.5pt; color: var(--bp-muted, #73767C); line-height: 1.7; margin-top: 2mm; overflow-wrap: anywhere; }
.bp-note-block { background: #F5F5F7; border: .3mm solid var(--bp-line, #E8E8EA); padding: 3mm 4mm; margin-top: 0; }

/* 预警 / 画布 / 写法要点 / 问答 / 目录 */
.bp-warns { border: .3mm solid var(--bp-line, #E8E8EA); }
.bp-warn {
  display: flex; gap: 3mm; padding: 2.6mm 4mm; border-bottom: .3mm solid var(--bp-line, #E8E8EA);
  font-size: 9.5pt; line-height: 1.75; break-inside: avoid; page-break-inside: avoid;
}
.bp-warn:last-child { border-bottom: none; }
.bp-warn-tag { flex: none; font-size: 8pt; padding: .4mm 2mm; color: #fff; height: fit-content; }
.bp-warn-error { background: #C4161C; }
.bp-warn-warn { background: #D2A958; }
.bp-warn-info { background: #9A9DA3; }
.bp-bmc { display: grid; grid-template-columns: repeat(3, 1fr); gap: 3mm; }
.bp-bmc-block {
  border: .3mm solid var(--bp-line, #E8E8EA); background: #FCFCFD; padding: 3mm 3.5mm;
  break-inside: avoid; page-break-inside: avoid;
}
.bp-bmc-block h4 { font-size: 10pt; font-weight: 600; color: var(--bp-primary-dark, #8D0F14); margin: 0 0 1.6mm 0; }
.bp-bmc-text { font-size: 8.8pt; line-height: 1.7; color: var(--bp-ink, #202124); overflow-wrap: anywhere; }
.bp-guide { font-size: 9.5pt; }
.bp-guide-focus { margin: 0 0 3mm 0; color: var(--bp-sub, #4A4D52); line-height: 1.8; }
.bp-guide-lbl { font-weight: 600; color: var(--bp-primary-dark, #8D0F14); margin: 3mm 0 1.5mm; }
.bp-guide-ol, .bp-guide-ul { margin: 0; padding-left: 6mm; }
.bp-guide-ol li, .bp-guide-ul li { line-height: 1.8; margin: 1mm 0; color: var(--bp-sub, #4A4D52); }
.bp-guide-sample {
  background: var(--bp-light, #FFF0F0); padding: 3mm 4mm; margin-top: 3mm; line-height: 1.8;
  color: var(--bp-primary-dark, #8D0F14); break-inside: avoid; page-break-inside: avoid;
}
.bp-qa-item {
  border: .3mm solid var(--bp-line, #E8E8EA); background: #FCFCFD; padding: 3mm 4mm; margin-bottom: 3mm;
  break-inside: avoid; page-break-inside: avoid;
}
.bp-qa-q { font-size: 10.5pt; font-weight: 600; display: flex; gap: 2mm; align-items: flex-start; line-height: 1.7; }
.bp-qa-tag { flex: none; font-size: 8pt; color: #fff; background: var(--bp-accent, #D2A958); padding: .4mm 2mm; margin-top: .8mm; }
.bp-qa-a { font-size: 9.5pt; color: var(--bp-sub, #4A4D52); line-height: 1.85; margin-top: 1.6mm; overflow-wrap: anywhere; }
.bp-qa-a b { color: var(--bp-primary-dark, #8D0F14); }
.bp-qa-points { margin: 1.6mm 0 0; padding-left: 6mm; }
.bp-qa-points li { font-size: 9.5pt; color: var(--bp-sub, #4A4D52); line-height: 1.8; margin: .8mm 0; }
.bp-qa-trap {
  font-size: 9.5pt; color: var(--bp-primary-dark, #8D0F14); background: var(--bp-light, #FFF0F0);
  padding: 2.4mm 3mm; margin-top: 2mm; line-height: 1.75;
}
.bp-toc-body { margin-top: 4mm; }
.bp-toc-item { margin-bottom: 6mm; break-inside: avoid; page-break-inside: avoid; }
.bp-toc-line { display: flex; align-items: center; gap: 3mm; }
.bp-toc-title { font-size: 12pt; font-weight: 600; color: var(--bp-primary-dark, #8D0F14); flex: none; }
.bp-toc-dots { flex: 1; height: 0; border-top: .3mm dotted #D8D8DC; }
.bp-toc-subs { margin-top: 1.6mm; padding-left: 7mm; }
.bp-toc-sub { font-size: 9.5pt; color: var(--bp-sub, #4A4D52); line-height: 1.9; }

/* 导出工具栏与封面状态 */
.bp-toolbar { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 16px; }
.bp-cover-state { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.bp-cover-thumb {
  width: 148px; height: 103px; object-fit: cover; border-radius: 8px;
  border: 1px solid #ece2dd; background: #f7f6f9;
}
.bp-cover-empty {
  width: 148px; height: 103px; border-radius: 8px; border: 1px dashed #e2d6d0;
  display: flex; align-items: center; justify-content: center; font-size: 12px; color: #bdb2ac; background: #fbfafb;
}
.bp-cover-text { flex: 1 1 260px; min-width: 0; }
.bp-cover-text h3 { margin: 0 0 6px; font-size: 15px; }
.bp-cover-text p { margin: 0; font-size: 12.5px; line-height: 1.75; color: #a08e86; }
/* 页面里用的是 <b>/<small>（不是 h3/p），两套都兜住，避免字号回落成默认值 */
.bp-cover-text > b { display: block; margin: 0 0 6px; font-size: 15px; font-weight: 600; color: #2b2320; }
.bp-cover-text > small { display: block; font-size: 12.5px; line-height: 1.75; color: #a08e86; }

/* 商业计划书打印：只输出 A4 文档本身（仅在从本模块发起打印时加 .bp-printing）
   注意：#app 是唯一的页面容器，所有视图与 #bpPrintRoot 都挂在它下面，
   所以这里必须隐藏「#app 的其它子节点」而不是 .page 的子节点。 */
@media print {
  @page { size: A4; margin: 20mm 17mm; }
  body.bp-printing { background: #fff !important; margin: 0 !important; }
  body.bp-printing #app > *:not(#bpPrintRoot) { display: none !important; }
  body.bp-printing #bpPrintRoot > .no-print,
  body.bp-printing .modal-mask { display: none !important; }
  body.bp-printing #bpPrintRoot { display: block !important; }
  body.bp-printing .bp-stage {
    background: none !important; padding: 0 !important; border-radius: 0 !important;
    box-shadow: none !important; overflow: visible !important; height: auto !important;
    margin: 0 !important; border: none !important;
  }
  body.bp-printing .bp-zoom { transform: none !important; width: auto !important; height: auto !important; }
  body.bp-printing .bp-doc { width: auto !important; box-shadow: none !important; }
  body.bp-printing .bp-sheet, body.bp-printing .bp-flow { padding: 0 !important; margin: 0 !important; }
  body.bp-printing .bp-chapter { padding: 0 !important; margin: 0 !important; }
  body.bp-printing .bp-sheet { min-height: 257mm !important; break-after: page; page-break-after: always; }
  body.bp-printing .bp-chapter { break-before: page; page-break-before: always; }
  body.bp-printing .bp-flow > .bp-chapter:first-child { break-before: auto; page-break-before: auto; }
  body.bp-printing .bp-cover-photo-veil { display: none !important; }
  body.bp-printing .bp-cover-photo-bg { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
}

@media (max-width: 720px) {
  .bp-layouts { grid-template-columns: 1fr; }
  .bp-opts { grid-template-columns: 1fr; }
  .bp-info-head, .bp-stage-head { flex-direction: column; align-items: flex-start; gap: 4px; }
  .bp-cover-state { align-items: flex-start; }
  .bp-cover-thumb, .bp-cover-empty { width: 100%; height: 168px; }
  .bp-metrics { grid-template-columns: repeat(2, 1fr); }
  .bp-bmc { grid-template-columns: 1fr; }
  .bp-kv-k { width: 34mm; }
  .bp-bar-n { width: 26mm; }
}

/* ===== 卡片内边距工具类（.card 本身无 padding，需要内边距的卡片显式加上）===== */.card-pad { padding: 24px 26px; }
@media (max-width: 720px) { .card-pad { padding: 18px 16px; } }

@media (max-width: 720px) {
  .review-summary { gap: 18px; }
  .review-total { min-width: 0; }
  .review-total b { font-size: 42px; }
  .review-dims { grid-template-columns: 1fr; }
}

/* ===== 预览工作区页签标题：超长省略，不再溢出 ===== */
.preview-page-item > span { min-width: 0; }
.preview-page-item b { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.preview-page-item small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ===== 长列表/长标题通用省略（避免文字溢出容器）===== */
.case-item span, .company-shot small, .tool-tags i { overflow-wrap: anywhere; }
.ad-band p, .ad-band h2 { overflow-wrap: anywhere; }

/* ===== 窄屏防溢出：网格子项允许收缩 + 工具栏换行（约等于 1366 笔记本 125% 缩放）===== */
.draft-layout > *, .quick-layout > *, .preview-workspace > * { min-width: 0; }
.draft-editor-head > *, .draft-pages-head > * { min-width: 0; }
.draft-zone textarea, .draft-zone input, .quick-editor textarea, .quick-editor input { min-width: 0; width: 100%; }
.toolbar, .preview-actions, .editor-actions, .generation-actions, .page-heading-actions { flex-wrap: wrap; }
.draft-editor-head input, .draft-editor-head .eyebrow { overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 1180px) { .draft-layout { grid-template-columns: 160px 200px minmax(0, 1fr); gap: 12px; } }
/* 【2026-09-15】预览三栏在 1080~1300px 会被挤压（右栏超出视口），
   断点提到 1300：先降成两栏（页面列表+主区），右侧「本页调整」整块落到下方。 */
@media (max-width: 1300px) { .preview-workspace { grid-template-columns: 200px minmax(0, 1fr); } .preview-inspector { grid-column: 1 / -1; min-height: auto; } }
@media (max-width: 1080px) {
  .draft-layout { grid-template-columns: 1fr 1fr; }
  .draft-editor { grid-column: 1 / -1; min-height: auto; }
  .quick-layout { grid-template-columns: 1fr; }
  .preview-workspace { grid-template-columns: 1fr; }
}


/* ===== 商业计划书 · 第一步：内容准备 =====
   刻意用 bp-prep-* 前缀，不复用 .bp-sec / .bp-sec-head：
   那两个是 A4 正文渲染的类（margin-bottom:7mm、break-after:avoid 是打印单位），
   复用到屏幕编辑卡片会带进 7mm 间距与分页属性。 */
.bp-prep { margin-bottom: 18px; }
.bp-prep-summary { margin: 0 0 16px; padding: 11px 14px; border-radius: var(--radius-md); font-size: 13px; line-height: 1.7; color: #6d5f5a; background: #fbf6f4; border: 1px solid #f1e3dd; }
.bp-prep-summary b { color: var(--red-deep, #8D0F14); }
.bp-prep-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.bp-prep-item { padding: 14px 15px 12px; border: 1px solid var(--line); border-radius: var(--radius-md); background: #fff; transition: border-color .18s ease, box-shadow .18s ease, background .18s ease; }
.bp-prep-item.is-done { border-color: #cfe9d8; background: #fcfefd; }
.bp-prep-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 4px; }
.bp-prep-head b { font-size: 14px; color: var(--ink); }
.bp-prep-item > small { display: block; margin-bottom: 9px; font-size: 12px; line-height: 1.6; color: var(--muted-light); }
.bp-prep-item textarea { width: 100%; min-height: 78px; padding: 10px 12px; font-size: 13px; line-height: 1.7; border-radius: 9px; border: 1px solid var(--line-strong); background: #fff; color: var(--ink); resize: vertical; }
.bp-prep-item textarea:focus { border-color: var(--red); box-shadow: 0 0 0 3px var(--red-soft); outline: 0; }
.bp-prep-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 9px; }
.chip.is-ok { color: #1f6b3a; background: #f2faf4; }
@media (max-width: 720px) { .bp-prep-list { grid-template-columns: 1fr; } .bp-prep-item textarea { min-height: 68px; } }


/* ===== 商业计划书 · 上传已有计划书（2026-09-18）=====
   与 .bp-prep-* 同一套视觉语言（柔阴影 / 圆角 / 红金点缀）。
   前缀统一用 bp-import*，刻意不复用 A4 正文渲染的 .bp-* 类 ——
   那些是打印单位（mm、break-* 属性），复用到屏幕卡片会带进分页行为。 */
.bp-import-card { margin-bottom: 18px; }
.bp-import-drop { display: flex; align-items: center; justify-content: center; min-height: 88px; padding: 18px; border: 1.5px dashed #e0c9c2; border-radius: var(--radius-md); background: #fffaf9; text-align: center; transition: border-color .18s ease, background .18s ease; }
.bp-import-drop:hover { border-color: var(--red); background: #fff5f4; }
.bp-import-drop-main { font-size: 13px; line-height: 1.9; color: #6d5f5a; }
.bp-import-status { margin-top: 12px; padding: 11px 14px; border-radius: var(--radius-md); font-size: 12.5px; line-height: 1.75; color: #6d5f5a; background: #fbf6f4; border: 1px solid #f1e3dd; }
.bp-import-status b { color: var(--red-deep, #8D0F14); }
.bp-import-status.is-loading { color: #8a6a2a; background: #fffbf0; border-color: #f2e2bd; }

/* 已写入的上传内容摘要：让用户看得见"上传的东西现在在哪"，并能整批移除 */
.bp-imported { margin-bottom: 14px; padding: 13px 15px; border: 1px solid #e6d9c9; border-radius: var(--radius-md); background: #fffdf7; }
.bp-imported-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.bp-imported-head b { font-size: 14px; color: var(--ink); }
.bp-imported-head small { font-size: 12px; color: var(--muted-light); }
.bp-imported-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
.bp-imported-list li { display: flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 999px; background: #fff; border: 1px solid var(--line); font-size: 12.5px; color: var(--ink); }
.bp-imported-list li small { color: var(--muted-light); font-size: 11.5px; }
.bp-imported-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-top: 10px; }
.bp-imported-actions span { flex: 1 1 240px; font-size: 12px; line-height: 1.7; color: var(--muted-light); }

/* 解析结果清单：这一步是"识别不准"的唯一兜底，所以要能改名 / 调序 / 删除 */
.bp-import-result { margin-top: 14px; }
.bp-import-result-head { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.bp-import-result-head b { font-size: 14px; color: var(--ink); }
.bp-import-result-head small { font-size: 12px; color: var(--muted-light); }
.bp-import-warn { margin-bottom: 10px; padding: 10px 13px; border-radius: var(--radius-md); font-size: 12.5px; line-height: 1.7; color: #6d5f5a; background: #fbf6f4; border: 1px solid #f1e3dd; }
.bp-import-warn b { color: var(--red-deep, #8D0F14); }
.bp-import-warn.is-strong { color: #8a4a12; background: #fff7ec; border-color: #f0d6ad; }
.bp-import-warning-list { margin: 0 0 10px; padding-left: 20px; font-size: 12px; line-height: 1.7; color: var(--muted); }
.bp-import-list { display: grid; gap: 10px; max-height: 460px; overflow: auto; padding-right: 4px; }
.bp-import-ch { padding: 11px 12px; border: 1px solid var(--line); border-radius: var(--radius-md); background: #fff; }
.bp-import-ch-row { display: flex; align-items: center; gap: 8px; }
.bp-import-ch-no { flex: none; width: 22px; height: 22px; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--red-soft); color: var(--red-deep, #8D0F14); font-size: 12px; font-weight: 700; }
.bp-import-ch-row input { flex: 1; min-width: 0; min-height: 34px; padding: 0 10px; font-size: 13.5px; font-weight: 700; color: var(--ink); border: 1px solid var(--line-strong); border-radius: 8px; background: #fff; }
.bp-import-ch-row input:focus, .bp-import-sec input:focus { border-color: var(--red); box-shadow: 0 0 0 3px var(--red-soft); outline: 0; }
.bp-import-secs { display: grid; gap: 6px; margin-top: 8px; padding-left: 30px; }
.bp-import-sec { display: flex; align-items: center; gap: 8px; }
.bp-import-sec input { flex: 1; min-width: 0; min-height: 30px; padding: 0 9px; font-size: 12.5px; color: var(--ink); border: 1px solid var(--line); border-radius: 7px; background: #fcfcfd; }
.bp-import-sec small { flex: none; font-size: 11.5px; color: var(--muted-light); }
.bp-import-mode { display: grid; gap: 8px; margin: 14px 0; padding: 13px 15px; border-radius: var(--radius-md); background: #fbf6f4; border: 1px solid #f1e3dd; }
.bp-import-mode > b { font-size: 13.5px; color: var(--ink); }
.bp-import-mode label { display: grid; grid-template-columns: auto 1fr; grid-column-gap: 8px; align-items: center; font-size: 13px; color: var(--ink); cursor: pointer; }
.bp-import-mode label small { grid-column: 2; font-size: 11.5px; color: var(--muted-light); }
.bp-import-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
@media (max-width: 720px) {
  .bp-import-list { max-height: 320px; }
  .bp-import-ch-row { flex-wrap: wrap; }
  .bp-import-secs { padding-left: 0; }
  .bp-import-actions .btn { width: 100%; }
}


/* 「继续当前项目」卡：通栏横幅，视觉上作为主路径，新建作为次要路径 */
.mode-card-resume { grid-column: 1 / -1; min-height: auto; display: flex; align-items: center; gap: 18px; padding: 22px 24px; text-align: left; border-color: #e7b7b9; background: linear-gradient(180deg, #fff, #fff8f7); }
.mode-card-resume .mode-icon { margin-bottom: 0; flex: none; }
.mode-card-resume .mode-body { min-width: 0; flex: 1; }
.mode-card-resume h2 { margin: 0 0 6px; font-size: 19px; }
.mode-card-resume p { min-height: 0; margin: 0; font-size: 13px; }
/* 【2026-09-15】.btn 本身没有 display:flex，它是 inline 元素——文字靠左。
   这里显式声明 flex 居中，任何宽度下按钮内文字都居中（原来只在 720px 媒体查询里写，宽屏不生效）。 */
.mode-card-resume .resume-go { flex: none; display: flex; align-items: center; justify-content: center; text-align: center; }
@media (max-width: 720px) { .mode-card-resume { flex-direction: column; align-items: stretch; gap: 14px; }
  /* 窄屏下「继续」按钮全宽居中（此前 flex-start 让它看起来偏在一边） */
  .mode-card-resume .resume-go { width: 100%; min-height: 46px; display: flex; align-items: center; justify-content: center; } }

/* ===== 样稿版本列表（2026-09-15）===== */
.sample-versions { margin-top: 18px; }
.sample-version-list { display: grid; gap: 10px; margin-top: 14px; }
.sample-version { display: flex; align-items: center; gap: 14px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 14px; background: #fff; }
.sample-version.is-active { border-color: var(--red); background: var(--red-soft); }
.sv-thumbs { display: flex; gap: 6px; flex: none; }
.sv-thumb { width: 62px; height: 35px; border-radius: 6px; background-size: cover; background-position: center; background-color: #f1f1f3; border: 1px solid rgba(0,0,0,.06); overflow: hidden; }
.sv-thumb.is-empty { background-image: none; }
.sv-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.sv-meta { min-width: 0; flex: 1; display: grid; gap: 3px; }
.sv-meta b { font-size: 14px; }
.sv-meta small { color: var(--muted); font-size: 12px; }
.sv-current { color: var(--red); }
.sv-actions { display: flex; gap: 8px; flex: none; }
@media (max-width: 720px) { .sample-version { flex-direction: column; align-items: stretch; } .sv-actions { flex-wrap: wrap; } }
/* ===== 预览页样稿版本切换条（2026-09-15）===== */
.preview-version-bar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 0 0 14px; padding: 10px 14px; border: 1px solid var(--line); border-radius: 12px; background: #fff; }
.pvb-label { font-size: 13px; font-weight: 700; color: var(--ink); }
.pvb-select { min-height: 34px; padding: 0 10px; border: 1px solid var(--line); border-radius: 8px; background: #fff; font-size: 13px; color: var(--ink); }
.pvb-hint { color: var(--muted-light); font-size: 12px; flex: 1 1 100%; }
/* 只有一版样稿时用文字代替下拉框，避免出现「只有一个选项」的选择器（2026-09-15） */
.pvb-current { display: inline-flex; align-items: center; min-height: 34px; padding: 0 12px; border: 1px dashed var(--line); border-radius: 8px; background: #faf7f2; color: var(--ink); font-size: 13px; font-weight: 600; }
/* ===== BP 封面大图查看（2026-09-15）===== */
.bp-cover-lightbox { position: fixed; inset: 0; z-index: 200; display: none; align-items: center; justify-content: center; padding: 32px; background: rgba(20,20,22,.82); backdrop-filter: blur(6px); }
.bp-cover-lightbox.is-open { display: flex; }
.bp-cover-lightbox-inner { position: relative; max-width: min(88vw, 900px); max-height: 92vh; }
.bp-cover-lightbox img { display: block; max-width: 100%; max-height: 92vh; width: auto; border-radius: 10px; box-shadow: 0 24px 60px rgba(0,0,0,.45); background: #fff; }
.bp-cover-lightbox-close { position: absolute; top: -14px; right: -14px; width: 36px; height: 36px; border: 0; border-radius: 50%; background: #fff; color: #333; font-size: 20px; line-height: 1; cursor: pointer; box-shadow: 0 6px 16px rgba(0,0,0,.3); }
.bp-cover-thumb { cursor: zoom-in; }
/* ===== 步骤条可点击（2026-09-15）=====
   原来 .step 是一排纯 div，点不动 —— 流程后半段（预览/生成）用户找不到任何返回上一步的入口。
   改成 <button> 后要抹掉按钮默认外观，保持和原来完全一致，只多出 hover/active 反馈。 */
.steps-wide .step { font: inherit; -webkit-appearance: none; appearance: none; text-align: left; cursor: pointer; transition: border-color .15s ease, transform .15s ease; }
.steps-wide .step:hover { border-color: var(--red); }
.steps-wide .step:active { transform: translateY(1px); }
.steps-wide .step.current { cursor: default; }

/* 第一步：显示「已从项目档案带入的内容」（2026-09-18）
   为什么要有它：文本框原本一直是空的，而标签却写着"已带入" —— 用户会以为没内容。
   这块只读区把"会带入什么"直接摊开，并说明内容较精简、可重新生成。 */
.bp-inherited { margin: 8px 0 0; padding: 9px 11px; border: 1px solid #eee3dc; border-radius: 9px; background: #fcfaf8; }
.bp-inherited b { display: block; margin-bottom: 4px; color: #8b7c76; font-size: 11px; font-weight: 700; }
.bp-inherited p { margin: 0; color: #4a413e; font-size: 12.5px; line-height: 1.7; white-space: pre-wrap; }
.bp-inherited small { display: block; margin-top: 7px; color: #a3473d; font-size: 11px; line-height: 1.6; }
.bp-generate-row { margin-top: 14px; padding-top: 14px; border-top: 1px dashed #eee7e2; }

/* 纯版式封面的副标题（2026-09-18）：主标题大、副标题小，分两行 */
.bp-cover-subtitle { margin-top: 6px; font-size: 15px; font-weight: 600; letter-spacing: .02em; color: var(--w-cover-sub, #6b625e); opacity: .9; }

/* ===== 【2026-09-18】资料人工定制页 · 案例展示模块 + 精修咨询 banner ===== */
.custom-intro .ad-stats { margin-bottom: 8px; }
.case-proj-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 16px; margin-top: 14px; }
.case-proj { position: relative; display: flex; flex-direction: column; gap: 6px; padding: 10px 10px 12px; text-align: left; background: #fff; border: 1px solid rgba(196,22,28,.14); border-radius: 12px; cursor: pointer; box-shadow: 0 6px 18px rgba(140,15,20,.06); transition: transform .15s ease, box-shadow .15s ease; font-family: inherit; }
.case-proj:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(140,15,20,.14); }
.case-proj img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; object-position: top center; border-radius: 8px; background: #f5f0e8; }
.case-proj b { font-size: 14px; color: #3a2325; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.case-proj small { color: #8a8d93; font-size: 12px; }
.case-proj-style { position: absolute; top: 16px; left: 16px; z-index: 1; padding: 2px 10px; border-radius: 999px; background: rgba(140,15,20,.86); color: #f9f1df; font-size: 12px; line-height: 1.6; }
.proj-lightbox { position: fixed; inset: 0; z-index: 90; display: none; align-items: center; justify-content: center; background: rgba(30,10,10,.78); }
.proj-lightbox.is-open { display: flex; }
.proj-lightbox-card { position: relative; width: min(1100px, 92vw); background: #fff; border-radius: 16px; padding: 18px; }
.proj-lightbox-card img { width: 100%; max-height: 72vh; object-fit: contain; background: #241011; border-radius: 10px; display: block; }
/* 灯箱大图水印：卡片已是 position:relative，水印层铺满图片区 */
.proj-lightbox-card .case-watermark { position: absolute; inset: 18px; z-index: 2; border-radius: 10px; }
.template-lightbox-card .case-watermark { position: absolute; inset: 18px; z-index: 2; border-radius: 10px; }
.proj-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 44px; height: 44px; border-radius: 50%; border: none; background: rgba(140,15,20,.9); color: #fff; font-size: 24px; line-height: 1; cursor: pointer; z-index: 2; }
.proj-nav:hover { background: #a10d18; }
.proj-prev { left: 8px; }
.proj-next { right: 8px; }
.proj-lightbox-close { position: absolute; top: -14px; right: -14px; width: 36px; height: 36px; border-radius: 50%; border: none; background: #c4161c; color: #fff; font-size: 20px; line-height: 1; cursor: pointer; }
.proj-lightbox-meta { display: flex; justify-content: space-between; gap: 12px; margin-top: 10px; color: #53565c; font-size: 13px; }
.proj-lightbox-meta b { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.refine-consult { display: flex; gap: 12px; align-items: center; margin-top: 14px; padding: 12px 14px; background: #fdf4ec; border: 1px solid rgba(196,22,28,.25); border-left: 4px solid #c4161c; border-radius: 10px; }
.refine-consult-body { flex: 1; display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #53565c; }
.refine-consult-body > b { color: #a10d18; font-size: 14px; }
.refine-consult-wechat { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.refine-consult-wechat b { color: #a10d18; }
.refine-consult-qr { width: 84px; height: 84px; object-fit: contain; border-radius: 8px; background: #fff; border: 1px solid rgba(196,22,28,.2); }
[data-editor-modal] .refine-consult { margin-top: 12px; }

.case-more { display: flex; justify-content: center; margin-top: 16px; }
.case-more .btn { min-width: 220px; }

.custom-perks { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 12px; margin-top: 14px; }
.custom-perk { background: #faf6f3; border: 1px solid rgba(163,45,45,.14); border-radius: 12px; padding: 14px 16px; }
.custom-perk b { display: block; color: #a32d2d; font-size: 14px; margin-bottom: 6px; }
.custom-perk span { font-size: 13px; color: #6b6f78; line-height: 1.65; }
@media (max-width: 960px) { .custom-perks { grid-template-columns: repeat(2, minmax(0,1fr)); } }

.template-market-grid.case-grid { grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 16px; }
.template-case-card .case-proj-media { display: block; width: 100%; padding: 0; border: 0; background: none; cursor: pointer; font-family: inherit; position: relative; }
.template-case-card .case-proj-media img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; object-position: top center; border-radius: 8px; background: #f5f0e8; }
.template-case-card .case-proj-media:hover img { opacity: .92; }
.template-case-card .case-proj-style { position: absolute; top: 6px; left: 6px; z-index: 1; }
.case-proj-pick { margin-top: 2px; padding: 6px 10px; font-size: 13px; border-radius: 8px; }
.proj-lightbox-select { position: absolute; right: 18px; bottom: 14px; }

.template-case-card.selected { border-color: rgba(163,45,45,.55); box-shadow: 0 10px 24px rgba(140,15,20,.16); }
.template-case-card.selected::after { content: '已选'; position: absolute; top: 8px; right: 8px; z-index: 2; padding: 2px 10px; border-radius: 999px; background: #a32d2d; color: #fff7e8; font-size: 12px; }

.history-card { margin-bottom: 16px; }
.history-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; margin-top: 12px; }
.history-item { display: flex; flex-direction: column; gap: 2px; align-items: flex-start; padding: 10px 12px; background: #faf6f3; border: 1px solid rgba(163,45,45,.16); border-radius: 10px; cursor: pointer; font-family: inherit; text-align: left; }
.history-item b { font-size: 13px; color: #3a2325; }
.history-item small { font-size: 12px; color: #8a8d93; }
.history-item:hover { border-color: rgba(163,45,45,.42); }
