/* Product workspace built only on Astra's design tokens, not the test UI. */
.product { background: var(--paper); }
.product .site-header { position: relative; }
.product .site-header > .button { display: inline-flex; }
.product .screen { animation: screen-arrive 420ms var(--ease-out) both; }
.product .hero { min-height: 620px; }
.product .hero-copy, .product .hero-art { opacity: 1; transform: none; }
.product button.text-link { background: none; border: 0; cursor: pointer; }
.product button:disabled { opacity: .55; cursor: not-allowed; }
.product .work-screen { padding-top: 48px; min-height: 76vh; }
.product .work-screen h1 { font-size: clamp(30px,3.1vw,46px); letter-spacing: -.04em; }
.page-intro { margin-bottom: 42px; }
.page-intro h1 { margin: 12px 0; }
.page-intro > p:last-child { color: var(--muted); }
.section-line { display: flex; align-items: end; justify-content: space-between; gap: 20px; margin-bottom: 28px; }
.section-line h2 { font-size: 28px; }
.quiet { color: var(--muted); font-size: 13px; }
.recent-section { border-top: 1px solid var(--line); padding-top: 36px; padding-bottom: 65px; }
.recent-list { display: grid; gap: 12px; }
.recent-row { display: flex; align-items: center; gap: 22px; padding: 22px 0; border-bottom: 1px solid var(--line); text-align: left; background: transparent; cursor: pointer; }
.recent-row .row-index { color: var(--blue); font-size: 26px; }
.recent-row strong { display: block; font-size: 18px; }
.recent-row small { display: block; color: var(--muted); }
.recent-row .row-arrow { margin-left: auto; font-size: 25px; color: var(--blue); transition: transform 180ms; }
.recent-row:hover .row-arrow { transform: translate(4px,-4px); }
.prepare-layout { display: grid; grid-template-columns: 1.3fr 1fr; gap: 100px; padding-bottom: 64px; }
.prepare-form { display: grid; gap: 24px; align-content: start; }
.upload-zone { border: 1px dashed #b8c7ee; background: linear-gradient(140deg,#f8faff,#eef3ff); min-height: 210px; border-radius: 18px; position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; cursor: pointer; transition: border-color 180ms, transform 180ms; }
.upload-zone:hover { border-color: var(--blue); transform: translateY(-2px); }
.preparation-progress{margin-top:20px;padding:20px;border:1px solid #dbe6ff;border-radius:16px;background:#f6f9ff;max-width:680px}.preparation-progress ol{display:flex;flex-wrap:wrap;gap:12px;list-style:none;padding:0;margin:0 0 18px;color:#8290ab;font-size:13px}.preparation-progress .is-done{color:#16816b}.preparation-progress .is-current{color:var(--blue);font-weight:700}.preparation-progress .is-current::before{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:currentColor;margin-right:6px;animation:preparation-pulse 1.6s ease-in-out infinite}.preparation-pages{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:14px;font-size:13px}.preparation-pages progress{accent-color:var(--blue);width:190px;height:8px}@keyframes preparation-pulse{50%{opacity:.3}}@media(prefers-reduced-motion:reduce){.preparation-progress .is-current::before{animation:none}}
.upload-zone strong { font-size: 22px; overflow-wrap: anywhere; text-align: center; padding: 0 20px; }
.upload-zone > span:last-of-type { color: var(--muted); font-size: 13px; }
.upload-symbol { font-size: 35px; color: var(--blue); }
.upload-zone input, .script-upload input { position: absolute; inset: 0; opacity: 0; width: 100%; cursor: pointer; }
.upload-zone:focus-within, .script-upload:focus-within { outline: 3px solid #9fb7ff; outline-offset: 4px; }
.script-upload { position: relative; display: flex; justify-content: space-between; align-items: center; gap: 20px; padding: 20px 0; border-bottom: 1px solid var(--line); cursor: pointer; }
.script-upload strong, .script-upload small { display: block; }
.script-upload small { color: var(--muted); }
.script-upload > span:last-of-type { color: var(--blue); font-size: 13px; overflow-wrap: anywhere; }
.duration-setting { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px 0; }
.time-input { display: flex; align-items: center; gap: 8px; }
.time-input input { width: 62px; padding: 9px; border: 1px solid var(--line); border-radius: 8px; font-size: 24px; color: var(--ink); text-align: center; }
.prepare-form > .button { justify-self: start; margin-top: 10px; }
.prepare-aside { padding-top: 15px; }
.large-index { color: #dbe5ff; font-size: 90px; font-weight: 650; line-height: 1; letter-spacing: -.07em; }
.prepare-aside h2 { font-size: 35px; margin: 20px 0; }
.prepare-aside > p { color: var(--muted); max-width: 310px; }
.aside-rule { width: 40px; height: 2px; background: var(--blue); margin: 30px 0; }
.small-note { font-size: 12px; margin-top: 16px; line-height: 1.8; }
.plan-heading { align-items: center; }
.duration-overview { text-align: right; flex-shrink: 0; }
.duration-overview strong { font-size: 38px; font-weight: 550; letter-spacing: -.04em; color: var(--blue); display: block; }
.duration-overview span { font-size: 12px; color: var(--muted); }
.plan-layout { display: grid; grid-template-columns: 210px minmax(0,1fr) 220px; gap: 30px; padding-top: 10px; }
.slide-nav { max-height: 650px; overflow-y: auto; padding-right: 12px; scrollbar-width: thin; }
.slide-item { display: grid; grid-template-columns: 47px minmax(0,1fr); gap: 12px; padding: 14px 10px; border-radius: 10px; background: none; width: 100%; text-align: left; margin-bottom: 5px; cursor: pointer; transition: background 180ms; border: 1px solid transparent; }
.slide-item img { width: 47px; height: 34px; object-fit: contain; background: #f1f4fa; border-radius: 3px; }
.slide-item strong { display: block; font-size: 12px; line-height: 1.6; overflow-wrap: anywhere; }
.slide-item small { color: var(--muted); font-size: 11px; }
.slide-item[aria-current="true"] { border-color: #c5d4ff; background: var(--blue-soft); }
.slide-item:hover { background: #f5f7fc; }
.key-mark { color: #6d49b5; font-weight: 600; margin-left: 5px; }
.preview-toolbar { display: flex; justify-content: space-between; font-size: 12px; color: var(--muted); margin-bottom: 12px; gap: 12px; }
.ocr-switch { display: flex; align-items: center; gap: 7px; cursor: pointer; }
.project-toolbar { display:flex; align-items:center; gap:16px; flex-wrap:wrap; margin:24px 0; }
.project-toolbar label { display:grid; gap:8px; flex:1; min-width:0; width:100%; }
.project-toolbar input, .project-toolbar select { min-width:0; max-width:100%; }
.project-toolbar button { max-width:100%; white-space:normal; }
.project-toolbar select, #materials-form select, #project-prep-form select { width:100%; padding:12px; border:1px solid var(--line); border-radius:12px; background:white; color:inherit; }
.project-scripts { padding:20px; border:1px solid var(--line); border-radius:16px; background:#f7f9ff; }
#workspace-form, #project-prep-form { gap:12px; }
#workspace-form label, #project-prep-form label { display:grid; gap:8px; }
#workspace-form input, #workspace-form textarea, #project-prep-form input:not([type=checkbox]), #project-prep-form textarea { width:100%; min-width:0; border:1px solid var(--line); border-radius:10px; padding:10px 12px; background:#fafbff; color:var(--ink); font:inherit; }
#workspace-dialog, #project-prep-dialog { overflow-y:auto; }
#workspace-form .dialog-actions, #project-prep-form .dialog-actions { position:sticky; bottom:-12px; background:white; padding:12px 0; margin-top:4px; }
#project-prep-form label:has(input[type=checkbox]) { display:flex; align-items:center; }
@media (max-width:600px) { .project-toolbar { flex-direction:column; align-items:stretch; } }
.slide-preview { position: relative; background: #f4f6fb; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; min-height: 160px; display: grid; place-items: center; }
.slide-preview > img { width: 100%; height: auto; }
#image-missing { padding: 50px 25px; color: var(--muted); }
#ocr-boxes { position: absolute; inset: 0; pointer-events: none; }
.ocr-box { position: absolute; border: 1px solid #2457eeaa; background: #2457ee13; }
.page-notes { padding: 28px 2px; }
.page-notes h2 { font-size: 24px; margin: 10px 0; overflow-wrap: anywhere; }
.page-notes > p:not(.eyebrow) { font-size: 16px; line-height: 1.9; }
.mention-list { display: grid; gap: 8px; margin: 20px 0; }
.mention-list p { display: flex; gap: 12px; color: var(--muted); font-size: 13px; }
.mention-list p::before { content: '—'; color: var(--blue); }
.page-notes details { border-top: 1px solid var(--line); padding: 16px 0; font-size: 12px; color: var(--muted); }
.page-notes summary { cursor: pointer; }
.page-notes details p { margin-top: 12px; white-space: pre-wrap; }
.plan-aside { border-left: 1px solid var(--line); padding-left: 26px; }
.plan-aside h2 { font-size: 28px; margin: 20px 0; }
.priority-label { display: inline-block; padding: 3px 10px; background: #f1ebff; color: #6440a5; font-size: 12px; border-radius: 5px; margin-top: 16px; }
.page-duration { padding: 15px 0 25px; }
.page-duration strong { display: block; font-size: 45px; color: var(--blue); font-weight: 500; }
.page-duration span { color: var(--muted); font-size: 12px; }
.plan-aside > p:not(.eyebrow) { font-size: 13px; color: var(--muted); margin-bottom: 22px; }
.plan-aside .button { width: 100%; font-size: 13px; }
.work-footer { display: flex; align-items: center; justify-content: space-between; border-top: 1px solid var(--line); padding: 26px 0 35px; gap: 20px; }
.product-footer { display: flex; justify-content: space-between; gap: 20px; border-top: 1px solid var(--line); padding-top: 22px; padding-bottom: 24px; color: var(--muted); font-size: 11px; }
.product dialog { width: min(540px,calc(100% - 32px)); max-height: 85vh; border: 1px solid var(--line); border-radius: 24px; padding: 36px; margin: auto; color: var(--ink); box-shadow: 0 30px 100px #15275726; }
.product dialog::backdrop { background: #14244955; backdrop-filter: blur(7px); }
.product dialog[open] { animation: screen-arrive 260ms var(--ease-out); }
.product dialog h2 { margin: 12px 0; font-size: 27px; }
.dialog-close { position: absolute; right: 20px; top: 16px; background: transparent; font-size: 25px; cursor: pointer; padding: 4px 8px; }
#case-list { display: grid; gap: 10px; margin-top: 22px; }
.case-option { padding: 18px 0; text-align: left; background: transparent; border-bottom: 1px solid var(--line); cursor: pointer; }
.case-option strong { display: block; font-size: 16px; }
.case-option small { display: block; color: var(--muted); }
.case-option:hover strong { color: var(--blue); }
#edit-form label { display: grid; gap: 7px; font-size: 13px; margin-top: 18px; }
#edit-form input, #edit-form textarea { width: 100%; border: 1px solid var(--line); border-radius: 8px; padding: 10px; background: #fafbff; resize: vertical; }
.dialog-actions { display: flex; gap: 12px; justify-content: flex-end; margin-top: 24px; }
#notice { position: fixed; bottom: 26px; left: 50%; transform: translateX(-50%); padding: 15px 24px; background: var(--ink); color: white; border-radius: 12px; z-index: 100; max-width: min(560px,90vw); box-shadow: 0 10px 40px #17233d33; }
#busy { position: fixed; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; background: #ffffffef; backdrop-filter: blur(10px); z-index: 90; }
#busy span { font-size: 24px; letter-spacing: -.03em; }
#busy small { color: var(--muted); }
.busy-line { width: 90px; height: 3px; overflow: hidden; background: var(--blue-soft); border-radius: 3px; }
.busy-line::after { content: ''; display: block; width: 30%; height: 100%; background: var(--blue); animation: progress-indeterminate 1s ease-in-out infinite alternate; }
.review-summary { margin: 38px 0 50px; background: var(--blue-soft); padding: 35px; border-radius: 18px; display: flex; gap: 50px; }
.review-summary strong { display: block; font-size: 35px; color: var(--blue); }
.review-summary span { font-size: 13px; color: var(--muted); }
.review-action { padding: 25px 0; border-top: 1px solid var(--line); }
.review-action summary { cursor: pointer; display: flex; align-items: baseline; gap: 22px; }
.review-action summary span { color: var(--blue); font-size: 24px; }
.review-action summary strong { font-size: 20px; font-weight: 550; }
.review-action .evidence { padding: 20px 0 10px 50px; color: var(--muted); max-width: 760px; }
.review-action .evidence p { margin: 10px 0; }
.source-note { font-size: 12px; color: var(--muted); padding: 18px 0; }
.question-layout { display: grid; grid-template-columns: minmax(0,1.5fr) minmax(230px,1fr); gap: 80px; padding: 30px 0 60px; }
.question-text { font-size: 30px; line-height: 1.7; margin: 20px 0; }
#answer-form { margin-top: 30px; }
#answer-form label { display: block; font-size: 13px; margin-bottom: 12px; color: var(--muted); }
#answer-text { width: 100%; border: 1px solid var(--line); background: #fafbff; border-radius: 14px; padding: 18px; resize: vertical; line-height: 1.9; }
.question-aside { border-left: 1px solid var(--line); padding-left: 32px; }
.question-aside h2 { font-size: 26px; margin: 18px 0 30px; }
.question-aside summary { cursor: pointer; color: var(--blue); }
.answer-feedback { padding: 25px; background: var(--blue-soft); border-radius: 14px; margin-top: 26px; }
.answer-feedback h3 { font-size: 20px; margin-bottom: 14px; }
.answer-feedback p { margin-bottom: 14px; }
.review-secondary { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding: 30px 0; }
.review-audio { margin: 20px 0 30px; padding: 20px 0; border-bottom: 1px solid var(--line); }
.review-audio audio { display: block; width: min(100%,560px); margin-top: 10px; }
.review-audio p { margin-top: 8px; }
.practice-timer { display: flex; align-items: center; gap: 20px; padding: 28px 0; border-block: 1px solid var(--line); margin: 30px 0 20px; flex-wrap: wrap; }
.practice-timer strong { font-size: 42px; font-weight: 500; color: var(--blue); font-variant-numeric: tabular-nums; }
.practice-timer .button { margin-left: auto; }
.plan-ai-trigger { margin-top: 12px; font-size: 13px; width: 100%; }
.suggestion-choice { display: flex; gap: 12px; padding: 20px 0; border-bottom: 1px solid var(--line); cursor: pointer; }
.suggestion-choice input { margin-top: 5px; accent-color: var(--blue); }
.suggestion-choice strong,.suggestion-choice small { display: block; }
.suggestion-choice small { color: var(--muted); margin-top: 7px; }
#suggestions-content { margin: 24px 0; max-height: 40vh; overflow: auto; }
.evidence .text-link { margin-top: 12px; }
@media(max-width:800px) { .question-layout { grid-template-columns: 1fr; gap: 30px; } .question-aside { border-left: 0; border-top: 1px solid var(--line); padding: 25px 0; } .question-text { font-size: 24px; } .review-secondary { flex-wrap: wrap; } }
:focus-visible { outline: 3px solid #9fb7ff; outline-offset: 4px; }
@keyframes screen-arrive { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: none; } }
@keyframes progress-indeterminate { to { transform: translateX(230%); } }
@media(max-width:1100px) { .plan-layout { grid-template-columns: 160px minmax(0,1fr) 180px; gap: 20px; } .prepare-layout { gap: 45px; } .plan-aside { padding-left: 18px; } }
@media(max-width:800px) { .product .shell { width: calc(100% - 40px); } .product .hero { min-height: auto; padding-bottom: 50px; } .prepare-layout { grid-template-columns: 1fr; } .prepare-aside { border-top: 1px solid var(--line); padding-top: 28px; } .prepare-aside .large-index { display: none; } .plan-layout { grid-template-columns: 130px minmax(0,1fr); } .plan-aside { grid-column: 2; border: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 16px; } .plan-aside > .eyebrow,.plan-aside h2,.plan-aside .small-note { display: none; } .plan-aside .button { width: auto; } .page-duration { padding: 0; } .page-duration strong { font-size: 25px; } .plan-aside > p { margin: 0!important; } .section-line { align-items: start; } }
@media(max-width:540px) { .product .shell { width: calc(100% - 32px); } .product .site-header { padding: 20px 16px; } .product .site-header nav { display: none; } .product .work-screen { padding-top: 30px; } .product .hero-art { min-height: 400px; } .section-line { flex-wrap: wrap; } .plan-heading { gap: 12px; } .duration-overview { display: flex; gap: 14px; align-items: center; } .duration-overview strong { font-size: 25px; } .plan-layout { display: flex; flex-direction: column; } .slide-nav { display: flex; overflow-x: auto; overflow-y: hidden; padding: 0 0 10px; max-height: none; } .slide-item { min-width: 155px; width: 155px; } .slide-item strong { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .plan-aside { display: flex; } .work-footer { align-items: stretch; flex-direction: column; } .work-footer .button { justify-content: center; } .duration-setting { flex-wrap: wrap; } .time-input .quiet { display: none; } .product-footer span:last-child { display: none; } .review-summary { gap: 24px; flex-wrap: wrap; padding: 24px; } .review-action summary strong { font-size: 17px; } .product dialog { padding: 28px 22px; } }
@media(prefers-reduced-motion:reduce) { .product *, .product *::before, .product *::after { animation: none!important; transition: none!important; } }
@media(max-width:800px) { .product .hero::before { inset-inline: -20px; } }
.product:has(#capture:not([hidden])) .site-header, .product:has(#capture:not([hidden])) .product-footer { display:none; }
#capture.shell { width:calc(100% - 48px);max-width:1800px;padding-top:18px;padding-bottom:24px; }
.capture-topbar { display:flex;align-items:center;gap:20px;margin-bottom:16px; }
#capture .capture-topbar h1 { font-size:20px;margin:0;letter-spacing:-.02em;white-space:nowrap; }
.capture-topbar > p { flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted); }
.capture-layout { display:block; }
/* P13：有讲稿时 PPT 仍占主导，提词区在右侧约 25%–30%，可收起。 */
.capture-layout.has-prompter { display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,28%);gap:20px;align-items:start; }
.capture-prompter { display:flex;flex-direction:column;gap:8px;border:1px solid #dce6f7;border-radius:16px;background:#f8fbff;padding:12px;max-height:calc(100dvh - 260px); }
.capture-prompter-head { display:flex;flex-direction:column;gap:2px; }
.capture-prompter-head strong { font-size:15px;overflow-wrap:anywhere; }
.capture-prompter-scroll { overflow:auto;background:#fff;border:1px solid #e6eefb;border-radius:12px;padding:12px;flex:1;min-height:160px; }
#prompter-text { margin:0;line-height:1.7;color:#22314e;white-space:pre-wrap; }
.capture-prompter-controls { display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--muted); }
.capture-prompter-controls select { font:inherit;font-size:13px;padding:4px 6px;border:1px solid #dce6f7;border-radius:8px;background:#fff; }
/* P11：计时三态。临近黄色、超出红色并显示超出时间；到达参考时长不阻断讲述。 */
.capture-time.is-near strong { color:#b7791f; }
.capture-time.is-near strong::before { background:#e0a63a; }
.capture-time.is-over strong { color:#c53030; }
.capture-time.is-over strong::before { background:#e05252; }
#capture-overtime { color:#c53030;font-style:normal;font-size:13px; }
/* P16：一条控制栏；异常突出，细节按需展开。 */
.capture-bar { display:flex;align-items:center;gap:14px;flex-wrap:wrap; }
.capture-bar #capture-status { margin:0; }
.capture-draft { font-size:13px;color:#16816b;white-space:nowrap; }
.capture-draft.is-warning { color:#c53030;font-weight:600; }
.capture-more { font-size:13px;color:var(--muted); }
.capture-more summary { cursor:pointer;color:#36577f; }
.capture-timer-note { margin:0;font-size:13px;color:var(--muted); }
#capture-toolbar { display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap; }
.capture-nav { display:flex;align-items:center;gap:10px;flex-wrap:wrap; }
/* P21 等待页：首屏就是任务本身（标题、材料摘要、真实阶段、已等待、离开入口），
   不再把一台巨大的播放器压在等待内容上方。 */
.review-waiting { display:flex;flex-direction:column;gap:10px;max-width:760px;padding:22px 24px;background:#fff;border:1px solid #dce6f7;border-radius:18px; }
.review-waiting-title { margin:0;font-size:24px;line-height:1.3;color:var(--ink); }
.review-waiting-stage { margin:2px 0 0;font-size:16px;color:var(--blue); }
.review-waiting-stage strong { font-weight:600; }
#review-waiting-source { margin:0; }
#review-player-later > summary { cursor:pointer;color:var(--blue);font-size:14px; }
#review-player-later .quiet { margin:8px 0 0; }
/* P19/Area5 统一播放器：全屏进入的是播放舞台本身（画面 + 控件），同一台播放器、同一时间轴。 */
.review-player-stage { display:flex;flex-direction:column;gap:12px;min-width:0; }
.review-player-bar { display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-top:10px; }
.review-player-bar .quiet { margin:0; }
.review-player-actions { display:flex;align-items:center;gap:14px;flex-wrap:wrap; }
.review-speed { display:inline-flex;align-items:center;gap:6px; }
.review-speed select { font:inherit;font-size:14px;padding:4px 8px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink); }
#review-stage-fullscreen:fullscreen { background:#0d1420;padding:24px;display:flex;flex-direction:column;justify-content:center;gap:16px; }
#review-stage-fullscreen:fullscreen audio { width:min(100%,720px);margin:0 auto; }
#review-stage-fullscreen:fullscreen .follow-body { margin:0 auto;width:min(100%,1280px); }
#review-stage-fullscreen:fullscreen .follow-body img { max-height:62dvh; }
#review-stage-fullscreen:fullscreen .source-note,
#review-stage-fullscreen:fullscreen .quiet { color:#c7d3e6; }
#review-stage-fullscreen:fullscreen .follow-timeline button { background:transparent;border-color:#33415c;color:#dbe5f5; }
#review-stage-fullscreen:fullscreen .follow-timeline button[aria-current=true] { border-color:#7aa7ff;color:#a8c6ff;background:rgba(122,167,255,.16); }
@media(prefers-reduced-motion:reduce){#review-stage-fullscreen:fullscreen *{transition:none!important;animation:none!important}}
/* P31：讲述与回放期间画面与控制保持静止——不做悬停位移、扫光或缩放，
   动效只留给面板、阶段、保存、进度与证据展开这些「状态变化」。 */
#capture .button:hover, #capture .button:active, #capture .button:hover::before,
#review .button:hover, #review .button:active, #review .button:hover::before,
#review .text-link:hover { transform:none; }
#capture .button:hover::before, #review .button:hover::before { opacity:0; }
#capture-slide, #follow-image, #stored-follow-image { transition:none; }
/* P19/P31：预览失败时把画面压扁而不是隐藏——不留大片空白，也不影响回听与翻页核对。 */
.follow-body.preview-failed img { max-height:120px;min-height:120px;opacity:.35;cursor:default; }
/* P31：动效只服务「状态变化」——面板出现、证据展开、阶段与保存状态更新；
   讲述与回放画面不参与。减少动态效果时由全局规则统一关闭。 */
#review-first, #review-summary, #review-pending, #review-comparison, #review-trust,
#review-actions > .review-secondary, #review-actions details {
  transition: opacity 220ms ease, transform 220ms ease;
}
#review-actions details > * { transition: opacity 180ms ease; }
#review-stage, #capture-status, #transcript-status, #prep-settings-status, #capture-draft-status {
  transition: color 180ms ease;
}
.review-action[open] > .evidence, #review-tools[open] > *, #review-improve[open] > *, #review-comparison[open] > * {
  animation: studio-reveal 220ms ease;
}
@keyframes studio-reveal { from { opacity:0; transform: translateY(-4px); } to { opacity:1; transform:none; } }
#capture .follow-body img:hover, #review .follow-body img:hover { transform:none; }
/* P18：保存后的「回顾」状态。窄屏下不允许横向溢出：按钮换行、播放器自适应宽度。 */
.review-pending { display:flex;flex-direction:column;gap:16px;min-width:0; }
.review-pending .review-secondary { display:flex;flex-direction:column;gap:12px;min-width:0; }
.review-pending .dialog-actions { display:flex;flex-wrap:wrap;gap:10px;align-items:center; }
.review-pending .dialog-actions .button { max-width:100%;white-space:normal;text-align:center; }
.review-pending .review-audio { min-width:0; }
.review-pending .review-audio audio { display:block;width:100%;max-width:100%; }
.review-pending .script-upload { min-width:0; }
.review-pending .script-upload input { max-width:100%; }
.review-pending .follow-body { display:flex;gap:14px;flex-wrap:wrap;min-width:0; }
.review-pending .follow-body img { max-width:100%;height:auto; }
.capture-stage { background:var(--mist);border:1px solid #e1e8f4;border-radius:18px;overflow:hidden; }
.capture-toolbar { display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;padding:16px 0; }
.capture-toolbar .dialog-actions { margin:0;align-items:center; }
.capture-actions { display:flex;gap:12px;flex-wrap:wrap; }
.capture-time { display:flex;align-items:baseline;gap:12px; }
.capture-time strong::before { content:'';display:inline-block;width:8px;height:8px;margin-right:10px;border-radius:50%;background:#ee5262; }
#capture-status { font-size:13px;color:var(--muted);margin:0 0 12px; }
.capture-playback { display:flex;align-items:center;gap:20px;flex-wrap:wrap; }
.review-trust { padding:0;background:none;border:0;border-radius:0;margin:0 0 22px;overflow-wrap:anywhere; }
.review-trust > details { border:1px solid var(--line);border-radius:var(--radius);background:var(--canvas);padding:12px 18px; }
.review-trust > details > summary { cursor:pointer;font-size:13px;color:var(--muted); }
.review-trust-body { padding:12px 0 4px; }
.review-trust-body p { color:var(--muted);margin:6px 0;font-size:13px; }
.review-metrics{margin:0 0 26px}
.review-metrics .sf-meter-group{padding:20px 22px;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.review-evidence-line{display:flex;gap:22px;flex-wrap:wrap;margin:0 0 6px}
.review-evidence-line span{font-size:13px;color:var(--muted)}
.review-evidence-line b{color:var(--ink);font-variant-numeric:tabular-nums}
.review-metrics .sf-metric{font-size:26px;font-weight:600;font-variant-numeric:tabular-nums;margin-right:6px}
.review-more { margin:24px 0; }.review-more > summary { cursor:pointer;color:var(--blue);padding:18px 0; }
.comparison-grid { display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:22px;margin:22px 0; }
.evidence-links { display:flex;flex-wrap:wrap;gap:18px;margin-top:18px; }.review-transcript { white-space:pre-wrap;overflow-wrap:anywhere; }.evidence { overflow-wrap:anywhere; }
#capture-slide { display:block;width:100%;aspect-ratio:16/9;max-height:calc(100dvh - 210px);object-fit:contain;background:var(--mist); }
.capture-stage{justify-content:center}
.capture-page-counter { display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--muted); }
.capture-page-counter input { width:3.5em;padding:5px 2px;border:0;border-bottom:1px solid transparent;background:transparent;text-align:right;color:var(--ink);font:inherit;appearance:textfield; }
.capture-page-counter input:focus { outline:2px solid var(--blue);outline-offset:3px;border-radius:3px; }
.capture-page-counter input::-webkit-inner-spin-button,.capture-page-counter input::-webkit-outer-spin-button { appearance:none;margin:0; }
#capture-clock { font-size:26px;font-variant-numeric:tabular-nums; }
/* Recording controls stay under the pointer after page jumps and focus changes. */
#capture .button:hover, #capture .button:active { transform:none; }
#capture-preview { width:min(100%,560px); }
.capture-text-preview { min-height:320px;padding:36px;background:var(--mist);border-radius:18px; }
.speech-live { padding:0 0 24px;margin-bottom:20px;border-bottom:1px solid var(--line); }
@media(max-width:800px) { .capture-topbar > .quiet { display:none; } .capture-toolbar { gap:12px; } }
@media(max-width:540px) { #capture.shell { width:calc(100% - 24px); } #capture .dialog-actions { gap:6px; } #capture .dialog-actions .button { padding:10px 8px; } #capture .capture-actions { width:100%; } #capture .capture-actions .button { flex:1;justify-content:center; } }
@media(max-width:540px) { .product .hero::before { inset-inline: -16px; } .product .hero-art { overflow: hidden; overflow-clip-margin: 0; } }
.follow-head{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin-top:20px}.follow-head .eyebrow{margin:0}
.follow-body{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start;margin:16px 0}
.follow-body img{width:100%;aspect-ratio:16/9;max-height:70dvh;object-fit:contain;background:var(--mist);border-radius:14px;cursor:pointer}
.stored-replay img{width:100%;aspect-ratio:16/9;max-height:65dvh;object-fit:contain;background:var(--mist);border-radius:16px}
.follow-body strong{display:block;font-size:19px;color:var(--ink);margin-bottom:6px}
.follow-timeline{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 4px}
.follow-timeline button{border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 13px;font:inherit;font-size:12px;color:var(--ink);cursor:pointer}
.follow-timeline button[aria-current=true]{border-color:var(--blue);color:var(--blue);font-weight:600;background:var(--blue-soft)}
@media(max-width:700px){.follow-body{grid-template-columns:1fr}}
.home-status-section{padding-top:44px}.home-status{display:grid;gap:14px;margin:22px 0}
.home-state{display:flex;align-items:center;justify-content:space-between;gap:22px;padding:20px 24px;border:1px solid var(--line);border-radius:16px;background:#fff}
.home-state strong{display:block;font-size:17px;color:var(--ink);margin-bottom:4px}
.home-state p{margin:0;max-width:640px}
.home-new{border-color:#c5d4ff;background:var(--blue-soft)}.home-warn{border-color:#f0d3ac;background:#fff8ef}.home-busy{background:#f7f9ff}
.recent-more{border-top:0;padding-top:8px;align-items:center}
.history-filter{display:flex;gap:8px;margin:22px 0 6px;flex-wrap:wrap}
.history-filter button{border:1px solid var(--line);background:#fff;border-radius:999px;padding:8px 16px;font:inherit;font-size:13px;color:var(--ink);cursor:pointer}
.history-filter button[aria-current=true]{border-color:var(--blue);color:var(--blue);font-weight:600;background:var(--blue-soft)}
.history-list{display:grid;gap:14px;margin:18px 0 30px}
.history-row{display:flex;align-items:center;justify-content:space-between;gap:22px;padding:22px 24px;border:1px solid var(--line);border-radius:16px;background:linear-gradient(120deg,#fff,#f7f9ff)}
.history-row strong{display:block;font-size:17px;margin:6px 0 4px;overflow-wrap:anywhere}
.history-row p{margin:2px 0}
.history-kind{display:inline-block;font-size:11px;letter-spacing:.06em;padding:5px 10px;border-radius:20px;background:#e9effb;color:#37517d}
.history-drill{background:#eef7f1;color:#1d5c43}
.history-actions{white-space:nowrap}
.score-total-incomplete strong{color:var(--muted)}
.score-total-incomplete span{color:var(--ink)}
#drill-goal-text-wrap{display:block;margin-top:12px}
#drill-goal-text{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px;font:inherit;font-size:13px;margin-top:6px}
.goal-evidence{margin:12px 0;border-top:1px solid var(--line);padding-top:10px}
.goal-evidence p{margin:4px 0;color:var(--muted);font-size:13px}
.goal-evidence small{color:#9aa7bd}
#transcript-original,#transcript-corrected{width:100%;border:1px solid var(--line);border-radius:8px;padding:10px;font:inherit;font-size:13px;margin-top:6px;resize:vertical}
#transcript-original{background:var(--mist);color:var(--muted)}
.version-list{display:flex;flex-direction:column;gap:8px;margin:10px 0}
.version-row{display:flex;flex-direction:column;gap:2px;text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fff;cursor:pointer;font:inherit}
.version-row small{color:var(--muted);font-size:12px}
.version-row.is-current{border-color:#9db8e8;background:#f4f8ff}
.version-row.is-viewing{box-shadow:inset 3px 0 0 var(--blue,#2f6bd8)}
.version-detail{border-top:1px solid var(--line);padding-top:10px}
.history-compact .history-row{padding:16px 18px;background:#fff}
.review-first{margin:0 0 28px}
.review-headline{font-size:clamp(20px,2.4vw,28px);line-height:1.5;letter-spacing:-.02em;color:var(--ink);margin:6px 0 10px}
.review-next{color:var(--muted);margin:0 0 20px}
.review-next strong{color:var(--ink)}
.review-score{border:1px solid var(--line);border-radius:18px;padding:24px 26px;background:#fff;margin:18px 0}
.score-total{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
.score-total strong{font-size:44px;color:var(--blue);font-variant-numeric:tabular-nums;line-height:1}
.score-total span{color:var(--muted);font-size:13px}
.score-state{font-size:12px;padding:5px 10px;border-radius:20px;background:var(--blue-soft);color:#37517d;font-style:normal}
.score-not_assessable{background:#fff0dc;color:#794817}.score-reference{background:#fff8ef;color:#7a5a1f}
.score-dims{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin:20px 0 6px}
.score-dim{border-top:2px solid var(--line);padding-top:10px;display:grid;gap:4px}
.score-dim span{font-size:13px;color:var(--muted);display:flex;justify-content:space-between;gap:8px}
.score-dim span small{color:#9aa7bd}
.score-dim strong{font-size:20px;color:var(--ink);font-variant-numeric:tabular-nums}
.score-dim em{font-size:11px;font-style:normal;color:var(--muted)}
.score-dim.score-missing strong,.score-dim.score-not_applicable strong{color:#9aa7bd}
.score-missing-list{border-top:1px solid var(--line);padding-top:14px;margin-top:14px;font-size:13px}
.score-missing-list p{margin:6px 0;color:var(--muted)}
.review-improvements{margin:26px 0}
.review-improvements{margin:10px 0 0}
.review-improvements .section-line{margin-bottom:2px}
.review-improvements .section-line h2{font-size:20px}
.review-improvements{display:grid;gap:14px}
/* 行动卡：第一层只放缩略图 + 标题，缩略图不抢整行的注意力 */
.review-improvements .sf-action-card{padding:16px 18px;gap:10px}
.review-improvements .sf-action-card__media{display:grid;grid-template-columns:124px minmax(0,1fr);gap:14px;align-items:start}
.review-improvements .sf-action-card__thumb{position:relative;width:124px;aspect-ratio:16/9;padding:0;border:1px solid var(--line);cursor:pointer;font:inherit}
.review-improvements .sf-action-card__thumb img{width:100%;height:100%;object-fit:contain;border-radius:0}
.review-improvements .sf-action-card__thumb span{position:absolute;left:0;bottom:0;right:0;font-size:11px;padding:2px 6px;background:#17233ddd;color:#fff}
.review-improvements .sf-action-card__title{font-size:17px;line-height:1.45}
.review-improvements .sf-action-card__foot{gap:10px}
.improvement{display:flex;align-items:center;justify-content:space-between;gap:22px;padding:20px 0;border-top:1px solid var(--line)}
.improvement strong{display:block;font-size:16px;margin-bottom:4px}
.improvement p{margin:3px 0;max-width:620px}
.speech-prep{border:1px solid var(--line);border-radius:18px;padding:24px;background:linear-gradient(120deg,#fff,#f5f8ff);margin-bottom:24px}
.prep-head{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:20px;align-items:start}
.prep-image{width:100%;aspect-ratio:16/9;object-fit:contain;background:var(--mist);border-radius:12px}
.prep-head h2{font-size:22px;margin:8px 0 6px}
.prep-understanding{margin-top:10px;color:var(--ink)}
.prep-focus{margin:18px 0 0;border-top:1px solid var(--line);padding-top:14px}
.prep-focus p{margin:6px 0;color:var(--muted)}
.prep-focus strong{color:var(--ink)}
.prep-mic{display:flex;align-items:center;gap:16px;margin-top:14px;flex-wrap:wrap}
.prep-versions{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.prep-version-picker > summary{cursor:pointer;color:var(--blue);font-size:13px}
.choice-native{display:none!important}
#prep-input-level{width:100%;height:8px;accent-color:#16816b}#prep-mic-device-label{font-size:12px}#prep-mic-device{max-width:100%;font:inherit;border:1px solid #dce6f7;border-radius:8px;padding:6px}#speech-import-preview{width:100%;height:36px}
#speech #preparation-actions .upload-zone{min-height:72px;gap:6px;padding:10px}#speech #preparation-actions .upload-symbol{display:none}#speech #speech-form>.quiet{margin:0}
#speech .preparation-settings .prep-mic{grid-template-columns:auto minmax(0,1fr);gap:6px 12px}#prep-input-level,#prep-mic-device-label{grid-column:1/-1}#speech .prep-mic .button{min-height:0;height:36px;padding:6px 12px}
.prep-settings-form{display:grid;gap:9px;margin:12px 0}.prep-settings-form label{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px}.prep-settings-form input[type=number]{width:90px;padding:7px;border:1px solid #dce6f7;border-radius:8px;font:inherit}.prep-settings-form select{padding:6px;border:1px solid #dce6f7;border-radius:8px;font:inherit;font-size:12px}.prep-settings-form summary{font-size:12px;cursor:pointer;color:#36577f}.prep-settings-form details label{margin-top:8px;flex-wrap:wrap}.prep-settings-form textarea,.prep-settings-form input:not([type]){max-width:100%;border:1px solid #dce6f7;border-radius:8px;padding:8px;font:inherit}
.preparation-settings .prep-understanding{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.preparation-settings .prep-mic .button{padding:9px 14px}
#speech .preparation-settings{padding:14px}#speech .preparation-settings .source-note{margin-bottom:8px}#speech .preparation-settings h2{margin-bottom:6px}#speech .preparation-settings .prep-understanding{margin:8px 0}#speech .preparation-settings .prep-mic{margin:8px 0;gap:4px}#speech .prep-options{margin:8px 0}#speech .prep-settings-form{margin:8px 0;gap:6px}#speech .prep-mode{margin:8px 0}#speech #preparation-actions .speech-live{margin-top:8px}
#speech.work-screen{padding-top:24px;min-height:0}#speech .page-intro{margin-bottom:20px}#speech .page-intro h1{margin:0 0 8px}
#speech .page-intro{display:flex;align-items:baseline;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:16px}#speech .page-intro h1{font-size:32px;margin:0}#speech .page-intro p{margin:0}
.preparation-workspace{display:grid;grid-template-columns:minmax(0,2fr) minmax(270px,1fr);gap:28px;padding:0;background:none;border:0}
/* ==== U05/U06：开始练习的页面内工作区（不再用两层居中弹窗） ==== */
#sheet-portal:not(:empty){display:block;margin-top:20px}
#sheet-portal .sf-sheet{animation:sheet-in 240ms var(--ease) both}
@keyframes sheet-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.sheet-host-in{display:block;margin-top:18px}
.start-flow{margin-top:26px;padding:28px 30px 30px;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--canvas)}
.start-flow[hidden]{display:none}
.start-flow-bar{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:6px}
.start-flow-bar h2{font-size:clamp(24px,2.2vw,30px);margin:8px 0 6px}
.start-flow-bar .eyebrow{color:var(--blue)}
.start-flow-tools{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap}
.start-flow-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:16px;margin:18px 0 0}
#start-flow-more{margin-top:14px}
#start-flow-more>summary{cursor:pointer;font-size:13px;color:var(--blue)}
#start-flow-more .start-flow-list{margin-top:14px}
#start-flow-status{margin:8px 0 0}
.start-round{margin-top:26px;padding:24px 26px;border:1px solid #c5d4ff;border-radius:var(--radius);background:#fff}
.start-round-head h3{font-size:20px;margin-bottom:6px;overflow-wrap:anywhere}
.start-round-pair{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:18px 0}
.start-round-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px;align-items:end;margin-bottom:8px}
.start-round-meta .sf-time input{width:58px}
#sheet-portal .sf-sheet{margin-top:20px}
#start-round #sheet-portal{margin:16px 0 0}
.start-round-more{margin:6px 0 12px}
.start-round-more>summary{cursor:pointer;font-size:13px;color:var(--muted)}
.start-round-note{margin:10px 0 0}
.start-round .dialog-actions{margin-top:16px}
#start-round-go{position:relative}
#start-round-go[aria-busy=true]{opacity:.85}
/* 表单与选择：全站统一外观，不再混用浏览器默认 select 与自制按钮 */
.sf-field{display:grid;gap:7px;min-width:0}
.sf-field-label{font-size:12px;font-weight:600;color:var(--muted)}
.sf-field-inline{display:grid;gap:6px;font-size:12px;font-weight:600;color:var(--muted)}
.sf-field-inline input[type=search]{padding:9px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;font:inherit;font-weight:400;font-size:13px;color:var(--ink);min-width:180px}
.sf-field-inline input:focus-visible{outline:3px solid #7297ff;outline-offset:2px}
.sf-field input:not([type=checkbox]):not([type=radio]),.sf-field textarea,.sf-field select{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:#fff;font:inherit;color:var(--ink)}
.sf-field textarea{resize:vertical}
.sf-check{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink);margin:10px 0}
.sf-time{display:flex;align-items:center;gap:8px}
.sf-time input{width:64px;padding:8px;border:1px solid var(--line);border-radius:var(--radius-sm);font:inherit;font-size:17px;text-align:center;font-variant-numeric:tabular-nums}
.sf-slot{min-width:0;display:grid}
.sf-slot>.sf-item-card{height:100%}
/* 横向紧凑变体：配对与选择面板里缩略图只是识别依据，不该抢走整行的注意力。 */
.sf-item-card.is-compact{grid-template-columns:132px minmax(0,1fr);gap:4px 14px;align-items:start;padding:12px 14px 12px 17px}
.sf-item-card.is-compact .sf-item-card__thumb{grid-row:1 / span 4;align-self:start}
.sf-item-card.is-compact .sf-item-card__name{font-size:15px}
.sf-item-card.is-compact .sf-item-card__meta{font-size:12px}
.sf-item-card.is-compact .sr-only{grid-column:2}
.sf-item-card__thumb.is-failed,.sf-thumbs__img.is-failed,.sf-action-card__thumb.is-failed{position:relative}
.sf-item-card__thumb.is-failed::after,.sf-thumbs__img.is-failed::after,.sf-action-card__thumb.is-failed::after{
  content:'预览加载失败';position:absolute;inset:0;display:grid;place-items:center;font-size:11px;color:var(--muted);
}
.sf-item-card__thumb.is-failed img,.sf-thumbs__img.is-failed img,.sf-action-card__thumb.is-failed img{opacity:0}
.sf-nowrap{white-space:nowrap}
.sheet__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:14px}
.sf-sheet__foot{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px}
/* ==== U07：准备页两栏严格齐平 ==== */
.prep-workspace{display:grid;grid-template-columns:minmax(0,2fr) minmax(300px,1fr);gap:26px;align-items:stretch;
  /* 让工作区占满可用高度，而不是在大屏上留一条无用途的空白带。 */
  min-height:min(calc(100dvh - 300px),860px)}
.prep-deck,.preparation-settings{display:flex;flex-direction:column;min-width:0;padding:20px;background:#fff;border:1px solid var(--line);border-radius:var(--radius);align-self:stretch}
.preparation-settings{padding:20px;background:#fff;border:1px solid #dce6f7;border-radius:18px;align-self:stretch}
.preparation-settings h2{font-size:20px;margin:0 0 4px}
.prep-deck-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:12px}
.prep-deck-heading strong{display:block;font-size:17px;overflow-wrap:anywhere}
.prep-pair{margin:4px 0 0}
.preparation-settings .prep-understanding{font-size:14px;line-height:1.65;margin:10px 0}
.preparation-settings .prep-mic{display:grid;gap:8px;margin:12px 0}
.preparation-settings .prep-options{margin:12px 0}
.preparation-settings .prep-mode{margin:0 0 14px;display:grid;gap:6px}
#preparation-actions{margin-top:auto;padding-top:16px}
#preparation-actions .speech-live{margin:0;padding:0;border:0}
#preparation-actions .button-blue{width:100%}
.prep-pages{margin:14px 0 0}
.prep-pages>summary{cursor:pointer;font-size:13px;color:var(--blue)}
.prep-pages[open]>.sf-thumbs{margin-top:12px}
.prep-pages .sf-thumbs-more{margin-top:12px}
.prep-reminder{margin:10px 0 0}
.prep-focus{margin:14px 0 0;border-top:1px solid var(--line);padding-top:12px;display:flex;gap:12px;flex-wrap:wrap;align-items:baseline}
.prep-focus .text-link{font-size:13px;text-align:left}
.prep-preview-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.prep-preview-controls #prep-preview-title{margin:0;flex:1;min-width:0}
.sf-page-input{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.sf-page-input input{width:52px;padding:6px;border:1px solid var(--line);border-radius:var(--radius-sm);text-align:center;font:inherit}
#prep-preview-stage{flex:1;min-height:200px;max-height:calc(100dvh - 400px);display:grid;place-items:center;background:#edf3fb;border:1px solid #dce6f7;border-radius:14px;overflow:hidden}
#prep-preview-stage .prep-image{width:100%;height:100%;max-height:100%;object-fit:contain;border-radius:0}
#prep-preview-error{padding:24px;color:#9f2525;text-align:center}
@media(max-width:900px){.prep-workspace{grid-template-columns:1fr;min-height:0}#prep-preview-stage{min-height:44vw}}
/* ==== U09/U10：准备页设置使用共享开关与分段控件 ==== */
.prep-settings-form{display:grid;gap:12px;margin:12px 0}
.prep-settings-form .sf-field:has(>input[type=number]){grid-template-columns:auto minmax(0,1fr);align-items:center;gap:4px 10px}
.prep-settings-form .sf-field:has(>input[type=number]) .sf-field-label{white-space:nowrap}
.prep-settings-form .sf-field>input[type=number]{width:100%;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);font:inherit;font-variant-numeric:tabular-nums}
.prep-pair{display:flex;gap:8px 14px;flex-wrap:wrap;align-items:baseline}
.prep-pair b{color:var(--ink);font-weight:600}
.prep-settings-form>details{margin-top:4px}
.prep-settings-form>details>summary{cursor:pointer;font-size:12px;color:var(--muted)}
.prep-settings-form>details .sf-field{margin-top:10px}
.prep-settings-form .sf-switch{justify-content:flex-start;gap:10px}
.prep-settings-form .sf-switch-note{margin:-6px 0 0}
.prep-settings-form #prep-save-panel{display:grid;gap:10px;justify-items:start}
.prep-settings-form .sf-check{margin:0}
@media(max-height:820px){
  .start-flow{padding:22px 24px}
  #prep-preview-stage{min-height:180px}
}
/* 矮屏（1366×768 等）：把「材料 + 本次讲解 + 开始按钮」压进同一屏，
   两侧外框仍然上下齐平，不靠裁切内容换空间。 */
@media(max-height:800px){
  #speech.work-screen{padding-top:10px}
  #speech .page-intro{margin-bottom:10px}
  #speech .page-intro h1{font-size:24px}
  .prep-deck,.preparation-settings{padding:12px 14px}
  .prep-deck-heading{margin-bottom:8px}
  #prep-preview-stage{min-height:120px;max-height:calc(100dvh - 430px)}
  /* 提醒是规格要求的内容，矮屏只压成一行，不整条拿掉。 */
  .prep-reminder{margin:6px 0 0;font-size:12px;line-height:1.5;
    display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
  .prep-focus{margin-top:8px;padding-top:8px;font-size:12px}
  .prep-settings-form{gap:9px;margin:8px 0}
  /* 矮屏只压缩材料理解的行数，不把它整条拿掉——它是准备页必须显示的内容。 */
  .preparation-settings .prep-understanding{-webkit-line-clamp:1;font-size:13px;margin:6px 0}
  .prep-mode{margin-bottom:10px}
  .preparation-settings .prep-mic{margin:8px 0}
  #preparation-actions{padding-top:10px}
  #preparation-actions .button{min-height:44px}
  /* 矮屏：主按钮贴住视口底部，不靠裁切内容换空间，内容超出时正常滚动。 */
  #preparation-actions{position:sticky;bottom:0;z-index:3;background:linear-gradient(#fff 78%,#fff0);padding-bottom:10px}
}
/* ==== U11：讲述页 PPT 与提词器上下沿齐平、共同占满工作区 ==== */
.capture-layout{display:block}
.capture-layout.has-prompter{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,26%);gap:20px;align-items:stretch}
#capture .capture-layout{min-height:min(66dvh,620px)}
.capture-stage{display:flex;flex-direction:column;min-width:0;background:var(--mist);border:1px solid #e1e8f4;border-radius:var(--radius);overflow:hidden}
.capture-prompter{display:flex;flex-direction:column;gap:10px;min-width:0;min-height:0;max-height:none;border:1px solid #dce6f7;border-radius:var(--radius);background:#f8fbff;padding:14px}
.capture-prompter-scroll{flex:1;min-height:0;overflow:auto;background:#fff;border:1px solid #e6eefb;border-radius:12px;padding:14px}
.capture-prompter-scroll p{margin:0;line-height:2}
.capture-prompter-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.capture-prompter-controls .button{min-height:36px;padding:6px 12px;font-size:13px}
.capture-prompter-state{margin:0;font-size:12px;color:var(--sf-warn,#a2660a)}
.prompter-glyph{font-size:12px;line-height:1}
@media(max-width:900px){.capture-layout.has-prompter{grid-template-columns:1fr}.capture-prompter{max-height:44dvh}}
@media(min-width:901px){
  #capture .capture-layout.has-prompter{height:min(72dvh,calc(100dvh - 180px));min-height:320px}
  #capture .capture-layout.has-prompter .capture-stage{min-height:0}
  #capture .capture-layout.has-prompter #capture-slide{height:100%;max-height:100%;aspect-ratio:auto;object-fit:contain}
  #capture-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) auto minmax(240px,1fr)}
  #capture-toolbar .capture-actions{justify-content:flex-end}
  #capture-toolbar .capture-time{font-variant-numeric:tabular-nums}
}
/* ==== U19：分析等待是一个紧凑的任务状态，不是一台巨大 PPT ==== */
.review-waiting{display:flex;flex-direction:column;gap:12px;max-width:720px;padding:22px 24px;background:#fff;border:1px solid #c5d4ff;border-radius:var(--radius)}
.review-waiting-title{margin:0;font-size:22px;line-height:1.35;color:var(--ink)}
.review-waiting-stage{margin:0;font-size:16px;color:var(--blue)}
.review-waiting-stage strong{font-weight:600}
.review-waiting-trail{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 0;padding:0;list-style:none}
.review-waiting-trail li{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:5px 11px}
.review-waiting-trail li.is-done{color:var(--green,#237c68);border-color:#cfe6de}
.review-waiting-trail li.is-current{color:var(--blue);border-color:#c5d4ff;background:var(--blue-soft);font-weight:600}
.review-waiting-trail li::before{content:'';width:7px;height:7px;border-radius:50%;background:currentColor}
#review-player-later{margin:0}
#review-player-later>summary{font-size:13px}
/* ==== U21：复盘第一屏用不对称两栏回答三个问题 ==== */
.review-first{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(300px,1fr);gap:28px;align-items:start;margin:0 0 30px}
.review-first-lead{display:flex;flex-direction:column;gap:14px;min-width:0}
.review-first-side{min-width:0;position:sticky;top:104px}
.review-first-side .review-score{margin:0}
.review-headline{font-size:clamp(20px,2.2vw,27px);line-height:1.5;letter-spacing:-.02em;color:var(--ink);margin:6px 0 0}
.review-next{color:var(--muted);margin:0}
.review-next strong{color:var(--ink)}
.review-score{border:1px solid var(--line);border-radius:var(--radius);padding:20px 22px;background:#fff;margin:0;min-width:0}
.review-score .score-total strong{font-size:38px}
.review-first-actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:4px}
@media(max-width:900px){.review-first{grid-template-columns:1fr}}
/* U15：画面与控制带必须同屏可见——给舞台一个**确定**的高度，
   避免 aspect-ratio + max-height 让画面溢出并盖住控制带。 */
#review-player .sf-player__stage{height:min(calc(100dvh - 330px),620px);max-height:none;overflow:hidden}
/* 绝对定位铺满舞台：百分比高度在 aspect-ratio 场景下会解析成原始比例高度，导致溢出。 */
#review-player .sf-player__frame{position:absolute;inset:0;width:100%;height:100%}
#review-player .sf-player__meta{flex:0 1 auto;max-width:46%}
.sf-player__follow{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:10px 16px;border-top:1px solid var(--line);font-size:12px;color:var(--muted)}
/* ==== 讲述/播放期间不参与悬停位移 ==== */
.capture-layout,.sf-player{--still:1}
.preparation-deck,.preparation-settings{min-width:0}.prep-deck-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:12px;flex-wrap:wrap}
.prep-deck-heading>div{min-width:0;flex:1 1 240px}
.prep-deck-heading strong{display:block;font-size:17px;overflow-wrap:anywhere}
.prep-pair{margin:4px 0 0}
@media(max-width:520px){
  .prep-deck-heading .button{order:-1}
  .prep-deck-heading strong{font-size:16px}
}
#prep-preview-stage{height:min(38vw,calc(100dvh - 460px));min-height:200px;display:grid;place-items:center;background:#edf3fb;border:1px solid #dce6f7;border-radius:18px;overflow:hidden}
.product:has(#speech:not([hidden])) .product-footer{display:none}
#prep-preview-stage .prep-image{width:100%;height:100%;max-height:100%;object-fit:contain;border-radius:0}
#prep-preview-error{padding:24px;color:#9f2525;text-align:center}
.prep-preview-controls{display:flex;justify-content:center;align-items:center;gap:14px;margin-top:12px}.prep-preview-controls .button{padding:8px 14px}.prep-preview-controls input{width:48px;padding:6px;border:1px solid #dce6f7;border-radius:6px;text-align:center;font:inherit}
.prep-thumbnails{margin:12px 0}.prep-thumbnails summary,.prep-options summary{cursor:pointer;color:#36577f;font-size:13px}.prep-thumbnails>div{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:8px;max-height:200px;overflow:auto;padding:10px 0}
.prep-thumbnails button{padding:6px;border:1px solid #dce6f7;border-radius:8px;background:white;cursor:pointer}.prep-thumbnails img{width:100%;aspect-ratio:16/9;object-fit:contain}.prep-thumbnails span{font-size:12px}
.preparation-deck .prep-focus{display:flex;gap:12px;flex-wrap:wrap;margin:12px 0}.prep-deck .prep-focus .text-link{font-size:13px;text-align:left}
.preparation-settings h2{font-size:20px;margin:0 0 4px}.preparation-settings .source-note{font-size:12px;margin:0 0 16px;overflow-wrap:anywhere}.preparation-settings .prep-understanding{font-size:14px;line-height:1.65;margin:10px 0}.preparation-settings .prep-mic{display:grid;gap:8px;margin:12px 0}.prep-options{margin:12px 0}
#preparation-actions .speech-live{margin:16px 0 0;padding:0;border:0;background:none}#preparation-actions .button-blue{width:100%}
.prep-mode{display:flex;gap:4px;background:#edf3fb;padding:4px;border-radius:12px;margin:16px 0}.prep-mode button{flex:1;padding:9px 5px;border:0;background:none;border-radius:9px;color:#52657e;font:inherit;font-size:13px;cursor:pointer}.prep-mode button[aria-pressed=true]{background:white;color:#2455d6;box-shadow:0 2px 8px #1a387014}
#preparation-actions #speech-form{gap:12px}#preparation-actions .upload-zone{min-height:120px}#preparation-actions .upload-zone strong{font-size:17px}#preparation-actions .upload-zone .upload-symbol{font-size:24px}
#prep-preview-dialog{width:min(1200px,calc(100vw - 32px));max-height:90dvh}#prep-enlarge-image{display:block;width:100%;max-height:80dvh;object-fit:contain;margin-top:24px}
@media(max-width:850px){.preparation-workspace{grid-template-columns:1fr}#prep-preview-stage{height:52vw;min-height:180px}.preparation-settings{padding:16px}}
/* 矮屏（≤820px 高，含 1366×768）：收紧顶部留白并让 PPT 舞台随视口收缩，
   使「材料 + 本次设置 + 主按钮」在同一屏完成；缩略图与讲稿仍在内部滚动。 */
@media(max-height:820px){
  #speech.work-screen{padding-top:14px}
  #speech .page-intro{margin-bottom:10px}
  #speech .page-intro h1{font-size:26px}
  #prep-preview-stage{height:min(34vw,calc(100dvh - 500px));min-height:190px}
}
.material-selection{display:flex;align-items:center;justify-content:space-between;gap:18px;width:100%;text-align:left;padding:16px;border:1px solid #dce6f7;border-radius:14px;background:#f7faff;color:#182c4b;font:inherit;cursor:pointer}
.material-selection strong,.material-selection small{display:block;overflow-wrap:anywhere}.material-selection small{color:#65758d;margin-top:5px}.material-selection .text-link{white-space:nowrap}
.choice-search{display:block;margin:20px 0}.choice-search input{display:block;width:100%;box-sizing:border-box;padding:12px 14px;border:1px solid #dce6f7;border-radius:12px;font:inherit;margin-top:8px}
.choice-detail{font-size:13px;line-height:1.55;margin-top:8px;color:#52657e;white-space:pre-wrap}
.project-choice-card.choice-selected{border-color:#265bff;background:#eef4ff}
.project-choice-dialog{width:min(680px,calc(100vw - 32px));max-height:85dvh;overflow:auto}
.project-choice-card{display:grid;grid-template-columns:112px minmax(0,1fr) 20px;gap:18px;align-items:center;width:100%;padding:16px;margin:12px 0;text-align:left;background:#f7faff;border:1px solid #dce6f7;border-radius:18px;color:#182c4b;font:inherit;cursor:pointer;transition:background 160ms,border-color 160ms}
.project-choice-card:hover,.project-choice-card:focus-visible{background:#eef4ff;border-color:#265bff}
.project-choice-card img,.project-choice-placeholder{width:112px;aspect-ratio:16/9;object-fit:contain;background:#e8effa;border-radius:8px}
.project-choice-placeholder{display:grid;place-items:center;font-size:26px}
.project-choice-card strong,.project-choice-card span>span,.project-choice-card small{display:block;overflow-wrap:anywhere}
.project-choice-card strong{font-size:18px;margin-bottom:6px}.project-choice-card small{color:#65758d;margin-top:8px}
#practice-project-more summary{cursor:pointer;color:#2455d6;padding:12px 0}
@media(max-width:480px){.project-choice-card{grid-template-columns:76px minmax(0,1fr) 16px;gap:12px;padding:12px}.project-choice-card img,.project-choice-placeholder{width:76px}}
@media(prefers-reduced-motion:reduce){.project-choice-card{transition:none}}
.version-more{margin:8px 0 0 0}.version-more > summary{cursor:pointer;color:var(--muted);font-size:12px}
.version-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px dashed var(--line)}
.version-row strong{font-size:14px}.version-row p{margin:2px 0}
.library-highlight{outline:2px solid var(--blue);outline-offset:3px;transition:outline-color 200ms}
.calibration-rows{display:grid;gap:8px;margin:10px 0}
.calibration-row{display:grid;grid-template-columns:minmax(0,1fr) 90px 90px;gap:10px;align-items:center}
.calibration-row span{overflow-wrap:anywhere;font-size:13px}
.calibration-row input{border:1px solid var(--line);border-radius:8px;padding:7px;font:inherit;font-size:13px;width:100%}
#calibration-note{width:100%;border:1px solid var(--line);border-radius:8px;padding:8px;font:inherit;font-size:13px;margin-top:6px}
@media(max-width:640px){.calibration-row{grid-template-columns:1fr 70px 70px}}
.drill-pages{display:grid;gap:6px;margin:12px 0}
.drill-page{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.drill-options{display:flex;gap:18px;flex-wrap:wrap;align-items:center;margin-top:10px}
.drill-options select,.drill-options input{border:1px solid var(--line);border-radius:8px;padding:8px;font:inherit;font-size:13px}
.drill-options input{width:110px}
.history-actions{display:flex;flex-direction:column;align-items:flex-end;gap:8px}
@media(max-width:700px){.home-state,.history-row,.improvement{align-items:stretch;flex-direction:column}.prep-head{grid-template-columns:1fr}}
.library-entry{display:flex;align-items:center;justify-content:space-between;gap:28px;padding-top:60px;padding-bottom:24px}.library-entry h2{font-size:clamp(26px,3vw,40px);letter-spacing:-.04em;margin:10px 0}.library-list{display:grid;gap:18px;margin:30px 0}.library-card{display:flex;align-items:center;justify-content:space-between;gap:28px;padding:28px;border:1px solid #dfe6f6;border-radius:22px;background:linear-gradient(120deg,#fff,#f5f8ff)}.library-card h2{font-size:24px;overflow-wrap:anywhere;margin:14px 0}.library-card .button{white-space:normal}.library-badge{display:inline-block;font-size:12px;letter-spacing:.06em;color:#37517d;background:#e9effb;padding:6px 10px;border-radius:20px}.library-ready{color:#12533f;background:#e5f5ed}.library-failed,.library-interrupted{color:#794817;background:#fff0dc}@media(max-width:700px){.library-entry,.library-card{align-items:stretch;flex-direction:column}.library-card{padding:22px}.library-entry .button{align-self:flex-start}}
