/* ===== 设计基调：延续《诊断认知模型_展示页面》的视觉体系，扩展为 ChatGPT 式对话工作台 ===== */
:root{
  --bg:#f4f6f8; --card:#ffffff; --ink:#1f2733; --sub:#5b6673; --line:#e6eaef;
  --brand:#2f6df6; --brandsoft:#eaf1ff;
  --red:#e5484d; --redsoft:#fdecec; --amber:#d9822b; --ambersoft:#fdf1e3;
  --green:#2f9e5f; --greensoft:#e7f6ee; --teal:#0e8a8a; --tealsoft:#e2f4f4;
  --purple:#7c4dff; --purplesoft:#f0ebff;
  --radius:14px; --shadow:0 1px 3px rgba(20,30,50,.06),0 6px 20px rgba(20,30,50,.05);
  --sidebar-w:272px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",sans-serif;
  line-height:1.6;font-size:15px;display:flex;overflow:hidden;}
button{font:inherit;cursor:pointer}
h4{font-size:13.5px}

/* ---------- 按钮 ---------- */
.btn{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:10px;
  padding:7px 14px;font-size:13.5px;transition:all .15s;}
.btn:hover{border-color:var(--brand);color:var(--brand);}
.btn:disabled{opacity:.45;cursor:not-allowed;}
.btn.primary{background:linear-gradient(135deg,#2f6df6,#5b8cff);border:none;color:#fff;font-weight:600;
  padding:10px 18px;box-shadow:0 2px 8px rgba(47,109,246,.35);}
.btn.primary:hover{filter:brightness(1.06);color:#fff;}
.btn.danger{color:var(--red);border-color:#f3c2c4;}
.btn.danger:hover{border-color:var(--red);color:var(--red);}

/* ---------- 会话侧栏 ---------- */
.sidebar{width:var(--sidebar-w);flex:none;background:#fff;border-right:1px solid var(--line);
  display:flex;flex-direction:column;height:100vh;z-index:60;}
.side-top{padding:14px 14px 10px;}
.newchat{width:100%;}
.session-list{flex:1;overflow-y:auto;padding:4px 8px 12px;}
.session-item{display:flex;align-items:center;gap:6px;padding:9px 10px;border-radius:10px;cursor:pointer;
  border:1px solid transparent;margin-bottom:2px;transition:background .12s;}
.session-item:hover{background:#f4f7fc;}
.session-item.active{background:var(--brandsoft);border-color:#cfe0ff;}
.session-item .si-body{flex:1;min-width:0;}
.session-item .si-title{font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;color:var(--ink);}
.session-item .si-time{font-size:11.5px;color:var(--sub);}
.session-item .si-ops{display:none;gap:2px;flex:none;}
.session-item:hover .si-ops{display:flex;}
.session-item .si-ops button{border:none;background:none;color:var(--sub);font-size:13px;
  padding:2px 5px;border-radius:6px;line-height:1;}
.session-item .si-ops button:hover{background:#e7ecf3;color:var(--ink);}
.side-empty{color:var(--sub);font-size:12.5px;text-align:center;padding:28px 8px;}
.side-foot{padding:10px 14px;border-top:1px solid var(--line);font-size:11.5px;color:var(--sub);line-height:1.5;}
.side-mask{display:none;}

/* ---------- 主区骨架 ---------- */
.main{flex:1;min-width:0;display:flex;flex-direction:column;height:100vh;}
.topbar{flex:none;background:rgba(255,255,255,.88);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);
  padding:10px 20px;display:flex;align-items:center;gap:12px;}
.logo{width:34px;height:34px;border-radius:10px;background:linear-gradient(135deg,#2f6df6,#5b8cff);
  display:grid;place-items:center;font-size:18px;box-shadow:var(--shadow);flex:none;}
.topbar h1{font-size:16px;margin:0;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.topbar .spacer,.composer-bar .spacer{flex:1}
.icon-btn{padding:7px 10px;display:none;}
.run-note{font-size:12.5px;color:var(--sub);}
.run-note.err{color:var(--red);}

/* ---------- 消息流 ---------- */
.thread{flex:1;overflow-y:auto;padding:22px 20px 12px;}
.thread-in{max-width:960px;margin:0 auto;}
.msg{margin-bottom:18px;display:flex;}
.msg.user{justify-content:flex-end;}
.msg .bubble{max-width:78%;background:var(--brandsoft);border:1px solid #d5e3ff;border-radius:14px 14px 4px 14px;
  padding:10px 14px;font-size:14px;white-space:pre-wrap;word-break:break-word;}
.msg.user .bubble{background:var(--brandsoft);}
.msg .bubble .bthumbs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;}
.msg .bubble .bthumbs img{width:72px;height:72px;object-fit:cover;border-radius:8px;border:1px solid var(--line);}
.msg.asst{display:block;}
.msg-meta{font-size:11.5px;color:var(--sub);margin:6px 4px 0;}

/* 追问回答气泡 */
.answer{background:var(--card);border:1px solid var(--line);border-radius:4px 14px 14px 14px;
  box-shadow:var(--shadow);padding:14px 18px;}
.answer .answer-text{font-size:14.5px;white-space:pre-wrap;word-break:break-word;}
.answer .cursor{display:inline-block;width:8px;height:15px;background:var(--brand);vertical-align:-2px;animation:pulse 1s infinite;}
.answer.error{border-color:#f3c2c4;background:var(--redsoft);}

/* 空会话欢迎页 */
.welcome{text-align:center;padding:12vh 20px 40px;color:var(--sub);}
.welcome .wlogo{font-size:44px;}
.welcome p{font-size:13.5px;margin:10px auto 0;}

/* ---------- 底部输入区 ---------- */
.composer{flex:none;padding:10px 20px 16px;background:linear-gradient(180deg,rgba(244,246,248,0),var(--bg) 30%);}
.composer-in{max-width:960px;margin:0 auto;background:var(--card);border:1px solid var(--line);
  border-radius:16px;box-shadow:var(--shadow);padding:10px 14px 8px;}
.composer-in:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px var(--brandsoft),var(--shadow);}
#caseInput{width:100%;border:none;outline:none;resize:none;background:transparent;
  font:inherit;font-size:14px;line-height:1.6;max-height:220px;padding:2px 2px 6px;}
.composer-bar{display:flex;gap:8px;align-items:center;border-top:1px dashed var(--line);padding-top:8px;}
.composer-bar .btn{font-size:12.5px;padding:6px 12px;}
.composer-bar .btn.primary{padding:6px 20px;}
.composer-hint{max-width:960px;margin:6px auto 0;font-size:11.5px;color:var(--sub);text-align:center;}

/* ---------- 影像缩略图 ---------- */
.thumbs{display:flex;gap:8px;flex-wrap:wrap;}
.thumbs:not(:empty){margin-bottom:8px;}
.thumb{position:relative;width:64px;height:64px;border-radius:8px;overflow:hidden;border:1px solid var(--line);}
.thumb img{width:100%;height:100%;object-fit:cover;}
.thumb .rm{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;border:none;
  background:rgba(0,0,0,.55);color:#fff;font-size:11px;line-height:1;display:grid;place-items:center;padding:0;}

/* ---------- 会诊消息：流程条 ---------- */
.rail{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 8px;}
.rail .step{flex:1;min-width:110px;background:var(--card);border:1px solid var(--line);
  border-radius:10px;padding:8px 10px;font-size:12px;color:var(--sub);text-align:center;transition:all .2s;}
.rail .step b{display:block;color:var(--ink);font-size:12px;}
.rail .step .n{display:inline-block;width:18px;height:18px;line-height:18px;border-radius:50%;
  background:var(--brandsoft);color:var(--brand);font-weight:700;font-size:11px;margin-bottom:4px;}
.rail .step.hot{border-color:var(--purple);background:var(--purplesoft);}
.rail .step.hot .n{background:var(--purple);color:#fff;}
.rail .step.active{border-color:var(--brand);box-shadow:0 0 0 3px var(--brandsoft);}
.rail .step.active .n{background:var(--brand);color:#fff;animation:pulse 1.2s infinite;}
.rail .step.done .n{background:var(--green);color:#fff;}
.rail .step.failed .n{background:var(--red);color:#fff;}
.rail.clickable .step{cursor:pointer;}
.rail.clickable .step:hover{border-color:var(--brand);}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.45}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- 会诊消息：阶段卡片 ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);margin-top:14px;overflow:hidden;}
.card.enter{animation:rise .35s ease;}
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.card > .head{display:flex;align-items:center;gap:10px;padding:13px 18px;border-bottom:1px solid var(--line);flex-wrap:wrap;}
.card > .head .ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:16px;flex:none;}
.card > .head h2{margin:0;font-size:15.5px;}
.card > .head .status{margin-left:auto;display:flex;align-items:center;gap:8px;}
.card > .body{padding:16px 18px;}
.card.hot{border:1.5px solid var(--purple);box-shadow:0 0 0 4px var(--purplesoft),var(--shadow);}
.card.hot > .head{background:var(--purplesoft);}
.card.waiting{opacity:.62;}
.card.failed-card{border-color:#f3c2c4;}

/* 完成态手风琴 */
.card.accord > .head{cursor:pointer;user-select:none;border-bottom:none;}
.card.accord:not(.collapsed) > .head{border-bottom:1px solid var(--line);}
.card > .head .chev{margin-left:auto;color:var(--sub);font-size:12px;transition:transform .15s;}
.card > .head .chev::before{content:"▾";}
.card.collapsed > .head .chev::before{content:"▸";}
.card.collapsed > .body{display:none;}
.card.accord > .head .status{margin-left:0;}
.card.accord > .head h2{font-size:14.5px;}

/* 终审摘要卡 */
.summary-card{border:1.5px solid var(--brand);box-shadow:0 0 0 4px var(--brandsoft),var(--shadow);}
.summary-card > .head{background:linear-gradient(135deg,#2f6df6,#5b8cff);color:#fff;}
.summary-card > .head h2{color:#fff;}
.summary-card > .head .headmeta{margin-left:auto;font-size:12px;opacity:.92;}
.summary-actions{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap;}

.pill{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:2px 10px;border-radius:999px;
  background:#eef1f5;color:var(--sub);white-space:nowrap;}
.pill.run{background:var(--brandsoft);color:var(--brand);}
.pill.run::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--brand);animation:pulse 1.2s infinite;}
.pill.ok{background:var(--greensoft);color:var(--green);}
.pill.bad{background:var(--redsoft);color:var(--red);}
.pill.warn{background:var(--ambersoft);color:var(--amber);}
.pill .tk{font-variant-numeric:tabular-nums;opacity:.8;}

/* ---------- 流式区 / 思考 / 工具 ---------- */
.streamwrap{margin:2px 0;}
.stream{background:#0f1726;color:#dbe4f3;border-radius:10px;padding:12px 14px;font-size:12.5px;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;line-height:1.7;white-space:pre-wrap;
  word-break:break-word;max-height:300px;overflow-y:auto;}
.stream .cursor{display:inline-block;width:7px;height:14px;background:#5b8cff;vertical-align:-2px;animation:pulse 1s infinite;}
details.think{border:1px solid var(--line);border-radius:10px;margin-top:10px;background:#fbfcfe;overflow:hidden;}
details.think > summary{cursor:pointer;padding:8px 12px;font-size:12.5px;color:var(--sub);user-select:none;list-style:none;}
details.think > summary::before{content:"▸ ";color:var(--brand);}
details.think[open] > summary::before{content:"▾ ";}
details.think .thinkbody{padding:2px 14px 12px;font-size:12.5px;color:var(--sub);white-space:pre-wrap;word-break:break-word;
  max-height:260px;overflow-y:auto;border-top:1px dashed var(--line);}
details.think.live > summary{color:var(--brand);}
.toolchip{display:inline-flex;align-items:center;gap:6px;background:var(--tealsoft);color:var(--teal);
  border-radius:8px;padding:3px 10px;font-size:12px;margin:4px 6px 0 0;}
details.raw{margin-top:10px;}
details.raw > summary{cursor:pointer;font-size:12px;color:var(--sub);user-select:none;list-style:none;}
details.raw > summary::before{content:"▸ ";}
details.raw[open] > summary::before{content:"▾ ";}
details.raw pre{background:#f7f9fc;border:1px solid var(--line);border-radius:8px;padding:10px 12px;
  font-size:12px;white-space:pre-wrap;word-break:break-word;max-height:320px;overflow:auto;}

/* ---------- 结构化渲染通用件（沿用展示页面体系） ---------- */
.kv{display:grid;grid-template-columns:120px 1fr;gap:6px 14px;}
.kv dt{color:var(--sub);font-size:13px;}
.kv dd{margin:0;}
ul.clean{margin:6px 0;padding-left:18px;} ul.clean li{margin:3px 0;}
.src{color:var(--teal);font-size:12px;background:var(--tealsoft);padding:0 6px;border-radius:5px;}
.miss{color:var(--amber);font-size:12px;background:var(--ambersoft);padding:0 6px;border-radius:5px;}
table.grid{width:100%;border-collapse:collapse;font-size:14px;margin:4px 0;}
table.grid th,table.grid td{border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top;}
table.grid th{background:#f7f9fc;color:var(--sub);font-weight:600;font-size:13px;}
.timeline{border-left:2px solid var(--brandsoft);margin-left:6px;padding-left:14px;}
.timeline .t{position:relative;margin-bottom:10px;}
.timeline .t::before{content:"";position:absolute;left:-21px;top:6px;width:9px;height:9px;border-radius:50%;background:var(--brand);}
.timeline .tm{font-size:12px;color:var(--brand);font-weight:600;}
.badge{display:inline-block;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600;}
.b-red{background:var(--redsoft);color:var(--red);}
.b-amber{background:var(--ambersoft);color:var(--amber);}
.b-green{background:var(--greensoft);color:var(--green);}
.b-teal{background:var(--tealsoft);color:var(--teal);}
.b-purple{background:var(--purplesoft);color:var(--purple);}
.b-gray{background:#eef1f5;color:var(--sub);}
.conf{display:inline-flex;align-items:center;gap:10px;min-width:0;}
.conf .bar{flex:1;height:9px;border-radius:6px;background:#eef1f5;overflow:hidden;min-width:80px;width:140px;}
.conf .bar i{display:block;height:100%;border-radius:6px;transition:width .6s ease;}
.conf .num{font-weight:700;font-variant-numeric:tabular-nums;}
.stars{color:#f5a623;letter-spacing:1px;font-size:13px;white-space:nowrap;}
.stars .off{color:#dfe4ea;}
.ddx{border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:12px;}
.ddx.top{border-color:var(--brand);background:linear-gradient(180deg,var(--brandsoft),#fff 60%);}
.ddx .dh{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap;}
.ddx .dh .name{font-size:15px;font-weight:700;}
.ddx .rank{width:22px;height:22px;border-radius:50%;background:var(--brand);color:#fff;
  display:grid;place-items:center;font-size:12px;font-weight:700;flex:none;}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.two .col h4{margin:2px 0 4px;font-size:13px;}
.sup h4{color:var(--green);} .agn h4{color:var(--red);}
.biasrow td:first-child{font-weight:600;white-space:nowrap;}
.note{background:#fbfcfe;border:1px dashed var(--line);border-radius:10px;padding:10px 12px;font-size:13px;color:var(--sub);}
.callout{border-left:4px solid var(--purple);background:var(--purplesoft);border-radius:8px;padding:10px 14px;margin-top:10px;}
.callout.red{border-color:var(--red);background:var(--redsoft);}
.callout.green{border-color:var(--green);background:var(--greensoft);}
.t3div{text-align:center;color:var(--teal);font-size:12px;font-weight:600;margin:0 0 12px;}
.quiet{color:var(--sub);font-size:12.5px;margin:0;}

/* ---------- 版本标注 / 反证速览 / 置信度轨迹 / 原文高亮 ---------- */
.tagselect{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:8px;
  padding:5px 8px;font-size:12.5px;font-family:inherit;}
.tagselect:disabled{opacity:.45;}
.tagchip{display:inline-block;background:var(--purplesoft);color:var(--purple);border-radius:5px;
  padding:0 5px;font-size:10.5px;font-weight:600;margin-left:2px;}
.sa-tag{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--sub);}
.biasbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:10px;padding:8px 12px;
  background:var(--purplesoft);border:1px solid #ddd2ff;border-radius:10px;cursor:pointer;transition:filter .15s;}
.biasbar:hover{filter:brightness(.97);}
.biasbar .bb-label{font-size:12.5px;font-weight:700;color:var(--purple);margin-right:2px;}
.cpathrow{font-size:12.5px;color:var(--sub);margin:2px 0 6px;}
.cpath{font-variant-numeric:tabular-nums;}
.cp-down{color:var(--red);font-weight:700;margin-left:4px;}
.cp-up{color:var(--green);font-weight:700;margin-left:4px;}
.cp-eq{color:var(--sub);margin-left:4px;}
.cp-new{color:var(--amber);font-size:12px;font-weight:600;}
.cp-cap{display:inline-block;background:var(--redsoft);color:var(--red);border-radius:5px;
  padding:0 6px;font-size:11.5px;font-weight:600;margin-left:6px;}
.rrcmp{display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:stretch;margin-top:10px;}
.rrcol{background:#fbfcfe;border:1px dashed var(--line);border-radius:10px;padding:8px 12px;}
.rrcol h4{margin:0 0 4px;font-size:12.5px;color:var(--sub);}
.rrcol ol{margin:0;padding-left:20px;font-size:13px;}
.rrarrow{display:grid;place-items:center;color:var(--purple);font-size:18px;font-weight:700;}
mark.hl{background:#ffe9a8;border-radius:3px;padding:0 1px;}
.msg.user .bubble.flash{animation:flashborder 1.2s ease;}
@keyframes flashborder{0%,100%{box-shadow:none}25%,60%{box-shadow:0 0 0 3px var(--amber)}}
.src{cursor:pointer;}
.side-link{color:var(--brand);text-decoration:none;}
.side-link:hover{text-decoration:underline;}
.err-banner{background:var(--redsoft);border:1px solid #f3c2c4;color:var(--red);border-radius:10px;
  padding:10px 14px;margin-top:14px;font-size:13.5px;}
.warn-banner{background:var(--ambersoft);border:1px solid #f0d9bd;color:var(--amber);border-radius:10px;
  padding:10px 14px;margin-top:14px;font-size:13.5px;}

/* ---------- 响应式 ---------- */
@media(max-width:960px){
  .sidebar{position:fixed;left:0;top:0;transform:translateX(-100%);transition:transform .2s;box-shadow:var(--shadow);}
  .sidebar.open{transform:none;}
  .sidebar.open + .side-mask{display:block;position:fixed;inset:0;background:rgba(20,30,50,.35);z-index:55;}
  .icon-btn{display:block;}
  .topbar h1{font-size:14.5px;}
  .msg .bubble{max-width:92%;}
}
@media(max-width:640px){
  .two{grid-template-columns:1fr}.kv{grid-template-columns:88px 1fr}
  /* 窄屏下表格内的置信度条独占一行，避免诊断名列被压成单字竖排 */
  table.grid .conf{flex-wrap:wrap;}
  table.grid .conf .bar{flex-basis:100%;order:3;width:auto;min-width:0;}
}
