/* app.css —— 由 engine/public/ui2/index.html 的 <style> 块整块抽出（2026-09-13）*/
 :root{
  --brand:#055FB0; --brand-soft:#E8F1FA; --ink:#1f2430; --ink2:#3c4250; --dim:#6b7280; --line:#e3e6ec;
  --bg:#f4f6f9; --card:#fff; --hover:#f0f3f7; --chip:#f3f6fa; --ok:#16a34a; --warn:#d97706; --err:#dc2626;
  --radius:10px; --shadow:0 1px 3px rgba(16,24,40,.08); --navw:208px; --barfade:rgba(244,246,249,0); --inputline:#cfd8e3;
 }
 html[data-theme="dark"]{
  --brand:#6fb4ff; --brand-soft:#16324f; --ink:#e8edf4; --ink2:#c8d1dd; --dim:#94a1b4;
  --line:#2b3646; --bg:#141920; --card:#1c232e; --hover:#26303d; --chip:#202a36;
  --ok:#3ecf8e; --warn:#f0b429; --err:#f87171; --shadow:0 1px 3px rgba(0,0,0,.45); --barfade:rgba(20,25,32,0); --inputline:#3a4757;
 }
 *{box-sizing:border-box; margin:0; padding:0}
 body{font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif; color:var(--ink); background:var(--bg); font-size:13px; min-width:520px; min-height:640px; overflow-x:hidden}
 button{font-family:inherit; cursor:pointer; border:none; background:none; color:inherit}
 .hide{display:none!important}
 .tag{display:inline-block; font-size:10px; padding:1px 6px; border-radius:99px; background:var(--brand-soft); color:var(--brand); margin-left:6px; vertical-align:1px; white-space:nowrap; flex:none}
 .tag.adv{background:#F3E8FF; color:#7c3aed}
 .tag.wx{background:#e7f7ee; color:#0b8a4f}
 /* 会话聊夭界面顶部的「会话标签」统一尺寸（2026-09-13 用户要求：长度不齐 → 统一以「微信桌面同步」标签为基准 118×29） */
 .ch-tabs .ch-tab:not(.more){width:118px; box-sizing:border-box; overflow:hidden; justify-content:center}
 .ch-tabs .ch-tab .ct-name{display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0}

 /* ===== 首引页 splash ===== */
 #splash{position:fixed; inset:0; background:linear-gradient(160deg,#fbfdff 0%,#eef4fb 55%,#e3edf8 100%); display:flex; flex-direction:column; align-items:center; justify-content:center; z-index:50}
 html[data-theme="dark"] #splash{background:linear-gradient(160deg,#0e131b 0%,#131c29 55%,#17223a 100%)}
 .logo-stage{width:190px; height:180px; display:flex; align-items:flex-end; justify-content:center; overflow:hidden}
 .logo-stage img{width:170px; animation:bounce 1.7s ease-in-out infinite}
 @keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
 .slogan{margin-top:10px; font-size:22px; font-weight:400; letter-spacing:2px; color:var(--ink); text-align:center}
 .slogan small{display:block; margin-top:4px; font-size:12px; font-weight:400; color:var(--dim); letter-spacing:4px}
 .enter-btn{margin-top:28px; padding:10px 52px; background:var(--brand); color:#fff; border-radius:99px; font-size:15px; box-shadow:0 4px 14px rgba(5,95,176,.25)}
 html[data-theme="dark"] .enter-btn, html[data-theme="dark"] .big-send, html[data-theme="dark"] .send{color:#0b1f33}
 .enter-btn:hover{filter:brightness(1.07)}
 .legal{margin-top:14px; font-size:11px; color:var(--dim)}
 .legal a{color:var(--dim); text-decoration:underline; cursor:pointer}
 .note-mock{position:absolute; bottom:10px; left:0; right:0; text-align:center; font-size:11px; color:var(--dim)}

 /* ===== 顶栏 ===== */
 #app{display:flex; flex-direction:column; height:100vh}
 .topbar{height:46px; background:var(--card); border-bottom:1px solid var(--line); display:flex; align-items:center; padding:0 8px 0 0; gap:6px; flex:none}
 .brand{width:var(--navw); flex:none; height:100%; display:flex; align-items:center; gap:9px; padding:0 6px 0 14px; border-right:1px solid var(--line)}
 .brand .logo{width:auto; height:34px; flex:none}
 .brand .nm{font-weight:400; font-size:16px; letter-spacing:.3px; color:var(--ink)}
 .topbar .sp{flex:1}
 .tb-btn{padding:5px 10px; border-radius:7px; color:var(--ink2); font-size:12px; display:flex; align-items:center; gap:4px}
 .tb-btn:hover{background:var(--hover)}
 .tb-btn .ico{font-size:14px}
 .bell{position:relative}
 .bell .rd{position:absolute; top:3px; right:5px; width:7px; height:7px; background:var(--err); border-radius:50%}

 /* ===== 主体 ===== */
 .shell{flex:1; display:flex; min-height:0}
 /* 左窄列 */
 .leftnav{width:var(--navw); flex:none; background:var(--card); border-right:1px solid var(--line); display:flex; flex-direction:column}
 .nav-utils{display:flex; align-items:center; height:42px; box-sizing:border-box; border-bottom:1px solid var(--line); padding:0 6px; gap:2px; flex:none}
 .tb-pwr{width:26px; height:26px; margin:0; flex:none; border-radius:7px; display:flex; align-items:center; justify-content:center; color:var(--ink2); cursor:pointer; font-size:15px; line-height:1}
 .tb-pwr:hover{background:var(--hover); color:var(--brand)}
 .stbar{display:flex; align-items:center; gap:5px; margin-left:auto; margin-right:4px; min-width:0; overflow:hidden}
 .topmeta{display:flex; align-items:center; gap:10px; flex:none; padding-left:14px}
 .tm-loc{display:flex; align-items:center; gap:5px; font-size:12px; color:var(--ink2); cursor:pointer; white-space:nowrap}
 .tm-loc:hover{color:var(--brand)}
 .tm-clock{font-size:12px; color:var(--dim); font-variant-numeric:tabular-nums; letter-spacing:.2px; white-space:nowrap}
 .st-pill{display:flex; align-items:center; gap:6px; font-size:11.5px; color:var(--ink2); background:var(--chip); border:1px solid var(--line); padding:3px 9px; border-radius:99px; white-space:nowrap; flex:none}
 .st-pill .k{color:var(--dim)}
 .st-pill.live{border-color:rgba(22,163,74,.35)}
 .dots3{display:flex; align-items:center; gap:3px}
 .dots3 i{width:6px; height:6px; border-radius:50%; background:var(--ok); opacity:.25; transform:scale(.85); animation:br 1.6s ease-in-out infinite}
 .dots3 i:nth-child(2){animation-delay:.25s}
 .dots3 i:nth-child(3){animation-delay:.5s}
 @keyframes br{0%,100%{opacity:.25; transform:scale(.85)} 50%{opacity:1; transform:scale(1.05)}}
 /* 状态指示：三圆点（API 配置态）灰=无可用API；单点（服务态）红=服务故障 */
 .st-pill.live.none{border-color:var(--line); color:var(--dim)}
 .dots3.none i{background:#9aa3b2; animation:none; opacity:.55; transform:none}
 .st-dot{width:7px; height:7px; border-radius:50%; background:var(--ok); flex:none}
 .st-dot.err{background:var(--err)}
 @keyframes spin{to{transform:rotate(360deg)}}
 .util{flex:1; text-align:center; font-size:12px; color:var(--ink2); padding:5px 0; border-radius:8px; position:relative; cursor:pointer; white-space:nowrap}
 .util:hover{background:var(--hover)}
 .util .rd{position:absolute; top:2px; right:12px; width:7px; height:7px; background:var(--err); border-radius:50%}
 .nav-sec{padding:10px 8px 4px; font-size:10px; color:#9aa3b2; letter-spacing:1px}
 .nav-item{display:flex; align-items:center; gap:8px; padding:7px 12px; margin:1px 6px; border-radius:8px; color:var(--ink2); font-size:13px; cursor:pointer; white-space:nowrap; font-weight:400}
 .nav-item .ic{width:16px; text-align:center}
 .nav-item .tag{margin-left:auto}
 .nav-item:hover{background:var(--hover)}
 .nav-item.on{background:var(--brand-soft); color:var(--brand); box-shadow:inset 3px 0 0 var(--brand)}
 .nav-item.on .tag{background:#fff}
 .nav-item .cnt{margin-left:auto; font-size:10px; color:var(--dim); background:var(--chip); border-radius:99px; padding:0 6px}
 
 /* 总览 */
 .ov-wrap{max-width:900px; margin:0 auto; padding:22px 20px 30px}
 .ov-hero{text-align:center; padding:10px 0 4px}
 .stats-row{display:flex; gap:10px; margin:22px 0 4px}
 .stat{flex:1; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px 8px; text-align:center; box-shadow:var(--shadow)}
 .stat b{display:block; font-size:20px; color:var(--ink)}
 .stat span{font-size:11px; color:var(--dim)}
.ov-greet{padding:6px 0 2px}
 .ov-gt{font-size:20px; font-weight:400; color:var(--ink)}
 .ov-gs{margin-top:6px; font-size:12.5px; color:var(--dim)}
 .ov-quick{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:16px}
 .qk{background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px 14px; cursor:pointer; box-shadow:var(--shadow); transition:border-color .12s}
 .qk:hover{border-color:var(--brand)}
 .qk b{display:block; font-size:13px; color:var(--ink)}
 .qk span{display:block; margin-top:3px; font-size:11px; color:var(--dim)}
 .ov-cols{display:grid; grid-template-columns:1fr 1fr; gap:26px; margin-top:6px}
 .ov-col{min-width:0}
 .card.rec{display:flex; align-items:center}
 .rec-main{min-width:0; flex:1}
 .st-card{display:flex; align-items:center; gap:8px; padding:8px 4px; border-bottom:1px dashed var(--line); font-size:12.5px}
 .stk{color:var(--ink2)}
 .ok-chip{margin-left:auto; font-size:10.5px; color:var(--ok); background:rgba(22,163,74,.1); border-radius:99px; padding:1px 8px}
 .k2{margin-left:auto; color:var(--dim); font-size:11.5px}
 .ft-line{display:flex; align-items:center; gap:8px; padding:7px 4px; border-bottom:1px dashed var(--line); font-size:12px; color:var(--ink2)}
 .choice-card{max-width:78%; background:var(--card); border:1px solid var(--brand-soft); border-radius:12px; padding:10px 12px; margin:10px 0 2px; box-shadow:var(--shadow)}
 .chc-q{font-size:13px; color:var(--ink); font-weight:400; margin-bottom:8px}
 .chc-opts{display:flex; flex-wrap:wrap; gap:6px}
 .chc-opt{display:flex; align-items:center; gap:6px; border:1px solid var(--line); background:var(--chip); color:var(--ink2); border-radius:9px; padding:6px 12px; font-size:12px; cursor:pointer; transition:border-color .12s}
 .chc-opt:hover{border-color:var(--brand); color:var(--brand)}
 .chc-opt.pick{border-color:var(--brand); background:var(--brand-soft); color:var(--brand); font-weight:400}
 .chc-rec{font-size:9.5px; color:#b45309; background:rgba(217,119,6,.12); border-radius:99px; padding:0 6px; line-height:16px}
 .sect-t{margin:18px 0 8px; font-size:13px; font-weight:400; color:var(--ink)}

 /* 总览框架 v2 */
 .ovw{max-width:1080px; margin:0 auto; padding:22px 24px 34px}
 .crumb{max-width:1080px; margin:0 auto; padding:14px 24px 0; font-size:12px; color:var(--dim); display:flex; align-items:center; gap:8px}
 .crumb .cb-back{color:var(--brand); cursor:pointer; border:1px solid var(--brand-soft); background:var(--brand-soft); border-radius:7px; padding:2px 10px; font-size:11.5px}
 .crumb .cb-back:hover{filter:brightness(.97)}
 .ovw-top{display:flex; align-items:flex-end; justify-content:space-between; gap:14px}
 .ovw-hi{font-size:21px; font-weight:400; color:var(--ink)}
 .ovw-sub{margin-top:5px; font-size:12.5px; color:var(--dim)}
 .ovw-acts{display:flex; gap:8px; flex:none}
 .ovw-btn{border:1px solid var(--line); background:var(--card); color:var(--ink2); border-radius:9px; padding:7px 16px; font-size:12.5px; cursor:pointer}
 .ovw-btn.main{background:var(--brand); border-color:var(--brand); color:#fff}
 .ovw-btn.main:hover{filter:brightness(1.07)}
 .bal{margin-left:auto; font-weight:400; color:var(--ink); font-size:13px}
 .ovw-stats{display:flex; gap:10px; margin:18px 0 4px}
 .os{flex:1; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:11px 12px; text-align:center; box-shadow:var(--shadow); cursor:pointer; transition:border-color .12s}
 .os:hover{border-color:var(--brand)}
 .os b{display:block; font-size:18px; color:var(--ink)}
 .os span{font-size:11px; color:var(--dim)}
 .ovw-grid{display:grid; grid-template-columns:repeat(12,1fr); gap:14px; margin-top:14px}
 .ovw-col{min-width:0}
 .span7{grid-column:span 6}
 .span5{grid-column:span 6}
 .mod-h{display:flex; align-items:center; font-size:13px; font-weight:400; color:var(--ink); margin:2px 0 8px}
 .mod-more{margin-left:auto; font-size:11px; color:var(--brand); background:none; border:none; cursor:pointer; padding:0}
 .rec2{display:flex; align-items:center; gap:10px; background:var(--card); border:1px solid var(--line); border-radius:10px; padding:10px 12px; margin-bottom:6px; cursor:pointer; box-shadow:var(--shadow)}
 .rec2:hover{border-color:var(--brand)}
 .r2-t{font-size:13px; color:var(--ink); font-weight:400}
 .r2-s{font-size:11px; color:var(--dim); margin-top:2px}
 .rec2 .go{margin-left:auto; color:#c3cad4; font-size:16px}
 .sta2{display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:10px; padding:8px 12px; margin-bottom:6px; font-size:12.5px; color:var(--ink2)}
 .ctx-mini{display:flex; align-items:center; gap:12px; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:10px 12px; margin-top:4px; box-shadow:var(--shadow)}
 .ctx-txt b{font-size:12.5px; color:var(--ink)}
 .ctx-txt span{font-size:11px; color:var(--dim)}
 .qk2{background:var(--card); border:1px solid var(--line); border-radius:10px; padding:10px 12px; margin-bottom:6px; cursor:pointer; box-shadow:var(--shadow)}
 .qk2:hover{border-color:var(--brand)}
 .qk2 b{display:block; font-size:13px; color:var(--ink)}
 .qk2 span{display:block; font-size:11px; color:var(--dim); margin-top:2px}
 .ft2{display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:9px; padding:7px 12px; margin-bottom:5px; font-size:12px; color:var(--ink2)}
 .ft2 i{font-size:10px; color:var(--ok); font-style:normal; background:rgba(22,163,74,.1); border-radius:99px; padding:0 7px; line-height:16px}
 .ft2 em{margin-left:auto; font-style:normal; color:var(--dim); font-size:10.5px}
 .memov{display:flex; align-items:center; gap:10px; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px 16px; cursor:pointer; box-shadow:var(--shadow); transition:border-color .12s}
 .memov:hover{border-color:var(--brand)}
 .mo{flex:1; text-align:center; border-right:1px dashed var(--line)}
 .mo:last-of-type{border-right:none}
 .mo b{display:block; font-size:16px; color:var(--ink)}
 .mo span{font-size:10.5px; color:var(--dim)}
 .mo-go{color:#c3cad4; font-size:18px; padding-left:6px}
 .mem-wrap{max-width:1080px; margin:0 auto; padding:20px 24px 30px}
 .mem-top{display:flex; align-items:flex-end; justify-content:space-between; gap:12px}
 .mem-hi{font-size:19px; font-weight:400; color:var(--ink)}
 .mem-sub{display:block; font-size:11.5px; color:var(--dim); font-weight:400; margin-top:4px}
 .mem-stats{display:flex; gap:10px; margin:16px 0 6px}
 .ms{flex:1; background:var(--card); border:1px solid var(--line); border-radius:12px; padding:10px; text-align:center; box-shadow:var(--shadow)}
 .ms b{display:block; font-size:17px; color:var(--ink)}
 .ms span{font-size:11px; color:var(--dim)}
 .mem-grid{display:grid; grid-template-columns:repeat(12,1fr); gap:14px; margin-top:14px}
 .mem-col{min-width:0}
 .mem-grid .span7{grid-column:span 7}
 .mem-grid .span5{grid-column:span 5}
 .mrule{font-size:10.5px; color:var(--dim); margin:-4px 0 8px}
 .muser{display:flex; align-items:baseline; gap:6px; background:var(--card); border:1px solid var(--line); border-left:3px solid var(--brand); border-radius:8px; padding:8px 12px; margin-bottom:6px; font-size:12.5px; color:var(--ink2); box-shadow:var(--shadow)}
 .muser b{color:var(--brand); font-size:11px; flex:none}
 .muser .md{margin-left:auto; font-size:10px; color:var(--dim); flex:none}
 .mlong{display:flex; align-items:baseline; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:8px; padding:8px 12px; margin-bottom:6px; font-size:12px; color:var(--ink2); box-shadow:var(--shadow)}
 .mlong .mk{font-weight:400; color:var(--ink); flex:none}
 .mlong .mm{margin-left:auto; color:var(--line); font-size:13px}
 .msearch{display:flex; align-items:center; gap:8px; background:var(--card); border:1.5px solid var(--line); border-radius:10px; padding:7px 12px; color:var(--dim)}
 .msearch:focus-within{border-color:var(--brand)}
 .msearch input{flex:1; border:none; outline:none; background:transparent; font-size:12.5px; color:var(--ink); font-family:inherit}
 .mres{display:flex; flex-direction:column; gap:5px; margin-top:8px}
 .mr{display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:8px; padding:7px 10px; font-size:11.5px; color:var(--ink2)}
 .mr i{font-style:normal; font-size:10px; color:var(--dim); background:var(--chip); border-radius:5px; padding:0 6px; line-height:16px}
 .mr em{font-style:normal; font-size:10px; color:var(--brand); margin-left:auto}
 .mdaily{display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:8px; padding:7px 10px; margin-bottom:5px; font-size:11.5px; color:var(--ink2)}
 .mdaily b{font-size:11px; color:var(--brand); flex:none}
 .mdaily span{overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
 .mdaily i{font-style:normal; font-size:10px; color:var(--dim); margin-left:auto}
 .mdream{display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:8px; padding:8px 12px; font-size:12px; color:var(--ink2); box-shadow:var(--shadow)}
 .mi-sec{font-size:11px; color:var(--dim); margin:12px 0 4px; letter-spacing:.5px}
 .mi{display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:9px; padding:8px 12px; margin-bottom:5px; font-size:12.5px; color:var(--ink2); cursor:pointer; box-shadow:var(--shadow)}
 .mi:hover{border-color:var(--brand); color:var(--brand)}
 .mi.on{border-color:var(--brand); background:var(--brand-soft); color:var(--brand); font-weight:400}
 .mi .ok{margin-left:auto; color:var(--ok); font-weight:400}
 .mod-note{font-size:10.5px; color:#a6aebb; margin-top:6px; border-top:1px dashed var(--line); padding-top:6px}

.leftnav .side-foot{margin-top:auto; margin:auto 8px 10px; background:var(--bg); border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow)}
 .func-row{display:flex; gap:2px; padding:8px 6px 5px}
 .func-ic{flex:1; display:flex; align-items:center; justify-content:center; padding:6px 0; border-radius:8px; cursor:pointer; color:var(--ink2); background:none}
 .func-ic:hover{background:var(--hover); color:var(--brand)}
 .func-ic svg{width:17px; height:17px}
 .foot-line{border-top:1px solid var(--line); padding:6px 8px 8px; text-align:center}
 .status-dot{width:8px; height:8px; border-radius:50%; background:var(--ok); box-shadow:0 0 0 3px rgba(22,163,74,.15); flex:none}
 .foot .slogan-mini{color:var(--dim); font-size:10px; letter-spacing:1px}
 .foot-line .slogan-mini{color:var(--dim); font-size:10px; letter-spacing:1px}

 /* 中部 */
 .center{flex:1; display:flex; flex-direction:column; min-width:0}
 
 /* 框架：功能区分隔 + 会话列表区 */
 .nav-main{flex:none; padding:2px 0 4px}
 .nav-item.nv-hide{display:none}
 .leftnav.collapsed .nav-main{padding-bottom:2px}
 .sess-pane{flex:1; min-height:0; display:flex; flex-direction:column; border-top:1px solid var(--line); padding-top:6px; margin-top:2px}
 .sess-head{display:flex; align-items:center; padding:2px 14px 6px 18px}
 .sess-head>span{font-size:13px; color:var(--ink2); letter-spacing:0}
 .io-btn{flex:none; display:flex; align-items:center; justify-content:center; min-width:30px; height:30px; border-radius:9px; color:var(--ink2); background:var(--chip); border:1px solid var(--line); font-size:12px; cursor:pointer}
 .io-btn:hover{border-color:var(--brand); color:var(--brand)}
 .att-box{border-bottom:1px solid var(--line); padding:6px 12px; max-height:110px; overflow:auto}
 /* 2026-09-13：附件芯片与输入框左对齐（原来固定在 12px，而 .conv-inner 是 max-width:820px 居中 → 宽屏下芯片左偏 ~91px）
    口径：与 .conv-inner 同一左边界（同一居中列）；窄屏（≤820）输入框 max-width:100% → padding 归 0，仍对齐 */
 .att-box{padding-left:max(0px, calc((100% - 820px) / 2)); padding-right:max(0px, calc((100% - 820px) / 2))}
 .att-row{display:flex; flex-wrap:wrap; gap:6px}
 .att-chip{display:flex; align-items:center; gap:6px; background:var(--card); border:1px solid #222; border-radius:8px; padding:3px 8px; font-size:11.5px; color:var(--ink); max-width:210px}
 .att-chip .an{white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
 .att-chip .as{color:var(--dim); font-size:10px; flex:none}
 .att-chip .rm{color:var(--dim); cursor:pointer; flex:none; font-size:12px; line-height:1}
 .att-chip .rm:hover{color:var(--err)}
 /* 用户附件缩略图（2026-09-17）：发送后/重构/结束 三阶段共用；整齐换行，不挤压 */
 .att-thumbs{display:flex; flex-wrap:wrap; gap:6px; margin:6px 0 2px; align-items:flex-start}
 .att-thumb{width:120px; height:90px; object-fit:cover; border-radius:10px; border:1px solid var(--line); cursor:pointer; display:block; background:var(--chip)}
 .att-thumb:hover{border-color:var(--brand)}
 /* 气泡内的 img 有 max-width:100%/height:auto（特异性更高）会盖掉上面的尺寸 → 这里显式提权，保证缩略图是统一 120×90 网格 */
 .msg .bub img.att-thumb{width:120px; height:90px; max-width:120px; object-fit:cover}
 .perm-sw{width:30px; height:17px; border-radius:99px; background:#d5dbe4; position:relative; flex:none; cursor:pointer; transition:.15s}
 .perm-sw.on{background:var(--ok)}
 .perm-sw::after{content:""; position:absolute; top:2px; left:2px; width:13px; height:13px; border-radius:50%; background:#fff; transition:.15s}
 .perm-chip{flex:none; display:flex; align-items:center; gap:5px; height:28px; padding:0 10px; border-radius:9px; border:1px solid var(--line); background:var(--chip); font-size:12px; cursor:pointer; white-space:nowrap}
 .perm-chip:hover{border-color:var(--brand); color:var(--brand)}
 .perm-ico{width:16px; height:16px; display:inline-flex; align-items:center; justify-content:center; flex:none}
 .pv-ico{display:inline-flex; align-items:center; justify-content:center; width:15px; height:15px; margin-right:6px; vertical-align:-3px; overflow:hidden}
 .pv-ico svg{width:100%; height:100%; display:block}
 .pv-ico[data-pv="deepseek"]{width:19px; height:14px}
 .pv-14{width:14px; height:14px; margin-right:4px; vertical-align:-2px}
 .perm-ico svg{width:15px; height:15px}
 .perm-chip.lv-full{color:#e5484d; border-color:rgba(229,72,77,.55)}
 .perm-chip.lv-full .caret{color:#e5484d}
 .perm-chip.lv-ws{color:var(--brand); border-color:rgba(5,95,176,.45)}
 .perm-chip.lv-prot{color:#d97706; border-color:rgba(217,119,6,.5)}
 .perm-chip.lv-ro{color:var(--dim); border-color:var(--line)}
 .perm-chip .caret{font-size:9px; opacity:.7}
 
.conv-tools{max-width:820px; margin:2px auto 0; display:flex; align-items:center; gap:6px; padding-left:4px; position:relative}
 .tool-mini{width:28px; height:28px; border-radius:9px; display:flex; align-items:center; justify-content:center; color:var(--ink2); background:var(--chip); border:1px solid var(--line); cursor:pointer}
 .tool-mini:hover{border-color:var(--brand); color:var(--brand)}
 .conv-bar{position:relative}
 .promptbar{max-width:820px; margin:2px auto 0; display:flex; align-items:center; gap:8px; padding-left:2px; min-height:26px}
 .pb-btn{display:inline-flex; align-items:center; gap:5px; font-size:11.5px; color:var(--brand); background:var(--brand-soft); border:1px solid var(--brand-soft); border-radius:99px; padding:3px 12px; cursor:pointer}
 .pb-btn:hover{filter:brightness(.97)}
 .prompt-pop{position:fixed; width:250px; overflow:visible; background:var(--card); border:1px solid var(--line); border-radius:12px; box-shadow:0 12px 30px rgba(0,0,0,.22); padding:8px; z-index:200}
 .p2-path{display:flex; align-items:center; gap:8px; font-size:11.5px; color:var(--dim); padding:2px 4px 8px; border-bottom:1px solid var(--line); margin-bottom:6px}
 .p2-back{width:22px; height:22px; border:1px solid var(--line); border-radius:6px; background:var(--card); color:var(--ink2); font-size:14px; line-height:1; cursor:pointer; padding:0}
 .p2-back:hover{border-color:var(--brand); color:var(--brand)}
 .p2-row{display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:8px; cursor:pointer; font-size:13px; color:var(--ink2)}
 .p2-row:hover{background:var(--hover); color:var(--brand)}
 .p2-row .n{font-weight:400; color:var(--ink)}
 .p2-row .arr{margin-left:auto; color:#b6bdc9; font-size:16px; line-height:1}
 .p2-row .cnt{margin-left:auto; font-size:10px; color:var(--dim); background:var(--chip); border-radius:99px; padding:0 7px}
 .p2-sub{font-size:10.5px; color:var(--dim); margin:6px 4px 2px}
 .p2-tags{display:flex; flex-wrap:wrap; gap:6px; padding:2px}
 .p2-tag{border:1px solid var(--line); background:var(--chip); color:var(--ink2); border-radius:99px; padding:5px 12px; font-size:12px; cursor:pointer}
 .p2-tag:hover{border-color:var(--brand); color:var(--brand); background:var(--brand-soft)}
 .p2-tag.tpl{background:var(--brand-soft); border-color:var(--brand-soft); color:var(--brand); font-weight:400}
 .p2-done{display:block; width:100%; margin-top:8px; text-align:center; border:1px solid var(--line); background:var(--card); color:var(--ink2); border-radius:8px; padding:7px 0; font-size:12.5px; cursor:pointer}
 .p2-done:hover{border-color:var(--brand); color:var(--brand)}
 .prompt-pop{width:250px}
 .xrow{position:relative; display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:8px; cursor:default; font-size:13px; color:var(--ink2)}
 .xrow:hover{background:var(--hover); color:var(--brand)}
 .xrow .n{font-weight:400; color:var(--ink)}
 .xrow .arr{margin-left:auto; color:#b6bdc9; font-size:15px}
 .xrow>.xfly{display:none; position:absolute; left:calc(100% - 2px); top:-10px; width:250px; background:var(--card); border:1px solid var(--line); border-radius:12px; box-shadow:0 12px 30px rgba(0,0,0,.22); padding:7px; z-index:220}
 .xrow:hover>.xfly{display:block}
 .xfly .xrow{font-size:12.5px}
 .xfly-title{font-size:10.5px; color:var(--dim); padding:2px 6px 4px}
 .xchip{display:inline-block; border:1px solid var(--line); background:var(--chip); color:var(--ink2); border-radius:99px; padding:4px 11px; font-size:12px; cursor:pointer; margin:2px}
 .xchip:hover{border-color:var(--brand); color:var(--brand); background:var(--brand-soft)}
 .xchip.tpl{background:var(--brand-soft); border-color:var(--brand-soft); color:var(--brand); font-weight:400}
 .xdone{display:block; margin:6px 4px 0; text-align:center; color:var(--dim); font-size:11.5px; cursor:pointer; border-top:1px dashed var(--line); padding-top:6px}
 .xdone:hover{color:var(--brand)}
 .pb-tag{font-size:11px; color:var(--ink2); background:var(--chip); border:1px solid var(--line); border-radius:99px; padding:2px 10px; max-width:300px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
 .pb-hint{margin-left:auto; font-size:10.5px; color:#aab3c0}
 .pp-mask{position:fixed; inset:0; background:rgba(20,26,36,.46); z-index:120; display:flex; align-items:center; justify-content:center}
 .pp-card{width:620px; max-width:94vw; max-height:82vh; background:var(--card); border:1px solid var(--line); border-radius:16px; box-shadow:0 18px 50px rgba(0,0,0,.25); display:flex; flex-direction:column; overflow:hidden}
 .pp-head{display:flex; align-items:center; gap:10px; padding:12px 16px; border-bottom:1px solid var(--line); flex:none}
 .pp-head b{font-size:15px; color:var(--ink)}
 .pp-back{width:28px; height:28px; border-radius:8px; border:1px solid var(--line); background:var(--card); color:var(--ink2); font-size:15px; cursor:pointer}
 .pp-back:hover{border-color:var(--brand); color:var(--brand)}
 .pp-path{margin-left:8px; font-size:11.5px; color:var(--dim); overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
 .pp-x{margin-left:auto; border:none; background:none; color:var(--dim); font-size:15px; cursor:pointer}
 .pp-x:hover{color:var(--err)}
 .pp-body{flex:1; overflow:auto; padding:10px 12px; min-height:200px}
 .pp-row{display:flex; align-items:center; gap:10px; padding:10px 12px; border:1px solid var(--line); border-radius:10px; margin-bottom:7px; cursor:pointer; background:var(--card); transition:border-color .12s}
 .pp-row:hover{border-color:var(--brand)}
 .pp-row .n{font-size:13px; color:var(--ink); font-weight:400}
 .pp-row .d{font-size:11px; color:var(--dim); margin-top:2px}
 .pp-row .cnt{margin-left:auto; font-size:10.5px; color:var(--dim); background:var(--chip); border-radius:99px; padding:1px 8px; flex:none}
 .pp-row .arr{margin-left:6px; color:#b6bdc9; font-size:17px; flex:none}
 .pp-row.sel{border-color:var(--brand); background:var(--brand-soft)}
 .pp-dt{font-size:11px; color:var(--dim); margin:2px 2px 10px}
 .pp-fg{font-size:12px; font-weight:400; color:var(--ink); margin:12px 0 6px}
 .pp-field{width:100%; box-sizing:border-box; border:1px solid var(--line); border-radius:9px; padding:8px 11px; font-size:13px; font-family:inherit; background:var(--card); color:var(--ink); margin-bottom:4px}
 .pp-field:focus{outline:none; border-color:var(--brand)}
 textarea.pp-field{resize:vertical; min-height:52px}
 .pp-og{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:6px}
 .pp-opt{border:1px solid var(--line); background:var(--chip); color:var(--ink2); border-radius:99px; padding:4px 12px; font-size:12px; cursor:pointer}
 .pp-opt.on{border-color:var(--brand); background:var(--brand-soft); color:var(--brand); font-weight:400}
 .pp-foot{flex:none; border-top:1px solid var(--line); padding:10px 14px; display:flex; align-items:center; gap:10px}
 .pp-err{font-size:11.5px; color:var(--err)}
 .pp-send{margin-left:auto; background:var(--brand); color:#fff; border:none; border-radius:9px; padding:7px 18px; font-size:13px; cursor:pointer}
 .pp-send:hover{filter:brightness(1.07)}
 .plus-pop,.perm-pop,.ctx-pop{position:fixed; width:264px; background:var(--card); border:1px solid var(--line); border-radius:12px; box-shadow:0 10px 28px rgba(0,0,0,.2); padding:6px; z-index:90}
 .perm-pop{width:232px}
 .ctx-pop{padding:10px 12px}
 .tl-sp{flex:1}
 .big-tools{display:flex; align-items:center; gap:6px; margin-top:12px; width:min(700px,94%); flex-wrap:wrap; min-width:0}
 .tl-btn{flex:none; display:flex; align-items:center; gap:5px; height:28px; padding:0 9px; border-radius:9px; border:1px solid var(--line); background:var(--chip); color:var(--ink2); min-width:0; max-width:100%; font-size:12px; cursor:pointer; white-space:nowrap}
 .tl-btn:hover{border-color:var(--brand); color:var(--brand)}
 .tl-btn .caret{font-size:9px; opacity:.7}
 .tl-txt b{font-weight:400; color:var(--ink)}
 .tl-btn.mic{width:30px; padding:0; justify-content:center}
 .tl-btn.mic.rec{color:#fff; background:#e5484d; border-color:#e5484d; animation:pulse 1.4s ease-in-out infinite}
 @keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(229,72,77,.45)}50%{box-shadow:0 0 0 5px rgba(229,72,77,0)}}

 .ct-t{font-weight:400; font-size:12.5px; color:var(--ink); margin-bottom:6px}
 .ct-row{display:flex; align-items:center; justify-content:space-between; gap:10px; padding:4px 2px; font-size:12px; color:var(--ink2)}
 .ct-row b{font-weight:400; color:var(--ink)}
#modelPop .ct-row>span{flex:1 1 auto; min-width:0; overflow-wrap:anywhere; word-break:break-all; line-height:1.55}
#modelPop .ct-t{word-break:break-all}
.model-cur{display:inline-block; max-width:140px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom}
 .ct-row .ok{color:var(--ok); font-weight:400}
 .ct-bar{height:6px; border-radius:99px; background:var(--chip); overflow:hidden; margin:8px 0 6px; position:relative}
 .ct-bar i{display:block; height:100%; background:var(--brand); border-radius:99px}
 .ct-bar-mk{position:absolute; top:0; bottom:0; width:2px; background:var(--ink2); opacity:.45; border-radius:2px}
 #ctxPop{width:300px}
 .ct-sep{height:1px; background:var(--line); margin:7px 2px}
 .ct-hi b{color:var(--brand); font-size:13.5px}
 .ct-acts{margin-top:9px; display:flex}
 .ct-btn{flex:1; height:28px; border-radius:8px; border:1px solid var(--line); background:var(--chip); color:var(--brand); font-size:12px; cursor:pointer; font-family:inherit}
 .ct-btn:hover{border-color:var(--brand)}
 /* 能力页（技能包/技能管家）用的动作按钮 */
 .cap-btn{flex:none; height:26px; padding:0 10px; border-radius:8px; border:1px solid var(--line); background:var(--chip); color:var(--brand); font-size:12px; cursor:pointer; font-family:inherit; white-space:nowrap}
 .cap-btn:hover{border-color:var(--brand)}
 .cap-btn:disabled{opacity:.55; cursor:default}
 /* 后台任务输出区 */
 .ex-out{margin:6px 0 0;max-height:220px;overflow:auto;background:var(--chip);border:1px solid var(--line);border-radius:8px;padding:8px;font:11.5px/1.5 Consolas,"Courier New",monospace;white-space:pre-wrap;word-break:break-all;color:var(--ink2)}
 .ct-note{font-size:10.5px; color:var(--dim); line-height:1.6; margin-top:6px}
 .bk-link{padding:8px 2px; font-size:12px; color:var(--brand); cursor:pointer}
  .bk-link:hover{text-decoration:underline}
 .bk-name{font-size:13px; color:var(--ink)}
 .th-track{position:relative; height:22px; margin:4px 2px 2px}
 .th-seg{position:absolute; top:0; bottom:0; width:14.28%; cursor:pointer; z-index:2}
 .th-seg::after{content:""; position:absolute; top:50%; left:50%; width:8px; height:8px; transform:translate(-50%,-50%); border-radius:50%; background:var(--line); transition:.12s}
 .th-seg:hover::after{background:var(--brand)}
 .th-seg.on::after{background:var(--brand); width:11px; height:11px}
 .th-now{position:absolute; top:50%; left:42.8%; width:3px; height:16px; transform:translate(-50%,-50%); border-radius:2px; background:var(--brand); opacity:.25; pointer-events:none}
 .th-labels{display:flex; align-items:center; justify-content:space-between; font-size:10.5px; color:var(--dim); padding:0 2px}
 .th-labels b{color:var(--brand); font-weight:400; font-size:11px}
 .th-quick{display:flex; align-items:center; gap:8px; padding:6px 2px; font-size:12px; color:var(--ink2)}
 .pp-up{width:100%; text-align:left; padding:9px 10px; border-radius:8px; background:var(--brand-soft); color:var(--brand); font-size:13px; font-weight:400; cursor:pointer}
 .pp-up:hover{filter:brightness(.97)}
 .pp-hint{font-size:11px; color:var(--dim); padding:7px 4px 5px 10px; line-height:1.5}
 .pp-line{border-top:1px solid var(--line); margin:3px 4px}
 .pp-row{display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:8px; font-size:12.5px; color:var(--ink2); cursor:pointer}
 .pp-row:hover{background:var(--hover); color:var(--brand)}
 .pp-row .arr{margin-left:auto; color:#b6bdc9; font-size:16px; line-height:1}
 .pp-row .pd{margin-left:auto; font-size:10.5px; color:var(--dim)}
 .pp-row.on{color:var(--brand); font-weight:400}
 .pp-fly{position:relative}
 .pp-fly .fl-t{flex:1}
 .pp-fly .fly{position:absolute; top:-7px; left:calc(100% + 2px); width:206px; background:var(--card); border:1px solid var(--line); border-radius:10px; box-shadow:0 10px 28px rgba(0,0,0,.18); padding:5px; display:none; z-index:60}
 .pp-fly:hover .fly{display:block}
 .pp-fly:hover .pp-row{background:var(--hover); color:var(--brand)}
 .fl-item{display:flex; align-items:center; gap:8px; padding:7px 10px; border-radius:7px; font-size:12px; color:var(--ink2); cursor:pointer; white-space:nowrap}
 .fl-item:hover{background:var(--hover); color:var(--brand)}
 .fl-item .tag{margin-left:auto}
 .perm-sw.on::after{left:15px}
 .sess-new{margin-left:auto; font-size:12px; color:var(--brand); background:var(--brand-soft); border-radius:7px; padding:3px 10px; cursor:pointer; border:none}
 .sess-new:hover{filter:brightness(.96)}
 .sess-list{flex:1; overflow:auto; padding:0 6px 6px}
 .sess{background:var(--card); border:1px solid var(--line); border-radius:10px; padding:8px 10px; margin-bottom:6px; cursor:pointer; box-shadow:var(--shadow); position:relative; overflow:hidden}
 .sess:hover{border-color:var(--brand); background:var(--bg)}
 .sess.on{border-color:var(--brand); background:var(--brand-soft)}
 /* 会话组（容器）：组头可点折叠，成员缩进显示 */
 .grp{margin:1px 0; border-radius:8px}
 .grp-head{display:flex; align-items:center; gap:6px; padding:6px 8px; cursor:pointer; min-width:0; user-select:none}
 .grp-head:hover{background:var(--bg)}
 .grp-arrow{font-size:9px; color:var(--dim); width:11px; flex:none; transition:transform .12s}
 .grp-arrow.open{transform:rotate(90deg)}
 .grp-ico{font-size:13px; flex:none}
 .grp-t{font-size:12.5px; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; flex:1; min-width:0}
 .grp-cnt{font-size:10px; color:var(--dim); flex:none}
 .grp-dot{flex:none; color:var(--dim2,#6b7280); padding:2px 4px; border-radius:6px}
 .grp-dot:hover{background:var(--hover); color:var(--brand)}
 .grp-members{padding:0 0 4px 18px}
 .grp-members .sess{margin-bottom:5px}
 .grp-members .sess:last-child{margin-bottom:0}
 .sess.grp-member{box-shadow:none}
 .sess.grp-member .s-t{font-size:12px}
 .sess.grp-member .s-prev{font-size:10.5px}
/* 同步开关（2026-09-11，仅同步会话卡片） */
.sx-tog{display:inline-flex;align-items:center;gap:5px;flex:none;font-size:10.5px;padding:0 7px;border-radius:20px;border:1px solid var(--line);color:var(--dim);background:var(--bg);cursor:pointer;user-select:none;line-height:16px}
.sx-tog:hover{border-color:var(--brand);color:var(--brand)}
.sx-tog.on{border-color:rgba(5,95,176,.35);color:var(--brand);background:var(--brand-soft)}
.sx-dot{width:6px;height:6px;border-radius:50%;background:var(--dim);display:inline-block}
.sx-tog.on .sx-dot{background:var(--brand)}
 /* 拖拽视觉 */
 .sess.dragging, .grp.dragging{opacity:.45; border-style:dashed}
 .sess.drop-before, .grp.drop-before{box-shadow:0 -2px 0 0 var(--brand)}
 .sess.drop-after, .grp.drop-after{box-shadow:0 2px 0 0 var(--brand)}
 .sess.drop-into, .grp.drop-into{border-color:var(--brand); background:var(--brand-soft)}
 .s-row1{display:flex; align-items:center; gap:6px; min-width:0}
 .s-t{font-size:12.5px; font-weight:400; color:var(--ink); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
 .s-time{font-size:10px; color:var(--dim); margin-left:auto; flex:none}
 .s-prev{display:flex; align-items:center; gap:6px; font-size:11px; color:var(--dim); margin-top:3px}
.s-prev-t{flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
 /* 会话视图头 */
 .chat-head{display:flex; align-items:center; gap:8px; height:42px; box-sizing:border-box; padding:0 16px; border-bottom:1px solid var(--line); background:var(--card); flex:none; position:relative}
 .ch-tab.more{color:var(--dim); font-weight:400; letter-spacing:1px}
 .more-pop{width:236px; background:var(--card); border:1px solid var(--line); border-radius:10px; box-shadow:0 10px 28px rgba(0,0,0,.18); padding:5px; z-index:80}
 .mp-item{display:flex; align-items:center; gap:8px; padding:8px 10px; border-radius:8px; font-size:12.5px; color:var(--ink2); cursor:pointer; white-space:nowrap}
 .mp-item:hover{background:var(--hover); color:var(--brand)}
 .mp-item .mp-tag{margin-left:auto}
 .ch-tabs{display:flex; align-items:center; gap:4px; min-width:0; overflow-x:auto; scrollbar-width:thin; padding-bottom:1px}
 .ch-tab{display:flex; align-items:center; gap:6px; font-size:13px; color:var(--ink2); padding:5px 12px; border-radius:8px; cursor:pointer; border:1px solid var(--ink2); white-space:nowrap}
 .ch-tab:hover{background:var(--hover); color:var(--brand)}
 .ch-tab.on{background:var(--brand-soft); color:var(--brand); font-weight:400; border-color:var(--brand)}
 .ch-r{margin-left:auto; display:flex; gap:6px}
 .ch-b{border:1px solid var(--line); background:var(--card); color:var(--ink2); border-radius:8px; padding:4px 10px; font-size:12px; cursor:pointer}
 .ch-b:hover{border-color:var(--brand); color:var(--brand)}
 /* 空会话大输入（在会话视图中） */
 #panel-chat{overflow:hidden; display:flex; flex-direction:column; padding-bottom:38px}
 .chat-empty{flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:20px; min-height:0; overflow:auto}
 .chat-conv{flex:1; display:none; flex-direction:column; min-height:0}
 .chat-top-err{flex:none; margin:6px 10px 0; border:1px solid #f0b0b0; background:#fde8e8; color:#b71c1c; border-radius:10px; padding:7px 10px; font-size:12px; display:flex; align-items:flex-start; gap:8px; box-shadow:0 1px 3px rgba(183,28,28,.10)}
 .chat-top-err.hide{display:none}
 .chat-top-err .cte-txt{flex:1; line-height:1.5; word-break:break-word}
 .chat-top-err .cte-x{flex:none; cursor:pointer; border:none; background:transparent; color:#b71c1c; font-size:12px; padding:0 2px; opacity:.75}
 .chat-top-err .cte-x:hover{opacity:1}
 .api-sel{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--card);cursor:pointer;font-size:12.5px}
 .api-sel:hover{border-color:rgba(5,95,176,.5)}
 .api-sel-list{position:absolute;left:0;right:0;top:calc(100% + 2px);background:var(--card);border:1px solid var(--line);border-radius:10px;max-height:248px;overflow:auto;z-index:60;box-shadow:0 8px 20px rgba(0,0,0,.15)}
 .api-sel-list.hide{display:none}
 .api-sel-list .asl-row{display:flex;align-items:center;gap:8px;padding:7px 10px;font-size:12px;cursor:pointer;color:var(--ink2)}
 .api-sel-list .asl-row:hover{background:var(--hover);color:var(--brand)}
.sess-tabs{height:40px; flex:none; display:flex; align-items:flex-end; gap:2px; padding:0 10px; border-bottom:1px solid var(--line); background:var(--card); overflow-x:auto}
 .stab{padding:7px 14px; border-radius:8px 8px 0 0; font-size:12px; color:var(--ink2); display:flex; align-items:center; gap:6px; cursor:pointer; border:1px solid transparent; border-bottom:none; white-space:nowrap}
 .stab.on{background:var(--bg); border-color:var(--line); color:var(--ink); font-weight:400}
 .stab .x{color:var(--dim); font-size:11px}
 .stab .plus{font-size:13px; color:var(--dim); padding-top:6px; cursor:pointer}
 .panel{flex:1; overflow:auto; position:relative}

 /* 空态卡 */
 .empty-wrap{height:100%; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px; padding:20px; text-align:center}
 .empty-art{font-size:44px; opacity:.55}
 .empty-t{font-size:15px; font-weight:400}
 .empty-d{font-size:12px; color:var(--dim); max-width:360px; line-height:1.7}
 .empty-a{margin-top:8px; padding:7px 18px; background:var(--brand); color:#fff; border-radius:8px; font-size:12px}
 .empty-a.ghost{background:var(--card); color:var(--brand); border:1px solid var(--brand)}

 /* 聊天视图：空态（大输入框+引导卡）与聊天态（消息流+底部常规输入框） */
 #panel-chat{overflow:hidden; display:flex; flex-direction:column; padding-bottom:38px}
 .chat-empty{flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:20px; min-height:0}
 .hero-t{font-size:26px; font-weight:400; letter-spacing:.5px}
 .hero-d{margin-top:12px; font-size:13.5px; color:var(--dim); text-align:center; max-width:440px; line-height:1.9}
 .big-input{width:min(700px,94%); display:flex; align-items:center; gap:10px; background:var(--card); border:1.5px solid var(--inputline); border-radius:24px; padding:18px 14px 18px 24px; box-shadow:0 6px 26px rgba(16,24,40,.10); margin-top:16px; transition:border-color .15s, box-shadow .15s}
 .big-input:focus-within{border-color:var(--brand); box-shadow:0 6px 28px rgba(5,95,176,.18)}
 .pp-top2{display:flex; align-items:center; gap:8px; width:min(700px,94%); margin:14px auto 0; min-height:26px}
 .pp-top2 .perm-chip{height:24px; padding:0 10px; font-size:11.5px; color:var(--ink2); border-color:var(--line)}
 .pp-top2 .perm-chip:hover{color:var(--ink); background:var(--chip); border-color:var(--line)}
 .big-ed{font-size:17px; min-height:34px; max-height:150px; padding:4px 2px; white-space:pre-wrap}
 .big-ed .inc{font-size:16px; line-height:26px}
 .big-input input{flex:1; border:none; outline:none; background:transparent; font-size:17px; font-family:inherit; color:var(--ink); caret-color:var(--brand)}
 .big-input input::placeholder{color:var(--dim)}
 .big-input input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--card) inset}
 .big-send{width:42px; height:42px; border-radius:14px; background:var(--brand); color:#fff; font-size:18px; flex:none; cursor:pointer}
 .sug-row{margin-top:16px; display:flex; gap:10px; flex-wrap:wrap; justify-content:center; max-width:780px}
 .sug{display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:99px; padding:9px 18px; font-size:13px; color:var(--ink2); cursor:pointer; box-shadow:var(--shadow); white-space:nowrap; transition:border-color .12s, color .12s}
 .sug:hover{border-color:var(--brand); color:var(--brand)}
 .hero-hint{margin-top:16px; font-size:11.5px; color:#aab3c0}
 /* 聊天态：消息区 + 底部常规输入框 */
 .chat-conv{flex:1; display:none; flex-direction:column; min-height:0}
 .conv-scroll{flex:1; overflow:auto; padding:18px 18px 4px}
 .conv-list{max-width:820px; margin:0 auto}
 .conv-bar{flex:none; padding:8px 16px 16px; background:linear-gradient(180deg,var(--barfade),var(--bg) 40%)}
 .conv-inner{max-width:820px; margin:0 auto; display:flex; align-items:center; gap:8px; background:var(--card); border:1px solid var(--line); border-radius:16px; padding:9px 9px 9px 18px; box-shadow:var(--shadow)}
 .conv-inner:focus-within{border-color:var(--brand)}
 .pp-top{display:flex; align-items:center; gap:8px; margin:0 auto 2px; max-width:820px; padding-left:2px; min-height:26px}
 .pp-top .perm-chip{height:24px; padding:0 10px; font-size:11.5px; color:var(--ink2)}
 #pbBtn.perm-chip{border-color:var(--line)}
 #pbBtn.perm-chip:hover{border-color:var(--line); color:var(--ink); background:var(--chip); filter:none}
 .pp-tip{font-size:10.5px; color:#aab3c0}
 .conv-ed{flex:1; min-height:34px; max-height:130px; overflow:auto; outline:none; font-size:14px; line-height:1.7; color:var(--ink); padding:4px 0; white-space:pre-wrap; word-break:break-word; caret-color:var(--brand)}
 .conv-ed:empty:before{content:attr(data-ph); color:var(--dim); pointer-events:none}
 .inc{display:inline-flex; align-items:center; gap:3px; background:var(--brand-soft); color:var(--brand); border:1px solid var(--brand-soft); border-radius:8px; padding:0 3px 0 8px; margin:1px 2px; font-size:13px; line-height:20px; vertical-align:middle; white-space:nowrap}
 .inc .x{font-style:normal; cursor:pointer; color:var(--brand); font-size:11px; padding:0 2px; line-height:1}
 .inc .x:hover{color:var(--err)}
 .conv-inner input{flex:1; border:none; outline:none; background:transparent; font-size:14px; font-family:inherit; color:var(--ink); caret-color:var(--brand)}
 .conv-inner input::placeholder{color:var(--dim)}
 .conv-inner input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--card) inset}
 .send{width:34px; height:34px; border-radius:11px; background:var(--brand); color:#fff; font-size:15px; flex:none; cursor:pointer}
 .demo-note{margin-top:10px; text-align:center; font-size:11px; color:#aab3c0}
 .msg{display:flex; gap:10px; margin:14px 0}
 .msg .av{width:30px; height:30px; border-radius:9px; flex:none; display:flex; align-items:center; justify-content:center; font-size:13px}
 .msg.user{flex-direction:row-reverse}
 .msg.user .av{background:var(--chip); color:var(--ink2)}
 .msg .av.ai{background:var(--brand-soft); color:var(--brand)}
 .msg .bub{max-width:78%; background:var(--card); border:1px solid var(--line); padding:9px 12px; border-radius:10px; line-height:1.7; box-shadow:var(--shadow); overflow-wrap:anywhere; word-break:break-word}
 .msg.user .bub{background:var(--brand); border-color:var(--brand); color:#fff}
 /* 多附件时不要挤压气泡（2026-09-17）：允许换行；附件超阈值带 .wide → 气泡另起一排 */
 .msg.user{flex-wrap:wrap}
 .msg.user > .art-below.wide{flex:0 0 100%; width:100%; max-width:100%}
 .msg .bub a{word-break:break-all; overflow-wrap:anywhere}
 .msg .bub img{max-width:100%; height:auto}
 .toolrow{display:flex; flex-wrap:wrap; gap:6px; margin:6px 0}
 .tl{font-size:11px; background:var(--card); border:1px solid var(--line); border-radius:99px; padding:2px 10px; color:#475569}
 .plan-card{border:1px solid var(--brand-soft); background:var(--brand-soft); border-radius:10px; padding:10px 12px; margin:8px 0; font-size:12px; color:var(--ink)}
 .plan-card b{color:var(--brand)}

 /* Agent/能力/记忆/定时/工作区 面板通用 */
 .grid-list{padding:14px; max-width:820px; margin:0 auto}
 .ghead{display:flex; align-items:center; gap:8px; font-size:14px; font-weight:400; padding:4px 2px 10px}
 .ghead .add{margin-left:auto; font-size:11px; color:var(--brand); background:var(--brand-soft); border-radius:7px; padding:4px 10px}
 .card{background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:12px 14px; margin-bottom:8px; box-shadow:var(--shadow); display:flex; align-items:center; gap:10px}
 .card .ic{width:34px; height:34px; border-radius:9px; background:#f0f4f9; display:flex; align-items:center; justify-content:center; font-size:16px; flex:none}
 .card .t{font-weight:400; font-size:13px}
 .card .s{font-size:11px; color:var(--dim); margin-top:2px}
 .card .go{margin-left:auto; color:#c3cad4}

 /* 右抽屉 */
 .drawer{width:264px; flex:none; background:var(--card); border-left:1px solid var(--line); display:flex; flex-direction:column}
 .drawer.hidden{display:none}
 .dr-head{padding:12px 14px; border-bottom:1px solid var(--line); display:flex; align-items:center; font-weight:400; font-size:13px}
 .dr-head .close{margin-left:auto; color:#9aa3b2; cursor:pointer}
 .dr-tabs{display:flex; gap:2px; padding:8px; border-bottom:1px solid var(--line)}
 .dr-tab{flex:1; text-align:center; font-size:11px; padding:5px 0; border-radius:7px; color:var(--ink2); cursor:pointer}
 .dr-tab.on{background:var(--brand-soft); color:var(--brand); font-weight:400}
 .dr-body{flex:1; overflow:auto; padding:10px 12px; font-size:12px; color:var(--ink); line-height:1.9}
 .dr-sec{font-size:10px; color:#9aa3b2; margin:10px 0 4px}
 .note{font-size:11px; color:#9aa3b2}

 /* 浮层 */
 .mask{position:fixed; inset:0; background:rgba(20,26,36,.42); z-index:60; display:flex; align-items:stretch; justify-content:flex-end}
 .sheet{width:430px; max-width:94vw; background:var(--card); box-shadow:-6px 0 24px rgba(0,0,0,.12); display:flex; flex-direction:column}
 .sh-head{padding:14px 16px; font-weight:400; border-bottom:1px solid var(--line); display:flex; align-items:center; gap:10px}
 .sh-head .x{margin-left:auto; color:#9aa3b2; cursor:pointer}
 .sh-menu{display:flex; border-bottom:1px solid var(--line); overflow-x:auto; padding:0 8px}
 .sh-menu div{padding:9px 12px; font-size:12px; color:var(--ink2); cursor:pointer; white-space:nowrap; border-bottom:2px solid transparent}
 .sh-menu div.on{color:var(--brand); border-color:var(--brand); font-weight:400}
 .sh-body{flex:1; overflow:auto; padding:14px 16px; font-size:12px; color:var(--ink); line-height:2}
 .sh-row{display:flex; align-items:flex-start; gap:10px; padding:7px 0; border-bottom:1px dashed #eef1f5; width:100%; box-sizing:border-box; align-self:stretch; flex:0 0 auto}
 .sh-row .k{width:76px; flex:none; color:var(--dim); line-height:1.6}
 .sh-row .v{flex:1; min-width:0; color:#2a2f3a; line-height:1.6; word-break:normal; overflow-wrap:anywhere}
 .sw{width:36px; height:20px; border-radius:99px; background:#d5dbe4; position:relative; transition:.15s; flex:none; cursor:pointer}
 .sw.on{background:var(--brand)}
 .sw::after{content:""; position:absolute; top:2px; left:2px; width:16px; height:16px; border-radius:50%; background:#fff; transition:.15s}
 .sw.on::after{left:18px}
b,strong{font-weight:400}
/* desksky 1.0 UI 调整（2026-09-08） */
#mask .sheet.sheet-func{width:740px;max-width:96vw}
/* ==== desksky 1.0 工作区 v2（系统/产物双栏）==== */
.ws2{display:flex;gap:12px;height:calc(100vh - 150px);min-height:440px}
.ws2-left{flex:6;min-width:0;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.ws2-head{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--line);font-size:13px}
.ws2-sp{flex:1}
.ws2-view{flex:1;overflow:auto;padding:12px 14px;font-size:12.5px;line-height:1.7;color:var(--ink2);word-break:break-word;min-height:0}
.ws2-view img.pv{max-width:100%;height:auto;display:block;border-radius:8px}
.ws2-view iframe.pv{width:100%;height:70vh;border:0;border-radius:8px;background:#fff}
.ws2-ph{color:var(--dim);padding:36px 10px;text-align:center;font-size:12px;white-space:pre-line;line-height:2}
.ws2-right{flex:4;min-width:270px;display:flex;flex-direction:column;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.ws2-tabs{display:flex;border-bottom:1px solid var(--line);flex:none}
.ws2-tab{flex:1;text-align:center;padding:9px 0;cursor:pointer;font-size:12.5px;color:var(--ink2)}
.ws2-tab.on{color:var(--brand);border-bottom:2px solid var(--brand)}
.ws2-browse{flex:1;overflow:auto;padding:6px;min-height:0}
.ws2-sec{font-size:10px;color:#9aa3b2;letter-spacing:1px;padding:8px 10px 2px}
.ws2-row{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:8px;cursor:grab;font-size:12.5px}
.ws2-row:hover{background:var(--hover)}
.ws2-row .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;display:flex;align-items:center;gap:6px}
.ws2-row .sz{margin-left:auto;font-size:10.5px;color:var(--dim);flex:none;padding-left:6px}
.ws2-row .dot{flex:none;width:22px;height:22px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--dim);font-size:15px;cursor:pointer;line-height:1}
.ws2-row .dot:hover{background:var(--chip);color:var(--brand)}
.ws2-row{user-select:none}
.ws2-row.ws2-dragging{opacity:.55;cursor:grabbing;transform:scale(1.03);background:var(--card);box-shadow:0 6px 18px rgba(16,24,40,.18);z-index:5;position:relative}
.ws2-row.drop-into{background:var(--brand-soft);outline:2px dashed var(--brand);outline-offset:-2px;box-shadow:inset 0 0 0 2px rgba(5,95,176,.10)}
#wsMenu{position:fixed;width:176px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 26px rgba(0,0,0,.2);padding:5px;z-index:400}
#wsMenu .mi2{padding:8px 10px;border-radius:7px;font-size:12.5px;cursor:pointer;color:var(--ink2)}
#wsMenu .mi2:hover{background:var(--hover);color:var(--brand)}
#wsMenu .mi2.dis{opacity:.4;cursor:default}
#mask .sheet.sheet-ws{width:1160px;max-width:97vw}

#chatDemoNote{padding-right:240px;text-align:center}
#globalNote{background:var(--bg);padding:3px 12px;border-radius:99px;border:1px solid var(--line);max-width:68%;text-align:center;opacity:.95}
.av{overflow:hidden}
.av img.ai-av{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.gd-opt{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:1px solid var(--line);background:var(--card);color:var(--ink2);border-radius:10px;padding:10px 13px;margin:6px 0;font-size:13px;cursor:pointer;font-family:inherit}
.gd-opt:hover{border-color:var(--brand);color:var(--brand)}
.gd-opt.pick{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}
.gd-opt .rec{margin-left:auto;font-size:10px;color:#b45309;background:rgba(217,119,6,.12);border-radius:99px;padding:0 7px;line-height:16px;flex:none}
.gd-pre{max-height:190px;overflow:auto;border:1px dashed var(--line);background:var(--chip);border-radius:8px;padding:9px 11px;font-size:12.5px;white-space:pre-wrap;line-height:1.7;word-break:break-word;color:var(--ink2)}
#gdWrap .pp-card{width:560px;max-width:94vw;padding:0}
.gd-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}
.gd-btn{border:1px solid var(--line);background:var(--card);color:var(--ink2);border-radius:9px;padding:8px 16px;font-size:13px;cursor:pointer;font-family:inherit}
.gd-btn:hover{border-color:var(--brand);color:var(--brand)}
.gd-btn.main{background:var(--brand);border-color:var(--brand);color:#fff}
.gd-btn.main:hover{filter:brightness(1.07)}
.gd-link{margin-top:8px;font-size:12px;color:var(--brand);cursor:pointer;display:inline-block}
#gdWrap{position:fixed;inset:0;background:rgba(16,22,32,.5);z-index:900;display:flex;align-items:center;justify-content:center}
.gd-spin{width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--brand);border-radius:50%;animation:spin .9s linear infinite;margin:0 auto 12px}
.gd-q{font-size:15px;font-weight:500;color:var(--ink)}
.gd-sub{font-size:11.5px;color:var(--dim);margin:2px 0 10px}
.gd-cus{display:flex;gap:6px;margin-top:4px}
.gd-cus input{flex:1;border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:12.5px;font-family:inherit;background:var(--card);color:var(--ink);outline:none}
.gd-cus button{flex:none;background:var(--brand);color:#fff;border:none;border-radius:8px;padding:7px 14px;font-size:12.5px;cursor:pointer}

.sess-dot{flex:none;width:20px;height:20px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--dim);font-size:15px;cursor:pointer;line-height:1;margin-left:2px;opacity:0}
.sess:hover .sess-dot,.sess.on .sess-dot{opacity:1}
.sess-dot:hover{background:var(--chip);color:var(--brand)}
#sessMenu{position:fixed;width:170px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 26px rgba(0,0,0,.2);padding:5px;z-index:420}
#sessMenu .mi2{padding:8px 10px;border-radius:7px;font-size:12.5px;cursor:pointer;color:var(--ink2)}
#sessMenu .mi2:hover{background:var(--hover);color:var(--brand)}
#sessMenu .mi2.danger{color:#e5484d}
.sess-rename{flex:1;min-width:0;border:1px solid var(--brand);border-radius:6px;padding:2px 6px;font-size:12px;font-family:inherit;background:var(--card);color:var(--ink);outline:none}
/* ===== 自适应（2026-09-10）：变窄先折左侧功能区，再折顶部状态区；最小 = 聊天输入宽度 ===== */
.nav-toggle{display:none; width:32px; height:32px; margin:0 4px 0 10px; flex:none; border-radius:9px; align-items:center; justify-content:center; color:var(--ink2); background:none; border:none; cursor:pointer; font-size:16px}
.nav-toggle:hover{background:var(--hover); color:var(--brand)}
/* —— 运行中指示（2026-09-11）：会话卡片底部来回扫动的小阴影 + 会话框右上角消息提醒圆点 —— */
#chatConv{position:relative}
.sess-run-bar{position:absolute;left:0;right:0;bottom:0;height:2px;overflow:hidden;pointer-events:none;opacity:0;transition:opacity .2s;z-index:11}
.sess-run-bar::after{content:"";position:absolute;top:0;left:-40%;width:40%;height:100%;background:linear-gradient(90deg,transparent,var(--brand),transparent);animation:dsSweep 2.6s ease-in-out infinite alternate}
.sess.running .sess-run-bar{opacity:1}
.sess.running{border-color:var(--brand)}
@keyframes dsSweep{0%{left:-40%}100%{left:100%}}
.conv-run-dot{position:absolute;right:10px;top:8px;width:9px;height:9px;border-radius:50%;background:var(--brand);box-shadow:0 0 0 0 rgba(5,95,176,.5);opacity:0;transform:scale(.5);transition:opacity .18s,transform .18s;pointer-events:none;z-index:12}
#chatConv.hasdot .conv-run-dot{opacity:1;transform:scale(1);animation:dsPulse 1.6s ease-out infinite}
@keyframes dsPulse{0%{box-shadow:0 0 0 0 rgba(5,95,176,.45)}100%{box-shadow:0 0 0 12px rgba(5,95,176,0)}}
.art-below{margin-top:8px; padding-top:6px; border-top:1px dashed var(--line)}
.art-head{font-size:10.5px;color:var(--dim);margin-bottom:2px;cursor:pointer;display:flex;align-items:center;gap:5px;user-select:none}
.art-head:hover{color:var(--brand)}
.art-cv{font-size:9px;opacity:.75}
@media (max-width: 1080px){
  .leftnav{display:none}
    .drawer{width:230px}   /* 窄屏收窄，给主区让位 */
  #app.nav-open .leftnav{display:flex; position:fixed; left:0; top:46px; bottom:0; z-index:70; box-shadow:0 10px 40px rgba(0,0,0,.28)}
  .topbar .brand{width:auto; border-right:none; padding-left:6px}
  .nav-toggle{display:flex}
}
@media (max-width: 820px){
    .chat-head .ch-r{display:none}   /* 窄屏：抽屉入口文字会被挤，直接隐藏（宽屏恢复） */
  .stbar{display:none}
  .topmeta{display:none}
  .conv-list,.conv-inner,.pp-top,.pp-top2{max-width:100%}
  /* 窄屏：权限功能只显示盾牌图标（省空间），文字与箭头隐藏 */
  .perm-chip .perm-label{display:none}
  .perm-chip .caret{display:none}
  .perm-chip{padding:0 8px}
  .pp-tip{display:none}
  .tl-btn.tl-txt{max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
  /* 窄屏抽屉：左上角 ☰ 展开只显示会话列表，其余功能（通知/设置/总览/记忆/底部功能区等）全部隐藏 */
  #app.nav-open .nav-utils{display:none}
  #app.nav-open .nav-main{display:none}
  #app.nav-open .side-foot{display:none}
  #app.nav-open .sess-pane{flex:1; min-height:0; display:flex; flex-direction:column}
}
#app{min-width:520px}

.st-rled{display:inline-block;width:7px;height:7px;border-radius:50%;background:#c9ced8;margin-right:5px;vertical-align:middle;transition:background .3s}
.st-rled.on{background:#22c55e;box-shadow:0 0 0 2px rgba(34,197,94,.18)}

.note-mock a{color:var(--dim);text-decoration:underline;cursor:pointer}
.note-mock a:hover{color:var(--brand)}

/* 会话状态灯（2026-09-13 用户需求）：红=忙碌(思考/运行) 绿=空闲 灰=错误(故障/无连接) */
.sl-dot{width:8px;height:8px;border-radius:50%;flex:none;background:#c9ced8;margin-right:1px}
.sl-dot.idle{background:#22c55e}
.sl-dot.busy{background:#ef4444;animation:slPulse 1.1s ease-in-out infinite}
.sl-dot.err{background:#9aa3af}
@keyframes slPulse{0%,100%{opacity:1}50%{opacity:.35}}
.sl-legend{display:inline-flex;align-items:center;gap:3px;font-size:11px;color:var(--dim);margin-left:10px;font-weight:400}
.sl-legend .sl-dot{width:7px;height:7px;margin:0 1px 0 0;animation:none}
