:root{
  --ink:#0b1f3f;        /* logo 近黑海军蓝 */
  --navy:#0a3569;       /* logo 深蓝 */
  --blue:#0d4d99;       /* 主行动色 · logo 宝蓝 */
  --blue-dark:#083b78;
  --tint:#d7e8f7;       /* logo 冰蓝 */
  --bg:#f5f8fc;
  --card:#ffffff;
  --line:#dfe8f3;
  --body:#3d4c66;
  --muted:#64748f;
  --ok:#15945b;
  --err:#c2453e;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;display:flex;background:var(--bg);color:var(--body);font:14px/1.65 -apple-system,BlinkMacSystemFont,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif}

/* ---------- sidebar ---------- */
.sidebar{width:250px;flex:0 0 250px;display:flex;flex-direction:column;background:#fff;border-right:1px solid var(--line)}
.side-head{display:flex;align-items:center;gap:9px;padding:18px 16px 14px}
.side-head img{width:30px;height:30px}
.side-head strong{font-size:17px;color:var(--ink)}
.side-head em{font-style:normal;font-size:9px;letter-spacing:.16em;color:var(--muted)}
.new-chat{margin:0 14px 12px;padding:10px;border:0;background:var(--blue);color:#fff;font:600 13px inherit;cursor:pointer;border-radius:9px;transition:.15s}
.new-chat:hover{background:var(--blue-dark)}
.conv-list{flex:1;overflow-y:auto;padding:0 8px}
.conv-item{display:flex;align-items:center;gap:6px;padding:9px 10px;margin-bottom:3px;border-radius:8px;cursor:pointer;color:var(--body);font-size:13px}
.conv-item:hover{background:var(--bg)}
.conv-item.active{background:var(--tint);color:var(--ink);font-weight:500}
.conv-item span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conv-item button{border:0;background:none;color:var(--muted);cursor:pointer;font-size:15px;padding:0 3px;visibility:hidden}
.conv-item:hover button{visibility:visible}
.conv-item button:hover{color:var(--err)}
.side-foot{padding:12px 16px;border-top:1px solid var(--line);font-size:10px;color:var(--muted);display:flex;flex-direction:column;gap:4px}
.side-foot a{color:var(--blue);text-decoration:none;font-size:11px}
.side-backdrop{display:none}

/* ---------- chat ---------- */
.chat{flex:1;display:flex;flex-direction:column;min-width:0;height:100vh;height:100dvh}
.chat-head{display:flex;align-items:center;gap:10px;padding:12px 20px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.85);backdrop-filter:blur(10px)}
.menu-btn{display:none;border:0;background:none;color:var(--ink);font-size:19px;cursor:pointer;padding:2px 6px}
.head-title{display:flex;align-items:baseline;gap:12px;min-width:0}
.head-title strong{font-size:15px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.conn{font-size:10px;color:var(--muted);white-space:nowrap}
.conn i{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--muted);margin-right:5px}
.conn.on{color:var(--ok)}.conn.on i{background:var(--ok)}
.conn.off{color:var(--err)}.conn.off i{background:var(--err)}

.messages{flex:1;overflow-y:auto;padding:26px 0;scrollbar-width:thin;scrollbar-color:#c6d6ea transparent}
.msg{max-width:820px;margin:0 auto 22px;padding:0 22px;display:flex;flex-direction:column}
.msg.user{align-items:flex-end}
.msg .bubble{max-width:88%;padding:11px 15px;border-radius:13px;overflow-wrap:break-word}
.msg.user .bubble{background:var(--blue);color:#fff;border-bottom-right-radius:4px;white-space:pre-wrap}
.msg.bot .bubble{max-width:100%;background:transparent;padding:0}

/* research process panel */
.process{margin:0 0 10px;border:1px solid var(--line);border-radius:11px;background:#fff;font-size:12px;overflow:hidden}
.process summary{padding:8px 13px;cursor:pointer;color:var(--blue);font-weight:500;list-style:none;display:flex;align-items:center;gap:8px;user-select:none}
.process summary::-webkit-details-marker{display:none}
.process summary .spin{width:11px;height:11px;border:2px solid var(--tint);border-top-color:var(--blue);border-radius:50%;animation:spin 1s linear infinite;flex:0 0 11px}
.process.done summary .spin{display:none}
.process .plog{padding:4px 14px 10px;color:var(--muted);max-height:220px;overflow-y:auto;border-top:1px solid var(--line);background:#fafcfe}
.process .plog .tline{margin:5px 0;display:flex;gap:8px}
.process .plog .tline i{font-style:normal;flex:0 0 auto;color:var(--blue)}
.process .plog .think{color:#8b99b0;white-space:pre-wrap;margin:5px 0}
@keyframes spin{to{transform:rotate(360deg)}}

/* markdown body */
.md{line-height:1.75;color:var(--body)}
.md p{margin:9px 0}
.md h1,.md h2,.md h3{margin:16px 0 8px;line-height:1.4;color:var(--ink)}
.md h1{font-size:19px}.md h2{font-size:17px}.md h3{font-size:15px}
.md ul,.md ol{margin:8px 0;padding-left:22px}
.md li{margin:4px 0}
.md strong{color:var(--ink)}
.md code{background:#eaf1fa;color:var(--navy);padding:2px 6px;border-radius:5px;font-size:12.5px}
.md pre{background:#f0f4fa;border:1px solid var(--line);padding:13px;border-radius:10px;overflow-x:auto}
.md pre code{background:none;padding:0}
.md table{border-collapse:collapse;margin:10px 0;display:block;overflow-x:auto;max-width:100%}
.md th,.md td{border:1px solid var(--line);padding:6px 11px;font-size:13px;white-space:nowrap}
.md th{background:var(--tint);color:var(--navy)}
.md blockquote{margin:9px 0;padding:2px 14px;border-left:3px solid var(--blue);color:var(--muted)}
.md a{color:var(--blue)}
.md hr{border:0;border-top:1px solid var(--line)}
.cursor{display:inline-block;width:8px;height:15px;background:var(--blue);vertical-align:-2px;animation:pulse 1s infinite}
@keyframes pulse{50%{opacity:.2}}

.sysnote{max-width:820px;margin:0 auto 18px;padding:0 22px;text-align:center;font-size:12px;color:#b0812f}

/* welcome */
.welcome{max-width:640px;margin:7vh auto 0;padding:0 24px;text-align:center}
.welcome img{width:80px;height:80px}
.welcome h1{font-size:26px;line-height:1.4;margin:18px 0 10px;color:var(--ink);font-weight:800}
.welcome p{color:var(--muted);font-size:13.5px}
.free-note{display:flex;flex-direction:column;gap:5px;margin:20px auto 0;padding:13px 18px;max-width:470px;border:1px solid var(--line);border-radius:12px;background:#fff;font-size:11.5px}
.free-note strong{color:var(--navy);font-size:12px}
.free-note span{color:var(--muted)}
.free-note button{border:0;background:none;color:var(--blue);font:12px inherit;cursor:pointer;padding:0}
.free-note button:hover{text-decoration:underline}
.starters{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:22px}
.starters button{padding:9px 15px;border:1px solid var(--line);background:#fff;color:var(--body);border-radius:99px;font:12.5px inherit;cursor:pointer;transition:.15s}
.starters button:hover{border-color:var(--blue);color:var(--blue)}

/* composer */
.composer{display:flex;gap:9px;align-items:flex-end;max-width:820px;width:100%;margin:0 auto;padding:10px 22px 0}
.composer textarea{flex:1;resize:none;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:12px;padding:12px 15px;font:14px/1.5 inherit;outline:none;max-height:150px}
.composer textarea::placeholder{color:#9aa8bd}
.composer textarea:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(13,77,153,.1)}
.composer button{width:44px;height:44px;flex:0 0 44px;border:0;border-radius:11px;background:var(--blue);color:#fff;font-size:19px;font-weight:700;cursor:pointer;transition:.15s}
.composer button:hover{background:var(--blue-dark)}
.composer button:disabled{opacity:.35;cursor:default}
.disclaimer{max-width:820px;margin:0 auto;padding:7px 22px 12px;font-size:10.5px;color:var(--muted);text-align:center}
.text-btn{border:0;background:none;color:var(--muted);font:inherit;cursor:pointer;padding:0;text-decoration:underline dotted;text-underline-offset:2px}
.text-btn:hover{color:var(--blue)}

/* ---------- wechat modal ---------- */
.wechat-backdrop{position:fixed;inset:0;background:rgba(11,31,63,.45);backdrop-filter:blur(5px);opacity:0;visibility:hidden;transition:.22s;z-index:40}
.wechat-backdrop.open{opacity:1;visibility:visible}
.wechat-modal{position:fixed;z-index:41;left:50%;top:50%;width:min(calc(100% - 36px),360px);transform:translate(-50%,-46%) scale(.97);padding:32px 28px 26px;background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:0 30px 80px rgba(10,53,105,.25);text-align:center;opacity:0;visibility:hidden;transition:.22s}
.wechat-modal.open{opacity:1;visibility:visible;transform:translate(-50%,-50%) scale(1)}
.wechat-close{position:absolute;right:12px;top:8px;border:0;background:none;color:var(--muted);font-size:26px;cursor:pointer}
.wechat-label{font-size:10px;letter-spacing:.2em;color:var(--blue);font-weight:700}
.wechat-modal h2{font-size:21px;margin:8px 0 6px;color:var(--ink)}
.wechat-modal p{font-size:12px;color:var(--muted);margin:0 0 16px;line-height:1.7}
.wechat-code{width:216px;height:216px;margin:0 auto 12px;padding:8px;background:#fff;border:1px solid var(--line);border-radius:12px}
.wechat-code img{display:block;width:100%;height:100%;object-fit:contain}
.wechat-modal small{color:var(--muted);font-size:11px}

/* ---------- mobile ---------- */
@media(max-width:760px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;z-index:30;transform:translateX(-100%);transition:transform .25s;box-shadow:0 0 40px rgba(10,53,105,.15)}
  .sidebar.open{transform:none}
  .side-backdrop{display:block;position:fixed;inset:0;background:rgba(11,31,63,.35);z-index:29;opacity:0;visibility:hidden;transition:.25s}
  .side-backdrop.open{opacity:1;visibility:visible}
  .menu-btn{display:block}
  .messages{padding:18px 0}
  .msg{padding:0 14px;margin-bottom:18px}
  .composer{padding:8px 12px 0}
  .composer textarea{font-size:16px}
  .welcome h1{font-size:21px}
}
