:root{color-scheme:dark;--bg:#0c1016;--panel:#131922;--raised:#1b222e;--line:#2a3442;--text:#e8edf5;--muted:#94a0b3;--accent:#edc577;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:13px}
*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden}body{background:var(--bg);color:var(--text)}[hidden]{display:none!important}button,input,textarea,select{font:inherit}button{border:1px solid var(--line);border-radius:7px;background:var(--raised);color:var(--text);padding:8px 11px;cursor:pointer;white-space:nowrap}button:hover{background:#293445;border-color:#62708a}button:disabled{opacity:.45;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#211b10;font-weight:650}button.icon{width:32px;height:32px;padding:0;font-size:17px;background:transparent}button.danger{border-color:#8a3d3d;color:#f0b6b6}input,textarea,select{background:#10161f;border:1px solid var(--line);color:var(--text);border-radius:7px;padding:8px;min-width:0}input:focus,textarea:focus,select:focus{outline:1px solid var(--accent);border-color:var(--accent)}textarea{resize:vertical;line-height:1.6;width:100%}input[type=checkbox]{accent-color:var(--accent)}h2,h3,p{margin:0}h2{font-size:16px}h3{font-size:13px}small{font-size:11px;color:var(--muted)}.spacer{flex:1}.divider{height:22px;width:1px;background:var(--line);flex:none}.muted{color:var(--muted)}.eyebrow{display:block;font-size:9px;letter-spacing:1.8px;color:var(--muted);margin-bottom:6px}.empty{padding:24px;color:var(--muted);line-height:1.8;text-align:center}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-thumb{background:#364154;border-radius:6px}
#app{height:100dvh;display:grid;grid-template-rows:52px 44px minmax(0,1fr)}
#topbar,#editor-toolbar{display:flex;align-items:center;gap:8px;padding:0 14px;background:#111720;min-width:0;overflow-x:auto;flex-wrap:nowrap}
#topbar{border-bottom:1px solid var(--line);z-index:10}
#editor-toolbar{border-bottom:1px solid var(--line)}
.tb-label{color:var(--muted);font-size:12px}.brand{font-size:14px;font-weight:700;white-space:nowrap}.brand small{font-size:9px;border:1px solid var(--line);padding:2px 4px;border-radius:4px;margin-left:4px;font-weight:400}.brand-icon{color:var(--accent);margin-right:2px}
#project-name{width:180px}#save-state{font-size:11px;color:var(--muted);white-space:nowrap}
#editor-status{font-size:11px;color:var(--muted);margin-left:auto;white-space:nowrap}
#workspace{position:relative;overflow:hidden}
#canvas-wrap{position:absolute;inset:0;overflow:hidden;outline:none;cursor:default}
#grid{position:absolute;inset:-2000px;background-image:radial-gradient(#243040 1px,transparent 1px);background-size:26px 26px;pointer-events:none}
#world{position:absolute;left:0;top:0;transform-origin:0 0;width:0;height:0}
#edges{position:absolute;left:-4000px;top:-4000px;width:8000px;height:8000px;overflow:visible;pointer-events:none}
#edges path{pointer-events:stroke}
.edge{fill:none;stroke:#5b6b83;stroke-width:2}.edge.hit{stroke:transparent;stroke-width:14}.edge.sel{stroke:var(--accent)}.edge.success{stroke:#7fbf7f}.edge.fail{stroke:#c97b7b}.edge.timeout{stroke:#c9a95b;stroke-dasharray:6 4}
.edge-label{fill:#94a0b3;font-size:10px}
#nodes{position:absolute;left:0;top:0}
.node{position:absolute;width:224px;background:var(--panel);border:1px solid var(--line);border-radius:10px;cursor:grab;user-select:none}
.node.sel{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.node.link-target{border-color:#7fa5d8;box-shadow:0 0 0 1px #7fa5d8}
.node.dragging{cursor:grabbing;opacity:.85}
.node-head{display:flex;align-items:center;gap:7px;padding:8px 10px;border-bottom:1px solid var(--line);cursor:grab}
.node-dot{width:9px;height:9px;border-radius:50%;flex:none}
.node-head b{flex:1;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.node-kind{font-size:9px;border:1px solid var(--line);border-radius:4px;padding:1px 4px;color:var(--muted);flex:none}
.entry-badge{font-size:9px;border:1px solid var(--accent);border-radius:4px;padding:1px 4px;color:var(--accent);background:rgba(237,197,119,.12);flex:none;white-space:nowrap}
.node-fold{background:none;border:none;padding:0 2px;font-size:11px;color:var(--muted);cursor:pointer}
.node-body{padding:8px 10px;font-size:11px;color:var(--muted);line-height:1.7;max-height:230px;overflow:auto}
.node-body .vid{display:flex;gap:6px;align-items:center;padding:3px 0}
.story-text-preview{font-size:10px;color:var(--muted);background:#10161f;border:1px dashed var(--line);border-radius:5px;padding:5px 7px;margin-top:5px;line-height:1.5;white-space:normal}
.node-body video{width:86px;height:48px;border-radius:4px;background:#000;flex:none}
.node-body .order-btn{background:none;border:1px solid var(--line);border-radius:4px;color:var(--muted);font-size:10px;padding:0 4px;cursor:pointer}
.node-exits{padding:6px 10px;border-top:1px dashed var(--line);display:flex;flex-wrap:wrap;gap:5px}
.exit-tag{font-size:10px;border:1px solid var(--line);border-radius:4px;padding:1px 6px;color:var(--muted);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.port{position:absolute;right:-8px;top:34px;width:15px;height:15px;border-radius:50%;background:var(--raised);border:2px solid #6b7c96;cursor:crosshair;z-index:2;transform:none}
.port:hover{border-color:var(--accent);background:var(--accent);box-shadow:0 0 0 4px rgba(237,197,119,.18)}
.port-in{left:-8px;right:auto;border-color:#5b6b83;cursor:crosshair}
.port-alt{border-color:#8d7a9c}
.port-out::after{content:'';position:absolute;inset:3px;border-radius:50%;background:#6b7c96;opacity:.55}
.port-alt::after{background:#a58cb8}
.port:hover::after{opacity:1;background:var(--accent)}
.node.link-target{border-color:#7fa5d8;box-shadow:0 0 0 1px #7fa5d8}
.node.link-target .port-in{background:#7fa5d8;border-color:#7fa5d8}
.node-head,.node-body{cursor:grab}
#canvas-bottom{position:absolute;left:0;right:0;bottom:0;display:flex;align-items:center;padding:8px 14px;pointer-events:none}
#canvas-bottom>*{pointer-events:auto}
.canvas-help{font-size:11px;color:var(--muted)}.zoom-controls{margin-left:auto;display:flex;gap:6px;align-items:center}.zoom-controls button{min-width:34px}
#inspector{position:absolute;right:0;top:0;bottom:0;width:330px;background:var(--panel);border-left:1px solid var(--line);overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:12px}
#inspector label{display:block;font-size:11px;color:var(--muted);margin:8px 0 4px}
#inspector .row{display:flex;gap:8px;align-items:center}#inspector .row>*{flex:1}
.sect{border:1px solid var(--line);border-radius:9px;padding:10px}
.sect>h3{margin-bottom:4px}
.cond,.effect{display:flex;gap:5px;align-items:center;padding:4px 0}.cond>*,.effect>*{min-width:0}
.opt{border:1px solid var(--line);border-radius:8px;padding:8px;margin-bottom:8px}
.opt .row{display:flex;gap:6px;margin-bottom:5px}.opt .row>*{flex:1}
.tag{display:inline-flex;align-items:center;padding:2px 6px;border:1px solid var(--line);border-radius:4px;font-size:10px;color:var(--muted)}
/* 玩家模式 */
#player{position:fixed;inset:0;background:var(--bg);z-index:50;display:flex;flex-direction:column}
#player-bar{display:flex;align-items:center;gap:10px;padding:0 14px;height:52px;border-bottom:1px solid var(--line);background:#111720}
#hud{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
#hud .tag{border-color:#3a4a61}
/* 玩家舞台：去除 920px 居中限制，让 .video-stage 能完整全屏覆盖；普通 .p-card 用 max-width 居中显示 */
#player-stage{flex:1;overflow:hidden;position:relative}
#stage-inner{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0;overflow:hidden}
.p-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px;max-width:min(920px,96vw);width:96%;margin:auto}
.p-card h2{margin-bottom:10px}
.p-video{width:100%;max-height:62vh;border-radius:10px;background:#000;display:block}
.p-controls{display:flex;gap:10px;margin-top:14px;align-items:center;flex-wrap:wrap}
.p-option{display:block;width:100%;text-align:left;margin-top:10px;padding:13px 14px;border-radius:10px;line-height:1.5}
.p-option .lock-reason{display:block;font-size:11px;color:#c9a95b;margin-top:4px}
.p-option.locked{opacity:.6}
.p-option .cond-note{display:block;font-size:11px;color:var(--muted);margin-top:4px}
.timer-bar{height:8px;border-radius:6px;background:#10161f;border:1px solid var(--line);overflow:hidden;margin-top:14px}
.timer-fill{height:100%;background:var(--accent);width:100%;transition:width .2s linear}
.timer-fill.danger{background:#c97b7b}
.minigame-area{text-align:center;padding:12px}
.qte-key{display:inline-block;font-size:34px;font-weight:800;border:2px solid var(--accent);border-radius:12px;padding:14px 30px;margin:12px;color:var(--accent)}
.qte-hint{font-size:20px;color:var(--text);padding:18px;border:2px dashed var(--line);border-radius:12px;margin:10px 0}
.pw-input{font-size:19px;letter-spacing:6px;text-align:center;width:190px;padding:7px 8px}
.ending-badge{font-size:12px;border-radius:6px;padding:3px 10px;display:inline-block;margin-bottom:10px}
.ending-normal{border:1px solid var(--line);color:var(--muted)}
.ending-success{border:1px solid #7fbf7f;color:#a5e0a5}
.ending-death{border:1px solid #c97b7b;color:#f0b6b6}
.ach-pop{position:fixed;right:20px;bottom:20px;background:var(--raised);border:1px solid var(--accent);border-radius:12px;padding:14px 18px;z-index:80;animation:pop .3s ease}
@keyframes pop{from{transform:translateY(16px);opacity:0}to{transform:none;opacity:1}}
.tl-item{display:flex;gap:10px;align-items:center;padding:8px;border-bottom:1px solid var(--line)}
.tl-item:last-child{border-bottom:none}
.snap-chip{font-size:10px;color:var(--muted);border:1px solid var(--line);border-radius:4px;padding:1px 6px}
/* 时间线流程图：按节点真实坐标布局，区分已到达 / 已解锁 / 未解锁 */
.tl-map{position:absolute;inset:0;display:flex;flex-direction:column;background:linear-gradient(180deg,#0f151d,#0a0e15)}
.tl-map-head{display:flex;align-items:center;gap:10px;padding:12px 18px;border-bottom:1px solid var(--line);background:#111720;flex:none;flex-wrap:wrap}
.tl-map-head h2{font-size:15px;margin:0;white-space:nowrap}
.tl-legend{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);white-space:nowrap}
.tl-legend i{width:10px;height:10px;border-radius:3px;display:inline-block;margin-left:10px}
.lg-visited{background:#edc577}.lg-unlocked{background:#5b6b83}.lg-locked{background:#2a3442}
.tl-map-foot{padding:8px 18px;border-top:1px solid var(--line);background:#111720;color:var(--muted);flex:none;text-align:center}
.tl-map-view{flex:1;position:relative;overflow:hidden;min-height:0}
.tl-world{position:absolute;left:0;top:0;transform-origin:0 0}
.tl-edges{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.tl-edge{fill:none;stroke:#3d4a5e;stroke-width:1.6}
.tl-node{position:absolute;width:138px;height:44px;box-sizing:border-box;border-radius:9px;border:1px solid var(--line);background:var(--panel);display:flex;align-items:center;gap:7px;padding:0 9px;font-size:11px;color:var(--muted);opacity:.3;cursor:default;user-select:none;transition:opacity .15s,background .15s}
.tl-node.locked{opacity:.3;filter:grayscale(1)}
.tl-node.unlocked{opacity:.78;border-color:#3d4a5e;color:var(--text)}
.tl-node.visited{opacity:1;border-color:var(--accent);color:var(--text);background:#1c2432;cursor:pointer;box-shadow:0 0 0 1px rgba(237,197,119,.25)}
.tl-node.visited:hover{background:#26314a}
.tl-node-icon{font-size:13px;flex:none}
.tl-node-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tl-node-count{font-size:9px;color:var(--accent);border:1px solid rgba(237,197,119,.4);border-radius:4px;padding:0 4px;flex:none}
/* 弹窗 */
#modal-backdrop{position:fixed;inset:0;background:rgba(4,7,12,.66);z-index:60;display:flex;align-items:center;justify-content:center}
#modal{background:var(--panel);border:1px solid var(--line);border-radius:14px;width:min(720px,94vw);max-height:88vh;overflow-y:auto;padding:20px}
#modal h2{margin-bottom:12px}
#modal .modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}
#modal pre{background:#10161f;border:1px solid var(--line);border-radius:8px;padding:10px;font-size:11px;overflow:auto;max-height:320px;white-space:pre-wrap}
.diff-add{color:#a5e0a5}.diff-del{color:#f0b6b6}.diff-move{color:#c9a95b}
.err-line{color:#f0b6b6;padding:3px 0}
.warn-line{color:#c9a95b;padding:3px 0}
.ok-line{color:#a5e0a5;padding:3px 0}
#toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--raised);border:1px solid var(--line);border-radius:10px;padding:11px 18px;z-index:90;max-width:80vw;box-shadow:0 6px 24px rgba(0,0,0,.4)}
#toast:empty{display:none!important} /* 空文本不渲染（避免「多余的小黑块」—— 之前 toast.textContent 被清空后元素仍可见，残留为底部居中的小药丸） */
#context-menu{position:fixed;z-index:70;background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:5px;min-width:150px}
#context-menu button{display:block;width:100%;text-align:left;border:none;background:none;padding:8px 10px;border-radius:6px}
#context-menu button:hover{background:var(--raised)}
.vars-grid{display:grid;grid-template-columns:1fr 74px 64px 64px auto;gap:6px;align-items:center;margin-bottom:6px}
.list-row{display:flex;gap:6px;align-items:center;margin-bottom:6px}

/* 拖线到空白处的模块类型选择器 */
#empty-picker{position:fixed;z-index:80;background:var(--panel);border:1px solid var(--accent);border-radius:10px;padding:10px;box-shadow:0 10px 30px rgba(0,0,0,.5);min-width:220px}
#empty-picker .ep-head{font-size:11px;color:var(--muted);margin-bottom:6px;letter-spacing:1px}
#empty-picker .ep-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
#empty-picker button{padding:8px 10px;text-align:left;display:flex;align-items:center;gap:8px;background:var(--raised);border:1px solid var(--line);border-radius:7px;color:var(--text);font-size:12px;cursor:pointer}
#empty-picker button:hover{background:#293445;border-color:var(--accent)}
#empty-picker .ep-dot{width:9px;height:9px;border-radius:50%;display:inline-block}
#empty-picker .ep-cancel{width:100%;margin-top:8px;text-align:center;background:transparent;color:var(--muted);border:none;padding:6px}

/* 小游戏视频联动 */
.mg-video-wrap{margin-bottom:14px}
.mg-video-wrap .p-video{max-height:44vh}

/* 文字视频（无真实视频时自动生成的字幕牌滚动演示） */
.text-video{position:fixed;inset:0;background:#000;z-index:55;display:flex;flex-direction:column}
.tv-title{position:absolute;top:7%;left:0;right:0;font-size:24px;color:#f4dca0;text-align:center;letter-spacing:3px;text-shadow:0 2px 14px rgba(0,0,0,.8),0 0 2px rgba(212,168,87,.35);z-index:2;pointer-events:none}
.tv-subs{position:absolute;left:0;right:0;top:19%;bottom:12%;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:14px;padding:0 7vw;overflow:hidden;background:linear-gradient(180deg,rgba(0,0,0,0) 0%,rgba(0,0,0,.32) 25%,rgba(0,0,0,.32) 75%,rgba(0,0,0,0) 100%)}
.tv-sub{color:#ede4d0;font-size:18px;line-height:1.75;text-align:center;text-shadow:0 2px 10px rgba(0,0,0,.9),0 0 2px rgba(212,168,87,.3);max-width:780px;opacity:0;transform:translateY(22px);animation:tvLineIn .6s cubic-bezier(.2,.7,.3,1) forwards;flex-shrink:0}
@keyframes tvLineIn{to{opacity:1;transform:translateY(0)}}
.tv-bar{display:flex;align-items:center;gap:10px;padding:12px 18px;background:rgba(0,0,0,.78);border-top:1px solid rgba(212,168,87,.18);font-size:12px}

/* 成就节点（叶子）与旁路成就边 */
.edge.ach{stroke:#e0a93e;stroke-dasharray:8 5}
.port-ach{border-color:#e0a93e}
.port-ach::after{background:#e0a93e}
.port-ach:hover{border-color:#e0a93e;background:#e0a93e}
.ach-tag{border-color:#e0a93e;color:#e0a93e}

/* 视频背景 + 透明叠加层（选择节点 / 小游戏） */
/* 视频背景：完整全屏覆盖 stage-inner，不受 920px 居中限制；视频始终保持完整呈现 */
.video-stage{position:absolute;inset:0;background:#000;overflow:hidden;border:none;border-radius:0}
.video-stage.no-video{background:linear-gradient(180deg,#161d28,#0a0e15)}
/* 无视频背景时的剧情文字兜底：深色径向渐变 + 大字号文字居中，作为「伪视频画面」铺满 stage；选项/小游戏控件叠加在上面不遮挡 */
.text-bg{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 7vw;background:radial-gradient(ellipse at center,rgba(26,34,48,.95) 0%,rgba(10,14,21,.99) 70%);overflow:hidden;pointer-events:none}
.text-bg-content{font-size:18px;line-height:2.1;color:rgba(232,201,122,.92);text-align:center;text-shadow:0 1px 8px rgba(0,0,0,.9),0 0 2px rgba(212,168,87,.2);max-width:780px;white-space:pre-wrap;letter-spacing:.5px;animation:tvLineIn .5s cubic-bezier(.2,.7,.3,1) both}
.stage-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.stage-overlay{position:absolute;inset:0;display:flex;flex-direction:column;padding:20px 20px 16px;background:linear-gradient(180deg,rgba(0,0,0,0) 48%,rgba(0,0,0,.42) 76%,rgba(0,0,0,.78) 100%)}
.stage-title{position:absolute;top:18px;left:22px;font-size:15px;font-weight:700;color:#f4dca0;text-shadow:0 1px 6px rgba(0,0,0,.85),0 0 2px rgba(212,168,87,.3);letter-spacing:.5px;pointer-events:none}

/* 剧情节点全屏视频 + 自定义播放器控件（视频铺满舞台、控件悬停出现、点击可跳转 / 暂停 / 变速） */
.story-overlay{position:absolute;inset:0;display:flex;flex-direction:column;pointer-events:none}
.story-overlay .stage-title{top:18px;left:22px}
.story-overlay .stage-title small{color:rgba(244,220,160,.55);font-size:12px;margin-left:8px;font-weight:400}
.story-video{object-fit:contain;background:#000}
.player-controls{margin-top:auto;display:flex;align-items:center;gap:10px;padding:14px 22px 16px;background:linear-gradient(0deg,rgba(0,0,0,.85) 0%,rgba(0,0,0,.55) 70%,transparent 100%);opacity:0;transition:opacity .25s ease;pointer-events:none;user-select:none;color:#f4dca0}
.story-stage.show-controls .player-controls{opacity:1;pointer-events:auto}
.pc-btn{background:rgba(0,0,0,.42);border:1px solid rgba(200,154,74,.4);color:#f4dca0;border-radius:7px;padding:5px 11px;cursor:pointer;font-size:12.5px;font-family:inherit;user-select:none;transition:background .12s,border-color .12s}
.pc-btn:hover{background:rgba(0,0,0,.62);border-color:#c89a4a}
.pc-progress{flex:1;min-width:80px;height:5px;background:rgba(255,255,255,.18);border-radius:3px;position:relative;cursor:pointer;overflow:hidden;transition:height .12s}
.pc-progress:hover{height:8px}
.pc-progress-fill{position:absolute;left:0;top:0;bottom:0;width:0%;background:#c89a4a;border-radius:3px;pointer-events:none}
.pc-time{font-size:11.5px;color:rgba(244,220,160,.85);font-variant-numeric:tabular-nums;min-width:96px;text-align:center}
.pc-speed{min-width:40px;text-align:center;font-variant-numeric:tabular-nums}
.pc-skip,.pc-back{padding:5px 13px}
.autoplay-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4);z-index:6;pointer-events:auto}
.autoplay-hint button{font-size:15px;padding:11px 22px}

/* 药丸选择按钮（金色描边 · 浮在视频底部 · 全屏视频不再有卡片框） */
/* margin-top:auto 把选项推到画面下方；choiceIn 让选项以「从下方弹出」的方式出现；cursor:move 让玩家可拖动按钮组到任意位置 */
/* 所有选项排在一行（flex-wrap:nowrap），最多 4 个（JS 限制），选项平均分配宽度，长文本自动换行 */
/* 容器自身有暗色填充，覆盖按钮之间的间隙，避免下方编辑器元素（node / exit-tag）透过间隙显示成「多余的小黑块」 */
.choice-opts{display:flex;flex-direction:row;gap:6px;width:100%;max-width:100%;margin:auto auto 0;flex-wrap:nowrap;justify-content:center;padding:6px;animation:choiceIn .3s cubic-bezier(.2,.7,.3,1) both;cursor:move;position:relative;user-select:none;box-sizing:border-box;background:rgba(15,10,5,.7);border-radius:14px}
.choice-opts:empty{display:none} /* 兜底：空容器不渲染（避免任何残留黑块） */
@keyframes choiceIn{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
.choice-opt{
  /* 平均分配宽度：flex:1 1 0 让每个选项等宽；长文本在按钮内自动换行；最多 4 个刚好占满 */
  flex:1 1 0; min-width:0; max-width:300px;
  /* 背景更通透：rgba(.4/.5) + backdrop-filter blur saturate，让后面视频 / 文字清晰可见 */
  background:linear-gradient(180deg,rgba(34,22,10,.55),rgba(20,12,5,.65));
  border:1.5px solid #c89a4a;
  border-radius:10px;
  padding:11px 18px;
  color:#f4dca0;
  font-size:14.5px;
  text-align:center;
  cursor:pointer;
  /* 移除 3px 下落阴影（避免按钮下方出现"小黑块"视觉残留），只保留细外描边 + 内顶部高光 */
  box-shadow:inset 0 1px 0 rgba(232,201,122,.18);
  backdrop-filter:blur(8px) saturate(1.3);
  -webkit-backdrop-filter:blur(8px) saturate(1.3);
  transition:transform .12s,border-color .12s,background .12s,color .12s;
  position:relative;
  white-space:normal; line-height:1.5;
  box-sizing:border-box;
}
.choice-opt:hover{border-color:#f0d28a;color:#fff5d0;background:linear-gradient(180deg,rgba(44,30,14,.65),rgba(26,16,8,.75));transform:translateY(-1px)}
.choice-opt.locked{opacity:.6}
.choice-opt .lock-reason{display:block;font-size:11px;color:#e8c97a;margin-top:4px}
/* 标签为空时整个按钮折叠（兜底：避免「多余的小黑块」—— 用户偶尔导入的脏数据） */
.choice-opt:has(.choice-opt-label:empty),
.choice-opt .choice-opt-label:empty{margin:0;padding:0}
.choice-opt:has(.choice-opt-label:empty){padding:0;border:none;min-height:0;height:0;visibility:hidden}

/* 小游戏：装饰性圆形按钮浮在视频画面上 + 顶栏（模式/提示/计数）+ 底部（计时/放弃） */
.mg-topbar{display:flex;align-items:center;gap:10px;justify-content:center;margin-bottom:6px;flex-wrap:wrap;cursor:move;position:relative;user-select:none}
.mg-mode-tag{font-size:10.5px;color:#c89a4a;border:1px solid rgba(200,154,74,.45);border-radius:999px;padding:3px 10px;letter-spacing:1px;background:rgba(0,0,0,.25);text-shadow:0 1px 3px rgba(0,0,0,.8);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.mg-mode-hint{font-size:13.5px;color:rgba(244,220,160,.95);text-shadow:0 1px 6px rgba(0,0,0,.9)}
.mg-counter-pill{font-size:12.5px;color:#f4dca0;border:1px solid rgba(200,154,74,.4);border-radius:999px;padding:3px 12px;background:rgba(0,0,0,.25);text-shadow:0 1px 3px rgba(0,0,0,.8);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.mg-bottom{display:flex;flex-direction:column;gap:10px;align-items:stretch;margin-top:8px;cursor:move;position:relative;user-select:none}
.minigame-area{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-height:0;padding:10px;gap:12px;cursor:move;position:relative;user-select:none}
/* 小游戏按钮：小巧 + 白色半透明 + 随机落点（由 JS 加 .mg-float 绝对定位），最大程度不遮挡画面主体 */
.qte-key, .mg-target{
  display:flex;align-items:center;justify-content:center;
  width:min(12vh,82px);height:min(12vh,82px);
  padding:0;margin:0;
  border-radius:50%;
  background:rgba(255,255,255,.13);
  border:1.5px solid rgba(255,255,255,.85);
  color:#fff;
  font-size:25px;font-weight:700;
  cursor:pointer;
  box-shadow:0 2px 12px rgba(0,0,0,.28);
  text-shadow:0 1px 5px rgba(0,0,0,.8);
  transition:transform .12s,border-color .12s,background .12s;
  flex-shrink:0;
  backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);
}
.qte-key:hover, .mg-target:hover{background:rgba(255,255,255,.26);border-color:#fff;transform:scale(1.08)}
.mg-float{position:absolute;margin:0;z-index:5}
.mg-hint{color:#f4dca0;font-size:15px;text-shadow:0 1px 6px rgba(0,0,0,.8);margin:4px 0;text-align:center}
.mg-sub{color:rgba(244,220,160,.85);font-size:12.5px;text-shadow:0 1px 4px rgba(0,0,0,.7);text-align:center;margin:0}
.mg-quit{background:rgba(10,7,3,.3);border:1px solid rgba(200,154,74,.3);color:rgba(244,220,160,.85);border-radius:999px;padding:8px 18px;margin:0 auto;cursor:pointer;font-size:12.5px;letter-spacing:.5px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);text-shadow:0 1px 3px rgba(0,0,0,.7)}
.mg-quit:hover{border-color:rgba(240,210,138,.7);color:#f4dca0}
.mg-go{max-width:132px;margin:8px auto 0;display:block;border-radius:999px;font-size:12.5px;padding:6px 14px}
.stage-ctrl{display:flex;justify-content:center;gap:10px;margin-bottom:8px}
.stage-ctrl .ghost{background:rgba(0,0,0,.45);border-color:rgba(200,154,74,.4);color:#f4dca0}
.video-stage .timer-bar{background:rgba(0,0,0,.55);border-color:rgba(200,154,74,.3);margin-top:0}
.video-stage .timer-fill{background:linear-gradient(90deg,#c89a4a,#e8c97a)}
.video-stage .timer-fill.danger{background:#c97b7b}
.video-stage .pw-input{background:rgba(255,255,255,.12);color:#fff;border-color:rgba(255,255,255,.7);border-radius:8px}
.video-stage .mg-go{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.75);color:#fff}

/* v1.1: bounded, responsive interaction surfaces. No saved pixel positions. */
#player{height:100dvh;min-width:0;background:#080e18}
#player-bar{height:auto;min-height:56px;flex-shrink:0;flex-wrap:wrap;padding:8px 14px;gap:6px;background:#101722;z-index:10}
#player-bar button{min-height:40px}#player-stage{min-height:0}
#modal-backdrop{z-index:200}#toast{z-index:210}
#player .p-card{max-width:calc(100% - 32px);max-height:calc(100% - 24px);overflow:auto;padding:28px}
#player .p-controls{flex-wrap:wrap}#player .p-controls button{min-height:44px}
#player .stage-bg{object-fit:contain;background:#05090f}
.mg-stage.no-video,.choice-stage.no-video{background:radial-gradient(ellipse at 20% 15%,#23424c 0%,transparent 55%),radial-gradient(ellipse at 90% 85%,#34324b 0%,#0b121e 65%)}
.mg-overlay{position:absolute;inset:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:16px;padding:clamp(16px,3vw,40px);background:linear-gradient(180deg,#060c18b8,transparent 45%,#060c18c9)}
.mg-topbar{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;margin:0;cursor:default}
.mg-mode-tag{font-size:11px;letter-spacing:1px;color:#a3ecda;border:1px solid #81d9c250;background:#0b211ecc;padding:7px 12px;text-shadow:none;border-radius:6px}
.mg-title{font-size:clamp(16px,2.2vw,24px);font-weight:550;color:#eef5ff;text-shadow:0 2px 14px #000;overflow-wrap:anywhere}
.mg-counter-pill{font-size:14px;font-variant-numeric:tabular-nums;color:#e6eefa;background:#111d2ddd;border:1px solid #8196b344;padding:8px 14px;border-radius:7px}
.minigame-area{position:relative;display:flex;align-items:center;justify-content:center;gap:20px;padding:12px;min-width:0;min-height:0;overflow:auto;cursor:default;touch-action:manipulation}
.mg-instruction{font-size:clamp(14px,1.7vw,18px);line-height:1.6;color:#e6eefa;text-align:center;max-width:620px;overflow-wrap:anywhere;text-shadow:0 2px 10px #000}
#mg-action{display:flex;align-items:center;justify-content:center;width:100%;flex-shrink:0}
.qte-key,.mg-target{position:relative;inset:auto;width:112px;height:112px;border-radius:26px;border:1px solid #afe9db;color:#effffb;background:linear-gradient(135deg,#3c8069ed,#20403cef);font-size:36px;font-weight:650;text-shadow:none;box-shadow:0 8px 48px #0b282760,inset 0 1px #ffffff40;touch-action:manipulation;user-select:none}
.mg-target{font-size:25px}.qte-key:hover,.mg-target:hover{transform:none;background:linear-gradient(135deg,#4d947bed,#29534aef);border-color:#d5fff4}
.qte-key:active,.mg-target:active{transform:scale(.96)}
.mg-sub{color:#a3ecda;font-size:13px;min-height:18px}
.mg-bottom{display:flex;flex-direction:row;align-items:center;gap:24px;margin:0;cursor:default}
.mg-timing{display:grid;gap:9px;flex:1;min-width:0;color:#c0ccdc;font-size:13px;font-variant-numeric:tabular-nums}
.mg-bottom .timer-bar{height:5px;border:0;background:#8292ac33;border-radius:8px}
.mg-bottom .timer-fill{background:linear-gradient(90deg,#5daf9b,#b4ebd2)}
.mg-quit{min-height:44px;margin:0;padding:10px 18px;border:1px solid #8e9fb044;border-radius:8px;background:#101b2ccc;color:#bec9d8;text-shadow:none}
#mg-form{width:min(380px,100%);display:grid;gap:14px;padding:24px;border-radius:16px;border:1px solid #b4c5de38;background:#101c2de8;box-shadow:0 16px 70px #0003}
#mg-form label{color:#c5d1e0;margin:0;font-size:12px}
#mg-form .pw-input{width:100%;min-height:50px;font-size:20px;letter-spacing:3px;text-align:left;padding:12px 14px;background:#080f1b;border:1px solid #65788d;border-radius:8px}
#mg-form .mg-go{display:block;width:100%;max-width:none;min-height:48px;margin:0;padding:12px;border-radius:8px;background:#b8ead7;color:#112b25;border:1px solid #b8ead7;font-size:15px}
.mg-paused{position:absolute;inset:0;z-index:8;display:flex;align-items:center;justify-content:center;padding:24px;background:#070e20b8;backdrop-filter:blur(8px);font-size:18px;text-align:center;color:#ecf6ff}
.choice-overlay{padding:clamp(16px,3vw,40px);gap:16px;background:linear-gradient(180deg,#080d187d,transparent 30%,#060b16ed)}
.choice-overlay .stage-title{position:static;flex:none;font-size:clamp(16px,2.2vw,24px);color:#e9f2ff;font-weight:550;margin:0;line-height:1.4}
.choice-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:min(860px,100%);max-height:70%;overflow:auto;padding:2px;background:none;cursor:default;border-radius:0;animation:none}
.choice-opt{max-width:none;min-height:60px;white-space:normal;text-align:left;padding:16px 20px;background:#111e30eb;border:1px solid #8ba0be60;border-radius:10px;box-shadow:none;color:#eaf2fe;font-size:15px;overflow-wrap:anywhere}
.choice-opt:hover{background:#243a4a;border-color:#c0ead9;color:#eaffe9;transform:none}
.choice-opt.locked{opacity:.6}.choice-opt .lock-reason{color:#b2bbca}
.choice-countdown{width:min(860px,100%);margin:0 auto;display:grid;gap:8px;color:#b8d8cb;font-size:13px;flex-shrink:0}
.choice-countdown .timer-bar{height:5px;border:0;background:#ffffff20}.choice-countdown .timer-fill{background:#b8ead7}
.runtime-error{line-height:1.8}.runtime-error p{margin:20px 0;color:#c2cfe0}
@media(max-width:600px){
 #player-bar{gap:4px;padding:6px 8px}#player-bar .brand{display:none}#player-bar .spacer{display:none}#player-bar button{padding:8px;font-size:12px;flex:1}
 #player-bar #hud{width:100%;order:2}.mg-overlay{gap:12px;padding:16px}
 .mg-topbar{grid-template-columns:1fr auto;gap:10px}.mg-mode-tag{justify-self:start}.mg-title{grid-row:2;grid-column:1/-1;font-size:20px}
 .minigame-area{gap:16px;padding:8px 0}.mg-bottom{gap:16px}.choice-opts{grid-template-columns:1fr;max-height:75%}.choice-opt{min-height:54px;padding:12px 16px}
 .mg-counter-pill{font-size:12px}.choice-overlay{padding:18px;gap:12px}
}
@media(max-height:500px){
 #player-bar{min-height:44px;padding:4px 8px}#player-bar button{min-height:36px;padding:6px 8px}
 .mg-overlay{padding:10px 20px;gap:8px}.mg-topbar{display:flex;gap:12px}.mg-title{font-size:16px}.mg-mode-tag,.mg-counter-pill{padding:5px 10px}
 .minigame-area{gap:8px;padding:0;flex-direction:row;flex-wrap:nowrap}.mg-instruction{max-width:35%;font-size:13px}#mg-action{width:auto;flex:1}.mg-sub:empty{display:none}
 .qte-key,.mg-target{width:76px;height:76px;border-radius:18px;font-size:27px}#mg-form{padding:10px;gap:6px;max-width:300px}#mg-form label{display:none}#mg-form .pw-input{min-height:40px;font-size:16px;padding:8px}#mg-form .mg-go{min-height:40px;padding:8px}
 .mg-bottom{gap:16px}.mg-quit{min-height:38px;padding:8px 12px}.mg-timing{gap:4px}.choice-overlay{padding:12px 20px;gap:10px}.choice-opts{max-height:70%;grid-template-columns:repeat(2,minmax(0,1fr))}.choice-opt{min-height:44px;padding:8px 14px;font-size:13px}
}
@media(prefers-reduced-motion:reduce){#player *{animation:none!important;transition:none!important}}

/* v1.2 authoring and accessible player layout */
#app{grid-template-rows:auto auto minmax(0,1fr)}
#topbar,#editor-toolbar{flex-wrap:wrap;overflow:visible;padding:10px 16px;gap:8px}
#topbar .spacer,#topbar .divider,#editor-toolbar .divider{display:none}
#topbar .brand{margin-right:12px}#save-state{margin-right:auto}#project-name{width:180px}
#editor-status{white-space:normal;line-height:1.5;font-size:11px}
#workspace:has(#inspector:not([hidden])) #canvas-wrap{right:430px}
#inspector{width:430px;gap:16px;padding:20px;background:#121c29;z-index:5}
#inspector h2{font-size:19px}#inspector label,#modal label{font-size:13px;line-height:1.65;color:#b9c6d8;display:block;margin:10px 0 5px}
#inspector input:not([type=checkbox]),#inspector select,#modal label>input:not([type=checkbox]),#modal label>select{width:100%;min-height:40px}
#inspector .row{flex-wrap:wrap;align-items:stretch}#inspector .row>label{flex:none;min-width:100%;margin-bottom:0}
#inspector .row>button{flex:0 0 auto}#inspector .row>input,#inspector .row>select{flex:1 1 200px}
#inspector .sect{border-top:1px solid #304157;padding-top:18px;margin-top:10px}#inspector .sect h3{font-size:14px;margin-bottom:12px}
.inspector-close{align-self:flex-end}.opt{padding:16px;margin:14px 0;border-radius:12px;background:#172332}
.rule-card,.definition-card,.chapter-card,.clue-card{padding:16px;margin:14px 0;border:1px solid #344459;border-radius:12px;background:#111b29;overflow-wrap:anywhere}
.rule-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.rule-delete{margin-top:12px;color:#c1a2a2}
#modal{width:min(880px,94vw);padding:28px;line-height:1.75}#modal p{white-space:pre-wrap;overflow-wrap:anywhere}#modal h3{margin:12px 0}
#modal button,.modal-actions{white-space:normal;flex-wrap:wrap}#modal select{max-width:100%}
.bulk-nodes,.completion-nodes{max-height:240px;overflow:auto;padding:8px;background:#0c1420;border-radius:8px}
.bulk-nodes label,.completion-nodes label{display:flex!important;gap:10px;align-items:flex-start;padding:6px;margin:0!important}.bulk-nodes input,.completion-nodes input{margin-top:7px;flex:none}
.clue-card img{max-width:100%;max-height:360px;object-fit:contain}.clue-card p{white-space:pre-wrap}
.hotspot-preview{position:relative;min-height:100px;margin:14px 0;background:#101722}.hotspot-preview img{width:100%;display:block}.hotspot-preview button{padding:0;background:#e6be6666;border:2px solid #edc577;white-space:normal;overflow:hidden}.hotspot-coordinates{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.text-video.text-playback{position:absolute;inset:0;z-index:1;display:flex;background:radial-gradient(ellipse at 20% 10%,#22314a,#0c101b 70%)}
#tv-frame{flex:1;min-height:0;position:relative}.text-frame{position:absolute;inset:0;padding:clamp(20px,5vw,70px);display:flex;flex-direction:column;justify-content:center;gap:18px;background:radial-gradient(ellipse at 20% 10%,#22314a,#0c101b 70%);overflow:hidden}
.text-frame h2{font-size:clamp(20px,3vw,32px);flex-shrink:0}.text-page{white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto;max-height:100%;font-size:clamp(15px,1.7vw,22px);line-height:1.9;color:#e4eaf2;scrollbar-width:thin}
.tv-bar{position:relative;display:flex;gap:12px;padding:16px;flex-shrink:0;background:#101722;align-items:center;flex-wrap:wrap}.tv-bar input[type=range]{flex:1;min-width:100px;accent-color:#edc577}.tv-bar span{font-variant-numeric:tabular-nums;color:#aabbcf}
.choice-stage>.text-frame,.mg-stage>.text-frame{padding-bottom:35%;justify-content:flex-start}.choice-overlay{background:linear-gradient(0deg,#07101bef,transparent 85%)}
#player .choice-opts{max-height:56%;overflow:auto;min-height:80px;gap:10px}.choice-opt-label{white-space:normal;overflow-wrap:anywhere}
#player-bar{gap:8px}#player-bar button{flex-shrink:0}#hud{display:flex;flex-wrap:wrap;gap:8px;max-width:100%}
.chapter-tabs,.tl-tools{display:flex;flex-wrap:wrap;gap:8px;padding:12px 18px;border-bottom:1px solid #24364b}.chapter-tabs{max-height:160px;overflow:auto}.chapter-tabs .active{border-color:#edc577;color:#edc577}
.tl-tools span{align-self:center;line-height:1.6;color:#a6b7cf;font-size:12px}.tl-map-view{touch-action:none;cursor:grab;background-image:radial-gradient(#243449 1px,transparent 1px);background-size:24px 24px}.tl-map-view:active{cursor:grabbing}
.tl-node{width:248px!important;height:116px!important;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;padding:14px;gap:10px;white-space:normal;text-align:left;border-radius:12px;overflow:hidden;background:#142235}
.tl-node small{font-size:12px}.tl-node-title{font-size:14px;line-height:1.5;white-space:normal!important;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;word-break:break-word}.tl-node.current{border:2px solid #edc577;background:#3c3321}.tl-node.visited{border-color:#5ab8a8}.tl-node.locked{opacity:1;border-style:dashed;color:#71839c;background:#111b29}.tl-edges path{fill:none;stroke:#516781;stroke-width:2}
.explore-stage{position:absolute;inset:0;overflow:auto;padding:20px;display:flex;align-items:center;flex-direction:column;gap:14px}.explore-image{position:relative;width:min(100%,920px);aspect-ratio:16/9;flex-shrink:0;background:radial-gradient(ellipse,#294254,#0c1825);border-radius:14px}.explore-image img{display:block;width:100%;height:auto}.hotspot{position:absolute;border:2px solid #edc577b0;background:#1c2e43bb;min-height:24px;min-width:24px;white-space:normal;padding:4px;overflow:auto}.hotspot:hover{background:#bc98455a}
@media(max-width:850px){#topbar{max-height:150px;overflow:auto}#editor-toolbar{max-height:130px;overflow:auto}#workspace:has(#inspector:not([hidden])) #canvas-wrap{right:0}#inspector{width:min(430px,100%)}.tl-map-head{padding:8px}.chapter-tabs,.tl-tools{padding:8px}.tl-map-foot{font-size:11px;padding:7px}.text-frame{padding:20px}.tv-bar{padding:8px;gap:6px}.tv-bar span{font-size:11px}.choice-stage>.text-frame,.mg-stage>.text-frame{padding-bottom:50%}}
@media(max-height:550px){#player-bar{padding:4px}#player-bar button{font-size:11px;min-height:32px;padding:6px}#player .mg-overlay{gap:6px}.text-frame{padding:14px;gap:6px}.text-frame h2{font-size:18px}.text-page{font-size:14px;line-height:1.6}.chapter-tabs{max-height:70px}.tl-map-foot{display:none}}

.tl-node.current{opacity:1;color:#f7e0ab;cursor:pointer}.tl-node.locked{filter:none}.tl-node.unlocked{opacity:1}

.hotspot{min-width:0;min-height:0}

/* v1.2.1: layout follows available height, never viewport-width padding. */
.text-frame{min-height:0;padding:clamp(14px,3vh,36px);gap:12px;isolation:isolate}
.text-frame small,.text-frame h2{flex:none;margin:0}.text-page{min-height:0;flex:0 1 auto;max-height:none;overflow:auto;padding-bottom:8px;position:relative}
.text-background{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;z-index:-2}.text-frame:has(.text-background){background:#0b1320}.text-frame:has(.text-background)::after{content:'';position:absolute;inset:0;background:#07101b99;z-index:-1}
.choice-stage>.text-frame,.mg-stage>.text-frame{padding:clamp(14px,3vh,36px);justify-content:flex-start}
#player .with-text-tail{display:flex;flex-direction:column;gap:0;background:#0b1320}
#player .with-text-tail>.text-frame{position:relative;inset:auto;flex:1 1 45%;min-height:64px;overflow:hidden}
#player .with-text-tail>.stage-overlay{position:relative;inset:auto;flex:0 1 auto;min-height:0;max-height:60%;background:#0a1320dd;padding:14px 20px;overflow:auto;gap:12px}
#player .with-text-tail .choice-opts{margin:0 auto;max-height:none;min-height:0;flex:none}
#player .with-text-tail .mg-overlay{flex:1 1 55%;overflow:auto;min-height:170px;grid-template-rows:auto auto auto}
#player .with-text-tail .minigame-area{overflow:visible;min-height:80px;gap:8px}
#player .with-text-tail .mg-title{font-size:18px}.with-text-tail .text-frame h2{font-size:clamp(18px,2.5vw,28px)}
.tv-bar,.player-controls{flex-wrap:wrap;gap:8px;flex-shrink:0}.tv-bar input,.player-controls input{flex:1;min-width:100px;width:auto}.first-watch-note{font-size:12px;color:#b8c7db}
#pv-progress:disabled,#tv-progress:disabled{cursor:not-allowed;opacity:.55}.story-overlay .autoplay-hint{pointer-events:auto}
#chapter-sidebar{position:absolute;inset:0 auto 0 0;width:210px;padding:14px;background:#111a27;border-right:1px solid #2c3b50;overflow:auto;z-index:2}
#chapter-sidebar h3{margin:0 0 12px}#chapter-sidebar input{width:100%;min-width:0}#chapter-sidebar button{display:block;width:100%;text-align:left;white-space:normal;overflow-wrap:anywhere;padding:12px;margin:8px 0}#chapter-sidebar button small{display:block;color:#a6b9cf;margin-top:6px}#chapter-sidebar button.active{border-color:#dabb7e;background:#263449}#chapter-nav{margin-top:14px}#node-search-results{max-height:40vh;overflow:auto}
#canvas-wrap{left:210px}.exit-tag{white-space:normal;text-align:left;overflow-wrap:anywhere;cursor:pointer;max-width:100%}
.validation-issues button{display:block;text-align:left;width:100%;padding:12px;margin:8px 0;white-space:normal;overflow-wrap:anywhere}.issue-focus{outline:2px solid #f3c777;outline-offset:3px;border-radius:6px}
#player-title{display:block;max-width:min(42vw,520px);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#player-bar .brand{min-width:0}
@media(max-width:850px){#chapter-sidebar{width:150px;padding:8px}#canvas-wrap{left:150px}#chapter-sidebar button{padding:8px}.tv-bar{padding:6px}.tv-bar small{font-size:10px}#player .with-text-tail>.stage-overlay{padding:10px;max-height:62%}}
@media(max-height:550px){#player .with-text-tail{flex-direction:row}#player .with-text-tail>.text-frame{flex:1 1 46%;height:100%;min-width:0}#player .with-text-tail>.stage-overlay{flex:1 1 54%;height:100%;max-height:100%;min-width:0}#player .with-text-tail .choice-opts{grid-template-columns:1fr}.tv-bar button{padding:5px}.tv-bar{gap:4px}#player .with-text-tail .minigame-area{flex-wrap:wrap}.text-page{line-height:1.6}}
/* v1.3: five menus, object cards and bounded fields */
[hidden]{display:none!important}
#topbar{overflow:visible;flex-wrap:wrap;gap:8px;padding:10px 16px;min-height:62px}#topbar .divider{display:none}#topbar .brand small{display:block}#project-name{max-width:220px}.studio-menu{position:relative}.studio-menu summary{cursor:pointer;list-style:none;padding:9px 16px;border:1px solid #394656;border-radius:9px;background:#1b2738;font-weight:600}.studio-menu[open] summary{background:#304669}.menu-content{position:absolute;right:0;top:44px;z-index:90;width:240px;padding:10px;background:#172234;border:1px solid #49617b;border-radius:12px;box-shadow:0 20px 60px #0008;display:grid;gap:7px}.menu-content button{text-align:left;white-space:normal;padding:12px}#editor-toolbar{gap:8px;padding:8px 16px;flex-wrap:wrap}#inspector{width:390px;flex-shrink:0;overflow-x:hidden}#inspector .row{flex-wrap:wrap}#inspector .row>*{min-width:0}#inspector input,#inspector textarea{max-width:100%;box-sizing:border-box}#inspector h3{line-height:1.6}.field-choice{display:flex;flex-wrap:wrap;gap:5px;margin:6px 0 12px;min-width:0}.field-choice button{white-space:normal;overflow-wrap:anywhere;text-align:left;min-height:36px}.field-choice .object-picker{flex:1 1 180px;background:#233a51;border-color:#536e8e}.segmented .active,.collection-card.selected,.collection-tabs .active,.card-chapters .active{background:#31516d;border-color:#74cfca}.card-backdrop{position:fixed;inset:0;z-index:1200;background:#050a14b8;display:grid;place-items:center;padding:20px}.card-dialog{width:min(1000px,100%);max-height:92dvh;overflow:auto;background:#142235;color:#e5edf7;border:1px solid #415775;border-radius:20px;padding:24px;box-sizing:border-box;box-shadow:0 30px 100px #0008}.card-dialog>header{display:flex;align-items:center;justify-content:space-between;gap:20px}.card-dialog h2{margin:0 0 18px}.card-dialog label{display:block;line-height:1.7;margin:10px 0}.card-dialog input,.card-dialog textarea{display:block;width:100%;box-sizing:border-box;padding:12px;margin:5px 0 12px}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(205px,1fr));gap:14px;margin:16px 0}.collection-card{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;gap:9px;padding:20px;text-align:left;white-space:normal;overflow-wrap:anywhere;min-width:0;border-radius:14px;background:#1d3047;border:1px solid #3b5670;color:inherit;line-height:1.6}.collection-card b{font-size:17px}.collection-card span{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.collection-card small,.collection-card code{font-size:12px;color:#acbdcf}.card-icon{font-size:30px}.collection-tabs,.card-chapters,.workspace-actions,.object-actions,.seed-flags{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.workspace-actions input{flex:1;min-width:180px}.card-dialog footer{display:flex;justify-content:flex-end;gap:10px;padding-top:16px}.object-image{max-width:100%;max-height:240px;border-radius:12px}.target-banner{position:fixed;left:50%;top:120px;transform:translateX(-50%);z-index:1100;padding:18px;background:#244c64;border:1px solid #8ad5cc;border-radius:12px;max-width:80vw}.target-banner button{margin-left:12px}.inline-error{padding:12px;background:#5a2735;color:#ffdae0;border-radius:8px;line-height:1.6}.countdown-default{margin-bottom:12px}.node-test{width:100%;margin:10px 0}.character-hub{padding:28px;overflow:auto;width:100%;height:100%;box-sizing:border-box}.period-panel{padding:12px;border:1px solid #3a536c;border-radius:14px;margin:16px 0}.character-card{min-height:145px}.waiting{margin:auto}.track-label{position:absolute;color:#b9dfdf;font-size:24px;pointer-events:none}.narrative-toolbar{display:flex;gap:8px;flex-wrap:wrap;padding:10px}#chapter-nav button{border-radius:12px;padding:16px;margin:10px 0;text-align:left;white-space:normal;line-height:1.6}#chapter-nav button small{display:block}#node-search-results button{white-space:normal;line-height:1.5}.definition-wall{min-height:180px}.card-dialog .rule-card{padding:14px}.seed-values input{width:100%}
@media(max-width:800px){#topbar .brand{font-size:14px}#project-name{max-width:140px}#save-state{font-size:11px}.studio-menu summary{padding:8px 10px}#chapter-sidebar{width:155px}#inspector{width:330px}.card-backdrop{padding:8px}.card-dialog{padding:16px;max-height:96dvh}.card-grid{grid-template-columns:repeat(auto-fill,minmax(155px,1fr))}#editor-status{display:none}}
@media(max-width:520px){#inspector{position:fixed;right:0;top:110px;bottom:0;z-index:60;width:min(360px,95vw)}#chapter-sidebar{width:115px;padding:8px}.studio-menu .menu-content{position:fixed;left:12px;right:12px;top:110px;width:auto}.character-hub{padding:14px}.collection-card{padding:14px}}
.causal-edge{fill:none;stroke:#66d5c2;stroke-width:3;stroke-dasharray:9 6;opacity:.7;pointer-events:stroke}.card-dialog .collection-tabs button{padding:10px 14px}.reference-cards{max-height:280px;overflow:auto}
.track-label{width:max-content;max-width:500px;white-space:nowrap;font-size:20px}.option-settings{margin-top:12px;border-top:1px solid #40546a;padding-top:10px}.option-settings>summary{cursor:pointer;padding:10px;font-weight:600;color:#bcd6e4}.low-frequency{margin:15px 0;border:1px solid #33495c;border-radius:10px;padding:10px}.low-frequency>summary{cursor:pointer;color:#aebccb;padding:8px}
/* v1.4: short, stable rule cards and chapter boundaries */
.simple-rule,.chapter-card{padding:16px;margin:12px 0;border:1px solid var(--border,#344357);border-radius:14px;background:#142031}.simple-rule .sentence{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0}.simple-rule .operation{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.simple-rule input{width:105px}.simple-rule button{white-space:normal}.chapter-card .card-grid{margin-top:12px}.node-chapter .row{flex-wrap:wrap}.character-hub{overflow:auto;max-height:100%;padding:28px}.character-hub .choice-history{margin-top:24px}#chapter-sidebar[hidden]{display:none!important}.entry-badge,.exit-badge{font-size:10px;white-space:nowrap}.exit-badge{color:#79dfbf}details.logic-card>summary{padding:12px;cursor:pointer}.logic-card .simple-rule{margin:8px 0}.card-dialog footer{padding-top:16px}
.chapter-dialog{max-width:1100px}.chapter-dialog textarea{width:100%}.compare{display:grid;grid-template-columns:1fr 1fr;gap:16px}.compare pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:360px;overflow:auto;background:#0b1422;padding:12px}.interaction-head{display:flex;justify-content:space-between;gap:12px}.interaction-board{height:clamp(170px,38vh,400px);min-height:160px;position:relative;display:flex;align-items:center;justify-content:center;gap:20px;flex-wrap:wrap;touch-action:none;user-select:none}.interaction-target,.interaction-gesture{min-height:64px;min-width:100px;white-space:normal;padding:20px;font-size:20px;background:#173a42;color:#c6ffee;border:1px solid #78cabc;border-radius:20px;touch-action:none}.interaction-gesture{font-size:38px;min-width:170px;min-height:130px}.interaction-target.done{opacity:.5}#mg-action:has(.interaction-board){width:min(950px,100%)}#mg-action progress{width:100%;accent-color:#89dfc7}.action-step{padding:16px;border:1px solid #34475a;border-radius:12px;margin:10px 0}.action-step input{max-width:100%}@media(max-width:600px){.compare{grid-template-columns:1fr}.interaction-target{padding:12px;font-size:16px;min-width:75px}.chapter-dialog{padding:16px}}
/* v1.5: a composed game owns a vertical action surface, not the legacy key row. */
#mg-action:has(.interaction-board){display:flex;flex-direction:column;align-items:stretch;gap:12px;max-width:950px;min-width:0}
.interaction-head{width:100%;font-size:17px;align-items:center}.interaction-head b{overflow-wrap:anywhere}.interaction-head [data-time]{white-space:nowrap;color:#9ce1d2}
#mg-action .interaction-board{width:100%;min-height:120px;height:clamp(130px,30vh,300px);background:#10253188;border:1px solid #61988b55;border-radius:20px;padding:16px}
.mg-overlay:has(.interaction-board) .mg-instruction,.mg-overlay:has(.interaction-board) .mg-counter-pill,.mg-overlay:has(.interaction-board) .mg-timing{display:none}
.mg-overlay:has(.interaction-board) .mg-bottom{justify-content:flex-end}.mg-overlay:has(.interaction-board) .minigame-area{flex-direction:column;min-height:0;overflow:auto}
@media(max-height:500px){#mg-action .interaction-board{height:120px;min-height:100px;padding:8px}.interaction-gesture{min-height:80px;font-size:30px}.interaction-head{font-size:14px}#mg-action:has(.interaction-board){gap:4px}.interaction-feedback:empty{display:none}}
/* v1.6: one full stage, shared contain coordinates for video and interactive targets. */
#player .mg-stage:has(.interaction-board) .mg-topbar,#player .mg-stage:has(.interaction-board) .mg-instruction,#player .mg-stage:has(.interaction-board) .mg-sub,#player .mg-stage:has(.interaction-board) .mg-bottom{display:none}
#player .mg-stage:has(.interaction-board) .mg-overlay,#player .mg-stage:has(.interaction-board) .minigame-area,#player .mg-stage:has(.interaction-board) #mg-action{position:absolute;inset:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;border-radius:0;background:none;display:block;overflow:hidden}
.puzzle-stage{position:absolute;inset:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:auto;background:radial-gradient(circle at 25% 20%,#183245 0,transparent 45%),linear-gradient(145deg,#07121b,#0b1823 65%,#112a35);padding:max(14px,env(safe-area-inset-top)) max(14px,env(safe-area-inset-right)) max(14px,env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-left));box-sizing:border-box}
.puzzle-content{width:min(680px,100%);max-height:100%;overflow:auto;display:flex;flex-direction:column;gap:16px;padding:clamp(12px,3vw,30px);box-sizing:border-box;color:#f3f9fc}
.puzzle-content h2{font-size:clamp(25px,4vw,40px);line-height:1.3;margin:0}.puzzle-head,.puzzle-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.puzzle-head>span:last-child{font-weight:700;color:#a9f4de}.puzzle-question{font-size:clamp(18px,2.4vw,25px);line-height:1.65;white-space:pre-wrap;margin:0}.puzzle-content #mg-form{width:100%;max-width:none;padding:0;border:0;box-shadow:none;background:none;display:grid;gap:14px}.puzzle-content #mg-form label{display:block;color:#dceaf0;font-size:14px}.puzzle-content #mg-pw{min-height:56px;font-size:20px;padding:12px 16px;border-radius:10px;background:#091822;color:white;border:1px solid #7797a4;letter-spacing:normal;text-align:left;width:100%;box-sizing:border-box}.puzzle-content #mg-go{min-height:52px;font-size:17px}.puzzle-content #mg-status{min-height:1.4em;color:#ffcf9b;margin:0}.puzzle-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.puzzle-choice{min-height:64px;text-align:left;white-space:normal;line-height:1.4;border:1px solid #607b85;background:#132b37;color:#f2fbff;border-radius:12px;padding:12px 16px}.puzzle-choice.active{border-color:#a8edcf;background:#225048}.puzzle-actions button{min-height:44px}.puzzle-hint-card{padding:12px;margin:8px 0;border:1px solid #43576a;border-radius:10px;display:grid;gap:7px}.puzzle-hint-card p{white-space:pre-wrap;margin:0}.puzzle-hint-card span{color:#b9d7cc}.puzzle-hint-editor{padding:8px 0;border-top:1px solid var(--line)}.puzzle-hint-editor textarea{width:100%}.puzzle-option-editor{display:flex;gap:6px;align-items:center;margin:6px 0}.puzzle-option-editor input{min-width:0;flex:1}.puzzle-option-editor button{flex:none}.puzzle-option-editor button.active{border-color:#8ce2bd;color:#8ce2bd}
@media(max-width:600px){.puzzle-stage{align-items:flex-start}.puzzle-content{padding:14px 4px;gap:12px}.puzzle-choices{grid-template-columns:1fr}.puzzle-question{font-size:18px}.puzzle-content #mg-pw{font-size:18px}.puzzle-actions button{flex:1}.puzzle-content h2{font-size:27px}}
@media(max-height:550px){.puzzle-stage{align-items:flex-start}.puzzle-content{gap:8px;padding:8px}.puzzle-content h2{font-size:23px}.puzzle-question{font-size:16px}.puzzle-choices{grid-template-columns:repeat(2,minmax(0,1fr))}.puzzle-choice{min-height:40px;padding:6px 10px}.puzzle-content #mg-pw{min-height:42px}.puzzle-content #mg-go{min-height:42px}}
#player .interaction-board{position:absolute;border:0;border-radius:0;background:none;max-width:none;min-height:0;margin:0;padding:0;touch-action:none}
#player .interaction-head{position:absolute;left:3%;right:3%;top:2%;z-index:4;display:flex;gap:12px;justify-content:space-between;pointer-events:none;text-shadow:0 1px 4px #000}
#player .interaction-head button{pointer-events:auto}
#player .interaction-target{position:absolute;min-width:0;min-height:0;max-width:none;margin:0;border:2px solid #8bd9ca;border-radius:14px;background:#123c48b8;color:white;touch-action:none;user-select:none;font-size:clamp(12px,2vw,22px);overflow:hidden;display:flex;align-items:center;justify-content:center}
#player .interaction-target progress{position:absolute;bottom:0;left:0;width:100%;height:6px;margin:0}
#player .interaction-target.transparent{background:transparent;border-color:transparent;box-shadow:none;color:transparent}
#player .interaction-target.transparent>*{visibility:hidden}
#player .show-bounds .interaction-target.transparent{border:2px dashed #ffc56d;color:#ffc56d;background:#30260e66}
#player .show-bounds .interaction-target.transparent>*{visibility:visible}
#player .interaction-target.pressed{outline:3px solid #afffdc;background:#18726788}
#player .interaction-target.done{opacity:.35}
#player .interaction-drop{position:absolute;border:2px dashed #87d2b4;border-radius:12px;background:#17382b55;display:grid;place-items:center;font-size:14px;pointer-events:none}
#player .interaction-foot{position:absolute;bottom:2%;left:4%;right:4%;z-index:4;text-align:center;pointer-events:none}
#player .interaction-foot button{pointer-events:auto}
#player .interaction-foot progress{width:100%;height:4px}
#player .interaction-feedback{min-height:1.4em;white-space:normal;text-shadow:0 1px 4px #000}
.hotspot-editor{position:relative;aspect-ratio:16/9;background:#091b28;overflow:hidden;touch-action:none}
.hotspot-editor video,.hotspot-editor>img{position:absolute;width:100%;height:100%;object-fit:contain}
.hotspot-pin{position:absolute;border:2px solid #8bd9ca;background:#24625988;touch-action:none;min-width:0;min-height:0;padding:0;overflow:visible;color:white}
.hotspot-pin[data-transparent=true]{border-style:dashed;background:#49381566}
.hotspot-pin .resize-grip{position:absolute;right:-5px;bottom:-5px;width:16px;height:16px;border:1px solid #fff;background:#53a48d;cursor:nwse-resize}
.hotspot-pin.drop{border-style:dashed;background:#53432966}
.option-performance textarea{width:100%;min-height:90px}.ar-thumbnail{max-height:110px;max-width:100%;object-fit:contain}
.ar-stage{position:absolute;inset:0;background:transparent;pointer-events:none}.ar-stage video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.ar-camera{display:none}.ar-stage.scanning .ar-camera{display:block}.ar-tools{position:absolute;left:4%;right:4%;bottom:4%;padding:12px;background:#0c1e2bd9;border-radius:12px;z-index:4;pointer-events:auto}.ar-tools p{margin:8px 0}.ar-tools .row{flex-wrap:wrap}
.scan-play-stage{position:absolute;inset:0;width:100%;height:100%;overflow:hidden}.scan-play-stage .scan-info{position:absolute;top:12px;left:12px;max-width:70%;padding:6px 10px;border-radius:8px;background:#08131dc9;color:#e3f7ed;font-size:13px;z-index:2;pointer-events:none}.scan-play-stage .stage-bg{object-fit:contain}.scan-play-stage .ar-tools{bottom:max(12px,env(safe-area-inset-bottom))}

#player .interaction-head{width:auto;flex-wrap:wrap;align-items:flex-start}#player .interaction-head b{flex:1 1 130px;min-width:0}#player .interaction-head button{max-width:100%;white-space:normal;flex-shrink:0}

/* Mobile play: compact controls and full-height stage. */
#p-more{display:none}#player-bar button{white-space:normal}
@media(max-width:600px){#player-bar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;padding:6px max(6px,env(safe-area-inset-right)) 6px max(6px,env(safe-area-inset-left));min-height:0}#player-bar button{min-width:0;width:100%;font-size:12px;line-height:1.25;padding:7px 4px;min-height:38px}#player-bar #p-more{display:block;grid-column:1/-1;min-height:28px;padding:4px}#player-bar .p-secondary{display:none}#player-bar.more-open .p-secondary:not([hidden]){display:block}#player-bar #hud{grid-column:1/-1}#player-stage{min-height:0}#player .ar-tools{left:3%;right:3%;bottom:max(12px,env(safe-area-inset-bottom));max-height:40%;overflow:auto;padding:12px}#player .ar-tools .row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}#player .ar-tools button{white-space:normal;min-height:44px;min-width:0}#player .tl-map-head{flex-wrap:wrap}#player .tl-tools{flex-wrap:wrap}#player .tl-map{min-height:0;height:100%;box-sizing:border-box}}

/* v1.6.1: the game uses the full landscape stage; no inner game box. */
#player .game-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hotspot-editor{aspect-ratio:16/9}.hotspot-editor video,.hotspot-editor>img{object-fit:cover}
.target-inline{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:12px;border:1px solid #34475a;border-radius:10px;margin-top:8px}.target-inline>strong,.target-inline>details{grid-column:1/-1}.target-inline input{width:100%;min-width:0}.hotspot-pin{cursor:move}.hotspot-pin.selected{outline:2px solid #a0e9d5}
.prompt-versions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.prompt-versions article{padding:16px;border:1px solid #34475a;border-radius:12px}.prompt-preview{white-space:pre-wrap;overflow-wrap:anywhere;max-height:45vh;overflow:auto}
@media(pointer:coarse) and (orientation:landscape){#player-bar{padding:4px max(8px,env(safe-area-inset-right)) 4px max(8px,env(safe-area-inset-left));gap:4px;flex-wrap:nowrap;min-height:44px}#player-bar button{min-height:36px;padding:6px 10px;font-size:13px;flex-shrink:0}#player-title,#player-location{display:none}#player-bar .p-secondary{display:none}#player-bar.more-open{flex-wrap:wrap}#player-bar.more-open .p-secondary{display:block}#p-more{display:block}#player-stage{min-height:0}.ar-tools{bottom:2%;padding:8px;font-size:13px}.ar-tools button{padding:7px 12px}.mg-stage:has(#mg-pw) .mg-topbar{display:none}.mg-stage:has(#mg-pw) .mg-overlay{overflow:auto;padding:10px;gap:6px}.mg-stage:has(#mg-pw) .minigame-area{min-height:0;overflow:auto}.mg-stage:has(#mg-pw) .mg-bottom{position:static}.mg-stage:has(#mg-pw) input{font-size:16px;max-height:42px}}

/* Phone-first play: portrait remains playable; video fullscreen is optional. */
#player{height:100vh;height:100dvh;max-height:100dvh}#player:fullscreen{width:100vw;height:100vh;height:100dvh}
#player .ar-stage,#player .ar-camera{position:absolute;inset:0;width:100%;height:100%;min-height:0;overflow:hidden}
#player .ar-camera iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.ar-fallback{width:100%;font-size:12px}.ar-fallback summary{cursor:pointer;padding:7px}.ar-fallback[open]{display:block}.ar-fallback button{margin:3px}.scanning [data-ar-start]{display:none}.ar-published{display:inline-block;padding:6px}
@media(pointer:coarse),(max-width:600px){
 #player-bar{display:flex;flex-wrap:nowrap;gap:4px;min-height:46px;height:auto;padding:4px max(6px,env(safe-area-inset-right)) 4px max(6px,env(safe-area-inset-left));position:relative}
 #player-bar .brand,#player-bar .spacer,#player-title,#player-location{display:none}#player-bar button{font-size:12px;line-height:1.2;min-height:38px;width:auto;flex:1 1 0;padding:7px 4px;white-space:nowrap}
 #player-bar #p-more{display:block;min-height:38px;flex:0 0 auto;width:auto;padding:7px 8px}#player-bar #p-restart,#player-bar .p-secondary{display:none}#player-bar.more-open{flex-wrap:wrap}#player-bar.more-open #p-restart,#player-bar.more-open .p-secondary:not([hidden]){display:block;flex:1 1 25%}#player-bar #hud{max-height:20dvh;overflow:auto}
 #player-stage{flex:1 1 0;min-height:0}#stage-inner{min-height:0}#player .tl-map-head{flex-wrap:nowrap;justify-content:space-between;gap:4px;padding:4px 8px}#player .tl-map-head h2{font-size:12px;overflow:hidden;text-overflow:ellipsis}#player .tl-map-head button{font-size:12px;min-height:34px;padding:5px 8px}
 #player .chapter-tabs{flex-wrap:nowrap;overflow-x:auto;max-height:46px;padding:4px 8px;flex-shrink:0}#player .chapter-tabs button{font-size:12px;min-height:34px;padding:5px 8px;white-space:nowrap}
 #player .tl-tools{flex-wrap:nowrap;padding:4px 8px;gap:4px;flex-shrink:0;overflow-x:auto}#player .tl-tools button{font-size:11px;min-height:34px;padding:5px 7px;white-space:nowrap}#player .tl-tools span,#player .tl-map-foot{display:none}#player .tl-map-view{flex:1 1 0;min-height:0}
 #player .ar-tools{left:8px;right:8px;bottom:max(8px,env(safe-area-inset-bottom));padding:8px;max-height:35%;background:#0c1e2bcc;font-size:12px}#player .ar-tools p{margin:4px 0;line-height:1.35}#player .ar-tools .row{display:flex;flex-wrap:wrap;gap:4px}#player .ar-tools button{min-height:38px;padding:6px 9px;font-size:12px;flex:1}#player .ar-tools .ar-fallback{flex:1 1 100%}
 #player .interaction-head{left:8px;right:8px;top:8px;font-size:13px;gap:5px;pointer-events:none}#player .interaction-head button{pointer-events:auto;font-size:11px;padding:4px 7px;min-height:30px}#player .interaction-head b{flex:1 1 90px}#player .interaction-target{font-size:clamp(12px,3.6vw,19px);overflow-wrap:anywhere;padding:6px}#player .interaction-foot{left:8px;right:8px;bottom:8px;font-size:12px}
 #player .mg-stage:has(#mg-pw) .mg-topbar{display:none}#player .mg-stage:has(#mg-pw) .mg-overlay{overflow:auto;padding:12px;gap:8px}#player .mg-stage:has(#mg-pw) .minigame-area{min-height:0;overflow:visible;flex:1}#player .mg-stage:has(#mg-pw) input{font-size:16px}#player .mg-stage:has(#mg-pw) .mg-bottom{position:static}
}
/* v1.6.2: text opacity follows the playback clock; inherited cards are still. */
#player .text-video.text-playback,#player .text-frame.black-cards{background:#000}
#player .text-frame.black-cards{display:flex;justify-content:center;align-items:center;padding:24px;gap:0}
#player .black-cards .text-page{font-family:system-ui,-apple-system,'PingFang SC',sans-serif;font-size:clamp(20px,2.5vw,32px);line-height:1.8;font-weight:400;color:#eee;text-align:center;white-space:pre-wrap;overflow-wrap:anywhere;width:min(100%,32em);max-height:100%;margin:0;padding:0;animation:none;transition:none}
#player .text-playback .tv-bar{background:#090909;border-color:#222}
#player .with-text-tail>.text-frame.black-cards{justify-content:center;min-height:110px}
#inspector details.node-more,#inspector details.choice-background,#inspector details.choice-countdown,#inspector details.choice-input,#inspector details.legacy-story{border:1px solid #344052;border-radius:10px;padding:10px;margin:12px 0}
#inspector summary{cursor:pointer;line-height:1.6}#inspector .content-tabs{margin:16px 0}#inspector .content-tabs button{flex:1}
#inspector .compact-rule{display:grid;grid-template-columns:1fr 32px;gap:8px;padding:10px;border-radius:10px;margin:8px 0}
#inspector .compact-rule>[data-object]{grid-column:1;text-align:left;white-space:normal}#inspector .compact-rule>[data-remove]{grid-row:1;grid-column:2;padding:2px}
#inspector .rule-operation{grid-column:1/-1;display:flex;gap:8px;align-items:center;flex-wrap:wrap}#inspector .rule-operation input{width:80px;margin:0;flex:1;min-width:70px}
#inspector .rule-operation button{padding:7px 10px}#inspector .rule-add{display:flex;gap:6px;flex-wrap:wrap}#inspector .advanced-condition{margin:8px 0}#inspector .advanced-condition summary{font-size:12px;color:#aebace}
#inspector .clue-card{padding:12px;margin:12px 0;border:1px solid #344052;border-radius:10px}#inspector .clue-card img{width:100%;max-height:180px;object-fit:contain}
@media(max-width:600px){#player .black-cards .text-page{font-size:22px;line-height:1.8;max-width:100%}#player .text-frame.black-cards{padding:20px}#player .tv-bar small{display:none}#player .tv-bar{padding:8px;gap:6px}#player .tv-bar input{flex-basis:100%;order:-1}}

/* v1.6.5 revision 2: gesture appearance and editor-only bounds. */
#player .interaction-target.kind-tap{border-radius:50%;clip-path:circle(50%);padding:8px;aspect-ratio:1;background:rgba(129,222,198,.8);color:#09242a;border:2px solid #a4efda}
#player .interaction-target.kind-tap.done,#player .interaction-target.kind-tap.hit-feedback{background:transparent!important;color:#b9f4df!important;border:2px dashed #b9f4df;opacity:1}
#player .interaction-target.kind-tap:not(.done).hit-feedback{animation:tap-accepted .3s ease-out}
@keyframes tap-accepted{from{background:transparent}to{background:rgba(129,222,198,.8)}}
#player .interaction-target.kind-swipe{background:transparent;border:0;box-shadow:none;padding:0;color:#a4efda;border-radius:0}
.swipe-arrow{width:100%;height:100%;display:block;pointer-events:none;filter:drop-shadow(0 2px 3px #0008)}
.swipe-any{font-size:clamp(40px,10vw,110px)}
#player .interaction-target.has-object-image{padding:0;background:transparent;border:0;box-shadow:none;border-radius:0}
.drag-object-image{width:100%;height:100%;object-fit:contain!important;pointer-events:none;user-select:none;-webkit-user-drag:none;position:static!important}
#player .interaction-target.transparent:not(.pressed):not(.done):not(.hit-feedback){background:transparent!important;border-color:transparent!important;box-shadow:none}
#player .interaction-target.transparent:not(.pressed):not(.done):not(.hit-feedback)>svg,#player .interaction-target.transparent:not(.pressed):not(.done):not(.hit-feedback)>img{visibility:hidden}
.hotspot-pin{border:1px dashed #c0e9dd;background:#89d5c91a;padding:0;overflow:visible}
.hotspot-pin .target-visual{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none;overflow:hidden}
.hotspot-pin.editor-tap .target-visual{inset:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:min(100cqw,100cqh);height:min(100cqw,100cqh);border-radius:50%;background:#81dec6aa;color:#102b30}
.hotspot-pin.editor-tap{container-type:size}
.hotspot-pin.editor-swipe .target-visual{color:#a4efda}
.hotspot-pin .resize-grip{z-index:2}
.hotspot-pin[data-transparent=true] .target-visual{opacity:.4}
.arrow-direction-row{display:flex;gap:6px;flex-wrap:wrap;margin-block:8px}.arrow-direction-row button{min-width:52px;min-height:42px}
.drag-image-controls{grid-column:1/-1;display:flex;gap:8px;flex-wrap:wrap}

#player .interaction-target.transparent.hit-feedback>*{visibility:visible}#player .interaction-target.transparent.done:not(.hit-feedback){opacity:0}#player .show-bounds .interaction-target.transparent.done{opacity:.35}

#player .interaction-target.kind-tap progress,#player .interaction-target.kind-swipe progress,#player .interaction-target.kind-drag progress{display:none}

.swipe-directions{display:flex;width:100%;height:100%;align-items:center;pointer-events:none}.swipe-directions .swipe-arrow{min-width:0;flex:1}
#player .show-bounds .interaction-target.transparent>svg,#player .show-bounds .interaction-target.transparent>img{visibility:visible}

/* v1.6.6: direct gesture affordances. */
#player .interaction-target.kind-tap{background:transparent;color:#c8f7e9;border:3px dashed #b9f4df;clip-path:none;border-radius:50%;box-shadow:0 0 0 1px #153c42 inset;transition:opacity .3s,background .2s}
#player .interaction-target.kind-tap.hit-feedback{background:#b9f4df55!important;border-style:solid;animation:tap-confirm .3s ease-out}
#player .interaction-target.kind-tap.done{opacity:0;pointer-events:none}
@keyframes tap-confirm{0%{box-shadow:0 0 0 0 #b9f4df}100%{box-shadow:0 0 0 16px transparent}}
#player .interaction-board:has(.kind-swipe){touch-action:none;cursor:crosshair}
.hotspot-pin.editor-swipe{border:0;background:transparent;box-shadow:none;touch-action:none}
.hotspot-pin.editor-swipe .resize-grip{display:none}
.hotspot-pin.editor-swipe .target-visual{overflow:visible}
.hotspot-pin.editor-tap,.hotspot-pin.editor-tap .target-visual{background:transparent;border-radius:50%;border:2px dashed #b9f4df;color:#b9f4df}
.hotspot-pin.editor-tap .target-visual{border:0}
.rotate-grip{position:absolute;right:-13px;top:-13px;width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#ffc777;color:#142031;cursor:grab;z-index:4;touch-action:none}
.angle-readout{position:absolute;left:50%;bottom:-24px;transform:translateX(-50%);white-space:nowrap;font:600 13px sans-serif;color:#ffc777}
#clue-notice{position:absolute;right:max(16px,env(safe-area-inset-right));top:calc(70px + env(safe-area-inset-top));z-index:1500;max-width:min(360px,80vw);padding:14px 18px;background:#172d3df2;color:#e9fff4;border:1px solid #9be2c5;border-radius:12px;box-shadow:0 8px 30px #0009;pointer-events:none}
#clue-notice[hidden]{display:none}
.sidebar-tabs{display:flex;gap:5px;position:sticky;top:0;background:#111a27;z-index:3;padding-bottom:8px}.sidebar-tabs button{width:auto!important;flex:1;margin:0!important;text-align:center!important;padding:8px!important}.sidebar-tabs button.active{background:#31516d;border-color:#74cfca}#sidebar-chapters[hidden],#directory-nav[hidden]{display:none!important}#directory-nav{font-size:13px;line-height:1.45}#directory-nav details{border-left:1px solid #455a70;padding-left:6px;margin:8px 0}#directory-nav summary{cursor:pointer;overflow-wrap:anywhere;padding:8px 2px;font-weight:600}#directory-nav ul{list-style:none;padding-left:12px;margin:0;border-left:1px solid #3c5065}#directory-nav li{margin:3px 0;overflow-wrap:anywhere}#directory-nav button{border:0;background:transparent;padding:5px!important;margin:0!important;color:#dbe8f3;line-height:1.5}#directory-nav button:hover{color:#ffd179;text-decoration:underline}#directory-nav small{color:#9fb6cb}#directory-nav .directory-edge{color:#a9c1d6}
#chapter-sidebar:has(#directory-nav:not([hidden])) #period-nav{display:none}
.issue-focus{outline:3px solid #ffc777!important;outline-offset:4px;border-radius:7px}

/* v1.6.7: flat chapter directory, full-stage choices, shape-matched gestures. */
#directory-nav{min-width:0;overflow-wrap:anywhere}
#directory-nav h3{font-size:14px;line-height:1.45;margin:10px 0}
#directory-nav .directory-role{border-top:1px solid #34465c;padding:8px 0;min-width:0}
#directory-nav .directory-role h4{font-size:12px;color:#aed5d6;margin:2px 0 8px;overflow-wrap:anywhere}
#directory-nav .directory-node,#directory-nav .directory-edge{min-width:0;display:flex;align-items:flex-start;flex-wrap:wrap;line-height:1.45;margin:4px 0}
#directory-nav .directory-node button,#directory-nav .directory-edge button{width:auto!important;max-width:100%;min-width:0;text-align:left;white-space:normal;overflow-wrap:anywhere;word-break:break-word}
#directory-nav .directory-edge{margin-left:10px;padding-left:7px;border-left:2px solid #5b788e;color:#a9c1d6}
#directory-nav .directory-edge button{display:inline!important;padding:1px 2px!important}
#inspector .node-test{position:sticky;top:0;z-index:6;min-height:44px;margin:0 0 8px;box-shadow:0 4px 14px #07111fc7}

#player .video-stage>.stage-blur-fill{position:absolute;inset:-6%;width:112%;height:112%;object-fit:cover;filter:blur(25px) brightness(.58);pointer-events:none}
#player .video-stage>.stage-bg{object-fit:contain;background:transparent}
.hotspot-editor video{object-fit:contain;background:transparent}
#player .choice-stage>.text-frame,#player .mg-stage>.text-frame{position:absolute;inset:0;width:100%;height:100%;min-height:0;flex:none;overflow:hidden}
.game-video-preview{display:flex;align-items:center;justify-content:center;width:100%;max-width:100%;max-height:min(55dvh,520px);overflow:hidden;background:#05090f;border-radius:10px}
.game-video-preview video{display:block;position:static!important;width:100%;max-width:100%;height:auto;max-height:min(55dvh,520px);aspect-ratio:auto;object-fit:contain!important;background:#05090f}
.game-video-settings{display:grid;gap:8px;margin:10px 0;min-width:0}.game-video-settings input{width:100%;box-sizing:border-box}.game-video-settings button{white-space:normal}
.mg-video-message{width:min(90%,460px);padding:18px;border-radius:12px;background:#101927ed;display:flex;gap:10px;flex-wrap:wrap;justify-content:center;text-align:center}.mg-video-message p{width:100%;line-height:1.6;overflow-wrap:anywhere}
#player .choice-stage>.text-frame{justify-content:center;padding:24px 24px clamp(140px,32vh,280px)}
#player .choice-overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;gap:9px;z-index:3;max-height:none;overflow:hidden;padding:18px max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));background:linear-gradient(0deg,#07101bf0 0%,#07101b8c 24%,transparent 68%)}
#player .choice-overlay>.stage-title{display:none}
#player .choice-opts{order:2;flex:none;display:grid;gap:8px;width:min(900px,100%);max-height:min(50%,calc(100% - 36px));margin:0 auto;overflow:auto;grid-template-columns:repeat(2,minmax(0,1fr));padding:2px 1px;align-items:stretch}
#player .choice-opts.choice-count-1{grid-template-columns:minmax(0,1fr);width:min(480px,100%)}
#player .choice-opts.choice-count-2{grid-template-columns:repeat(2,minmax(0,1fr))}
#player .choice-opts.choice-count-3{grid-template-columns:repeat(3,minmax(0,1fr));width:min(1050px,100%)}
#player .choice-opts.choice-count-4{grid-template-columns:repeat(2,minmax(0,1fr));width:min(800px,100%)}
#player .choice-opt{min-width:0;min-height:52px;height:auto;padding:10px clamp(8px,1.8vw,20px);white-space:normal;overflow-wrap:anywhere;line-height:1.35;text-align:center;background:#0f353ab8;border:1px solid #d4bb81b8;border-radius:18px;color:#fff7e8;font-size:clamp(12px,1.4vw,17px);backdrop-filter:blur(7px)}
#player .choice-opt:hover{background:#18525bd9;border-color:#ffe0a4;color:#fff}
#player .choice-opt:focus:not(:focus-visible){outline:none}
#player .choice-opt:focus-visible{outline:2px solid #ffe0a4;outline-offset:2px}
#player .choice-countdown{order:1;flex:none;width:min(800px,100%);margin:0 auto;color:#fff0ce}
#player .test-hidden-options{position:absolute;top:8px;left:10px;max-width:min(320px,80%);max-height:32%;overflow:auto;background:#07121ccd;border:1px solid #64788966;border-radius:8px;padding:5px 8px;font-size:11px}

#player .interaction-target.kind-swipe,.hotspot-pin.editor-swipe .target-visual{color:#fff}
#player .interaction-target.kind-swipe{overflow:visible}
.hotspot-pin.editor-swipe .resize-grip{display:block;width:18px;height:18px;border-radius:50%;background:#fff;border:2px solid #102b33}
#player .interaction-target.kind-hold{border:3px solid #f1fffb;border-radius:50%;background:transparent;color:#fff;box-shadow:none;overflow:visible;aspect-ratio:1;padding:8px}
#player .interaction-target.kind-hold::after{content:'';position:absolute;inset:-7px;border-radius:50%;background:conic-gradient(#99f1d8 var(--hold-progress,0%),transparent 0);mask:radial-gradient(farthest-side,transparent calc(100% - 5px),#000 calc(100% - 4px));pointer-events:none}
#player .interaction-target.kind-hold progress{display:none}
.hotspot-pin.editor-hold{border:0;background:transparent;container-type:size}
.hotspot-pin.editor-hold .target-visual{inset:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:min(100cqw,100cqh);height:min(100cqw,100cqh);border:3px solid white;border-radius:50%;background:transparent;overflow:hidden}
#player .interaction-target.pressed{outline:none!important;box-shadow:none!important;background:transparent}
#player .interaction-target.has-object-image.pressed{border:0;background:transparent}
#player .interaction-target.kind-hold.pressed{background:transparent;border-color:#baffdf}
#player .interaction-target:focus:not(:focus-visible){outline:none}
#player .interaction-target.kind-tap:focus-visible,#player .interaction-target.kind-hold:focus-visible{outline:2px solid #fff;outline-offset:5px;border-radius:50%}
#player .interaction-target.kind-swipe:focus-visible,#player .interaction-target.has-object-image:focus-visible{outline:none;filter:drop-shadow(0 0 8px #baffdf)}
@media(max-width:600px){#player .choice-overlay{padding-left:max(10px,env(safe-area-inset-left));padding-right:max(10px,env(safe-area-inset-right))}#player .choice-opts{gap:6px;max-height:57%}#player .choice-opt{font-size:12px;min-height:48px;padding:8px 5px;border-radius:14px}}
@media(max-height:480px){#player .choice-opts{max-height:68%}#player .choice-opt{min-height:42px;padding:5px 8px}#player .choice-stage>.text-frame{padding-bottom:140px}}

/* Playback feedback stays in a stage corner, away from centered text and bottom choices. */
#toast.player-toast{top:calc(var(--player-stage-top,64px) + 12px);bottom:auto;left:max(12px,env(safe-area-inset-left));right:auto;transform:none;max-width:min(340px,calc(100vw - 24px));padding:8px 12px;font-size:13px;line-height:1.4;pointer-events:none;background:#1c2938e8}
#player .mg-stage>.text-frame.black-cards{justify-content:flex-end;padding:24px 24px clamp(85px,13vh,145px);pointer-events:none}
#player .mg-stage>.text-frame.black-cards .text-page{max-height:30%;font-size:clamp(17px,2vw,25px);width:min(88%,36em)}
/* v1.7 foreground location gate */
#player .location-stage{position:relative;min-height:100%;width:100%;overflow:hidden}
#player #location-surface{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;z-index:6;pointer-events:none}
#player .location-panel{pointer-events:auto;width:min(660px,calc(100% - 24px));margin:0 auto max(14px,env(safe-area-inset-bottom));padding:16px 18px;background:#0c1825df;color:#f4f7f8;border:1px solid #7b9caaa8;border-radius:16px;backdrop-filter:blur(9px);box-shadow:0 6px 22px #0008}
#player .location-panel p{margin:7px 0;line-height:1.4}
#player .location-panel .row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
#player .location-panel button{min-height:44px}
@media(max-width:600px){#player .location-panel{font-size:14px;padding:12px 14px}}
/* v1.7 room lobby stays above the stage and remains touchable on phones */
#player-stage{position:relative}
#room-panel{position:absolute;z-index:2300;inset:12px auto auto 50%;transform:translateX(-50%);width:min(720px,calc(100% - 24px));max-height:calc(100% - 24px);overflow:auto;box-shadow:0 18px 50px #000b}
#room-panel .room-members{display:grid;gap:8px;margin:12px 0}
#room-panel .room-members>div{padding:7px 10px;border:1px solid #526575;border-radius:8px}
#room-panel .room-invite{overflow-wrap:anywhere}
#room-panel .row{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
#room-panel button{min-height:42px}
/* v1.7.1 clue media and unobtrusive playback controls */
.clue-card audio{display:block;width:100%;margin:10px 0}.clue-model-viewer{width:100%;height:min(56vh,440px);min-height:260px;background:#0b1520;border:1px solid #3a5263;border-radius:12px;overflow:hidden;touch-action:none}.clue-model-viewer[hidden]{display:none}.clue-model-viewer canvas{display:block;width:100%;height:100%}
#player .location-panel{background:rgba(12,24,37,.52);backdrop-filter:blur(5px);border-color:rgba(140,177,190,.55);padding:10px 14px}#player .location-panel button{background:rgba(22,39,55,.58);backdrop-filter:blur(4px)}#player .location-panel [data-permissions]{font-size:.8em;opacity:.85}
#player .tv-bar,#player .player-controls{background:linear-gradient(0deg,rgba(0,0,0,.58),rgba(0,0,0,.18));border-color:transparent;backdrop-filter:blur(3px)}#player .tv-bar button,#player .player-controls button{background:rgba(20,32,45,.52)}
#player .text-playback .tv-bar,#player .story-stage .player-controls{opacity:0;transition:opacity .25s;pointer-events:none}#player .text-playback.show-controls .tv-bar,#player .text-playback .tv-bar:focus-within,#player .story-stage.show-controls .player-controls,#player .story-stage .player-controls:focus-within{opacity:1;pointer-events:auto}
#player .story-stage .player-controls{padding:8px 12px calc(8px + env(safe-area-inset-bottom,0px));gap:7px;background:linear-gradient(0deg,rgba(0,0,0,.62),rgba(0,0,0,.12));backdrop-filter:none}#player .story-stage:not(.show-controls) .player-controls{background:transparent;backdrop-filter:none}
/* Whole-chapter video import: one review list, isolated from the player. */
.video-import-dialog{width:min(1120px,94vw);max-width:1120px;max-height:90dvh;overflow:auto}
.video-import-dialog fieldset{border:0;padding:0;margin:16px 0;min-width:0;display:flex;align-items:end;gap:12px;flex-wrap:wrap}
.video-import-dialog fieldset label{display:flex;flex-direction:column;gap:5px;flex:1;min-width:170px}
.video-import-dialog select,.video-import-dialog input{max-width:100%;min-width:0;width:100%;padding:10px;background:#101c2a;color:#e9edf3;border:1px solid #445366;border-radius:8px}
.video-import-dialog [hidden]{display:none!important}
.video-import-dialog .batch-intro,.video-import-dialog small,.batch-match-tools span{color:#b6c5d6;line-height:1.65}
.video-import-dialog .batch-list{max-height:48dvh;overflow:auto;margin-bottom:16px}
.video-import-dialog .batch-row{display:grid;grid-template-columns:minmax(180px,1fr) minmax(250px,1.2fr) auto;gap:18px;padding:16px 4px;border-top:1px solid #354358;align-items:center}
.batch-file-name{display:flex;flex-direction:column;gap:6px;overflow-wrap:anywhere}.batch-file-name [data-result]{color:#a5dcd0}
.batch-destination{display:flex;flex-direction:column;gap:8px;min-width:0}.batch-destination label{display:flex;flex-direction:column;gap:4px}.batch-row-tools{display:flex;flex-direction:column;gap:8px}
.batch-message{white-space:pre-wrap;overflow-wrap:anywhere;color:#f2cf89}.batch-empty{padding:28px 0;color:#b6c5d6}.batch-footer{position:sticky;bottom:0;display:flex;gap:10px;flex-wrap:wrap;padding:14px 0;background:#121c2beF;border-top:1px solid #354358}
@media(max-width:720px){.video-import-dialog .batch-row{grid-template-columns:1fr}.batch-row-tools{flex-direction:row}.video-import-dialog .batch-list{max-height:40dvh}}
/* 滑动范围由作者单独编辑；正式播放只保留白色箭头。 */
.interaction-swipe-zone{position:absolute;pointer-events:none;border:0;background:transparent;z-index:0}
#player .show-bounds .interaction-swipe-zone{border:2px dashed rgba(255,255,255,.72);background:rgba(255,255,255,.07);border-radius:10px}
.swipe-zone-editor{position:absolute;z-index:1;border:2px dashed #f3c978;background:#f3c97820;border-radius:10px;touch-action:none;cursor:move;box-sizing:border-box}
.swipe-zone-editor .resize-grip{position:absolute;right:-7px;bottom:-7px;width:18px;height:18px;border-radius:50%;background:#f3c978;cursor:nwse-resize}
.hotspot-pin.editor-swipe{z-index:2}
