/* ═══════════════════════════════════════════════════════════════════════
   设计系统 = NewEngine（ManifestEngine 纯黑单色体系）逐值对齐。
   两套令牌并存：
     · NE 原生名（--bg-card/--border/--text-2…）——新写样式用它，和 NE 源码一一对应；
     · Engine 历史名（--panel/--line/--dim…）——重映射到 NE 取值，
       全站既有 var(--panel) 等引用（含 JS 里的 var(--panel,#…) 内联样式）自动换肤。
   字型 Sora+Inter 自托管于 css/fonts.css，不引 fonts.googleapis.com（Engine 保持 0 外部域）。
   ═══════════════════════════════════════════════════════════════════════ */
:root{
  /* —— NE 原生令牌（与 NewEngine/index.html :root 逐字一致）—— */
  --bg:#050505; --bg-card:#111111; --bg-card2:#161616; --bg-side:#090909; --bg-active:#1a1a1a;
  --border:rgba(255,255,255,.07); --border-h:rgba(255,255,255,.14);
  --text:#ffffff; --text-2:#b8b8b8; --text-3:#666666;
  --ok:#3fb950; --warn:#e3b341; --danger:#f85149;
  --font:'Sora','Inter',system-ui,'PingFang SC','Microsoft YaHei',sans-serif; --mono:ui-monospace,'SF Mono',Menlo,'PingFang SC','Microsoft YaHei',monospace;
  --ease:cubic-bezier(.16,1,.3,1); --r:12px; --r-sm:8px;
  --rail:66px; --topbar:56px; --subbar:46px;
  --blue:#4c8bf5;   /* NE 里 resizer hover / 选中态用的唯一一抹蓝 */
  /* —— Engine 历史令牌 → NE 取值 —— */
  --panel:#090909; --panel2:#161616; --line:rgba(255,255,255,.07);
  --dim:#666666; --accent:#ffffff; --accent2:rgba(255,255,255,.14); --sel:#1a1a1a;
  --tree-w:248px;   /* NE #tree 宽度；拖分隔条实时更新，左侧覆盖面板(.addflyout/#assetPanel)统一读它 */
}
*,*::before,*::after{box-sizing:border-box;}
html,body{margin:0;height:100%;background:var(--bg);color:var(--text);
  font-family:var(--font);font-size:13px;
  user-select:none;overflow:hidden;-webkit-font-smoothing:antialiased;}
button,input,select,textarea{font-family:var(--font);}
/* 默认呈现比例 = 浏览器 90% 缩放下的观感（作者偏好：比 NewEngine 的 100% 略紧凑，但比旧的 .8 字更大）。
   用 zoom 而非 transform:scale —— zoom 会参与重排铺满视口，且浏览器会自动校正指针坐标，
   拾取/拖拽无需补偿。SlashMenu.js 运行时读 getComputedStyle().zoom 自适应，改这个数不用动 JS。
   要回到与 NewEngine 完全一致的 100%，删掉下面一行即可。 */
html{zoom:.9;}
/* NE 全站滚动条（暗色细条）*/
::-webkit-scrollbar{width:11px;height:11px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.2);border-radius:6px;border:3px solid transparent;background-clip:content-box;}
::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.36);background-clip:content-box;}

/* ---- toolbar ---- */
#toolbar{height:var(--subbar);display:flex;align-items:center;gap:6px;padding:0 14px;
  background:var(--bg);border-bottom:1px solid var(--border);flex-shrink:0;overflow-x:auto;position:relative;}
#toolbar::-webkit-scrollbar{height:0;}
.logo{font-weight:700;font-size:15px;color:#fff;margin-right:8px;letter-spacing:.12em;white-space:nowrap;}
.tb-btn{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.04);
  border:1px solid var(--border);color:var(--text-2);padding:6px 11px;border-radius:var(--r-sm);
  cursor:pointer;font-size:12px;white-space:nowrap;font-family:var(--font);
  transition:background .15s,color .15s,border-color .15s;}
.tb-btn:hover{background:rgba(255,255,255,.09);color:#fff;border-color:var(--border-h);}
.tb-btn:disabled{opacity:.35;cursor:default;}
.tb-btn.tb-icon{padding:6px 9px;justify-content:center;}
.tb-btn.active{background:var(--bg-active);border-color:var(--border-h);color:#fff;}
.tb-btn.primary{background:#fff;border-color:#fff;color:#000;font-weight:600;}
.tb-btn.primary:hover{background:#e6e6e6;}
/* NE select.btn：去原生箭头 + 自绘 svg 箭头 */
.tb-select{appearance:none;-webkit-appearance:none;background:rgba(255,255,255,.04);
  border:1px solid var(--border);color:var(--text-2);padding:6px 24px 6px 11px;border-radius:var(--r-sm);
  cursor:pointer;font-size:12px;font-family:var(--font);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 4l3 3 3-3' stroke='%23888' stroke-width='1.3' fill='none'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center;}
.tb-select:hover{color:#fff;border-color:var(--border-h);}
.tb-select option,.tb-select optgroup{background:#161616;color:var(--text);}
.tb-sep{width:1px;height:18px;background:var(--border);margin:0 3px;flex-shrink:0;}
/* 视图工具折叠组：向左收起/展开（max-width 动画营造「往左收回」） */
.tb-collapsible{display:inline-flex;align-items:center;gap:6px;overflow:hidden;max-width:1200px;opacity:1;transition:max-width .28s ease,opacity .18s ease,gap .28s ease;}
.tb-collapsible.collapsed{max-width:0;opacity:0;gap:0;pointer-events:none;}
.tb-collapse-btn{padding:6px 8px;font-size:15px;line-height:1;font-weight:700;color:var(--text-3);}

/* ---- layout ---- */
#main{position:absolute;top:var(--subbar);left:0;right:0;bottom:0;display:flex;}
/* 两侧面板内侧边框统一近黑实线（属性栏左缘原用 --line 中灰夹在深色分隔条+深色面板间对比太弱看不出黑边）→ 与场景树严格对称 */
#left{width:var(--tree-w,248px);background:var(--bg-side);border-right:1px solid var(--border);display:flex;flex-direction:column;}
#right{width:300px;background:var(--bg-side);border-left:1px solid var(--border);display:flex;flex-direction:column;}
#viewport{flex:1;position:relative;min-width:0;background:#000;}
/* 可拖拽分隔条 */
.resizer{width:6px;flex:none;cursor:col-resize;background:transparent;z-index:20;transition:background .12s;}
.resizer:hover,.resizer.active{background:var(--blue);}
#viewport canvas{display:block;}
/* NE .secTitle：无底色无分隔线的小标题 */
.panel-title{padding:12px 8px 10px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;
  font-weight:600;color:var(--text-3);background:transparent;}

/* ---- 左侧分类导航栏 (AddPanel) ---- */
#addrail{width:var(--rail);min-width:var(--rail);flex:none;background:var(--bg-side);
  border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;
  padding:10px 0;gap:2px;overflow-y:auto;overflow-x:hidden;z-index:40;}
#addrail::-webkit-scrollbar{width:0;}
.rail-btn{width:58px;min-height:46px;flex:none;background:transparent;border:none;color:var(--text-3);cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  padding:6px 1px;font-size:9.5px;border-radius:var(--r-sm);margin:0;
  transition:color .15s,background .15s;}
.rail-btn:hover{background:rgba(255,255,255,.04);color:var(--text-2);}
.rail-btn.active{background:var(--bg-active);color:#fff;box-shadow:none;}
.rail-ico{width:20px;height:20px;display:block;}
.rail-ico svg{width:20px;height:20px;display:block;}
.rail-lbl{font-size:9.5px;line-height:1.05;letter-spacing:.01em;text-align:center;white-space:nowrap;}
.addflyout{position:absolute;left:var(--rail);top:0;bottom:0;width:var(--tree-w,248px);z-index:50;
  background:var(--bg-card);border-right:1px solid var(--border);display:flex;flex-direction:column;
  box-shadow:8px 0 24px rgba(0,0,0,.35);}
.addflyout.hidden{display:none;}
.addflyout-head{display:flex;align-items:center;justify-content:space-between;
  padding:10px 12px;border-bottom:1px solid var(--border);background:transparent;}
.aft-title{font-size:12px;font-weight:600;color:#fff;}
.aft-close{background:none;border:none;color:var(--text-3);font-size:16px;cursor:pointer;line-height:1;padding:4px 6px;border-radius:6px;}
.aft-close:hover{color:#fff;background:rgba(255,255,255,.08);}
.add-grid{flex:1;overflow-y:auto;display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:108px;gap:10px;padding:12px;align-content:start;}
.add-card{background:var(--bg-card2);border:1px solid transparent;border-radius:10px;cursor:pointer;box-sizing:border-box;height:108px;overflow:hidden;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px 8px 12px;color:var(--text-2);
  transition:border-color .12s,background .12s,transform .12s;user-select:none;}
.add-card:hover{border-color:var(--border-h);background:#1d2128;color:#fff;}
.add-card:active{transform:scale(.96);}
.add-thumb{width:56px;height:56px;flex:0 0 56px;display:flex;align-items:center;justify-content:center;}
.add-thumb svg{width:56px;height:56px;}
.add-name{font-size:11px;text-align:center;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;max-width:100%;}
/* 模型库卡片：缩略图 + 悬停删除 */
.add-thumb .mc-thumb{width:56px;height:56px;object-fit:cover;border-radius:7px;display:block;}
/* ---- Model 视图：图片铺满整张卡、无大黑边（对标 AframeNewEngine）---- */
.add-grid.model-grid{grid-auto-rows:auto;}
.add-grid.model-grid .add-card{height:auto;min-height:0;padding:0;gap:0;overflow:hidden;justify-content:flex-start;}
.add-grid.model-grid .add-thumb{width:100%;height:auto;aspect-ratio:1/1;flex:none;border-radius:0;background:var(--bg-card2);}
.add-grid.model-grid .add-card:not(.model-card) .add-thumb{background:linear-gradient(135deg,#16181d,#0c0c0c);}  /* Import 卡：保持深色底 + 居中图标 */
.add-grid.model-grid .add-thumb .mc-thumb{width:100%;height:100%;object-fit:contain;border-radius:0;background:var(--bg-card2);}
.add-grid.model-grid .add-thumb svg{width:44px;height:44px;}
.add-grid.model-grid .add-name{padding:6px 8px 8px;width:100%;box-sizing:border-box;}
/* Media 卡：图片铺满（object-fit:cover），视频/音频用居中图标 */
.add-grid.model-grid .media-card .add-thumb img{width:100%;height:100%;object-fit:cover;border-radius:0;display:block;}
.add-grid.model-grid .media-card .micon{font-size:34px;line-height:1;color:var(--text-3);}
.add-card.model-card{position:relative;}
.mc-del{position:absolute;top:5px;right:6px;width:18px;height:18px;line-height:16px;text-align:center;
  border-radius:50%;background:rgba(0,0,0,.55);color:#ddd;font-size:11px;opacity:0;transition:opacity .12s;}
.add-card.model-card:hover .mc-del{opacity:1;}
.mc-del:hover{background:var(--danger);color:#fff;}
/* 卡片右上角信息按钮（ⓘ Properties，替代 ✕；点开属性弹窗可重命名/下载/删除，对标 ManifestEngine）*/
.add-card.media-card{position:relative;}
.mc-info{position:absolute;top:5px;right:6px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;
  border-radius:50%;background:rgba(0,0,0,.55);color:#e6e6e6;opacity:0;transition:opacity .12s,background .12s;cursor:pointer;padding:0;}
.mc-info svg{width:13px;height:13px;}
.add-card.model-card:hover .mc-info,.add-card.media-card:hover .mc-info{opacity:1;}
.mc-info:hover{background:var(--blue);color:#fff;opacity:1;}

/* ---- outliner ---- */
.outliner{flex:1;overflow:auto;padding:4px 0;}
.tree-row{display:flex;align-items:center;gap:4px;padding:2.5px 7px;border-radius:6px;cursor:pointer;
  font-family:var(--mono);font-size:10.1px;color:var(--text-2);white-space:nowrap;transition:background .12s;}
.tree-row:hover{background:rgba(255,255,255,.05);color:#fff;}
.tree-row.selected{background:var(--bg-active);color:#fff;}
.tree-icon{width:14px;text-align:center;color:var(--text-3);}
.tree-name{overflow:hidden;text-overflow:ellipsis;flex:1;}
/* 行内眼睛/锁：默认淡、悬停行时显现，点击不触发选择 */
/* 行内操作（复制/删除/隐藏）——与 AframeNewEngine 场景树原版一致：hover/选中时显现的小 SVG 按钮 */
.tree-acts{display:none;align-items:center;gap:1px;flex:0 0 auto;}
.tree-row:hover .tree-acts,.tree-row.selected .tree-acts{display:flex;}
.tree-act{background:none;border:0;color:var(--text-3);cursor:pointer;padding:1px;display:flex;align-items:center;border-radius:4px;line-height:0;}
.tree-act:hover{color:#fff;background:rgba(255,255,255,.14);}
.tree-act svg{width:12px;height:12px;}
.tree-row.hidden .tree-icon,.tree-row.hidden .tree-name{opacity:.45;}
/* 拖拽落点指示 */
.tree-row.drop-inside{background:rgba(76,139,245,.18);box-shadow:inset 0 0 0 1px var(--blue);}
.tree-row.drop-before{box-shadow:inset 0 2px 0 0 var(--blue);}
.tree-row.drop-after{box-shadow:inset 0 -2px 0 0 var(--blue);}
/* 工具栏切换按钮关闭态（如网格隐藏） */
.tb-btn.toggled-off{opacity:.45;}

/* ---- inspector ---- */
.inspector{flex:1;overflow:auto;padding:6px 0 30px;}
.inspector .empty{color:var(--text-3);text-align:center;padding:40px 10px;line-height:2;}
.inspector .empty span{font-size:11px;}
.section{padding:12px 10px 6px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;font-weight:600;
  color:var(--text-3);border-top:1px solid var(--border);margin-top:6px;}
.prop-row{display:flex;align-items:center;gap:8px;padding:3px 10px;}
/* 英文标签比中文长：列宽 54→84px + 单行省略（超长标签悬停看 title 全文），根除 Background 压色块/Enable Fog 折行 */
.prop-row>label{width:84px;flex:none;color:var(--text-3);font-size:11px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.prop-row select.tb-select{flex:1;min-width:0;}
.prop-row input[type=color]{flex:none;}
.prop-row input[type=checkbox]{flex:none;}
.vec3{display:flex;gap:4px;flex:1;}
.ui-number{width:100%;min-width:0;background:#0c0c0c;border:1px solid var(--border);color:var(--text);
  border-radius:6px;padding:5px 7px;font-size:12px;font-family:var(--mono);cursor:ew-resize;text-align:center;font-variant-numeric:tabular-nums;}
.ui-number:focus{cursor:text;outline:none;border-color:var(--border-h);}
.ui-number[data-axis="x"]{border-bottom:2px solid #8d8d8d33;}
.ui-number[data-axis="y"]{border-bottom:2px solid #a6a6a633;}
.ui-number[data-axis="z"]{border-bottom:2px solid #92929233;}
.ui-text{flex:1;background:#0c0c0c;border:1px solid var(--border);color:var(--text);border-radius:6px;padding:5px 7px;font-size:12px;font-family:var(--mono);}
.ui-text:focus{outline:none;border-color:var(--border-h);}
.ui-range{flex:1;accent-color:var(--blue);}
.range-val{width:42px;text-align:right;color:var(--text-3);font-variant-numeric:tabular-nums;}
input[type=color]{width:40px;height:28px;border:1px solid var(--border);border-radius:6px;background:none;cursor:pointer;padding:2px;}
input[type=checkbox]{accent-color:#fff;width:16px;height:16px;cursor:pointer;}

/* ---- test overlay ---- */
.test-overlay{position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;align-items:center;justify-content:center;z-index:1000;}
.test-window{width:82%;height:82%;background:#000;border:1px solid var(--border-h);border-radius:var(--r);overflow:hidden;display:flex;flex-direction:column;box-shadow:0 24px 70px rgba(0,0,0,.6);}
.test-bar{height:44px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:var(--bg-card);border-bottom:1px solid var(--border);color:var(--text-2);font-size:12.5px;}
.test-close{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-2);padding:6px 12px;border-radius:var(--r-sm);cursor:pointer;font-family:var(--font);font-size:12px;}
.test-close:hover{background:rgba(255,255,255,.09);color:#fff;border-color:var(--border-h);}
.test-iframe{flex:1;border:none;width:100%;background:#000;}

/* ---- 分享弹窗（顶栏链接条 + iframe 预览，参考 AI2DEngine）---- */
.share-overlay{position:fixed;inset:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:1200;}
.share-window{width:90%;height:90%;background:var(--bg-card);border:1px solid var(--border-h);border-radius:var(--r);overflow:hidden;display:flex;flex-direction:column;box-shadow:0 24px 70px rgba(0,0,0,.65);}
.share-bar{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--bg-card);border-bottom:1px solid var(--border);}
.share-title{font-size:13px;color:#fff;font-weight:600;white-space:nowrap;display:flex;align-items:center;gap:5px;}
.share-url{flex:1;min-width:0;background:rgba(255,255,255,.06);border:1px solid var(--border-h);color:var(--text);border-radius:var(--r-sm);padding:9px 12px;font-size:13px;font-family:var(--mono);}
.share-url:focus{outline:none;border-color:var(--border-h);}
.share-copy,.share-close{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-2);border-radius:var(--r-sm);padding:7px 12px;font-size:12.5px;cursor:pointer;white-space:nowrap;font-family:var(--font);}
.share-copy{background:#fff;border-color:#fff;color:#000;font-weight:600;}
.share-copy:hover{background:#e6e6e6;}
.share-copy:disabled{opacity:.55;cursor:default;}
.share-close:hover{background:rgba(255,255,255,.09);color:#fff;border-color:var(--border-h);}
.share-body{flex:1;display:flex;align-items:center;justify-content:center;background:#000;}
.share-iframe{flex:1;border:none;width:100%;height:100%;background:#000;}
.share-loading{color:var(--text-3);font-size:13px;}

/* ---- T3 代码往返面板（挂在 #viewport 内 → 居中在「场景正下方」，不与左右面板重叠）---- */
#t3panel{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);
  width:min(560px,86%);max-height:42%;z-index:60;
  background:var(--bg-card);border:1px solid var(--border-h);border-radius:var(--r);overflow:auto;
  box-shadow:0 12px 40px rgba(0,0,0,.5);font-size:12px;}
.t3-head{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;
  background:var(--bg-card2);border-bottom:1px solid var(--border);font-weight:600;color:#fff;position:sticky;top:0;}
.t3-close{background:rgba(255,255,255,.06);border:1px solid var(--border);color:var(--text-2);width:22px;height:22px;border-radius:6px;cursor:pointer;}
.t3-close:hover{background:rgba(255,255,255,.12);color:#fff;}
.t3-body{padding:8px 12px;line-height:1.7;}
.t3-line{color:var(--text-3);}
.t3-ok{color:var(--ok);}
.t3-err{color:var(--danger);}
.t3-warn{color:var(--warn);}
.t3-note{color:var(--text-2);}
.t3-toggle{display:flex;align-items:center;gap:6px;margin-top:8px;padding-top:8px;border-top:1px solid var(--border);color:var(--text-2);cursor:pointer;font-size:11.5px;}
.t3-toggle input{accent-color:#fff;}

/* ── 面板头部：标题与右侧按钮各自不换行（原来 400px 宽度下 "AI Coding Assistant" 和
   "Prompt Assets" 都会折成两行）。字号/内边距收紧腾出横向空间。── */
.ai-head{flex-wrap:nowrap;gap:6px;padding:10px 11px;}
.ai-title{flex:none;white-space:nowrap;font-size:12.5px;}
.ai-title span{white-space:nowrap;}
.ai-head button{white-space:nowrap;flex:none;}


/* ---- AI Coding Assistant（右侧抽屉式停靠面板，对标 AframeNewEngine）---- */
/* ── AI 类 rail 按钮：统一亮度（单一真源）──
   原先 10 个面板各自注入一份 .rail-btn.<x>-railbtn 颜色（多数 #cfd3d8，AI Scene 用 var(--accent)），
   同一栏里亮度参差、图标和标签也不一致。各面板的注入已删除，这里是唯一出处。
   图标与文字同色：SVG 用 currentColor，标签继承按钮 color，改一处两者同步。*/
.rail-btn.ai-railbtn,.rail-btn.ai3d-railbtn,.rail-btn.aiscene-railbtn,.rail-btn.aiimg-railbtn,.rail-btn.aimus-railbtn,.rail-btn.aivid-railbtn,.rail-btn.aispk-railbtn,.rail-btn.aisky-railbtn,.rail-btn.aiwld-railbtn,.rail-btn.aistory-railbtn,.rail-btn.aimaster-railbtn{color:#fff;}
.rail-btn.ai-railbtn:hover,.rail-btn.ai3d-railbtn:hover,.rail-btn.aiscene-railbtn:hover,.rail-btn.aiimg-railbtn:hover,.rail-btn.aimus-railbtn:hover,.rail-btn.aivid-railbtn:hover,.rail-btn.aispk-railbtn:hover,.rail-btn.aisky-railbtn:hover,.rail-btn.aiwld-railbtn:hover,.rail-btn.aistory-railbtn:hover,.rail-btn.aimaster-railbtn:hover{background:rgba(255,255,255,.06);color:#fff;}
.rail-btn.ai-railbtn.active,.rail-btn.ai3d-railbtn.active,.rail-btn.aiscene-railbtn.active,.rail-btn.aiimg-railbtn.active,.rail-btn.aimus-railbtn.active,.rail-btn.aivid-railbtn.active,.rail-btn.aispk-railbtn.active,.rail-btn.aisky-railbtn.active,.rail-btn.aiwld-railbtn.active,.rail-btn.aistory-railbtn.active,.rail-btn.aimaster-railbtn.active{background:var(--bg-active);color:#fff;box-shadow:none;}
/* AI Code / AI Agent 上方的分组分隔线（只管边框，颜色由上面统一规则给）*/
.rail-btn.ai-railbtn{border-top:1px solid var(--border);margin-top:5px;padding-top:11px;}

/* 右侧停靠、工具栏下方到底部全高。固定边界 + overflow:hidden + .ai-body flex/min-height:0/overflow-y:auto → 滚动 100% 稳 */
#aiPanel{position:fixed;top:var(--subbar);right:0;bottom:0;width:400px;max-width:92vw;z-index:950;
  background:var(--bg-side);border-left:1px solid var(--border);box-shadow:-12px 0 40px rgba(0,0,0,.4);
  display:none;flex-direction:column;overflow:hidden;}
#aiPanel.open{display:flex;}
.ai-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important;}
.ai-head{display:flex;align-items:center;gap:8px;padding:11px 13px;border-bottom:1px solid var(--border);flex:none;flex-wrap:wrap;min-width:0;}
.ai-head>div:last-child{min-width:0;flex:1 1 220px;justify-content:flex-end;flex-wrap:wrap;}
.ai-title{display:flex;align-items:center;gap:7px;color:#fff;font-size:13px;font-weight:600;}
.ai-title svg{width:16px;height:16px;color:#ffffff;}
#aiClose{margin-left:auto;background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-3);width:28px;height:28px;border-radius:6px;cursor:pointer;flex:none;font-size:14px;}
#aiClose:hover{color:#fff;background:rgba(255,255,255,.09);}
/* 折叠态(2026-07-29 Hide 按钮)：藏掉开关行/Model 行/AIExt 行。用 class 而非 inline style，
   因为 #aiExtRow 由 AIExt.js 异步插入，CSS 规则对后插入的元素同样生效，无需重放。 */
#aiPanel.ai-compact .ai-subrow,
#aiPanel.ai-compact .ai-modelrow,
#aiPanel.ai-compact #aiExtRow{display:none !important;}
.ai-intentbar{padding:10px 12px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:9px;flex:none;background:rgba(255,255,255,.015);}
.ai-intents{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;}
.ai-intents button{min-width:0;min-height:48px;padding:7px 5px;border:1px solid var(--border);border-radius:9px;background:var(--bg-card2);color:var(--text-3);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-family:var(--font);}
.ai-intents button b{font-size:12px;color:var(--text-2);font-weight:650;}
.ai-intents button span{font-size:9.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.ai-intents button:hover{border-color:var(--border-h);color:#fff;}
.ai-intents button.active{background:#fff;border-color:#fff;color:#444;box-shadow:0 2px 12px rgba(255,255,255,.08);}
.ai-intents button.active b{color:#000;}
.ai-preset-label{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text-3);}
.ai-preset-label select{flex:1;min-width:0;}
.ai-advanced{border-bottom:1px solid var(--border);flex:none;}
.ai-advanced>summary{padding:7px 13px;color:var(--text-3);font-size:10.5px;cursor:pointer;list-style-position:inside;user-select:none;}
.ai-advanced>summary:hover{color:var(--text-2);}
.ai-advanced .ai-subrow,.ai-advanced .ai-modelrow{border-bottom:0;border-top:1px solid var(--border);}
/* Chat 顶部控制区：用更深的黑色与下方半透明对话区明确分层。 */
#aiPanel>.ai-head,
#aiPanel>.ai-intentbar,
#aiPanel>.ai-advanced{background:rgba(7,7,9,.94);}
#aiPanel>.ai-advanced{border-bottom-color:rgba(255,255,255,.11);box-shadow:0 10px 24px rgba(0,0,0,.18);}
.ai-flow{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:3px;padding:8px;border:1px solid var(--border);border-radius:10px;background:rgba(255,255,255,.018);font-size:9.5px;color:var(--text-3);}
.ai-flow-title{grid-column:1/-1;font-size:10px;font-weight:650;color:var(--text-2);margin-bottom:2px;}
.ai-flow-meta{grid-column:1/-1;font-size:9px;line-height:1.35;color:var(--text-3);white-space:normal;}.ai-flow-meta.actual{color:#a9c7ea;}
.ai-flow-step{min-width:0;display:flex;align-items:center;gap:3px;padding:5px 4px;border-radius:6px;background:rgba(255,255,255,.025);}
.ai-flow-mark{flex:none;font-weight:750;}
.ai-flow-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ai-flow-detail{display:none;}
.ai-flow-step.active{color:#d6e7ff;background:rgba(80,145,235,.15);outline:1px solid rgba(100,165,245,.26);}
.ai-flow-step.done{color:var(--ok);background:rgba(63,185,80,.07);}
.ai-flow-step.failed,.ai-flow-step.attention{color:#ffb3ae;background:rgba(248,81,73,.07);}
.ai-flow-step.skipped{opacity:.55;}
.ai-flow-step[aria-current="step"] .ai-flow-mark{animation:ai-flow-pulse 1.15s ease-in-out infinite;}
@keyframes ai-flow-pulse{50%{opacity:.35;}}
.ai-msg-actions{display:flex;gap:4px;flex-wrap:wrap;margin-top:7px;padding-top:5px;border-top:1px solid rgba(255,255,255,.08);opacity:0;transition:opacity .12s;}
.msg:hover>.ai-msg-actions,.msg:focus-within>.ai-msg-actions{opacity:1;}
.ai-msg-actions button{border:0;background:transparent;color:var(--text-3);font:9.5px/1.2 var(--font);padding:3px 5px;border-radius:5px;cursor:pointer;}
.ai-msg-actions button:hover,.ai-msg-actions button:focus-visible{background:rgba(255,255,255,.08);color:var(--text);outline:none;}
.ai-markdown p{margin:0 0 7px;white-space:pre-wrap;}.ai-markdown p:last-child{margin-bottom:0;}
.ai-markdown ul{margin:4px 0 8px;padding-left:19px;}.ai-markdown li{margin:3px 0;}
.ai-markdown h3,.ai-markdown h4{margin:5px 0 7px;font-size:12.5px;color:var(--text);}
.ai-markdown pre{margin:7px 0;padding:9px;max-height:300px;overflow:auto;border-radius:7px;background:#0d0d0d;border:1px solid var(--border);white-space:pre;}
.ai-markdown code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:rgba(255,255,255,.07);padding:1px 3px;border-radius:3px;}.ai-markdown pre code{background:none;padding:0;}
.ai-markdown a{color:#91bfff;text-decoration:underline;text-underline-offset:2px;}
.ai-dialog-overlay{position:fixed;inset:0;z-index:100000;background:rgba(0,0,0,.58);display:flex;align-items:center;justify-content:center;padding:18px;}
.ai-chat-manager{width:min(760px,96vw);max-height:min(760px,88vh);background:#1a1a1a;color:#e9e9e9;border:1px solid #383838;border-radius:12px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 70px rgba(0,0,0,.55);}
.ai-chat-manager>header{display:flex;align-items:center;padding:12px 14px;border-bottom:1px solid #383838;}.ai-chat-manager>header button{margin-left:auto;background:none;border:0;color:inherit;font-size:18px;cursor:pointer;}
.ai-chat-manager-actions{display:flex;gap:7px;flex-wrap:wrap;padding:10px 14px;border-bottom:1px solid #383838;}
.ai-retention-note{padding:8px 14px;border-bottom:1px solid #303030;color:var(--text-3);font-size:10px;line-height:1.45;}
.ai-metrics{width:min(720px,96vw);max-height:min(720px,90vh);background:#1a1a1a;color:#e9e9e9;border:1px solid #383838;border-radius:12px;display:flex;flex-direction:column;overflow:hidden;}.ai-metrics>header{display:flex;align-items:center;padding:12px 14px;border-bottom:1px solid #383838;}.ai-metrics>header>div{display:flex;flex-direction:column;gap:2px;}.ai-metrics>header span{color:var(--text-3);font-size:10px;}.ai-metrics>header button{margin-left:auto;background:none;border:0;color:inherit;font-size:18px;cursor:pointer;}.ai-metrics-body{overflow:auto;padding:14px;}.ai-metrics-body>p{color:var(--text-3);font-size:11px;margin:0 0 10px;}.ai-metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px;}.ai-metrics-grid>div{display:flex;flex-direction:column;gap:3px;padding:10px;border:1px solid #363636;border-radius:8px;background:#232323;}.ai-metrics-grid b{font-size:17px;}.ai-metrics-grid span,.ai-metrics-errors{color:var(--text-3);font-size:10px;}.ai-metrics-errors{margin-top:12px;line-height:1.5;white-space:pre-line;}
.ai-chat-list{overflow:auto;padding:8px 14px 14px;}.ai-chat-list-empty{color:var(--text-3);font-size:12px;}
.ai-chat-row{display:flex;gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid #303030;}.ai-chat-row>div:first-child{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px;}.ai-chat-row b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px;}.ai-chat-row span{font-size:10px;color:var(--text-3);}.ai-chat-row>div:last-child{display:flex;gap:5px;}
.ai-assets-manager{width:min(980px,96vw);height:min(760px,90vh);background:#1a1a1a;color:#e9e9e9;border:1px solid #383838;border-radius:12px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 70px rgba(0,0,0,.58);}
.ai-assets-manager>header{display:flex;align-items:center;gap:12px;padding:11px 14px;border-bottom:1px solid #383838;}.ai-assets-manager>header b{white-space:nowrap;}.ai-assets-manager>header input{flex:1;min-width:100px;background:#111;color:var(--text);border:1px solid #3b3b3b;border-radius:8px;padding:8px 10px;font:12px var(--font);}.ai-assets-manager>header>button{background:none;border:0;color:inherit;font-size:18px;cursor:pointer;}
.ai-assets-main{flex:1;min-height:0;display:flex;}.ai-assets-main>nav{width:170px;flex:none;overflow:auto;border-right:1px solid #303030;padding:8px 6px;}.ai-assets-main>nav button{display:block;width:100%;padding:8px 9px;border:0;border-radius:7px;background:none;color:#c8c8c8;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font:12px var(--font);cursor:pointer;}.ai-assets-main>nav button:hover{background:#242424;}.ai-assets-main>nav button.active{background:#303030;color:#fff;}
.ai-assets-main>section{flex:1;min-width:0;display:flex;flex-direction:column;}.ai-assets-heading{padding:9px 14px 0;color:var(--text-3);font-size:11px;}.ai-assets-grid{flex:1;overflow:auto;padding:10px 14px 14px;display:grid;grid-template-columns:repeat(auto-fill,minmax(205px,1fr));gap:10px;align-content:start;}.ai-assets-empty{color:var(--text-3);}
.ai-asset-card{display:flex;min-width:0;flex-direction:column;padding:10px;background:#252525;border:1px solid #383838;border-radius:10px;}.ai-asset-card:hover{border-color:#6257a8;}.ai-asset-card-head{display:flex;align-items:center;justify-content:space-between;font-size:25px;}.ai-asset-star{border:0;background:none;color:#f0ca63;font-size:19px;cursor:pointer;padding:3px;}.ai-asset-card>b{margin-top:5px;font-size:12.5px;}.ai-asset-card>small{color:#8f8f8f;margin-top:2px;}.ai-asset-card>p{flex:1;color:#aaa;font-size:11px;line-height:1.45;margin:7px 0 9px;}.ai-asset-actions{display:flex;gap:6px;justify-content:flex-end;}.ai-assets-manager>footer{padding:9px 14px;border-top:1px solid #383838;color:#999;font-size:11px;}
.ai-subrow{padding:8px 13px;font-size:10.5px;color:var(--text-3);border-bottom:1px solid var(--border);flex:none;line-height:1.6;}
.ai-modelrow{display:flex;align-items:center;gap:8px;padding:8px 13px;border-bottom:1px solid var(--border);flex:none;}
.ai-modelrow>span{font-size:11px;color:var(--text-3);flex:none;}
.ai-modelrow select{flex:1;}
.ai-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:14px;display:flex;flex-direction:column;gap:10px;}
/* ⚠️ 关键：对话区每个子项永不被纵向压缩。带 overflow:hidden 的 flex 子项（如 .diff-wrap）自动最小高度=0，
   内容超高时会被 flex 压扁并裁掉代码 → 必须 flex-shrink:0，保持完整高度，改由 .ai-body 自身滚动 */
.ai-body>*{flex-shrink:0;}
.ai-empty{color:var(--text-3);font-size:12px;text-align:center;padding:40px 14px;line-height:1.9;}
/* ── 输入区：统一成 AI Master 的形制 —— 输入框整行在上，按钮行在下、发送键占满剩余宽度。
   AI Code 与 AI Agent 都用 .ai-inputbar，这里改一处两边同时生效。── */
.ai-inputbar{display:flex;flex-direction:column;align-items:stretch;gap:8px;padding:10px 11px;border-top:1px solid var(--border);flex:none;}
.ai-inputbar textarea{width:100%;box-sizing:border-box;min-height:66px;max-height:200px;
  background:#111111;color:var(--text);border:1px solid #313131;border-radius:9px;padding:8px 10px;
  font-family:var(--font);font-size:13px;line-height:1.5;resize:none;outline:none;}
/* 占位文案比正文小一号 —— 这几条提示都很长，13px 时会被输入框裁掉末尾。
   缩到 11.5px 正好整段显示完，也就不再需要右下角那个缩放手柄了。*/
.ai-inputbar textarea::placeholder{font-size:11.5px;line-height:1.45;}
.ai-inputbar textarea:focus{border-color:var(--border-h);}
.ai-input-actions{display:flex;align-items:stretch;gap:8px;min-width:0;}
.ai-input-actions>#aiSend,.ai-input-actions>.ai-sendcol{flex:1;min-width:0;}
.ai-screenshot-btn{flex:0 0 auto;min-width:116px;border:1px solid #3b3b3b!important;background:#1a1a1a!important;color:#dedede!important;border-radius:9px!important;padding:8px 11px!important;justify-content:center;}
.ai-screenshot-btn:hover{border-color:#777!important;background:#262626!important;color:#fff!important;}
.ai-inputbar .tb-btn.primary{padding:9px 0;border-radius:9px;font-size:13px;font-weight:600;
  border:1px solid #fff;background:#fff;color:#000;width:100%;justify-content:center;}
.ai-inputbar .tb-btn.primary:hover{background:#e6e6e6;}
.ai-inputbar .tb-btn.primary:disabled{opacity:.5;cursor:default;}
/* Chat region screenshot — live-page crop interaction, modelled after desktop messaging capture tools. */
.ai-region-capture{position:fixed;inset:0;z-index:250000;cursor:crosshair;touch-action:none;user-select:none;outline:0;color:#fff;font-family:var(--font);}
.ai-region-dim{position:absolute;inset:0;background:rgba(0,0,0,.46);pointer-events:none;}
.ai-region-boundary{position:fixed;box-sizing:border-box;border:1px dashed rgba(255,255,255,.48);pointer-events:none;}
.ai-region-hint{position:fixed;top:18px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:10px;padding:8px 13px;border-radius:9px;background:rgba(15,17,21,.9);border:1px solid rgba(255,255,255,.18);box-shadow:0 8px 28px rgba(0,0,0,.35);font-size:11px;pointer-events:none;white-space:nowrap;}
.ai-region-hint span{color:#b8bcc5;}
.ai-region-selection{position:fixed;display:none;box-sizing:border-box;border:2px solid #4aa8ff;box-shadow:0 0 0 9999px rgba(0,0,0,.5);pointer-events:none;}
.ai-region-selection::before,.ai-region-selection::after{content:'';position:absolute;width:7px;height:7px;background:#fff;border:1px solid #2789e3;border-radius:1px;}
.ai-region-selection::before{left:-5px;top:-5px;}.ai-region-selection::after{right:-5px;bottom:-5px;}
.ai-region-actions{position:fixed;display:none;align-items:center;gap:7px;padding:6px;border-radius:9px;background:rgba(15,17,21,.94);border:1px solid rgba(255,255,255,.18);box-shadow:0 10px 30px rgba(0,0,0,.45);cursor:default;}
.ai-region-actions button{border:1px solid #444;background:#25272c;color:#ddd;border-radius:7px;padding:7px 11px;font:11px var(--font);cursor:pointer;white-space:nowrap;}
.ai-region-actions button:hover{background:#34373d;color:#fff;}.ai-region-actions button[data-act='attach']{background:#fff;color:#111;border-color:#fff;font-weight:650;}
.ai-region-actions button[data-act='attach']:hover{background:#e7f2ff;border-color:#e7f2ff;}
/* AI Agent 的三个按钮：竖排改横排，Send 占满剩余（照 AI Master 的 .am-btnrow）*/
.aiterm-btncol{flex-direction:row!important;gap:8px!important;align-items:stretch!important;}
.aiterm-btncol > button{flex:0 0 auto;background:#1a1a1a;border:1px solid #313131;color:#d3d3d3;
  border-radius:9px;padding:9px 12px;}
.aiterm-btncol > button:hover{color:#fff;border-color:var(--border-h);background:#262626;}
.aiterm-btncol > #aiTermSend{flex:1;padding:9px 0;border-radius:9px;font-size:13px;font-weight:600;
  border:1px solid #fff;background:#fff;color:#000;}
.aiterm-btncol > #aiTermSend:hover{background:#e6e6e6;color:#000;border-color:#fff;}
.msg{font-size:12.5px;line-height:1.6;border-radius:10px;padding:9px 11px;max-width:100%;word-break:break-word;white-space:pre-wrap;}
.msg.user{align-self:flex-end;background:#1d2733;color:#dbe9ff;border:1px solid rgba(120,170,255,.25);max-width:88%;}
.msg.ai{align-self:flex-start;background:var(--bg-card2);color:var(--text-2);border:1px solid var(--border);max-width:100%;}
.msg.sys{align-self:center;background:transparent;color:var(--text-3);font-size:11px;padding:2px;}
.msg.ai.streaming::after{content:'▌';color:#9fd0ff;animation:tjneBlink 1s steps(2) infinite;}
.msg.ai.streamcode{font-family:var(--mono);font-size:11px;color:#9be8a8;max-height:240px;overflow:auto;}
@keyframes tjneBlink{50%{opacity:0;}}
.ai-histbar{display:flex;align-items:center;gap:7px;padding:7px 10px;margin-top:8px;border:1px solid var(--border);border-radius:var(--r-sm);background:var(--bg-card2);}
.ai-histbar .tb-btn{padding:4px 10px;font-size:11px;}
.ai-histpos{margin-left:auto;font-family:var(--mono);font-size:10.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:58%;}
.diff-wrap{margin-top:9px;border:1px solid var(--border);border-radius:var(--r-sm);overflow:hidden;background:#0c0c0c;min-width:0;max-width:100%;align-self:stretch;}
.diff-summary{padding:6px 10px;font-size:11px;color:var(--text-2);border-bottom:1px solid var(--border);background:var(--bg-card2);}
.diff-item{border-bottom:1px solid var(--line);min-width:0;max-width:100%;}
.diff-header{padding:4px 10px;font-size:11px;color:var(--text-3);display:flex;gap:6px;align-items:center;}
.diff-header .ok{color:var(--ok);} .diff-header .warn{color:var(--warn);}
/* 强制换行：确定宽度约束(max-width:100%) + pre-wrap + 任意处可断，避免红绿 diff 被截成一行（对标 AframeNewEngine） */
.diff-old,.diff-new{padding:3px 10px 3px 22px;font-family:var(--mono);font-size:11px;
  white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;max-width:100%;box-sizing:border-box;position:relative;
  /* 完整显示红绿修改内容：超长块在块内纵向滚动，避免单条 diff 撑爆对话区 */
  max-height:360px;overflow-y:auto;}
.diff-old{background:rgba(248,81,73,.10);color:#ffb3ae;}
.diff-old::before{content:'\2212';position:absolute;left:8px;color:var(--danger);font-weight:700;}
.diff-new{background:rgba(63,185,80,.10);color:#9be8a8;}
.diff-new::before{content:'+';position:absolute;left:8px;color:var(--ok);font-weight:700;}
/* 应用/取消按钮：sticky 吸底，无论 diff 多长都固定在对话区底部可见（直接挂在 .ai-body 下，避开 .diff-wrap 的 overflow:hidden） */
.diff-actions{position:sticky;bottom:0;z-index:3;display:flex;gap:8px;padding:10px 0 4px;margin-top:-4px;
  background:linear-gradient(to top,var(--bg-side) 80%,rgba(9,9,9,0));}
.diff-actions .tb-btn{padding:10px 14px;font-size:13px;flex:none;}
.diff-actions .tb-btn.primary{flex:1;}
.smoke-panel{margin-top:8px;padding:7px 10px;border-radius:var(--r-sm);font-size:11.5px;border:1px solid var(--border);display:flex;flex-direction:column;gap:5px;}
.smoke-panel.pending{color:var(--text-3);}
.smoke-panel.pass{color:var(--ok);border-color:rgba(63,185,80,.3);background:rgba(63,185,80,.07);}
.smoke-panel.fail{color:#ffb3ae;border-color:rgba(248,81,73,.3);background:rgba(248,81,73,.07);}
.smoke-err{font-family:var(--mono);font-size:10.5px;color:#ffb3ae;white-space:pre-wrap;word-break:break-all;padding-left:8px;}
.smoke-panel .tb-btn{align-self:flex-start;padding:4px 10px;font-size:11px;margin-top:3px;}
.ai-spin{width:13px;height:13px;border:2px solid var(--border-h);border-top-color:#9fd0ff;border-radius:50%;display:inline-block;animation:tjnespin .8s linear infinite;vertical-align:-2px;}
@keyframes tjnespin{to{transform:rotate(360deg);}}

/* ---- My Projects 项目管理弹窗 ---- */
.tb-btn.danger{background:rgba(255,255,255,.04);border-color:var(--border);color:var(--text-2);}
.tb-btn.danger:hover{color:var(--danger);border-color:rgba(248,81,73,.4);background:rgba(248,81,73,.08);}
#pmOverlay{position:fixed;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(2px);z-index:1200;display:none;align-items:center;justify-content:center;padding:24px;}
#pmOverlay.open{display:flex;}
.pm-modal{width:min(860px,92vw);height:min(820px,92vh);background:var(--bg-card);border:1px solid var(--border-h);border-radius:var(--r);
  box-shadow:0 24px 70px rgba(0,0,0,.55);display:flex;flex-direction:column;overflow:hidden;}
.pm-head{display:flex;align-items:center;justify-content:space-between;height:var(--topbar);padding:0 16px;border-bottom:1px solid var(--border);background:transparent;}
.pm-title{font-size:14px;font-weight:600;color:#fff;}
.pm-title b{color:#fff;}
.pm-toolbar{display:flex;align-items:center;gap:10px;height:var(--subbar);padding:0 18px;border-bottom:1px solid var(--border);flex-shrink:0;overflow-x:auto;}
.pm-toolbar::-webkit-scrollbar{height:0;}
.pm-toolbar > *{flex-shrink:0;}
.pm-search{flex:1;max-width:240px;display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:20px;padding:6px 14px;}
.pm-search svg{width:15px;height:15px;color:var(--text-3);flex:none;}
.pm-search input{flex:1;background:none;border:none;outline:none;color:var(--text);font-family:var(--font);font-size:13px;}
.pm-grid{flex:1;overflow:auto;padding:16px;display:flex;flex-wrap:wrap;gap:14px;align-content:flex-start;}
.pcard{flex:1 1 200px;max-width:320px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;cursor:pointer;display:block;transition:border-color .15s,transform .15s;}
.pcard:hover{border-color:var(--border-h);transform:translateY(-2px);}
.pcard-current{border-color:#fff;box-shadow:0 0 0 2px #fff;}
.pcard .thumb{position:relative;width:calc(100% - 20px);margin:10px auto 4px;padding-bottom:calc(100% - 20px);flex-shrink:0;background:linear-gradient(135deg,#16181d,#0c0c0c);overflow:hidden;border-radius:var(--r);}
.pcard .thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;}
.pcard .thumb .thumb-ph{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--text-3);font-size:30px;}
.pcard .pinfo{padding:10px 12px 6px;display:flex;flex-direction:column;gap:3px;}
.pcard .pname{font-size:13px;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pcard .pcur{color:var(--text-2);font-weight:400;}
.pcard .pmeta{font-size:11px;color:var(--text-3);font-weight:300;}
/* 卡片动作区：原来一行硬塞 3~4 个按钮，超出被 .pcard 的 overflow:hidden 裁掉（Delete 只剩 "Delet"）。
   改成允许换行、每行两个，卡片高度随内容自然增长，不再压住下一行卡片的文字。*/
.pcard{display:flex;flex-direction:column;}
.pcard .pinfo{padding:10px 12px 8px;}
.pcard .pacts{display:flex;flex-wrap:wrap;gap:6px;padding:0 12px 14px;margin-top:auto;}
.pcard .pacts .tb-btn{flex:1 1 calc(50% - 3px);min-width:0;padding:6px 4px;font-size:11px;justify-content:center;text-align:center;}
.pm-new{background:var(--bg-card2);border:1px dashed var(--border-h);border-radius:var(--r);min-height:180px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--text-3);cursor:pointer;transition:color .15s,border-color .15s;}
.pm-new:hover{color:#fff;border-color:#fff;}
.pm-new svg{width:28px;height:28px;}
.pm-empty{width:100%;text-align:center;color:var(--text-3);padding:60px 0;font-size:13px;}

/* ---- 代码往返历史记录弹窗 ---- */
.tb-badge{background:#fff;color:#000;border-radius:9px;padding:0 5px;font-size:10px;font-weight:700;vertical-align:1px;line-height:1.5;}
#t3histOverlay{position:fixed;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(2px);z-index:1200;display:none;align-items:center;justify-content:center;padding:24px;}
#t3histOverlay.open{display:flex;}
.t3h-modal{width:min(760px,92vw);height:min(640px,84vh);background:var(--bg-card);border:1px solid var(--border-h);border-radius:var(--r);
  box-shadow:0 24px 70px rgba(0,0,0,.55);display:flex;flex-direction:column;overflow:hidden;}
.t3h-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 16px;height:var(--topbar);border-bottom:1px solid var(--border);background:transparent;}
.t3h-title{font-size:14px;font-weight:600;color:#fff;}
.t3h-title b{color:#fff;}
.t3h-proj{color:var(--text-3);font-weight:300;font-size:12px;}
.t3h-list{flex:1;overflow:auto;padding:12px 14px;display:flex;flex-direction:column;gap:8px;}
.t3h-empty{color:var(--text-3);text-align:center;padding:60px 16px;line-height:2;font-size:13px;}
.t3h-card{border:1px solid var(--border);border-radius:var(--r-sm);background:var(--bg-card2);overflow:hidden;}
.t3h-cardhead{display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:pointer;background:transparent;}
.t3h-cardhead:hover{background:rgba(255,255,255,.05);}
.t3h-arrow{color:var(--text-3);width:12px;flex:none;text-align:center;}
.t3h-fname{font-size:12.5px;font-weight:600;color:#fff;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.t3h-meta{margin-left:auto;font-size:11px;color:var(--text-3);flex:none;font-variant-numeric:tabular-nums;}
.t3h-cardbody{padding:8px 14px;line-height:1.7;border-top:1px solid var(--border);font-size:12px;
  font-family:var(--mono);white-space:pre-wrap;word-break:break-word;}
.t3h-cardbody>div{padding:1px 0;}

/* ---- C2 水合徽标（载入可编辑场景时短暂提示）---- */
#m3dHydrateBadge{position:fixed;top:56px;left:50%;transform:translateX(-50%);z-index:1500;
  display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:20px;font-size:12.5px;
  background:var(--bg-card);color:var(--text-2);border:1px solid var(--border-h);box-shadow:0 8px 26px rgba(0,0,0,.45);}

/* ---- 恢复横幅 ---- */
.restore-banner{position:fixed;top:56px;left:50%;transform:translateX(-50%);z-index:1500;
  display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;font-size:13px;
  background:var(--bg-card);color:var(--text-2);border:1px solid var(--border-h);box-shadow:0 10px 30px rgba(0,0,0,.5);}
.restore-banner button{border:none;border-radius:6px;padding:5px 12px;cursor:pointer;font-size:12px;}
.restore-banner .rb-yes{background:#fff;color:#000;font-weight:600;}
.restore-banner .rb-no{background:rgba(255,255,255,.08);color:var(--text-2);}


/* ===== Text to 3D / AI 3D 面板（忠实复刻 AframeNewEngine t3dPanel：420px 右抽屉单列）===== */


#ai3dPanel{position:fixed;top:var(--subbar);right:0;bottom:0;width:400px;max-width:92vw;z-index:960;
  background:var(--bg-side);border-left:1px solid var(--border);display:none;flex-direction:column;
  box-shadow:-12px 0 40px rgba(0,0,0,.4);}
#ai3dPanel.open{display:flex;}
.t3d-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;
  border-bottom:1px solid var(--border);flex:none;background:transparent;}
.t3d-htitle{font-size:16px;font-weight:600;color:#fff;}
.t3d-htitle .t3d-3d{font-family:var(--mono);font-weight:700;color:#fff;}
.t3d-badge{font-size:11px;padding:3px 10px;border-radius:20px;border:1px solid var(--border);color:var(--text-2);background:rgba(255,255,255,.04);}
.t3d-hright{display:flex;align-items:center;gap:8px;}
.t3d-balance{font-size:11px;color:var(--text-3);font-family:var(--mono);padding:3px 9px;border:1px solid var(--border);border-radius:20px;}
.t3d-close{background:none;border:none;color:var(--text-3);font-size:16px;cursor:pointer;padding:6px;line-height:1;border-radius:6px;}
.t3d-close:hover{background:rgba(255,255,255,.08);color:#fff;}

.t3d-body{flex:1;overflow-y:auto;padding:14px;}
.t3d-sectitle{font-size:15px;font-weight:600;color:#7fe08c;margin-bottom:12px;}
.t3d-label{font-size:13px;color:#fff;font-weight:500;margin:16px 0 8px;display:flex;justify-content:space-between;align-items:center;}
.t3d-texval{color:#fff;font-family:var(--mono);font-size:13px;}
.t3d-res{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.t3d-res-btn{background:var(--bg-card2);border:1px solid var(--border);border-radius:10px;padding:14px 4px 10px;
  display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;color:var(--text-2);
  transition:border-color .12s,background .12s;}
.t3d-res-btn .ic{font-size:18px;}
.t3d-res-btn .ai3d-res-icon{display:block;margin:2px auto 4px;}
.t3d-res-btn b{font-size:13px;color:#fff;font-weight:500;}
.t3d-res-btn small{font-size:9.5px;color:var(--text-3);text-align:center;line-height:1.45;}
.t3d-res-btn:hover{border-color:var(--border-h);}
.t3d-res-btn.active{border-color:#fff;background:var(--bg-active);}
.t3d-hint{font-size:11px;color:rgba(255,255,255,.55);margin-top:6px;line-height:1.5;}
.t3d-tex{width:100%;accent-color:#7fe08c;}
.t3d-check{display:flex;gap:11px;align-items:flex-start;background:var(--bg-card2);border:1px solid var(--border);
  border-radius:10px;padding:13px;margin-top:18px;cursor:pointer;font-size:12px;color:var(--text-3);line-height:1.5;}
.t3d-check input{margin-top:2px;flex:none;}
.t3d-check b{color:#fff;font-size:13px;}
.t3d-adv{margin-top:12px;}
.t3d-adv summary{cursor:pointer;text-align:center;font-size:13px;color:var(--text-2);padding:6px;list-style:none;}
.t3d-adv summary::-webkit-details-marker{display:none;}
.t3d-adv summary:hover{color:#fff;}
.t3d-advrow{display:flex;align-items:center;gap:8px;margin:8px 0;}
.t3d-advrow label{width:48px;font-size:11px;color:var(--text-3);}
.t3d-advrow select{flex:1;background:#0c0c0c;border:1px solid var(--border);color:var(--text);border-radius:6px;padding:6px 8px;font-size:12px;font-family:var(--mono);cursor:pointer;}
.t3d-advtoggles{display:flex;gap:14px;font-size:12px;color:var(--text-2);padding:4px 0;}
.t3d-advtoggles label{display:flex;align-items:center;gap:5px;cursor:pointer;}
.t3d-prompt{width:100%;margin-top:14px;background:#0c0c0c;border:1px solid var(--border);color:var(--text);
  border-radius:var(--r-sm);padding:9px 11px;font-family:var(--font);font-size:13px;line-height:1.5;resize:none;}
.t3d-prompt:focus{outline:none;border-color:var(--border-h);}
.t3d-actions{display:flex;gap:8px;margin-top:10px;}
.t3d-actions button{flex:1;padding:11px;justify-content:center;background:rgba(255,255,255,.04);border:1px solid var(--border);
  color:var(--text-2);border-radius:var(--r-sm);cursor:pointer;font-size:13px;font-family:var(--font);transition:background .15s,color .15s;}
.t3d-actions button:hover{background:rgba(255,255,255,.09);color:#fff;}
.t3d-actions button.primary{background:#cfcfcf;border-color:#cfcfcf;color:#000;font-weight:700;letter-spacing:.06em;font-family:var(--mono);}
.t3d-actions button.primary:hover{background:#fff;}
.t3d-actions button:disabled{opacity:.55;cursor:default;}
.t3d-imgnote{font-size:11px;color:#7fe08c;margin-top:8px;line-height:1.4;}
/* Upload Picture 后的小预览框 */
.t3d-imgprev{display:flex;align-items:center;gap:8px;margin-top:6px;}
.t3d-imgprev img{width:72px;height:72px;object-fit:cover;border-radius:var(--r-sm);border:1px solid var(--border);background:#0c0c0c;display:block;}
.t3d-imgclear{flex:none;width:24px;height:24px;background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-3);border-radius:6px;cursor:pointer;font-size:12px;line-height:1;}
.t3d-imgclear:hover{color:#ff8a8a;border-color:#a55;}
.t3d-preview{height:240px;margin-top:12px;border:1px solid var(--border);border-radius:var(--r-sm);background:#0c0c0c;
  overflow:hidden;display:flex;align-items:center;justify-content:center;}
.t3d-noprev{display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--text-3);}
.t3d-noprev b{font-size:42px;color:#2a2d33;font-family:var(--mono);}
.t3d-noprev span{font-size:15px;color:var(--text-2);}
.t3d-noprev small{font-size:11px;color:#555;}
.t3d-addscene{margin-top:10px;width:100%;padding:11px;background:#fff;border:1px solid #fff;
  color:#000;font-weight:600;border-radius:var(--r-sm);cursor:pointer;font-size:13px;font-family:var(--font);}
.t3d-addscene:hover{background:#e6e6e6;}
.t3d-tabs{display:flex;gap:6px;margin-top:12px;}
.t3d-tab{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-3);
  border-radius:6px;padding:4px 12px;font-size:11px;cursor:pointer;}
.t3d-tab:hover{color:#fff;}
.t3d-tab.active{background:var(--bg-active);color:#fff;border-color:var(--border-h);}
.t3d-log{margin-top:8px;background:#0c0c0c;border:1px solid var(--border);border-radius:var(--r-sm);padding:10px;
  font-family:var(--mono);font-size:10.5px;color:var(--text-2);max-height:150px;overflow:auto;
  white-space:pre-wrap;line-height:1.7;}
.t3d-history{margin-top:8px;display:flex;flex-direction:column;gap:5px;}
.t3d-hist-item{background:var(--bg-card2);border:1px solid var(--border);border-radius:6px;padding:7px 9px;
  font-size:11.5px;color:var(--text-2);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.t3d-hist-item:hover{border-color:var(--border-h);color:#fff;}
.t3d-histempty{color:var(--text-3);font-size:11px;text-align:center;padding:18px;}

/* ===== AI Agent 升级批次 (2026-07-03): next-action 芯片 / 开关行 / 自愈倒计时 ===== */
.ai-chips{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 2px}
.ai-chip{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-2);border-radius:20px;padding:4px 12px;font-size:12px;cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.ai-chip:hover{background:rgba(255,255,255,.09);color:#fff;border-color:var(--border-h)}
.ai-chip:disabled{opacity:.45;cursor:default;transform:none}
.ai-subrow label{cursor:pointer;user-select:none;white-space:nowrap;opacity:.9}
.ai-subrow label:hover{opacity:1}
.ai-subrow input[type=checkbox]{vertical-align:-2px;margin:0 3px 0 6px;accent-color:#fff}

/* ===== Ask-first questionnaire (Claude-Design style clarify drawer) ===== */
.aicq-overlay{position:fixed;inset:0;z-index:100002;background:rgba(0,0,0,.45);}
.aicq-drawer{position:fixed;top:0;right:0;bottom:0;width:min(780px,94vw);z-index:100003;background:var(--bg-card);border-left:1px solid var(--border-h);display:flex;flex-direction:column;box-shadow:-24px 0 60px rgba(0,0,0,.5);color:var(--text);font-size:13px;animation:aicq-in .22s ease;}
@keyframes aicq-in{from{transform:translateX(40px);opacity:0}to{transform:none;opacity:1}}
.aicq-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 24px;border-bottom:1px solid var(--border);flex:none;}
.aicq-title{font-size:19px;font-weight:700;line-height:1.3;}
.aicq-x{background:none;border:none;color:var(--text-3);font-size:18px;cursor:pointer;line-height:1;padding:4px 6px;border-radius:6px;}
.aicq-x:hover{color:#fff;background:rgba(255,255,255,.08);}
.aicq-body{flex:1;min-height:0;overflow-y:auto;padding:18px 26px 30px;}
.aicq-analysis{color:var(--text-3);line-height:1.55;margin-bottom:20px;font-size:12.5px;border-left:2px solid var(--border-h);padding-left:12px;}
.aicq-q{margin:0 0 26px;}
.aicq-qt{font-size:15px;font-weight:650;margin-bottom:2px;line-height:1.4;}
.aicq-qs{font-size:12px;color:var(--text-3);margin-bottom:10px;}
.aicq-opts{display:flex;flex-wrap:wrap;gap:8px;align-items:center;}
.aicq-chip{background:var(--bg-card2);border:1px solid var(--border);color:var(--text-2);border-radius:9px;padding:9px 14px;cursor:pointer;font-size:12.5px;line-height:1;transition:border-color .12s,background .12s;}
.aicq-chip:hover{border-color:var(--border-h);color:#fff;}
.aicq-chip.on{background:#fff;border-color:#fff;color:#000;font-weight:600;box-shadow:none;}
.aicq-chip.on:hover{background:#e6e6e6;border-color:#e6e6e6;}
.aicq-chip.decide{border-style:dashed;color:var(--text-2);}
.aicq-other{background:#0c0c0c;border:1px solid var(--border);border-radius:9px;color:var(--text);padding:9px 12px;font-size:12.5px;min-width:150px;flex:1 0 150px;max-width:280px;font-family:var(--font);}
.aicq-other:focus{outline:none;border-color:var(--border-h);}
.aicq-ta{width:100%;background:#0c0c0c;border:1px solid var(--border);border-radius:9px;color:var(--text);padding:10px 12px;font-size:12.5px;min-height:64px;resize:vertical;font-family:var(--font);box-sizing:border-box;}
.aicq-ta:focus{outline:none;border-color:var(--border-h);}
.aicq-foot{display:flex;gap:10px;justify-content:flex-end;align-items:center;padding:14px 22px;border-top:1px solid var(--border);background:var(--bg-side);flex:none;}
.aicq-foot .hint{margin-right:auto;color:var(--text-3);font-size:12px;}

/* ===== Ask-first UI polish v2: colorful toggle label + dim unselected chips ===== */
.ai-lbl-clarify{opacity:1 !important;}
.ai-lbl-clarify span{color:var(--text-2);font-weight:500;}
.ai-lbl-clarify:hover span{color:#fff;}
.aicq-chip.dim{filter:brightness(.7);}
.aicq-chip.dim:hover{filter:none;}
/* ---- AI Terminal（本机 Claude Code 桥接，右侧停靠面板；壳复用 .ai-head/.ai-body/.ai-inputbar）---- */
#aiTermPanel{position:fixed;top:var(--subbar);right:0;bottom:0;width:400px;max-width:92vw;z-index:950;
  background:var(--bg-side);border-left:1px solid var(--border);box-shadow:-12px 0 40px rgba(0,0,0,.4);
  display:none;flex-direction:column;overflow:hidden;}
#aiTermPanel.open{display:flex;}
#aiTermClose{margin-left:auto;background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-3);width:28px;height:28px;border-radius:6px;cursor:pointer;flex:none;font-size:14px;}
#aiTermClose:hover{color:#fff;background:rgba(255,255,255,.09);}
#aiTermPanel .ai-subrow{display:flex;flex-wrap:wrap;align-items:center;gap:4px;}
/* 控件区：整块换到状态行下方并纵向排列——每个 checkbox / 按钮各占一行（原来挤在一行会溢出） */
.aiterm-sub-r{flex-basis:100%;margin-left:0;margin-top:6px;display:flex;flex-direction:column;gap:6px;align-items:flex-start;}
.aiterm-sub-r label{cursor:pointer;user-select:none;white-space:nowrap;}
.aiterm-sub-r input[type=checkbox]{vertical-align:-2px;margin:0 3px 0 0;accent-color:#fff;}
.aiterm-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#666;margin-right:4px;flex:none;}
.aiterm-dot.on{background:var(--ok);box-shadow:0 0 6px var(--ok);}
.aiterm-dot.off{background:var(--danger);}
.aiterm-chip{font-size:11px;color:var(--text-3);background:var(--bg-card2);border:1px solid var(--border);border-radius:6px;padding:3px 8px;align-self:flex-start;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.aiterm-chip.err{color:#ffb3ae;border-color:rgba(248,81,73,.4);}
.aiterm-note{color:var(--text-3);font-size:11px;text-align:center;padding:2px 8px;}
.aiterm-msg{max-width:92%;padding:8px 11px;border-radius:10px;font-size:12.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word;}
.aiterm-msg.user{align-self:flex-end;background:#1d2733;color:#dbe9ff;border:1px solid rgba(120,170,255,.25);}
.aiterm-msg.ai{align-self:flex-start;background:var(--bg-card2);color:var(--text-2);border:1px solid var(--border);}
.aiterm-msg pre{background:#0c0c0c;border:1px solid var(--border);border-radius:6px;padding:8px;overflow-x:auto;font-size:11px;line-height:1.45;margin:6px 0 2px;white-space:pre;font-family:var(--mono);}
.aiterm-file{display:flex;align-items:center;gap:8px;background:var(--bg-card2);border:1px solid var(--border);border-radius:var(--r-sm);padding:7px 10px;font-size:12px;color:var(--text-2);align-self:stretch;}
.aiterm-file button{margin-left:auto;flex:none;}
.aiterm-paircard{background:var(--bg-card2);border:1px solid var(--border);border-radius:10px;padding:14px;font-size:12px;color:var(--text-2);line-height:1.7;}
.aiterm-cmdbox{display:block;background:#0c0c0c;border:1px solid var(--border);border-radius:6px;padding:8px;font-size:11px;line-height:1.5;word-break:break-all;white-space:pre-wrap;user-select:all;margin:8px 0;color:#9be8a8;font-family:var(--mono);}
/* ---- AI Terminal v4：附图上传/粘贴预览 + 📎引用弹层 ---- */
.aiterm-btncol{display:flex;flex-direction:column;gap:5px;flex:none;align-items:stretch;}
.aiterm-btncol>button{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-3);border-radius:6px;padding:5px 10px;cursor:pointer;line-height:1;display:flex;align-items:center;justify-content:center;}
.aiterm-btncol>button:hover{color:#fff;border-color:var(--border-h);background:rgba(255,255,255,.09);}
.aiterm-attachrow{display:flex;flex-wrap:wrap;gap:6px;padding:8px 14px 0;flex:none;align-items:center;}
.aiterm-thumb{position:relative;width:88px;height:88px;flex:none;border:1px solid var(--border);border-radius:6px;overflow:hidden;background:#0c0c0c;}
.aiterm-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.aiterm-thumb button{position:absolute;top:0;right:0;width:15px;height:15px;line-height:13px;font-size:11px;text-align:center;padding:0;border:none;border-radius:0 0 0 6px;background:rgba(0,0,0,.65);color:#fff;cursor:pointer;}
.aiterm-citechip{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--text-2);background:var(--bg-card2);border:1px solid var(--border);border-radius:20px;padding:3px 6px 3px 8px;max-width:190px;}
.aiterm-citechip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.aiterm-citechip button{border:none;background:none;color:var(--text-3);cursor:pointer;font-size:12px;padding:0 2px;}
.aiterm-citechip button:hover{color:#fff;}
.aiterm-pop{position:absolute;left:10px;right:10px;bottom:120px;z-index:5;background:var(--bg-card);border:1px solid var(--border-h);border-radius:10px;box-shadow:0 -8px 30px rgba(0,0,0,.5);display:flex;flex-direction:column;max-height:340px;}
.aiterm-pop-head{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;font-size:12px;color:#fff;border-bottom:1px solid var(--border);flex:none;font-weight:600;}
.aiterm-pop-head button{background:none;border:none;color:var(--text-3);cursor:pointer;font-size:13px;}
.aiterm-pop-head button:hover{color:#fff;}
.aiterm-pop-body{flex:1;min-height:0;overflow-y:auto;padding:6px 8px;}
.aiterm-pop-sec{font-size:11px;color:var(--text-3);text-transform:uppercase;letter-spacing:.08em;padding:8px 6px 3px;font-weight:600;}
.aiterm-pop-row{display:flex;align-items:center;gap:7px;padding:4px 6px;border-radius:6px;cursor:pointer;font-size:12px;color:var(--text-2);}
.aiterm-pop-row:hover{background:rgba(255,255,255,.05);color:#fff;}
.aiterm-pop-row input{accent-color:var(--blue);flex:none;margin:0;}
.aiterm-pop-row .t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.aiterm-pop-row .s{margin-left:auto;color:var(--text-3);font-size:10.5px;flex:none;max-width:42%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.aiterm-pop-foot{display:flex;gap:8px;justify-content:flex-end;padding:8px 12px;border-top:1px solid var(--line);flex:none;}
/* ---- AI Terminal v5：引用全屏网格弹窗（对标 Compress Models）---- */
.aiterm-cite-ov{position:fixed;inset:0;z-index:100001;background:rgba(0,0,0,.62);display:flex;align-items:center;justify-content:center;padding:3vh 3vw;}
.aiterm-cite-modal{width:min(1180px,94vw);height:min(88vh,900px);background:var(--bg-card);border:1px solid var(--border-h);border-radius:var(--r);box-shadow:0 24px 70px rgba(0,0,0,.6);display:flex;flex-direction:column;overflow:hidden;}
.aiterm-cite-head{display:flex;align-items:center;gap:14px;padding:14px 18px;border-bottom:1px solid var(--border);flex:none;flex-wrap:wrap;}
.aiterm-cite-head>b{font-size:15px;color:#fff;white-space:nowrap;}
.aiterm-cite-tabs{display:flex;gap:6px;flex-wrap:wrap;flex:1;min-width:0;}
.aiterm-cite-tab{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-2);border-radius:20px;padding:4px 12px;font-size:12px;cursor:pointer;white-space:nowrap;}
.aiterm-cite-tab:hover{color:#fff;}
.aiterm-cite-tab.on{background:var(--bg-active);color:#fff;border-color:var(--border-h);}
.aiterm-cite-hacts{display:flex;gap:8px;flex:none;}
.aiterm-cite-hacts button{background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-2);border-radius:var(--r-sm);padding:5px 11px;font-size:12px;cursor:pointer;}
.aiterm-cite-hacts button:hover{color:#fff;border-color:var(--border-h);background:rgba(255,255,255,.09);}
.aiterm-cite-grid{flex:1;min-height:0;overflow-y:auto;padding:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));grid-auto-rows:max-content;gap:14px;align-content:start;}
.aiterm-cite-empty{grid-column:1/-1;color:var(--text-3);font-size:13px;text-align:center;padding:60px 8px;}
.aiterm-cite-card{border:2px solid transparent;border-radius:10px;background:var(--bg-card2);cursor:pointer;overflow:hidden;transition:border-color .12s;}
.aiterm-cite-card:hover{border-color:var(--border-h);}
.aiterm-cite-card.on{border-color:var(--blue);}
.cite-thumb{position:relative;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;background:#fff;overflow:hidden;}
.cite-thumb img{width:100%;height:100%;object-fit:contain;display:block;}
.cite-thumb .cite-emoji{font-size:52px;line-height:1;}
.cite-check{position:absolute;top:8px;right:8px;width:22px;height:22px;border-radius:50%;background:rgba(20,22,26,.5);border:2px solid rgba(255,255,255,.6);color:transparent;font-size:13px;line-height:19px;text-align:center;}
.aiterm-cite-card.on .cite-check{background:var(--blue);border-color:var(--blue);color:#fff;}
.cite-name{padding:8px 10px 0;font-size:12.5px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.cite-sub{padding:2px 10px 10px;font-size:10.5px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.aiterm-cite-foot{display:flex;align-items:center;gap:12px;padding:12px 18px;border-top:1px solid var(--border);flex:none;}
.aiterm-cite-foot #citeSel{font-size:12px;color:var(--text-3);margin-right:auto;}

.aiterm-imgrow{display:flex;gap:6px;flex-wrap:wrap;align-self:flex-start;max-width:100%;}
.aiterm-imgrow img{width:88px;height:88px;object-fit:cover;border-radius:var(--r-sm);border:1px solid var(--border);display:block;cursor:zoom-in;}
.aiterm-lightbox{position:fixed;inset:0;z-index:99999;background:rgba(0,0,0,.82);display:flex;align-items:center;justify-content:center;cursor:zoom-out;}
.aiterm-lightbox img{max-width:92vw;max-height:92vh;border-radius:10px;box-shadow:0 8px 40px rgba(0,0,0,.6);}

/* 打字机流式光标 (2026-07-12) */
.aiterm-caret{display:inline-block;width:7px;height:13px;margin-left:2px;background:#9fd0ff;vertical-align:-2px;animation:aitermBlink .8s steps(1) infinite;}
@keyframes aitermBlink{50%{opacity:0}}

/* ── 顶栏 credits 徽标 + 充值弹窗（2026-07-17，参照 NewEngine）── */
.tb-credits{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:var(--text-2);background:rgba(255,255,255,.05);border:1px solid var(--border);border-radius:var(--r-sm);padding:6px 10px;cursor:pointer;white-space:nowrap;margin-left:2px;transition:color .2s,border-color .2s;}
.tb-credits.warn{color:#eab308;border-color:rgba(234,179,8,.45);}
.tb-credits.low{color:#ef4444;border-color:rgba(239,68,68,.5);}
.tu-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);backdrop-filter:blur(2px);display:none;align-items:center;justify-content:center;z-index:1300;padding:24px;}
.tu-overlay.open{display:flex;}
.tu-window{width:min(560px,94vw);max-height:88vh;overflow:auto;background:var(--bg-card);border:1px solid var(--border-h);border-radius:var(--r);box-shadow:0 24px 70px rgba(0,0,0,.6);}
.tu-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border);}
.tu-head b{font-size:15px;font-weight:600;color:#fff;}
.tu-head .tu-x{background:none;border:0;color:var(--text-3);font-size:17px;cursor:pointer;line-height:1;padding:0 4px;}
.tu-body{padding:18px;}
.tu-sub{font-size:12.5px;color:var(--text-3);margin-bottom:14px;}
.tu-tiers{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:12px;}
.tu-tier{display:flex;flex-direction:column;align-items:flex-start;gap:4px;background:rgba(255,255,255,.03);border:1px solid var(--border);border-radius:var(--r);padding:14px 16px;color:var(--text);cursor:pointer;font-family:var(--font);transition:border-color .15s,transform .15s;}
.tu-tier:hover{border-color:var(--border-h);transform:translateY(-2px);}
.tu-tier b{font-size:20px;font-weight:700;}
.tu-tier span{font-size:12px;color:var(--text-3);}
.tu-tier[disabled]{opacity:.5;pointer-events:none;}
.tu-custom{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;}
.tu-field{display:flex;align-items:center;gap:6px;flex:1 1 180px;min-width:160px;background:rgba(255,255,255,.03);border:1px solid var(--border);border-radius:10px;padding:9px 12px;}
.tu-field:focus-within{border-color:var(--border-h);}
.tu-field .tu-pound{font-weight:700;font-size:16px;color:var(--text-3);}
.tu-field input{flex:1;min-width:0;background:transparent;border:none;outline:none;color:var(--text);font-size:14px;font-family:var(--font);}
.tu-field input::-webkit-outer-spin-button,.tu-field input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
.tu-hint{font-size:12px;color:var(--text-3);}
.tu-note{font-size:11.5px;color:var(--text-3);margin-top:14px;line-height:1.5;}
.tu-cnbtn{display:block;width:100%;margin-top:16px;background:#1aad19;border:none;border-radius:var(--r);color:#fff;font-size:15px;font-weight:700;padding:13px;cursor:pointer;font-family:var(--font);transition:filter .15s;}
.tu-cnbtn:hover{filter:brightness(1.08);}
.tu-cnnote{font-size:11.5px;color:var(--text-3);margin-top:8px;text-align:center;}

/* ── 录制 & 截图（2026-07-17）── */
.tb-btn.recording{background:#e5484d !important;border-color:#e5484d !important;color:#fff !important;animation:recPulse 1.4s ease-in-out infinite;}
@keyframes recPulse{50%{box-shadow:0 0 0 3px rgba(229,72,77,.35);}}
.rec-dot{color:#e5484d;font-size:10px;vertical-align:1px;}
.tb-btn.recording .rec-dot,.rec-start.on .rec-dot{color:#fff;}
.rec-panel{position:fixed;top:calc(var(--subbar) + 2px);right:8px;width:344px;max-height:74vh;z-index:1250;background:var(--bg-card);border:1px solid var(--border-h);border-radius:var(--r);box-shadow:0 18px 50px rgba(0,0,0,.55);display:none;flex-direction:column;overflow:hidden;}
.rec-panel.open{display:flex;}
.rec-head{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;border-bottom:1px solid var(--border);}
.rec-head b{font-size:13px;color:#fff;}
.rec-x{background:none;border:0;color:var(--text-3);font-size:16px;cursor:pointer;line-height:1;padding:0 2px;}
.rec-actions{display:flex;gap:8px;padding:12px 14px 4px;}
.rec-actions button{flex:1;background:rgba(255,255,255,.04);border:1px solid var(--border);color:var(--text-2);border-radius:var(--r-sm);padding:9px 6px;font-size:12.5px;cursor:pointer;font-family:var(--font);transition:border-color .15s,background .15s,color .15s;}
.rec-actions button:hover{border-color:var(--border-h);background:rgba(255,255,255,.09);color:#fff;}
.rec-start.on{background:#e5484d;border-color:#e5484d;color:#fff;}
.rec-hint{font-size:11px;color:var(--text-3);padding:6px 14px 10px;line-height:1.55;}
.rec-hint b{color:var(--text-2);}
.rec-list{flex:1;min-height:60px;overflow:auto;padding:6px 10px 12px;display:flex;flex-direction:column;gap:6px;}
.rec-empty{color:var(--text-3);text-align:center;font-size:12px;padding:26px 0;}
.rec-item{display:flex;align-items:center;gap:7px;background:var(--bg-card2);border:1px solid var(--border);border-radius:var(--r-sm);padding:6px 8px;}
.rec-ico{font-size:15px;cursor:pointer;flex-shrink:0;line-height:1;}
.rec-name{flex:1;min-width:0;background:transparent;border:1px solid transparent;border-radius:5px;color:var(--text);font-size:12px;padding:3px 5px;font-family:var(--font);}
.rec-name:hover{border-color:var(--border);}
.rec-name:focus{outline:none;border-color:var(--border-h);background:#0c0c0c;}
.rec-size{font-size:10.5px;color:var(--text-3);flex-shrink:0;font-variant-numeric:tabular-nums;}
.rec-dl,.rec-del{background:none;border:0;color:var(--text-3);cursor:pointer;font-size:13px;padding:2px 3px;flex-shrink:0;border-radius:4px;line-height:1;}
.rec-dl:hover{color:var(--ok);}
.rec-del:hover{color:var(--danger);}
.rec-countdown{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;font-size:clamp(90px,22vw,240px);font-weight:800;color:#fff;text-shadow:0 6px 30px rgba(0,0,0,.6);pointer-events:none;font-family:var(--font,inherit);}
@keyframes recCd{0%{transform:scale(.4);opacity:0;}30%{transform:scale(1);opacity:1;}100%{transform:scale(1.25);opacity:0;}}
.rec-flash{position:fixed;inset:0;z-index:100001;background:#fff;pointer-events:none;animation:recFlash .4s ease;}
@keyframes recFlash{0%{opacity:.85;}100%{opacity:0;}}
.rec-toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);z-index:100002;background:var(--bg-card);border:1px solid var(--border-h);color:var(--text);padding:9px 16px;border-radius:var(--r-sm);font-size:12.5px;box-shadow:0 8px 30px rgba(0,0,0,.5);}

/* 2026-07-29 #7: AI 聊天/差异/报错区允许选中复制(全局 user-select:none 的例外) */
.ai-body,.ai-body .msg,.msg,.diff-wrap,.smoke-panel,.aiterm-body,.am-body,.as-body,.ai-modal pre,.ai-modal code{user-select:text;-webkit-user-select:text;}

/* AI Memory rail 按钮（2026-08-06）：与其它 AI 面板同一套白色图标配色。
   单列在这里而不是塞进上面那串长选择器，改动最小、也不会碰到已有规则。 */
.rail-btn.aimemory-railbtn{color:#fff;}
.rail-btn.aimemory-railbtn:hover{background:rgba(255,255,255,.06);color:#fff;}
.rail-btn.aimemory-railbtn.active{background:var(--bg-active);color:#fff;box-shadow:none;}

/* ═══════════════════════════════════════════════════════════════════════
   GLASS SKIN（2026-08-24）——「EngineUI更新_短标签/index.html」静态快照的风格移植。
   整块追加在文件末尾：同选择器后写覆盖前面，回退只需删掉本块（或恢复 .bak.preglass-*）。
   核心三件事：
     ① 令牌换成半透明玻璃（--glass / --bg-card / --bg-side …）；
     ② 布局改成「视口铺满 + 面板浮在其上」——不这么改，半透明面板后面只有黑体背景，玻璃就没意义；
     ③ 侧栏加宽到 78px 配短标签（AI 前缀在 main.js 里去掉）。
   ═══════════════════════════════════════════════════════════════════════ */
:root{
  --bg-card:rgba(0,0,0,.62); --bg-card2:rgba(0,0,0,.50); --bg-side:rgba(0,0,0,.58); --bg-active:rgba(255,255,255,.10);
  --ui-accent:#4c8bf5;
  --glass-rgb:0,0,0;
  --glass-a:.70;
  --glass-strong-a:.78;
  --glass:rgba(var(--glass-rgb),var(--glass-a));
  --glass-strong:rgba(var(--glass-rgb),var(--glass-strong-a));
  --glass-blur:8px;
  --select-wash:linear-gradient(105deg,
      rgba(92,70,140,.10),
      rgba(70,110,150,.09),
      rgba(130,80,120,.08),
      rgba(70,120,110,.07));
  --select-wash-strong:linear-gradient(105deg,
      rgba(92,70,140,.18),
      rgba(70,110,150,.16),
      rgba(130,80,120,.14),
      rgba(70,120,110,.12));
  --select-fill:linear-gradient(105deg,
      rgba(78,58,120,.09),
      rgba(58,95,130,.08),
      rgba(110,65,105,.07),
      rgba(55,100,95,.06));
  --select-border:linear-gradient(100deg,
      rgba(220,220,235,.28),
      rgba(170,145,230,.52),
      rgba(100,165,230,.56),
      rgba(155,125,220,.48),
      rgba(220,220,235,.28));
  --text-2:#ffffff; --text-3:rgba(255,255,255,.92);
  --rail:78px;
  --blue:var(--ui-accent);
  --panel:var(--glass); --panel2:rgba(var(--glass-rgb),.75); --line:rgba(255,255,255,.10);
  --dim:rgba(255,255,255,.88);
  --right-w:300px;   /* 属性栏宽度：拖右分隔条实时改它（原来写 #right 内联 style，浮层布局下分隔条要读它定位）*/
}

/* ---- toolbar：浮在视口之上的一条玻璃 ---- */
#toolbar{background:var(--glass-strong);border-bottom:1px solid rgba(255,255,255,.08);
  backdrop-filter:none;-webkit-backdrop-filter:none;
  position:absolute;top:0;left:0;right:0;z-index:30;}
.tb-btn{background:rgba(255,255,255,.015);border:1px solid rgba(255,255,255,.06);color:#fff;}
.tb-btn.primary{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.28);color:#fff;font-weight:600;}
.tb-btn.primary:hover{background:rgba(255,255,255,.16);color:#fff;}
/* Off 态保持 Download 同级的白，不用 opacity 压灰 */
.tb-btn.toggled-off{opacity:1;background:transparent;}

/* ---- layout：视口铺满整窗，侧栏/属性栏绝对定位浮在上面 ---- */
#main{position:absolute;inset:0;display:block;isolation:isolate;}
/* Viewport.js 会给容器打内联 position:relative —— 内联赢样式表，这里必须 !important */
#viewport{position:absolute !important;inset:0;z-index:1;min-width:0;background:#000;}
#left,#right,#addrail{
  background:var(--glass);
  backdrop-filter:none;-webkit-backdrop-filter:none;
  display:flex;flex-direction:column;
  z-index:10;
}
#left{position:absolute;left:var(--rail);top:var(--subbar);bottom:0;width:var(--tree-w,248px);
  border-right:none;box-shadow:none;}
#right{position:absolute;right:0;top:var(--subbar);bottom:0;width:var(--right-w,300px);
  border-left:none;box-shadow:none;}
/* 分隔条改成绝对定位跟着面板边缘走（快照里是直接 display:none；这里保留拖拽功能）*/
.resizer{position:absolute;top:var(--subbar);bottom:0;width:6px;z-index:25;}
.resizer.rz-left{left:calc(var(--rail) + var(--tree-w,248px));}
.resizer.rz-right{right:var(--right-w,300px);}

/* ---- rail：78px 宽，配短标签 ---- */
#addrail{position:absolute;left:0;top:var(--subbar);bottom:0;width:var(--rail);min-width:var(--rail);flex:none;
  border-right:1px solid rgba(255,255,255,.08);align-items:center;
  padding:10px 0;gap:2px;overflow-y:auto;overflow-x:visible;z-index:20;
  background:var(--glass-strong);box-shadow:none;}
.rail-btn{width:70px;color:#fff;padding:6px 3px;overflow:visible;outline:none;user-select:none;-webkit-user-select:none;}
.rail-btn:focus,.rail-btn:focus-visible{outline:none;}
.rail-ico{pointer-events:none;}
.rail-lbl{font-size:9px;line-height:1.15;letter-spacing:0;
  width:auto;max-width:none;overflow:visible;text-overflow:clip;transform:none;font-stretch:normal;display:block;
  outline:none;border:none;box-shadow:none;background:none;user-select:none;-webkit-user-select:none;pointer-events:none;}
.rail-btn.ai-railbtn{border-top:1px solid rgba(255,255,255,.05);margin-top:4px;padding-top:10px;}

/* ---- 挂在 #main 上的左侧覆盖面板：#main 现在从 top:0 起算，要自己让开工具条 ---- */
.addflyout{top:var(--subbar);background:var(--glass-strong);border-right:1px solid rgba(255,255,255,.08);
  box-shadow:8px 0 28px rgba(0,0,0,.28);backdrop-filter:none;-webkit-backdrop-filter:none;}

/* ---- 树 / 属性栏 ---- */
.tree-icon{color:#fff;}
.add-name{user-select:none;-webkit-user-select:none;outline:none;border:none;box-shadow:none;background:none;}
.ui-number{background:rgba(0,0,0,.35);}
.ui-text{background:rgba(0,0,0,.35);}

/* ---- AI 面板 ---- */
#aiPanel{left:auto;background:rgba(var(--glass-rgb),var(--glass-strong-a));border-left:none;box-shadow:none;}
.ai-head{justify-content:space-between;}
.ai-title{min-width:0;}
.ai-modelrow{overflow:visible;}
.ai-inputbar .tb-btn.primary{border:1px solid rgba(255,255,255,.55);background:transparent;color:#fff;}
.ai-inputbar .tb-btn.primary:hover{background:rgba(255,255,255,.08);color:#fff;}
#aiTermPanel{left:auto;background:rgba(var(--glass-rgb),var(--glass-strong-a));}
.aiterm-btncol > button{color:#fff;}
.aiterm-btncol > #aiTermSend{border:1px solid rgba(255,255,255,.55);background:transparent;color:#fff;}
.aiterm-btncol > #aiTermSend:hover{background:rgba(255,255,255,.08);color:#fff;border-color:rgba(255,255,255,.7);}

/* ---- 弹层 / AI 3D ---- */
#pmOverlay{background:rgba(0,0,0,.40);backdrop-filter:blur(4px) saturate(1.05);}
.t3d-res-btn:hover,.t3d-res-btn.active,.t3d-res-btn.selected{border-color:transparent;}
.t3d-res-btn.active,.t3d-res-btn.selected{background:transparent;}
.t3d-hint{color:rgba(255,255,255,.88);}
.t3d-noprev small{color:#ffffff;}

/* 滑出面板压住常驻面板时让位（配 main.js hideCoveredPanels）：
   visibility 而非 display —— #left 的 rect 要留着，左分隔条拖拽读它算宽度。 */
body.left-panel-open  #left { visibility:hidden; }
body.right-panel-open #right{ visibility:hidden; }
body.right-panel-open .resizer.rz-right{ display:none; }

/* ═══════════════════════════════════════════════════════════════════════
   彩色主题（2026-08-26）
   配色内核抄自 ~/Downloads/EngineUI更新/index.html 快照里那几层 ══ 主题 CSS：
     · --panel-fill-grad  面板/弹窗渐变
     · --select-fill + --select-border  选中·悬停的渐变描边环（树行、rail 按钮）
     · --title-sheen  面板标题与 MANIFEST logo 的虹彩流光
   默认状态（<html> 上没有 data-ui-theme）＝原来的纯黑玻璃，一个像素都不变；
   选了主题才挂属性 → 下面这组消费规则才生效，想回纯黑就是删掉属性。
   动态主题额外挂 data-ui-anim，让渐变背景缓慢流动。
   切换器：js/ui/ThemeSwitch.js（工具栏「?」右边那颗色环按钮）。
   加主题：补一段 :root[data-ui-theme="x"]，再往 ThemeSwitch 的 THEMES 加一行。
   ═══════════════════════════════════════════════════════════════════════ */
@keyframes iri-shift{0%{background-position:0% center;}100%{background-position:200% center;}}
/* 横向来回扫过放大的渐变 → 面板颜色缓慢改变。注意下面的面板规则必须用 background-image/
   background-color 分开写，不能用 background 简写：带 !important 的简写会把 background-position
   一并钉成 0% 0% 且优先级高于动画（!important 声明压过 animation），渐变就纹丝不动。 */
@keyframes panel-flow{0%{background-position:0% 50%;}50%{background-position:100% 50%;}100%{background-position:0% 50%;}}

/* 覆盖面 = 侧栏 + 所有内部窗口（右侧滑出面板 / 弹窗 / 两个 UI 编辑器）。
   用 :is() 把长清单写一次，背景与动画两条规则共用。 */
html[data-ui-theme] :is(#left,#right,#assetPanel,.addflyout){
  background-image:var(--panel-fill-grad) !important;
  background-color:rgba(var(--glass-rgb),var(--glass-a)) !important;
  background-repeat:no-repeat !important;
  border:none !important; box-shadow:none !important;
}
html[data-ui-theme] :is(#aiPanel,#ai3dPanel,#aiTermPanel,#aiProjectPanel,#aiMasterPanel,
  #aiMemoryPanel,#aiStoryPanel,#codexByokPanel,#dshByokPanel,.axPanel,#motionPanel,
  .ai3d-modal,#aiSceneCard,.pm-modal,.sh-modal,.share-window,.test-window,.ui2d-box,.uipanel-box){
  background-image:var(--panel-fill-grad) !important;
  background-color:rgba(var(--glass-rgb),var(--glass-strong-a)) !important;
  background-repeat:no-repeat !important;
  backdrop-filter:blur(var(--glass-blur,8px)) saturate(1.05);
  -webkit-backdrop-filter:blur(var(--glass-blur,8px)) saturate(1.05);
}
/* 这些面板内部还有一条不透明的头/脚色带，压在渐变上会切成一块死板的深色 → 让它透出来 */
html[data-ui-theme] :is(#motionPanel .mo-head,.pm-head,.pm-foot,.share-bar,.test-bar){
  background:transparent !important;
}
/* 动态主题：两层背景里只有渐变那层参与流动，底色层不动 */
html[data-ui-anim] :is(#left,#right,#assetPanel,.addflyout,#aiPanel,#ai3dPanel,#aiTermPanel,
  #aiProjectPanel,#aiMasterPanel,#aiMemoryPanel,#aiStoryPanel,#codexByokPanel,#dshByokPanel,
  .axPanel,#motionPanel,.ai3d-modal,#aiSceneCard,.pm-modal,.sh-modal,.share-window,.test-window,
  .ui2d-box,.uipanel-box){
  background-size:320% 320% !important;
  animation:panel-flow 14s ease-in-out infinite;
}
/* 选中/悬停：内层柔和填充 + 外层渐变描边（padding-box / border-box 两层背景切出「环」）*/
html[data-ui-theme] :is(.tree-row:hover,.tree-row.selected,#addrail .rail-btn:hover,#addrail .rail-btn.active){
  background:var(--select-fill) padding-box, var(--select-border) border-box !important;
  background-origin:border-box !important;
  background-clip:padding-box, border-box !important;
  border:1px solid transparent !important;
  box-shadow:none !important;
}
html[data-ui-theme] :is(#left .panel-title,#right .panel-title,#toolbar .logo){
  background:var(--title-sheen) !important;
  background-size:200% auto !important;
  -webkit-background-clip:text !important; background-clip:text !important;
  color:transparent !important; -webkit-text-fill-color:transparent !important;
  animation:iri-shift 10s linear infinite;
}
@media(prefers-reduced-motion:reduce){
  html[data-ui-theme] :is(#left .panel-title,#right .panel-title,#toolbar .logo),
  html[data-ui-anim] :is(#left,#right,#aiPanel,.ai3d-modal,.pm-modal){animation:none;}
  .ai-flow-step[aria-current="step"] .ai-flow-mark{animation:none;}
}

/* —— 各主题只改这 5 个令牌 —— （--blue 已指向 --ui-accent，分隔条/滑杆/拖放线跟着变） */
/* MΛNIFEST 紫蓝：与 EngineUI更新/index.html 逐值一致 */
:root[data-ui-theme="manifest"]{
  --panel-fill-grad:linear-gradient(180deg,rgba(140,200,255,.22),rgba(70,140,220,.14),rgba(30,80,170,.16),rgba(10,40,120,.22));
  --select-fill:linear-gradient(105deg,rgba(78,58,120,.09),rgba(58,95,130,.08),rgba(110,65,105,.07),rgba(55,100,95,.06));
  --select-border:linear-gradient(100deg,rgba(220,220,235,.28),rgba(170,145,230,.52),rgba(100,165,230,.56),rgba(155,125,220,.48),rgba(220,220,235,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#c9b6ff 25%,#9ad4ff 50%,#ffb8f0 75%,#fff 100%);
  --ui-accent:#8b7bd8;
}
:root[data-ui-theme="purple"]{
  --panel-fill-grad:linear-gradient(180deg,rgba(190,150,255,.22),rgba(140,95,225,.15),rgba(95,45,180,.17),rgba(45,15,105,.24));
  --select-fill:linear-gradient(105deg,rgba(120,70,180,.12),rgba(90,60,160,.10),rgba(150,80,190,.09),rgba(80,50,140,.08));
  --select-border:linear-gradient(100deg,rgba(230,220,255,.28),rgba(190,140,255,.56),rgba(150,110,240,.58),rgba(200,150,255,.48),rgba(230,220,255,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#d9c2ff 30%,#b78dff 55%,#f0c8ff 80%,#fff 100%);
  --ui-accent:#9b6ef3;
}
:root[data-ui-theme="blue"]{
  --panel-fill-grad:linear-gradient(180deg,rgba(150,210,255,.22),rgba(70,150,235,.15),rgba(25,90,190,.17),rgba(8,40,110,.24));
  --select-fill:linear-gradient(105deg,rgba(50,110,190,.12),rgba(40,130,200,.10),rgba(60,90,170,.09),rgba(35,100,160,.08));
  --select-border:linear-gradient(100deg,rgba(220,235,255,.28),rgba(120,190,255,.56),rgba(70,150,245,.58),rgba(140,200,255,.48),rgba(220,235,255,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#bfe0ff 30%,#7ec4ff 55%,#d6f0ff 80%,#fff 100%);
  --ui-accent:#4c8bf5;
}
:root[data-ui-theme="teal"]{
  --panel-fill-grad:linear-gradient(180deg,rgba(150,255,235,.20),rgba(60,200,180,.14),rgba(20,130,130,.16),rgba(6,55,65,.24));
  --select-fill:linear-gradient(105deg,rgba(40,140,130,.12),rgba(40,160,150,.10),rgba(60,150,120,.09),rgba(30,120,120,.08));
  --select-border:linear-gradient(100deg,rgba(220,255,250,.28),rgba(110,240,215,.54),rgba(60,200,190,.58),rgba(130,245,225,.46),rgba(220,255,250,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#bff5e8 30%,#6fe0cd 55%,#d8fff6 80%,#fff 100%);
  --ui-accent:#2fc7ac;
}
:root[data-ui-theme="amber"]{
  --panel-fill-grad:linear-gradient(180deg,rgba(255,220,150,.20),rgba(235,165,60,.14),rgba(170,100,20,.16),rgba(70,35,5,.24));
  --select-fill:linear-gradient(105deg,rgba(170,110,40,.12),rgba(180,130,50,.10),rgba(160,90,45,.09),rgba(140,95,30,.08));
  --select-border:linear-gradient(100deg,rgba(255,245,220,.28),rgba(255,205,110,.54),rgba(245,165,60,.58),rgba(255,215,140,.46),rgba(255,245,220,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#ffe4b0 30%,#ffc061 55%,#fff0cf 80%,#fff 100%);
  --ui-accent:#e8a33c;
}
:root[data-ui-theme="rose"]{
  --panel-fill-grad:linear-gradient(180deg,rgba(255,175,215,.20),rgba(230,90,160,.14),rgba(160,30,100,.16),rgba(70,8,45,.24));
  --select-fill:linear-gradient(105deg,rgba(160,50,110,.12),rgba(175,60,120,.10),rgba(150,55,130,.09),rgba(130,40,95,.08));
  --select-border:linear-gradient(100deg,rgba(255,225,240,.28),rgba(255,140,200,.54),rgba(240,80,160,.58),rgba(255,160,210,.46),rgba(255,225,240,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#ffc7e2 30%,#ff8ac4 55%,#ffd9ec 80%,#fff 100%);
  --ui-accent:#ef5da8;
}

/* —— 动态渐变（挂 data-ui-anim，渐变整体缓慢流动；135° + 多停靠点才看得出流动）—— */
:root[data-ui-theme="aurora"]{
  --panel-fill-grad:linear-gradient(135deg,rgba(120,255,215,.30),rgba(60,190,210,.26),rgba(90,110,230,.30),rgba(150,90,220,.30),rgba(120,255,215,.30));
  --select-fill:linear-gradient(105deg,rgba(40,150,140,.12),rgba(50,120,180,.10),rgba(100,80,190,.09),rgba(40,130,130,.08));
  --select-border:linear-gradient(100deg,rgba(225,255,250,.28),rgba(110,245,210,.54),rgba(90,160,240,.58),rgba(170,130,245,.48),rgba(225,255,250,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#a8ffe4 28%,#7fc4ff 55%,#c9a8ff 80%,#fff 100%);
  --ui-accent:#3fd9c0;
}
:root[data-ui-theme="sunset"]{
  --panel-fill-grad:linear-gradient(135deg,rgba(255,205,130,.30),rgba(255,130,110,.28),rgba(230,80,150,.28),rgba(140,55,175,.30),rgba(255,205,130,.30));
  --select-fill:linear-gradient(105deg,rgba(180,110,50,.12),rgba(190,75,90,.10),rgba(165,55,120,.09),rgba(110,45,140,.08));
  --select-border:linear-gradient(100deg,rgba(255,240,220,.28),rgba(255,175,110,.54),rgba(255,110,140,.58),rgba(200,120,240,.48),rgba(255,240,220,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#ffd7a8 28%,#ff9aa8 55%,#d8a8ff 80%,#fff 100%);
  --ui-accent:#ff7e6b;
}
:root[data-ui-theme="neon"]{
  --panel-fill-grad:linear-gradient(135deg,rgba(255,90,220,.30),rgba(120,80,255,.28),rgba(50,170,255,.28),rgba(60,255,220,.26),rgba(255,90,220,.30));
  --select-fill:linear-gradient(105deg,rgba(180,50,170,.12),rgba(90,60,200,.11),rgba(40,120,190,.10),rgba(40,160,150,.08));
  --select-border:linear-gradient(100deg,rgba(255,225,255,.28),rgba(255,105,235,.56),rgba(110,140,255,.58),rgba(90,240,225,.50),rgba(255,225,255,.28));
  --title-sheen:linear-gradient(90deg,#fff 0%,#ff9ae8 26%,#9ab0ff 52%,#7cf6e2 78%,#fff 100%);
  --ui-accent:#c45cff;
}
/* —— 黑白灰渐变（无色相；grey 静态，silver 动态流光）—— */
:root[data-ui-theme="grey"]{
  --panel-fill-grad:linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,.07),rgba(255,255,255,.03),rgba(0,0,0,.18));
  --select-fill:linear-gradient(105deg,rgba(255,255,255,.11),rgba(255,255,255,.07),rgba(255,255,255,.09),rgba(255,255,255,.06));
  --select-border:linear-gradient(100deg,rgba(255,255,255,.34),rgba(255,255,255,.16),rgba(255,255,255,.44),rgba(255,255,255,.16),rgba(255,255,255,.34));
  --title-sheen:linear-gradient(90deg,#fff 0%,#c8c8c8 28%,#8f8f8f 52%,#e2e2e2 78%,#fff 100%);
  --ui-accent:#c9c9c9;
}
:root[data-ui-theme="silver"]{
  --panel-fill-grad:linear-gradient(135deg,rgba(255,255,255,.26),rgba(120,120,120,.10),rgba(255,255,255,.22),rgba(70,70,70,.10),rgba(255,255,255,.26));
  --select-fill:linear-gradient(105deg,rgba(255,255,255,.13),rgba(255,255,255,.06),rgba(255,255,255,.11),rgba(255,255,255,.05));
  --select-border:linear-gradient(100deg,rgba(255,255,255,.42),rgba(255,255,255,.14),rgba(255,255,255,.52),rgba(255,255,255,.14),rgba(255,255,255,.42));
  --title-sheen:linear-gradient(90deg,#fff 0%,#9a9a9a 25%,#ffffff 50%,#7d7d7d 75%,#fff 100%);
  --ui-accent:#e6e6e6;
}

/* ---- 🪟 窄屏顶栏折叠（2026-08-28）----
   起因：实测 375x812 视口下 Save/Test/Download/Share 四个按钮全部溢出屏幕外，
   而 #toolbar 的滚动条被隐藏了，用户发现不了可以横向滑动 —— 对一个面向课堂学生
   （手机是主力设备）的编辑器，等于这四个功能在手机上不存在。
   做法抄 Unity Overlay：动作按钮收进容器，窄屏折叠成「⋯」下拉；Save 永远在外面。 */
.tb-actions{display:inline-flex;align-items:center;gap:6px;}
.tb-more{display:none;}
@media (max-width:860px){
  #toolbar{padding:0 8px;gap:4px;}
  .tb-more{display:inline-flex;}
  .tb-actions{display:none;position:absolute;top:var(--subbar);right:6px;z-index:960;
    flex-direction:column;align-items:stretch;gap:5px;padding:7px;min-width:168px;
    background:var(--panel2,#161616);border:1px solid var(--border);border-radius:10px;
    box-shadow:0 14px 36px rgba(0,0,0,.55);}
  .tb-actions.open{display:flex;}
  .tb-actions .tb-btn{width:100%;justify-content:flex-start;}
  /* 腾地方：实测 375px 下顶栏仍溢出 161px，三个大头是 logo 84 / My Projects 85 / 用户名 117。
     全部压成图标或缩写，够把 Save 与「⋯」完整露出来。 */
  .logo{max-width:20px;overflow:hidden;margin-right:2px;}          /* 只留一个 M 当标记 */
  #toolbar > .tb-btn[title^="Undo"], #toolbar > .tb-btn[title^="Redo"]{padding:6px 7px;}
  #tbHistory{display:none;}                                         /* T3 代码往返历史：窄屏让位 */
  #authBadge > span:nth-child(2){display:none;}                     /* 只留头像，隐去用户名文字 */
}

/* AI Chat becomes a true touch workspace on phones instead of a cramped 400px drawer. */
@media (max-width:600px){
  /* The editor globally uses html{zoom:.9}; fixed 100vw descendants are otherwise only
     90% of the physical viewport and their full-width children are clipped on the left. */
  #aiPanel{inset:0;width:100vw;max-width:none;height:100dvh;z-index:1200;border:0;zoom:1.1111111111;}
  #aiPanel .ai-head{padding:9px 10px;min-height:46px;}
  #aiPanel .ai-title span{font-size:0;}
  #aiPanel .ai-title span::after{content:'AI Chat';font-size:13px;}
  #aiPanel #aiPromptBtn,#aiPanel #aiHideBtn{display:none;}
  #aiPanel #aiChatsBtn{font-size:0;width:34px;height:34px;padding:0;}#aiPanel #aiChatsBtn::after{content:'☰';font-size:15px;}
  #aiPanel #aiAssetsBtn{font-size:0;width:34px;height:34px;padding:0;text-align:center;}
  #aiPanel #aiAssetsBtn::after{content:'✦';font-size:16px;}
  #aiPanel #aiMemoryBtn{height:34px;padding:3px 7px;}
  #aiPanel #aiClose{width:34px;height:34px;}
  #aiPanel .ai-intentbar{padding:8px 10px;gap:7px;}
  #aiPanel .ai-intents button{min-height:46px;}
  #aiPanel .ai-body{padding:11px;font-size:14px;}
  #aiPanel .ai-inputbar{padding:9px 10px max(9px,env(safe-area-inset-bottom));background:var(--bg-side);}
  #aiPanel .ai-inputbar textarea{min-height:72px;font-size:16px;}
  #aiPanel .ai-inputbar .tb-btn.primary{min-height:44px;}
  #aiPanel .ai-chip,#aiPanel .tb-btn{min-height:38px;}
  #aiPanel .ai-msg-actions{opacity:1;}
  .ai-chat-row{align-items:flex-start;flex-direction:column;}.ai-chat-row>div:last-child{width:100%;}.ai-chat-row>div:last-child .tb-btn{flex:1;}
  .ai-assets-overlay{padding:0;}.ai-assets-manager{width:100vw;height:100dvh;max-height:none;border:0;border-radius:0;}.ai-assets-main{flex-direction:column;}.ai-assets-main>nav{width:auto;display:flex;overflow-x:auto;overflow-y:hidden;border-right:0;border-bottom:1px solid #303030;padding:6px;}.ai-assets-main>nav button{width:auto;flex:none;}.ai-assets-grid{grid-template-columns:1fr;}.ai-assets-manager>footer{display:none;}
}
