:root{
  --bg:#12152e; --bg2:#3a1d7a; --card:rgba(255,255,255,.055); --card2:rgba(255,255,255,.09);
  --line:rgba(255,255,255,.12); --ok:#34d399; --warn:#fbbf24; --bad:#fb7185; --accent:#7c83ff;
  --muted:#9aa0c3; --txt:#eef0ff; --bubble-u:linear-gradient(135deg,#5b8def,#7c5cff);
  --tabbar-h:62px; --header-h:56px;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;overflow:hidden}
body{
  font:16px/1.5 -apple-system,BlinkMacSystemFont,system-ui,sans-serif;color:var(--txt);
  background:linear-gradient(165deg,var(--bg),var(--bg2));background-attachment:fixed;
  -webkit-font-smoothing:antialiased;overscroll-behavior:none;
}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
input,select,textarea{font:inherit}
.hidden{display:none!important}

/* ---------------- LOGIN ---------------- */
#login{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}
.login-card{width:100%;max-width:380px;background:var(--card);border:1px solid var(--line);border-radius:22px;
  padding:30px 24px calc(26px + env(safe-area-inset-bottom));backdrop-filter:blur(14px);box-shadow:0 24px 60px rgba(0,0,0,.4)}
.login-card .brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}
.login-card .brand img{width:46px;height:46px;border-radius:12px}
.login-card h1{font-size:19px;margin:0}
.login-card .brand p{margin:1px 0 0;font-size:12px;color:var(--muted)}
.field{margin-bottom:13px}
.field label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);margin:0 0 6px 2px}
.field input{width:100%;padding:13px 14px;border-radius:13px;background:rgba(0,0,0,.28);border:1px solid var(--line);
  color:var(--txt);outline:none;transition:border-color .2s}
.field input:focus{border-color:var(--accent)}
.field input.otp{letter-spacing:8px;text-align:center;font-size:20px;font-weight:700}
.btn{width:100%;padding:14px;border-radius:14px;background:var(--bubble-u);color:#fff;font-weight:700;
  transition:transform .1s,opacity .2s;margin-top:6px}
.btn:active{transform:scale(.985)} .btn[disabled]{opacity:.55}
.err{color:var(--bad);font-size:13px;min-height:18px;margin-top:10px;text-align:center}

/* ---------------- APP SHELL ---------------- */
.offline-banner{flex:none;background:rgba(251,113,133,.18);border-bottom:1px solid rgba(251,113,133,.4);
  color:var(--bad);text-align:center;font-size:12px;font-weight:600;padding:5px 14px;letter-spacing:.3px}
.update-banner{flex:none;background:rgba(124,131,255,.16);border-bottom:1px solid rgba(124,131,255,.35);
  color:var(--accent);font-size:12px;font-weight:600;padding:6px 14px;letter-spacing:.3px;
  display:flex;align-items:center;justify-content:center;gap:8px}
#updateRefresh{padding:2px 10px;border-radius:8px;background:var(--accent);color:#fff;font-size:11px;font-weight:700;line-height:1.6}
.update-dismiss{width:18px;height:18px;border-radius:50%;background:rgba(124,131,255,.25);font-size:10px;color:var(--accent)}
#app{position:fixed;inset:0;display:flex;flex-direction:column}
header{height:calc(var(--header-h) + env(safe-area-inset-top));padding:env(safe-area-inset-top) 14px 0;
  display:flex;align-items:center;gap:10px;background:rgba(18,21,46,.7);backdrop-filter:blur(16px);
  border-bottom:1px solid var(--line);z-index:10;flex:none}
header .title{font-weight:700;font-size:16px;flex:none}
header .spacer{flex:1}
.iconbtn{width:36px;height:36px;border-radius:11px;background:var(--card);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:15px}
.iconbtn:active{background:var(--card2)}

/* segmented engine switch */
.seg{display:flex;background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:12px;padding:3px;gap:3px}
.seg button{padding:6px 13px;border-radius:9px;font-size:13px;font-weight:600;color:var(--muted);transition:all .18s}
.seg button.on{background:var(--card2);color:var(--txt);box-shadow:0 1px 6px rgba(0,0,0,.25)}
select.model{background:rgba(0,0,0,.3);border:1px solid var(--line);color:var(--txt);border-radius:11px;
  padding:7px 9px;font-size:13px;outline:none;margin-left:6px}
#engSeg{margin-left:6px}

main{flex:1;position:relative;overflow:hidden}
.view{position:absolute;inset:0;overflow-y:auto;-webkit-overflow-scrolling:touch;display:none}
.view.on{display:block}
.pad{padding:16px 14px calc(16px + var(--tabbar-h) + env(safe-area-inset-bottom))}

/* ---------------- CHAT ---------------- */
#chatView{display:none;flex-direction:column}
#chatView.on{display:flex}
#messages{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:16px 14px 8px;display:flex;flex-direction:column;gap:12px}
.msg{max-width:86%;padding:11px 14px;border-radius:18px;font-size:15px;line-height:1.5;word-wrap:break-word;animation:rise .25s ease}
@keyframes rise{from{opacity:0;transform:translateY(6px)}}
.msg.user{align-self:flex-end;background:var(--bubble-u);color:#fff;border-bottom-right-radius:6px}
.msg.bot{align-self:flex-start;background:var(--card);border:1px solid var(--line);border-bottom-left-radius:6px}
.msg.bot .eng{font-size:10.5px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin-bottom:5px;font-weight:700}
.msg.bot .eng.claude{color:var(--accent)}
.msg.bot .eng.codex{color:var(--warn)}
.msg.bot .eng.zai{color:var(--ok)}
.msg.err{align-self:flex-start;background:rgba(251,113,133,.12);border:1px solid rgba(251,113,133,.35);color:#ffd9df}
.msg pre{position:relative;background:rgba(0,0,0,.42);border:1px solid var(--line);border-radius:11px;padding:11px;overflow-x:auto;margin:8px 0;font-size:13px}
.copy-btn{position:absolute;top:6px;right:6px;padding:3px 9px;border-radius:7px;
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.18);
  color:var(--muted);font-size:11px;font-weight:600;transition:background .15s,color .15s;line-height:1.4}
.copy-btn:active{background:rgba(255,255,255,.22)}
.copy-btn.copied{color:var(--ok)}
.msg code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.msg p code{background:rgba(0,0,0,.34);padding:1.5px 5px;border-radius:5px;font-size:13px}
.msg p{margin:6px 0}.msg p:first-child{margin-top:0}.msg p:last-child{margin-bottom:0}
.msg ul,.msg ol{margin:6px 0 6px 20px;padding:0}.msg li{margin:2px 0}
.msg h1,.msg h2,.msg h3,.msg h4{margin:8px 0 4px;font-size:1em;font-weight:700}
.msg blockquote{border-left:3px solid var(--line);margin:6px 0 6px 4px;padding-left:10px;color:var(--muted)}
.typing{display:flex;gap:5px;padding:4px 2px}
.typing i{width:8px;height:8px;border-radius:50%;background:var(--muted);animation:blink 1.3s infinite both}
.typing i:nth-child(2){animation-delay:.2s}.typing i:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,80%,100%{opacity:.25}40%{opacity:1}}
.msg-meta{font-size:10px;color:var(--muted);text-align:right;margin-top:6px;opacity:.65}
.retry-btn{margin-top:8px;padding:7px 12px;border-radius:12px;background:var(--bubble-u);color:#fff;font-size:12px;font-weight:800;
  display:inline-flex;align-items:center;gap:6px;box-shadow:0 4px 16px rgba(0,0,0,.18)}
.retry-btn:active{transform:scale(.97)}
.retry-btn[disabled]{opacity:.55}
.title-wrap{display:flex;flex-direction:column;gap:1px;flex:none}
.session-cost{font-size:10px;color:var(--muted);opacity:.8;letter-spacing:.2px}
.empty{margin:auto;text-align:center;color:var(--muted);padding:40px 20px}
.empty .big{font-size:34px;margin-bottom:10px}

.composer{flex:none;padding:8px 12px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line);
  background:rgba(18,21,46,.72);backdrop-filter:blur(16px);display:flex;gap:9px;align-items:flex-end;
  margin-bottom:var(--tabbar-h)}
.voice-status{margin:0 12px 8px;padding:8px 12px;border-radius:14px;border:1px solid var(--line);background:rgba(255,255,255,.06);color:var(--muted);font-size:12px}
.voice-status.live{color:#fff;border-color:rgba(125,210,255,.45);background:rgba(90,160,255,.14)}
.voice-status.err{color:#ffd8d8;border-color:rgba(255,110,110,.45);background:rgba(255,80,80,.12)}
.composer textarea{flex:1;max-height:130px;min-height:44px;resize:none;padding:11px 14px;border-radius:18px;
  background:rgba(0,0,0,.3);border:1px solid var(--line);color:var(--txt);outline:none;line-height:1.4}
.composer textarea:focus{border-color:var(--accent)}
.send,.mic{width:44px;height:44px;border-radius:50%;color:#fff;flex:none;border:1px solid transparent;
  display:flex;align-items:center;justify-content:center;font-size:18px;transition:transform .1s,opacity .2s,background .2s,border-color .2s}
.send{background:var(--bubble-u)}
.mic{background:rgba(255,255,255,.09);border-color:var(--line)}
.mic.listening{background:rgba(255,80,100,.22);border-color:rgba(255,120,140,.8);animation:micpulse 1s infinite}
.mic.unsupported{opacity:.45}
@keyframes micpulse{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}
.send:active,.mic:active{transform:scale(.92)} .send[disabled],.mic[disabled]{opacity:.4}


.history-panel{position:absolute;top:10px;left:10px;right:10px;max-height:min(55vh,420px);z-index:8;
  background:rgba(18,21,46,.96);border:1px solid var(--line);border-radius:18px;box-shadow:0 18px 50px rgba(0,0,0,.45);
  overflow:hidden;backdrop-filter:blur(16px)}
.history-head{display:flex;align-items:center;justify-content:space-between;padding:11px 13px;border-bottom:1px solid var(--line);
  font-size:12px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);font-weight:800}
.history-head button{width:28px;height:28px;border-radius:9px;background:var(--card);border:1px solid var(--line);font-size:12px;color:var(--muted)}
.history-list{max-height:calc(min(55vh,420px) - 51px);overflow-y:auto;padding:7px;display:flex;flex-direction:column;gap:7px}
.hist-item{display:grid;grid-template-columns:1fr auto;gap:6px;align-items:center;text-align:left;width:100%;border:1px solid var(--line);
  background:rgba(255,255,255,.045);border-radius:13px;padding:9px 10px;color:var(--txt)}
.hist-item.active{border-color:rgba(124,131,255,.75);background:rgba(124,131,255,.14)}
.hist-main{min-width:0}.hist-title{font-size:13px;font-weight:750;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hist-meta{font-size:10.5px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hist-del{width:30px;height:30px;border-radius:9px;background:rgba(251,113,133,.1);border:1px solid rgba(251,113,133,.24);color:var(--bad);font-size:13px}

/* ---------------- MONITOR ---------------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:16px;margin-bottom:14px;backdrop-filter:blur(8px)}
.card h2{font-size:12px;text-transform:uppercase;letter-spacing:1.2px;color:var(--muted);margin:0 0 14px;display:flex;align-items:center;gap:8px}
.metric-status{margin-left:auto;font-size:11px;text-transform:none;letter-spacing:0;color:var(--muted)}
.livedot{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 8px var(--ok);animation:pulse 2s infinite}
.livedot.bad{background:var(--bad);box-shadow:0 0 8px var(--bad)}
@keyframes pulse{50%{opacity:.35}}
.rings{display:flex;justify-content:space-around;gap:8px}
.ring{text-align:center;flex:1}
.ring .box{position:relative}
.ring svg{width:92px;height:92px;transform:rotate(-90deg)}
.ring .track{fill:none;stroke:rgba(255,255,255,.08);stroke-width:9}
.ring .bar{fill:none;stroke:var(--ok);stroke-width:9;stroke-linecap:round;transition:stroke-dashoffset .6s ease,stroke .4s}
.ring .ctr{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800}
.ring .name{font-size:12px;color:var(--muted);margin-top:6px;letter-spacing:.4px}
.ring .sub{font-size:11px;color:var(--muted)}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stat{background:rgba(255,255,255,.04);border:1px solid var(--line);border-radius:13px;padding:11px 13px}
.stat .l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.6px}
.stat .v{font-size:17px;font-weight:700;margin-top:3px;word-break:break-word}
.stat.span2{grid-column:span 2}
#cpuModel,#kernel,#certExpiry{font-size:13px}
.svc{display:flex;align-items:center;gap:11px;padding:10px 0;border-top:1px solid var(--line)}
.svc:first-of-type{border-top:none}
.svc .sd{width:9px;height:9px;border-radius:50%;flex:none;box-shadow:0 0 8px currentColor}
.svc .nm{font-weight:600;flex:1}.svc .meta{font-size:12px;color:var(--muted)}
.ok{color:var(--ok)}.warn{color:var(--warn)}.bad{color:var(--bad)}

/* ---------------- TAB BAR ---------------- */
.tabbar{position:fixed;left:0;right:0;bottom:0;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));
  padding-bottom:env(safe-area-inset-bottom);display:flex;background:rgba(18,21,46,.82);backdrop-filter:blur(18px);
  border-top:1px solid var(--line);z-index:20}
.tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  color:var(--muted);font-size:11px;font-weight:600}
.tabbar button.on{color:var(--accent)}
.tabbar .ic{font-size:20px;line-height:1}

.improver-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
.improver-msg{font-size:12px;color:var(--muted);margin:8px 0 10px}
.improver-log{max-height:220px;overflow:auto;white-space:pre-wrap;background:rgba(0,0,0,.32);border:1px solid var(--line);border-radius:12px;padding:10px;font-size:11px;line-height:1.45;color:#d7dcff}
