.modal.fv-modal,.modal.fv-delivery-modal { position:relative;border-radius:0;border:1px solid #68827a;box-shadow:0 0 0 3px #152c2d,0 18px 70px #0008;font-family:"Microsoft YaHei",sans-serif; }
.modal.fv-modal { --fv-bg:#193638;--fv-panel:#234547;--fv-ink:#eef0d7;--fv-muted:#b3c9ba;--fv-line:#52706a;--fv-accent:#e4c085;background:var(--fv-bg);color:var(--fv-ink);width:calc(100vw - 40px);max-width:1180px;padding:24px; }
.fv-modal[data-fv-theme=C01] { --fv-bg:#e9e4d2;--fv-panel:#f4efdc;--fv-ink:#394c45;--fv-muted:#63756b;--fv-line:#bdc5ac;--fv-accent:#805b36; }
.fv-modal[data-fv-theme=M03] { --fv-bg:#233832;--fv-panel:#2e473e;--fv-ink:#ebe5c9;--fv-muted:#b6c5ab;--fv-line:#5b7362;--fv-accent:#dec38f; }
.fv-workbench button,.fv-workbench select { font:inherit; }
.fv-workbench button { cursor:pointer;color:var(--fv-ink);border:1px solid var(--fv-line);background:transparent;padding:9px 12px;font-size:12px;line-height:1.45; }
.fv-workbench button:disabled { cursor:default;opacity:.5; }
.fv-workbench button:focus-visible,.fv-workbench input:focus-visible,.fv-workbench summary:focus-visible,.fv-workbench select:focus-visible { outline:2px solid var(--fv-accent);outline-offset:3px; }
.fv-header { display:flex;align-items:center;gap:17px;padding-bottom:18px;border-bottom:1px solid var(--fv-line); }
.fv-header>div { flex:1; }.fv-header small { color:var(--fv-muted);font:10px ui-monospace,monospace;letter-spacing:.12em; }
.fv-header h2#modal-title { margin:5px 0 0;font:600 25px/1.4 Georgia,"Noto Serif SC","Songti SC",serif;color:var(--fv-ink); }
.fv-mission { display:flex;justify-content:space-between;align-items:center;gap:12px;padding:13px 0 9px;font-size:12px; }
.fv-mission>span { color:var(--fv-accent); }.fv-mission>div { display:flex;gap:17px;color:var(--fv-muted); }.fv-mission .is-complete { color:var(--fv-ink); }
.fv-resources { display:flex;gap:23px;padding:8px 0 18px;font-size:11px;color:var(--fv-muted); }
.fv-resources b { color:var(--fv-ink);font-size:14px; }.fv-stars { margin-left:auto;color:var(--fv-accent);letter-spacing:3px; }.fv-stars small { letter-spacing:0;font-size:10px; }
.fv-layout { display:grid;grid-template-columns:minmax(0,1.8fr) minmax(270px,1fr);gap:22px;align-items:start; }
.fv-play { min-width:0; }.fv-condition { min-height:93px; }.fv-condition>small { color:var(--fv-accent);font:10px ui-monospace,monospace;letter-spacing:.08em; }
.fv-condition h3 { margin:8px 0;font-size:18px;line-height:1.5; }.fv-condition p { margin:5px 0 14px;color:var(--fv-muted);font-size:12px;line-height:1.7; }
.fv-stage-frame { aspect-ratio:16/9;position:relative;border:1px solid var(--fv-line);background:var(--fv-panel);overflow:hidden; }
.fv-scene { display:block;width:100%;height:100%;font-family:"Microsoft YaHei",sans-serif; }
.fv-scene [data-fv-handle] { cursor:grab;touch-action:none;outline:none; }.fv-scene [data-fv-handle]:focus-visible { filter:drop-shadow(0 0 3px #f3e6bc); }
.fv-boat { transition:transform .45s steps(9); }.fv-wave { animation:fv-wave 3.5s steps(5) infinite alternate; }
.fv-motion-paused .fv-wave { animation-play-state:paused; }.fv-motion-paused .fv-boat { transition:none; }
.fv-conversation { display:flex;gap:12px;align-items:center;min-height:93px;padding:12px 0;border-bottom:1px solid var(--fv-line); }
.fv-portrait { flex:0 0 58px;width:58px;height:67px;overflow:hidden;border:1px solid var(--fv-line);background:var(--fv-panel); }
.fv-portrait svg { width:100%;height:100%;object-fit:contain; }.fv-conversation small { color:var(--fv-accent);font-size:11px; }
.fv-feedback { margin:6px 0 0;line-height:1.75;font-size:12px;color:var(--fv-ink); }.fv-feedback[data-kind=error] { color:#efb19c; }
[data-fv-theme=C01] .fv-feedback[data-kind=error] { color:#a13e2d; }.fv-feedback[data-kind=success] { font-weight:600; }
.fv-intro { border-left:3px solid var(--fv-accent);background:var(--fv-panel);padding:12px 15px;margin:12px 0; }
.fv-intro p { font-size:12px;line-height:1.8;margin:4px 0 9px; }.fv-intro[hidden] { display:none; }
.fv-boundary { color:var(--fv-muted);font-size:10px;line-height:1.8;margin:12px 0; }
.fv-lab { padding:16px;background:var(--fv-panel);border:1px solid var(--fv-line);min-width:0; }
.fv-controls fieldset { border:0;margin:0 0 15px;padding:0;min-width:0; }.fv-controls legend { padding:0;margin-bottom:9px;font-size:12px;font-weight:600; }
.fv-controls small,.fv-commit>small { color:var(--fv-muted);font-size:10px;line-height:1.7;display:block;margin-top:8px; }
.fv-choices { display:flex;gap:6px;flex-wrap:wrap; }.fv-choices button { flex:1;min-width:65px;padding:10px 6px; }
.fv-choices [aria-pressed=true] { background:var(--fv-accent);color:var(--fv-bg);border-color:var(--fv-accent);box-shadow:inset 0 -3px #0002; }
.fv-controls .fv-sample { display:block;margin:0 0 9px;background:#c8d8bc;color:#36554c;border-color:#92ad95; }
.fv-number { display:grid;grid-template-columns:70px minmax(0,1fr) 30px;align-items:center;gap:7px;margin-top:16px;font-size:11px; }
.fv-number input { width:100%;min-width:0;accent-color:var(--fv-accent); }.fv-number output { font:14px ui-monospace,monospace;text-align:right; }
.fv-readings dl { margin:12px 0; }.fv-readings dl>div { display:flex;justify-content:space-between;gap:14px;border-top:1px solid var(--fv-line);padding:8px 0;font-size:11px;line-height:1.7; }
.fv-readings dt { flex:0 0 84px;color:var(--fv-muted); }.fv-readings dd { margin:0;text-align:right;overflow-wrap:anywhere; }
.fv-reference { display:flex;gap:8px;font-size:11px;color:var(--fv-muted);align-items:center; }.fv-reference input { accent-color:var(--fv-accent); }
.fv-price { display:flex;justify-content:space-between;gap:10px;font-size:11px;padding:13px 0 8px; }.fv-price span { color:var(--fv-muted); }
.fv-workbench .fv-primary,.fv-delivery .fv-primary { background:var(--fv-accent,#d9d8b4);color:var(--fv-bg,#183638);border:1px solid var(--fv-accent,#d9d8b4);font-weight:600;padding:12px 15px; }
#fv-record { width:100%; }.fv-actions button { width:100%;margin-top:9px; }.fv-actions p { color:var(--fv-muted);font-size:11px;line-height:1.8;margin:15px 0 4px; }
.fv-summary-slot { display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-top:20px; }
.fv-quality,.fv-outcome,.fv-next { border-top:1px solid var(--fv-line);padding:17px 0 0; }.fv-quality strong { color:var(--fv-accent);font-size:13px; }
.fv-summary-slot p { font-size:12px;line-height:1.85;color:var(--fv-muted);margin:9px 0; }.fv-summary-slot small { color:var(--fv-muted);font-size:10px;line-height:1.7; }.fv-summary-slot h3 { font-size:18px;margin:6px 0; }
.fv-next button { margin:7px 6px 0 0; }.fv-ledger { margin-top:22px;border-top:1px solid var(--fv-line);padding-top:15px; }
.fv-ledger summary,.fv-tools summary { cursor:pointer;font-size:12px; }.fv-record-count { color:var(--fv-muted);font-size:11px; }
.fv-records article { margin:10px 0;padding:12px;background:var(--fv-panel);border-left:2px solid var(--fv-line);font-size:11px; }
.fv-records small { color:var(--fv-accent); }.fv-records p { color:var(--fv-ink);line-height:1.8;margin:6px 0; }.fv-records span { color:var(--fv-muted);font-size:10px; }
.fv-tools { display:flex;gap:20px;justify-content:space-between;margin-top:18px;color:var(--fv-muted); }.fv-tools>span { font-size:10px; }.fv-tools label { font-size:12px;display:block;margin:12px 0; }
.fv-tools select { max-width:100%;background:var(--fv-bg);color:var(--fv-ink);border:1px solid var(--fv-line);padding:7px; }.fv-tools button { display:block;margin:8px 0; }
.fv-legacy-bridge { padding:12px 18px;background:#233c49;color:#d7e6d8;border-bottom:1px solid #607c83;font-size:12px; }
.fv-legacy-bridge button { margin-left:12px;background:transparent;color:inherit;border:1px solid #78948c;padding:6px 10px;cursor:pointer; }
.modal.fv-delivery-modal { background:#193638;color:#edf0d8;max-width:920px;padding:28px; }
.fv-delivery { --fv-bg:#193638;--fv-accent:#e4c085; }.fv-delivery-header { display:flex;justify-content:space-between;align-items:center;gap:20px; }.fv-delivery-header small { color:#c5b788;letter-spacing:.12em;font:10px ui-monospace,monospace; }
.fv-delivery button { font:inherit;font-size:12px;padding:9px 12px;border:1px solid #718b7d;background:transparent;color:#e8eed6;cursor:pointer; }.fv-delivery h2 { font:600 28px/1.5 Georgia,"Noto Serif SC","Songti SC",serif;margin:15px 0; }
.fv-shipping-scene { display:block;width:100%;aspect-ratio:16/9;border:1px solid #789b8a; }.fv-sailing { animation:fv-sail 3s steps(18) both; }
.fv-delivery-copy { padding:17px 0;line-height:1.9;font-size:14px; }.fv-delivery-copy p { margin:5px 0; }.fv-delivery-nav { display:flex;justify-content:space-between;align-items:center;gap:18px; }
.fv-receipt { background:#e4e7cd;color:#2e4d43;padding:22px;border-left:5px solid #9bb597;line-height:1.9; }.fv-receipt p { margin:9px 0; }.fv-receipt strong { font-family:Georgia,"Noto Serif SC","Songti SC",serif;font-size:20px; }
.fv-letter00 { padding:20px 0; }.fv-letter00 label { display:block;font-size:12px;color:#c7d6bf; }.fv-letter00 select { padding:9px;max-width:100%;background:#243e3b;color:#e4e8cf;border:1px solid #789b8a;margin:10px 0; }.fv-letter00 p { font-size:12px;line-height:1.9;color:#c8d9c1; }
@keyframes fv-wave { to { transform:translateX(15px);opacity:.6; } }
@keyframes fv-sail { from { translate:-140px 0; } to { translate:140px 0; } }
@media(max-width:760px) {
  .modal.fv-modal { padding:16px;width:calc(100vw - 16px); }.fv-layout { grid-template-columns:1fr;gap:15px; }.fv-header { gap:8px;align-items:flex-start; }.fv-header h2#modal-title { font-size:20px; }.fv-header>button { padding:7px;font-size:10px; }
  .fv-mission { align-items:flex-start;flex-wrap:wrap; }.fv-resources { gap:15px;flex-wrap:wrap; }.fv-stars { margin-left:0; }.fv-condition { min-height:0; }.fv-condition h3 { font-size:17px; }.fv-lab { padding:13px; }.fv-tools { display:block; }.fv-tools>span { display:block;margin-top:14px; }
  .modal.fv-delivery-modal { padding:18px;width:calc(100vw - 16px); }.fv-delivery h2 { font-size:24px; }.fv-delivery-nav { flex-wrap:wrap; }.fv-receipt { padding:16px; }
}
@media(prefers-reduced-motion:reduce) { .fv-boat { transition:none; }.fv-wave,.fv-sailing { animation:none; } }

/* ===== 现场制式：整关固定一屏，场景约 65%，操作与读数约 35% ===== */
.modal.fv-modal{display:flex;flex-direction:column;height:min(92vh,960px);max-height:min(92vh,960px);overflow:hidden}
.modal.fv-modal>.fv-workbench{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}
.fv-workbench>.fv-header{flex:0 0 auto;padding-bottom:14px}
.fv-goal{display:flex;align-items:center;gap:20px;padding:12px 0;border-bottom:1px solid var(--fv-line);flex:0 0 auto}
.fv-goal-main{flex:1;min-width:0}
.fv-goal-main small{display:block;color:var(--fv-accent);font:11px/1.4 ui-monospace,monospace;letter-spacing:.1em}
.fv-goal-text{margin:4px 0 0;font-size:17px;line-height:1.45;font-weight:500;color:var(--fv-ink)}
.fv-goal .fv-resources{padding:0;flex:0 0 auto;gap:16px;flex-wrap:wrap}
.fv-mission{padding:8px 0;flex:0 0 auto;font-size:13px}
.fv-layout{flex:1 1 auto;min-height:0;grid-template-columns:minmax(0,1.85fr) minmax(300px,1fr);grid-template-rows:minmax(0,1fr);gap:18px;align-items:stretch}
.fv-play{display:flex;flex-direction:column;min-height:0}
.fv-condition{min-height:0;padding:10px 0 6px;flex:0 0 auto}
.fv-condition h3{margin:2px 0 0;font-size:15px;line-height:1.5}
.fv-condition p{display:none}
.fv-stage-frame{flex:1 1 auto;min-height:200px;aspect-ratio:auto}
.fv-scene-hint{margin:8px 0 0;color:var(--fv-muted);font-size:12px;line-height:1.6;flex:0 0 auto}
.fv-conversation{border-bottom:0;padding:10px 0 0;min-height:0;flex:0 0 auto;align-items:flex-start}
.fv-portrait{flex:0 0 46px;width:46px;height:54px}
.fv-feedback{font-size:14px;line-height:1.7}
.fv-lab{overflow-y:auto;min-height:0;padding-right:4px;scrollbar-width:thin}
.fv-summary-slot,.fv-ledger,.fv-tools{margin-top:12px}

@media (max-width:760px){
  .modal.fv-modal{height:auto;max-height:92vh;overflow-y:auto;padding:16px}
  .fv-layout{display:flex;flex-direction:column;gap:14px}
  .fv-stage-frame{aspect-ratio:4/3;flex:0 0 auto;min-height:0}
  .fv-lab{overflow:visible;padding:14px}
  .fv-goal{flex-wrap:wrap;gap:8px}
  .fv-goal .fv-resources{width:100%}
  .fv-goal-text{font-size:15px}
}

/* 目标条：一句目标 + 一行条件，均固定在顶部 */
.fv-goal-main .fv-condition{display:flex;align-items:baseline;gap:10px;padding:6px 0 0;min-height:0}
.fv-goal-main .fv-condition small{font:11px/1.4 ui-monospace,monospace;color:var(--fv-muted);letter-spacing:.06em}
.fv-goal-main .fv-condition h3{margin:0;font-size:13px;font-weight:400;line-height:1.5;color:var(--fv-muted)}
/* 主操作常驻操作栏底部 */
.fv-lab .fv-commit{position:sticky;bottom:0;background:var(--fv-panel);padding-bottom:6px;box-shadow:0 -10px 14px -8px #0e1a2b66}
.fv-goal{padding:10px 0}
.fv-mission{padding:6px 0}

/* 操作栏：上半可滚动，主操作固定在底部，不再覆盖控件 */
.fv-lab{display:flex;flex-direction:column;overflow:hidden;padding:14px 6px 12px 14px}
.fv-lab-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:8px;scrollbar-width:thin}
.fv-lab .fv-commit{flex:0 0 auto;position:static;padding-top:10px;border-top:1px solid var(--fv-line);box-shadow:none;background:var(--fv-panel)}
.fv-lab .fv-actions{order:5}

/* 操作栏顺序：先控件，再读数，指引与手记随后 */
.fv-lab-scroll{display:flex;flex-direction:column;gap:12px}
.fv-lab-scroll>.fv-controls{order:1}
.fv-lab-scroll>.fv-readings{order:2}
.fv-lab-scroll>.ro-guide{order:3;max-height:150px;overflow:auto}
.fv-lab-scroll>.fv-actions{order:4}
.fv-lab-scroll>.fv-summary-slot{order:5}
.fv-lab-scroll>.fv-ledger{order:6}
.fv-lab-scroll>.fv-tools{order:7;margin-top:0}
.fv-lab-scroll>*{margin-top:0}

/* 主操作区压缩：去掉冗余说明，把空间让给读数 */
.fv-lab .fv-commit{padding-top:8px}
.fv-lab .fv-commit .ro-charge-note{margin:0 0 6px;font-size:11px;line-height:1.5}
.fv-lab .fv-commit .fv-reference{font-size:12px;margin:0 0 6px}
.fv-lab .fv-commit .fv-price{padding:4px 0}
.fv-lab .fv-commit .fv-price strong{font-size:13px}
.fv-lab .fv-commit .fv-price span{font-size:12px}
.fv-lab .fv-commit #fv-record{padding:10px 12px;font-size:15px}
.fv-lab .fv-commit>small{display:none}
.fv-lab-scroll>.fv-readings dl{margin:0}
.fv-lab-scroll>.fv-readings dl>div{padding:5px 0;font-size:13px}
.fv-lab-scroll>.fv-readings dt{color:var(--fv-muted)}
.fv-lab-scroll>.fv-readings dd{font-family:var(--ui-mono,ui-monospace);font-size:13px}
.fv-lab-scroll>.fv-controls fieldset{morder:0;margin:0}
.fv-lab-scroll>.fv-controls legend{font-size:13px;margin-bottom:8px}
.fv-lab-scroll>.fv-controls small{font-size:11px;line-height:1.5}

/* 读数两列排布：六项数据在一屏内看完 */
.fv-lab-scroll>.fv-readings dl{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.fv-lab-scroll>.fv-readings dl>div{padding:5px 0;min-width:0}
.fv-lab-scroll>.fv-readings dd{text-align:right}

/* 只有 P01 的现场按列高铺满；样品台与测绘台保持 16:9，避免裁掉坐标与标签 */
.fv-workbench .fv-stage-frame{flex:0 0 auto;aspect-ratio:16/9}
.fv-workbench[data-level="P01"] .fv-stage-frame{flex:1 1 auto;aspect-ratio:auto;min-height:240px}

/* 手机端：场景在上、操作在下，操作栏恢复自然文档流 */
@media (max-width:760px){
  .fv-workbench .fv-stage-frame,
  .fv-workbench[data-level="P01"] .fv-stage-frame{flex:0 0 auto;aspect-ratio:16/9;min-height:0}
  .fv-lab{display:block;overflow:visible;padding:12px 0 0}
  .fv-lab-scroll{overflow:visible;max-height:none;padding-right:0}
  .fv-lab-scroll>*{margin-top:12px}
  .fv-lab .fv-commit{position:static;margin-top:12px}
  .fv-lab-scroll>.ro-guide{max-height:none}
}
@media (max-width:760px){
  .fv-play,.fv-lab,.fv-lab-scroll{flex:0 0 auto}
  .fv-lab-scroll>.fv-choices button{padding:12px 8px;font-size:15px}
}
