:root{
  --bg:#f6f7f9; --panel:#fff; --ink:#16181d; --muted:#6b7280;
  --line:#e4e6eb; --me:#2f6df6; --me-ink:#fff; --bot:#fff;
  --accent:#2f6df6; --ok:#22a06b; --bad:#e0453c;
}
@media (prefers-color-scheme:dark){
  :root{
    --bg:#111317; --panel:#181b21; --ink:#e8eaed; --muted:#9aa0a6;
    --line:#2a2e36; --bot:#1f232b;
  }
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font:16px/1.55 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  display:flex; flex-direction:column;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}
header{
  display:flex; align-items:center; gap:12px; padding:10px 14px;
  background:var(--panel); border-bottom:1px solid var(--line); flex-wrap:wrap;
}
.brand{font-weight:700; display:flex; align-items:center; gap:8px}
.brand-logo{width:24px; height:24px; border-radius:6px; display:block}
.ver{font-weight:400; color:var(--muted); font-size:12px}
.modes{display:flex; gap:4px; margin-left:auto}
.mode{
  border:1px solid var(--line); background:transparent; color:var(--muted);
  padding:5px 12px; border-radius:999px; cursor:pointer; font-size:14px;
}
.mode.on{background:var(--accent); border-color:var(--accent); color:#fff}
.right{display:flex; align-items:center; gap:10px; margin-left:auto}
.tts{font-size:13px; color:var(--muted); display:flex; align-items:center; gap:4px; cursor:pointer}
.subbar{
  padding:8px 14px; background:var(--panel); border-bottom:1px solid var(--line);
  font-size:14px; color:var(--muted);
}
.subbar select{
  font:inherit; padding:3px 6px; border-radius:6px;
  border:1px solid var(--line); background:var(--bg); color:var(--ink);
}
main{flex:1; overflow-y:auto; padding:16px; display:flex; flex-direction:column; gap:12px}
.msg{max-width:min(680px,86%); padding:10px 14px; border-radius:14px; white-space:pre-wrap; word-break:break-word}
.msg.me{align-self:flex-end; background:var(--me); color:var(--me-ink); border-bottom-right-radius:4px}
.msg.bot{align-self:flex-start; background:var(--bot); border:1px solid var(--line); border-bottom-left-radius:4px}
.msg.err{align-self:center; background:transparent; border:1px dashed var(--bad); color:var(--bad); font-size:14px}
.msg img{max-width:100%; border-radius:10px; display:block; margin-bottom:6px}
.meta{font-size:11px; color:var(--muted); margin-top:6px}
.msg.me .meta{color:rgba(255,255,255,.75)}
/* 翻译模式:原文+译文摆在同一个框里,不分两个气泡 */
.msg .trans{
  margin-top:6px; padding-top:6px;
  border-top:1px dashed rgba(255,255,255,.4);
}
.msg.bot .trans{border-top-color:var(--line)}
.msg .trans.pending{opacity:.6}
.blink::after{content:"▍"; animation:b 1s steps(2) infinite}
@keyframes b{50%{opacity:0}}
#imgPreview{position:relative; padding:0 14px 6px; align-self:flex-start}
#imgPreview img{max-height:96px; border-radius:10px; display:block}
#imgHint{display:none; font-size:13px; color:var(--muted); padding:4px 0}
#imgPreview.compact img{display:none}
#imgPreview.compact #imgHint{display:inline-block; padding-right:22px}
#imgClear{
  position:absolute; top:4px; right:2px; width:28px; height:28px; min-height:0;
  padding:0; border:0; border-radius:8px; box-sizing:border-box;
  display:grid; place-items:center; background:#59616b; color:#fff;
  cursor:pointer; font-size:20px; line-height:1;
}
#imgClear:hover{background:#3f4750}
#imgClear:focus-visible{outline:3px solid color-mix(in srgb,var(--accent) 45%,transparent); outline-offset:2px}
/* 摄像头直拍:全屏取景,拍完直接复用看图流程 */
#camOverlay{
  position:fixed; inset:0; z-index:20; background:#000;
  display:flex; align-items:center; justify-content:center;
}
#camVideo{width:100%; height:100%; object-fit:cover}
.camControls{
  position:absolute; left:0; right:0; bottom:0;
  padding:20px 24px calc(20px + env(safe-area-inset-bottom, 0px));
  display:flex; align-items:center; justify-content:space-between;
}
.camControls button{
  border:none; background:#0006; color:#fff; border-radius:50%;
  width:52px; height:52px; font-size:22px; cursor:pointer;
}
#camShutter{
  width:68px; height:68px; font-size:34px; background:#fff3; border:3px solid #fff;
}
footer{
  display:flex; gap:8px; padding:10px 12px; align-items:flex-end;
  background:var(--panel); border-top:1px solid var(--line);
}
footer button{
  border:1px solid var(--line); background:var(--bg); color:var(--ink);
  border-radius:10px; padding:9px 12px; font-size:18px; cursor:pointer; line-height:1;
}
#sendBtn{background:var(--accent); border-color:var(--accent); color:#fff; font-size:15px; padding:11px 16px}
#micBtn.proc{opacity:.55}
.sttsel{font-size:12px; color:var(--muted); background:var(--panel); border:1px solid var(--line); border-radius:8px; padding:2px 4px; max-width:96px}
#micBtn.rec{background:var(--bad); border-color:var(--bad); color:#fff}
/* 持续开麦:两句话之间的空档(没在录音,但循环还没关)也要看得出来,
   不然用户会以为按失败了 */
#micBtn.loop{box-shadow:0 0 0 3px var(--accent)}
#micBtn.loop.rec{box-shadow:0 0 0 3px var(--bad)}
button:disabled{opacity:.45; cursor:default}
#input{
  flex:1; resize:none; max-height:140px; font:inherit; padding:10px 12px;
  border-radius:10px; border:1px solid var(--line); background:var(--bg); color:var(--ink);
}
#toast{
  position:fixed; left:50%; bottom:84px; transform:translateX(-50%);
  background:#000c; color:#fff; padding:8px 14px; border-radius:8px; font-size:14px; z-index:9;
}
.hidden{display:none !important}

/* R20 隐私设置：窄屏可滚动，保留原生对话框焦点管理。 */
dialog { max-width: min(90vw, 640px); max-height: 85vh; overflow: auto; padding: 24px; border-radius: 12px; }
dialog::backdrop { background: #0008; }
dialog p { line-height: 1.6; }

/* R40 visual system */
button, select, input, textarea { font: inherit; }
button, select { min-height:44px; border:1px solid var(--line); border-radius:10px; }
button { padding:0 14px; background:var(--panel); color:var(--ink); }
button:focus-visible, select:focus-visible, textarea:focus-visible { outline:3px solid color-mix(in srgb,var(--accent) 35%,transparent); outline-offset:2px; }
header { gap:10px; padding:10px max(14px,env(safe-area-inset-right)); }
.modes { margin-left:0; background:var(--bg); padding:3px; border-radius:12px; }
.mode { min-height:40px; padding:0 14px; border:0; }
.right { margin-left:auto; gap:8px; flex-wrap:wrap; }
.tts { min-height:40px; padding:0 8px; border:1px solid var(--line); border-radius:10px; background:var(--panel); }
.tts input { width:18px; height:18px; accent-color:var(--accent); }
#ttsRole {
  min-height:34px; padding:0 6px; border:0; background:var(--panel); color:var(--ink);
  color-scheme:light dark;
}
#ttsRole option { background:var(--panel); color:var(--ink); }
#settingsPanel { border:0; box-shadow:0 20px 70px #0003; width:min(92vw,560px); }
#settingsPanel h2 { font-size:20px; margin:0 0 16px; }
#settingsPanel h3 { margin:18px 0 6px; font-size:16px; }
#settingsPanel .account-settings { border-top:1px solid var(--line); border-bottom:1px solid var(--line); padding:4px 0 12px; }
#settingsPanel .account-settings p { margin:6px 0; font-size:13px; color:var(--muted); }
#settingsPanel .subbar { display:grid; grid-template-columns:auto 1fr; gap:12px; align-items:center; border:0; padding:0 0 16px; }
#settingsPanel .hint { grid-column:1/-1; font-size:13px; }
#settingsPanel label { display:flex; align-items:center; gap:8px; min-height:44px; margin:8px 0; }
#settingsPanel > div:last-child { display:flex; justify-content:flex-end; gap:10px; margin-top:18px; }
#settingsSave { background:var(--accent); color:#fff; border-color:var(--accent); }
footer { display:grid; grid-template-columns:repeat(3,44px) minmax(0,1fr) auto; grid-template-rows:auto auto; gap:8px; padding:10px 12px max(10px,env(safe-area-inset-bottom)); align-items:stretch; }
footer button { width:44px; min-width:44px; padding:0; font-size:17px; grid-row:1; }
#input { min-height:44px; min-width:0; grid-column:1 / 5; grid-row:2; }
#sendBtn { width:auto; min-width:64px; grid-column:5; grid-row:2; }
@media (max-width:600px){ header { align-items:stretch; } .brand { flex:1; } .modes { order:3; width:100%; justify-content:space-between; } .mode { flex:1; } .right { margin-left:0; } footer { grid-template-columns:repeat(3,44px) minmax(0,1fr) auto; } }
@media (max-width:360px){ .right { width:100%; } .right .tts { flex:1; } footer { gap:5px; } #input { min-width:0; } }
