  /* ---------- v285：主界面（AI 制作游戏） ----------
     左 = 游戏预览（iframe 沙盒）；右 = 与 AI 对话；中缝可拖拽。
     本页没有左下角功能胶囊：body.ai285-on 时把缩放胶囊 / 小地图整块收掉。 */
  .ai-page285{position:fixed;left:14px;right:14px;top:62px;bottom:10px;z-index:48;display:flex;min-height:0;background:var(--bg)}   /* v316：显式吃页面底，不再靠透 body */
  .ai-page285[hidden]{display:none}
  .ai-left285{position:relative;flex:1 1 auto;min-width:200px;background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;display:flex;flex-direction:column}
  /* v304：左栏上下两区 —— 上 = 游戏预览区（stage，撑满剩余高度），下 = 功能行（dock，暂空置待定） */
  .ai-stage304{position:relative;flex:1 1 auto;min-height:0}
  .ai-dock304{flex:0 0 56px;border-top:1px solid var(--line);display:flex;align-items:center;gap:8px;padding:0 12px}
  .ai-dock304 .btn{height:28px;font-size:12px;padding:0 14px}
  /* v329：dock 最前面的「代码文件」= 页面切换键（不是功能键）—— 跟同列功能键区分：强调色包边 + 柔光底，
     开着时整颗填充成强调色；文案在「文件 / 返回」之间跟着视图态切换（v333） */
  .ai-switch329{height:28px;display:inline-flex;align-items:center;gap:6px;padding:0 12px;border-radius:8px;border:1px solid var(--accent);background:var(--accent-soft);color:var(--text);font-size:12px;font-weight:600;font-family:inherit;line-height:1;cursor:pointer;margin-right:4px;flex:0 0 auto;transition:background .15s,color .15s}
  .ai-switch329:hover,.ai-switch329.on329{background:var(--accent);border-color:var(--accent);color:#0b0d12}
  .ai-switch329 svg{width:14px;height:14px;flex:0 0 14px}
  /* v329：代码视图 = 盖在游戏预览之上的一层（左 = 文件目录，右 = 代码内容），不占 dock 高度 */
  .ai-code329{position:absolute;inset:0;display:flex;min-height:0;background:var(--card)}
  .ai-code329[hidden]{display:none}
  .ai-tree329{flex:0 0 168px;min-width:0;overflow:auto;padding:8px 6px 12px;border-right:1px solid var(--line);background:var(--sunken)}
  .ai-tree-t329{font-size:11px;color:var(--text-3);padding:2px 8px 8px;letter-spacing:.4px}
  .ai-tree-i329{display:flex;align-items:center;gap:7px;padding:6px 8px;border-radius:7px;font-size:12px;line-height:1.35;color:var(--text-2);cursor:pointer;white-space:nowrap;overflow:hidden}
  .ai-tree-i329:hover{background:var(--line)}
  .ai-tree-i329.on329{background:var(--accent);color:#0b0d12;font-weight:600}
  .ai-tree-i329 svg{width:14px;height:14px;flex:0 0 14px;opacity:.9}
  .ai-tree-i329+.ai-tree-i329{margin-top:2px}
  .ai-tree-i329.sub329{padding-left:22px}
  .ai-tree-i329 em{font-style:normal;font-size:10px;color:var(--text-3);margin-left:auto;padding-left:8px}
  .ai-tree-i329.on329 em{color:#0b0d12;opacity:.7}
  .ai-codepane329{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}
  .ai-codehead329{flex:0 0 36px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 12px;border-bottom:1px solid var(--line)}
  .ai-codefile329{font-size:12px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--text)}
  .ai-copy329{height:22px;padding:0 10px;border-radius:6px;border:1px solid var(--line);background:var(--sunken);color:var(--text-2);font-size:11px;font-family:inherit;cursor:pointer}
  .ai-copy329:hover{color:var(--text);border-color:var(--accent)}
  .ai-pre329{flex:1 1 auto;margin:0;overflow:auto;padding:10px 12px 18px;font-size:12px;line-height:1.7;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--text);tab-size:2}
  .ai-ln329{display:inline-block;width:34px;padding-right:10px;text-align:right;color:var(--text-3);opacity:.5;font-style:normal;-webkit-user-select:none;user-select:none}
  .ai-cm329{color:var(--text-3);font-style:italic}
  .ai-st329{color:#1f8a54}
  .ai-kw329{color:#b3005e}
  .ai-nu329{color:#b26a00}
  .ai-tg329{color:#2b6cb0}
  .ai-tip329{color:var(--text-3);font-size:13px;line-height:1.9;padding:30px 20px;text-align:center}
  html[data-theme="dark"] .ai-st329{color:#6ddba0}
  html[data-theme="dark"] .ai-kw329{color:#ff8fc0}
  html[data-theme="dark"] .ai-nu329{color:#ffc46b}
  html[data-theme="dark"] .ai-tg329{color:#8ab8ff}
  .ai-frame285{position:absolute;inset:0;width:100%;height:100%;border:0;display:block;background:var(--bg)}   /* v316：跟主题走（原来硬编码 #0b0d12，亮色主题下游戏区仍是黑的） */
  .ai-empty285{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--text-3);text-align:center;padding:20px;background:var(--card)}   /* v390：补底色 —— 没有游戏时空态盖着的 iframe 是「无 srcdoc 的 about:blank」，沙盒里被渲染成纯白，透明覆盖层 = 暗色主题下整块发白（用户截图实证）；吃 --card 与面板同色，亮暗两态都无缝 */
  .ai-empty285[hidden]{display:none}
  .ai-empty-ico285{color:var(--dim);opacity:.7}
  .ai-empty-t285{font-size:15px;color:var(--text)}
  .ai-empty-s285{font-size:12px;color:var(--text-3);max-width:320px;line-height:1.7}
  .ai-split285{flex:0 0 10px;cursor:col-resize;display:flex;align-items:center;justify-content:center;touch-action:none}
  .ai-split285::before{content:'';width:2px;height:46px;border-radius:2px;background:var(--line);transition:background .15s}
  .ai-split285:hover::before,.ai-split285.on285::before{background:var(--accent)}
  .ai-right285{flex:0 0 380px;min-width:280px;max-width:70%;display:flex;background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden}
  body.ai285-on .zoom-pill,body.ai285-on .mini-map,body.ai285-on .zoom-pop{display:none!important}
  body.ai285-on .layers,body.ai285-on .layers-tab{display:none!important}   /* v288：主界面没有图层面板，右缘那颗收起页签别悬着 */
  body.ai285-on .canvas-wrap{visibility:hidden!important}   /* v307：主界面是独立页面 —— 画布整层（背景网格 / 节点 / 空态）藏掉，不透底；顶栏不在 canvas-wrap 里照常显示 */
  .ai-chat285{flex:1;display:flex;flex-direction:column;min-height:0;width:100%}
  /* v407：右缘与下方输入框对齐 —— 内容右缘 = 滚动条槽（thin）+ 0 内距 ≈ 输入框的 12px 右缘；
     scrollbar-gutter:stable 让槽恒在（不随「当前可不可滚」跳变，左右两侧视觉宽度恒定） */
.ai-msgs285{flex:1;overflow-y:auto;padding:14px 0 6px 14px;scrollbar-gutter:stable;display:flex;flex-direction:column;gap:18px}
  .ai-msg285{font-size:13px;line-height:1.65;word-break:break-word;max-width:100%}
  .ai-msg-u285{align-self:flex-end;background:var(--accent);color:#0b0d12;border-radius:12px 12px 3px 12px;padding:8px 11px;white-space:pre-wrap}
  .ai-msg-a285{align-self:flex-start;background:var(--sunken);border:1px solid var(--line);border-radius:12px 12px 12px 3px;padding:9px 11px}
  /* v309：每条消息下方留白动作行 —— 平时空白（占位 20px），悬停该条消息时浮现「复制」 */
  .ai-item309{display:flex;flex-direction:column;max-width:88%}
  .ai-item309.u{align-self:flex-end;align-items:flex-end}
  .ai-item309.a{align-self:flex-start;align-items:flex-start;max-width:100%}
  .ai-item309 .ai-msg285{max-width:100%}
  .ai-act309{display:flex;justify-content:flex-end;height:20px;margin-top:2px;opacity:0;transition:opacity .15s}
  .ai-item309.a .ai-act309{justify-content:flex-start}
  .ai-item309:hover .ai-act309{opacity:1}
  .ai-copy309{border:none;background:transparent;color:var(--text-3);font-size:11px;line-height:20px;padding:0 6px;cursor:pointer;border-radius:6px;user-select:none}
  .ai-copy309:hover{color:var(--text-1);background:var(--line)}
  /* v311：画面「已关闭」态 —— 默认界面底色 + 居中提示文字 */
  .ai-closed311{position:absolute;inset:0;display:grid;place-items:center;background:var(--bg);color:var(--text-3);font-size:13px;letter-spacing:.12em;z-index:2}
  .ai-closed311[hidden]{display:none}
  .ai-sys285{align-self:center;color:var(--text-3);font-size:11.5px;background:var(--sunken);border-radius:8px;padding:4px 10px;max-width:90%}
  .ai-err285{margin-top:6px;color:#ff7b7b;font-size:12px;white-space:pre-wrap}
  .ai-think285{border:1px dashed var(--line);border-radius:10px;margin-bottom:7px;overflow:hidden}
  .ai-think-h285{display:flex;align-items:center;gap:7px;padding:6px 9px;cursor:pointer;color:var(--text-3);font-size:12px;user-select:none;-webkit-user-select:none}
  .ai-think-h285:hover{color:var(--text)}
  .ai-think285 .dot285{flex:0 0 7px;width:7px;height:7px;border-radius:50%;background:var(--accent);animation:aiPad285 1s ease-in-out infinite}
  .ai-think285.done285 .dot285{background:var(--dim);animation:none;opacity:.5}
  @keyframes aiPad285{0%,100%{opacity:.25}50%{opacity:1}}
  .ai-think-b285{display:none;padding:0 9px 8px;color:var(--text-3);font-size:12px;line-height:1.6;white-space:pre-wrap;max-height:200px;overflow-y:auto}
  .ai-think285.open .ai-think-b285{display:block}
  /* v334：思考完成 = 缩略（收成无框一行小字；点击展开才回完整虚线框） */
  .ai-think285.done285{border:0;margin-bottom:3px}
  .ai-think285.done285 .ai-think-h285{padding:2px 0;font-size:11.5px}
  .ai-think285.done285.open{border:1px dashed var(--line)}
  .ai-think285.done285.open .ai-think-h285{padding:6px 9px;font-size:12px}
  .ai-body285{white-space:pre-wrap}
  .ai-usage306{font-size:11px;line-height:1.6;color:var(--text-3);padding:3px 2px 0;user-select:text}   /* v306：本条回答的 token / 积分消耗脚注 */
  .ai-cont337{margin-top:9px;padding-top:6px;border-top:1px dashed var(--line);font-size:11px;line-height:1.6;color:var(--text-3)}   /* v337：自动续写分隔行（只做提示，不进正文） */
  .ai-pre285{background:var(--sunken);border:1px solid var(--line);border-radius:8px;padding:8px;overflow:auto;max-height:240px;font-size:11.5px;line-height:1.5;margin:6px 0;white-space:pre;font-family:ui-monospace,Consolas,monospace}
  /* v288：聊天输入改成大面板 —— 上面大片打字区，底行左模型、右发送（用户示意：整块一个圆角面板） */
  .ai-input285{margin:4px 12px 12px;border:1px solid var(--line);border-radius:14px;background:var(--sunken);padding:10px 12px;display:flex;flex-direction:column;gap:6px}
  .ai-input285:focus-within{border-color:var(--accent)}
  .ai-inrow285{display:flex;gap:8px;align-items:center}
  /* v339：排队任务条（生成 / 思考中发的消息排在这里，当前任务结束自动依次执行） */
  .ai-queue339{margin:0 12px 8px;border:1px solid var(--line);border-radius:12px;background:var(--sunken);padding:8px 10px}
  .ai-queue-h339{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-3)}
  .ai-queue-clear339{margin-left:auto;border:0;background:none;padding:0;font-size:11px;color:var(--accent);cursor:pointer}
  .ai-qit339{display:flex;align-items:center;gap:8px;margin-top:5px;padding:5px 8px;border-radius:8px;background:var(--card)}
  .ai-qn339{flex:0 0 auto;font-size:10.5px;color:var(--accent);background:var(--accent-soft);border-radius:6px;padding:1px 6px}
  .ai-qtx339{flex:1 1 auto;min-width:0;font-size:12px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ai-qx339{flex:0 0 auto;border:0;background:none;padding:0 2px;font-size:12px;color:var(--text-3);cursor:pointer}
  .ai-qx339:hover{color:#ff7b7b}
  .ai-model-btn285{display:flex;align-items:center;gap:5px;flex:0 0 auto;background:var(--sunken);border:1px solid var(--line);border-radius:9px;color:var(--text);font:inherit;font-size:12px;padding:7px 9px;cursor:pointer}
  .ai-model-btn285:hover{border-color:var(--accent)}
  .ai-model-btn285 .ai-chev285{color:var(--text-3)}
  .ai-ta285{flex:1;resize:none;background:transparent;border:0;border-radius:0;color:var(--text);padding:2px 2px 0;font:inherit;font-size:13px;line-height:1.55;min-height:120px;max-height:260px;outline:none;box-sizing:border-box}
  .ai-ta285::placeholder{color:var(--text-3)}
  .ai-send285{width:34px;height:34px;flex:0 0 34px;margin-left:auto;border-radius:50%;border:0;background:linear-gradient(135deg,var(--accent),var(--accent-2));color:#0b0d12;display:grid;place-items:center;cursor:pointer;transition:.15s}
  .ai-send285 svg{width:17px;height:17px}
  .ai-send285:hover{filter:brightness(1.06)}
  .ai-send285.stop285{background:#e5484d;color:#fff}
  .ai-model-pop285{position:fixed;z-index:60;min-width:240px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:6px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:6px}
  .ai-model-pop285[hidden]{display:none}
  /* ---- v331：主界面工具（PS 式）—— dock「角色」键 + 预览区工具层（人偶可拖 / 滚轮缩放 / 选色卡 / 应用键）----
     工具层整面盖在 iframe 上但 pointer-events:none，只有人偶本体吃事件（点一下还得给游戏） */
  .ai-roles331{position:absolute;inset:0;z-index:3;pointer-events:none}
  .ai-roles331[hidden]{display:none}
  .ai-role331{position:absolute;left:0;top:0;width:40px;height:60px;pointer-events:auto;cursor:grab;touch-action:none;transform-origin:0 0;box-sizing:border-box;border:1.5px dashed transparent;border-radius:8px}
  .ai-role331:active{cursor:grabbing}
  .ai-role331.sel331{border-color:var(--accent)}
  .ai-role331 svg{width:100%;height:100%;display:block;pointer-events:none}
  .ai-role-x331{position:absolute;right:-9px;top:-9px;width:18px;height:18px;border-radius:50%;border:1px solid var(--line);background:var(--card);color:var(--text-2);font-size:10px;line-height:16px;text-align:center;cursor:pointer;user-select:none;-webkit-user-select:none;display:none;font-style:normal}
  .ai-role331.sel331 .ai-role-x331{display:block}
  .ai-role-x331:hover{color:#e5484d;border-color:#e5484d}
  .ai-pallet331{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);z-index:4;display:flex;gap:10px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:8px 14px;box-shadow:var(--shadow)}
  .ai-pallet331[hidden]{display:none}
  .ai-dot331{width:16px;height:16px;border-radius:50%;cursor:pointer;display:block;border:2px solid transparent;box-sizing:border-box;transition:transform .12s}
  .ai-dot331:hover{transform:scale(1.18)}
  .ai-dot331.on331{border-color:var(--text)}
  .ai-apply331{position:absolute;right:12px;bottom:12px;z-index:4;height:32px;padding:0 16px;border-radius:9px;border:1px solid var(--accent);background:var(--accent);color:#0b0d12;font-size:12px;font-weight:600;font-family:inherit;line-height:1;cursor:pointer;box-shadow:var(--shadow)}
  .ai-apply331[hidden]{display:none}
  .ai-apply331:hover{filter:brightness(1.06)}
  .ai-apply331:disabled{opacity:.6;cursor:default}
  /* v331：对话框图片附件（小缩略图，点开放大 / 悬停可移除；用户气泡里一排小图） */
  .ai-pics331{display:flex;gap:8px;flex-wrap:wrap}
  .ai-pics331[hidden]{display:none}
  .ai-pic331{position:relative;width:46px;height:46px;border-radius:8px;overflow:hidden;border:1px solid var(--line);cursor:pointer;flex:0 0 46px;background:var(--card)}
  .ai-pic331 img{width:100%;height:100%;object-fit:cover;display:block}
  .ai-pic331 .ai-pic-x331{position:absolute;right:2px;top:2px;width:15px;height:15px;border-radius:50%;background:rgba(0,0,0,.62);color:#fff;font-size:10px;line-height:15px;text-align:center;display:none;font-style:normal}
  .ai-pic331:hover .ai-pic-x331{display:block}
  .ai-upics331{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 5px;justify-content:flex-end}
  .ai-upics331 img{width:64px;height:64px;object-fit:cover;border-radius:8px;cursor:zoom-in;border:1px solid rgba(0,0,0,.18);display:block}
  .ai-imgview331{position:fixed;inset:0;z-index:80;background:rgba(0,0,0,.72);display:grid;place-items:center;padding:30px}
  .ai-imgview331[hidden]{display:none}
  .ai-imgview331 img{max-width:92vw;max-height:86vh;border-radius:10px;box-shadow:var(--shadow);background:var(--card)}
  .ai-imgview-x331{position:absolute;right:14px;top:12px;width:32px;height:32px;border-radius:50%;border:1px solid rgba(255,255,255,.35);background:rgba(0,0,0,.4);color:#fff;font-size:14px;cursor:pointer;font-family:inherit}
  .ai-imgview-x331:hover{background:rgba(0,0,0,.6)}
  /* v332：模型选择弹窗 = 往左下角缩放的开 / 关动画（gen / vgen / 主界面三颗同步；
     transform-origin 钉左下角 = 触发按钮的方向 —— 窗子从按钮那儿长出来、收回按钮那儿去） */
  .model-pop257,#aiModelPop285{transform-origin:0 100%;animation:popBl332 .16s ease-out}
  @keyframes popBl332{from{opacity:0;transform:scale(.82)}to{opacity:1;transform:none}}
  .pop-bl-out332{animation:popBlOut332 .16s ease-in forwards!important}
  @keyframes popBlOut332{from{opacity:1;transform:none}to{opacity:0;transform:scale(.82)}}
  /* v315：与视频生成选项按钮同款三态（横向大块：模型名 + 一行说明） */
  .ai-model-it285{display:block;width:100%;text-align:left;border:1px solid var(--line);background:var(--card);color:var(--text);padding:9px 10px;border-radius:10px;cursor:pointer;font:500 12.5px/1 var(--sans);transition:.15s}
  .ai-model-it285:hover{border-color:var(--accent);color:var(--accent)}
  .ai-model-it285 span{display:block;color:var(--text-3);font-size:11px;line-height:1.25;margin-top:3px}
  .ai-model-it285.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
  html[data-theme="dark"] .ai-model-it285{background:#232631;border-color:transparent;color:#e8eaf1}
  html[data-theme="dark"] .ai-model-it285:hover{background:#262a35;color:var(--accent)}
  html[data-theme="dark"] .ai-model-it285.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}

  /* ---- v190：深色补漏（工作流/地图绘制胶囊 / 左下角功能胶囊 / 右上角账号区 / ⚙ 菜单 / 登录弹窗）——
     这六处原本写死白色/浅色，深色主题下一直没跟着变；底色整体再压黑一档 ---- */
  html[data-theme="dark"] .seg{background:rgba(13,15,21,.92)}
  html[data-theme="dark"] .zoom-pill{background:rgba(13,15,21,.95)}
  html[data-theme="dark"] .topbar-right{background:rgba(13,15,21,.92)}
  html[data-theme="dark"] .acct-menu{background:rgba(19,22,29,.97)}
  html[data-theme="dark"] .modal{background:#191c24}
  /* ---------- v203：深色补漏 —— 审计出的一批漏镜像浮层（入口：用户报地图绘制底部区域没改） ---------- */
  html[data-theme="dark"] .topbar-left { background:rgba(13,15,21,.92) }
  html[data-theme="dark"] .sheet { background:rgba(19,20,26,.97); box-shadow:0 20px 56px rgba(0,0,0,.5) }
  html[data-theme="dark"] .sheet-foot { background:rgba(13,15,21,.96) }
  html[data-theme="dark"] .mini-map { background:rgba(19,22,29,.97) }
  html[data-theme="dark"] .zoom-pop { background:rgba(13,15,21,.95) }
  html[data-theme="dark"] .drop-veil { background:rgba(38,42,53,.9) }
  html[data-theme="dark"] #mapBar { background:rgba(19,22,29,.97); box-shadow:0 10px 30px rgba(0,0,0,.5) }
  html[data-theme="dark"] .layers { background:rgba(19,22,29,.97); box-shadow:-14px 0 34px rgba(0,0,0,.4) }
  html[data-theme="dark"] .switch .track { background:#323748 }
  /* v208：开启态 = 白色亮轨（用户口径「开启变白色，亮色，所有开启按钮相同」）—— 上面这条深色
     轨道灰与 checked 高亮同优先级且靠后，会把开启态盖回灰；这里显式钉白（选择子更强），
     开启态旋钮转深色保证白轨上可见；全站开关（含 mini 锁定比例）统一生效 */
  html[data-theme="dark"] .switch input:checked + .track { background:#fff }
  .switch input:checked + .track::after { background:#191c24 }
