:root{
  --ink:#1d1d1f; --ink2:#6e6e73; --ink3:#a1a1a6;
  --card:#ffffff; --bg:#f5f5f7; --line:#e3e3e6; --hair:rgba(0,0,0,.07);
  --accent:#0071e3; --accent-soft:rgba(0,113,227,.10);
  --green:#30d158; --amber:#ff9f0a; --red:#ff3b30;
  --r-lg:22px; --r-md:14px;
  --shadow:0 12px 40px rgba(0,0,0,.08); --shadow-sm:0 2px 10px rgba(0,0,0,.05);
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{font-family:"Inter",-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,Arial,sans-serif;background:var(--bg);color:var(--ink);font-size:13px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input{font-family:inherit;font-size:16px;color:var(--ink)}

.glass{background:rgba(255,255,255,.72);-webkit-backdrop-filter:blur(20px) saturate(1.8);backdrop-filter:blur(20px) saturate(1.8);box-shadow:inset 0 0 0 .5px var(--hair)}

@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1}}
@keyframes up{from{transform:translateY(14px);opacity:0}to{transform:none;opacity:1}}
@keyframes pop{from{opacity:0;transform:translateY(5px) scale(.98)}to{opacity:1;transform:none}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}

/* ---------- login ---------- */
.login-wrap{min-height:100dvh;display:flex;flex-direction:column;justify-content:center;padding:24px;max-width:400px;margin:0 auto;animation:fade .25s ease}
.brandmark{width:56px;height:56px;border-radius:16px;background:var(--ink);color:#fff;display:grid;place-items:center;font-weight:800;font-size:20px;letter-spacing:.5px;margin-bottom:18px;box-shadow:var(--shadow-sm)}
.login-wrap h1{font-size:24px;font-weight:800;letter-spacing:-.4px}
.login-wrap .sub{font-size:13px;color:var(--ink2);margin:6px 0 24px;line-height:1.5}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px;box-shadow:var(--shadow-sm);animation:up .3s ease}
.flabel{font-size:11px;font-weight:600;color:var(--ink2);margin:14px 0 6px;letter-spacing:.2px}
.flabel:first-child{margin-top:0}
.field{width:100%;border:1.5px solid var(--line);border-radius:var(--r-md);padding:11px 14px;background:#fafafc;outline:none;transition:border-color .15s, box-shadow .15s}
.field:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.btn{display:block;width:100%;background:var(--ink);color:#fff;font-weight:600;font-size:13.5px;padding:13px;border-radius:var(--r-md);margin-top:18px;transition:transform .12s, opacity .15s;letter-spacing:.1px}
.btn:active{transform:scale(.985)}
.btn:disabled{opacity:.55}
.err{display:none;background:#fff1f0;color:#c4271f;font-size:11.5px;border-radius:10px;padding:9px 12px;margin-bottom:4px}
.foot{text-align:center;font-size:10.5px;color:var(--ink3);margin-top:26px;letter-spacing:.2px}

/* ---------- topbar ---------- */
.topbar{position:fixed;top:0;left:0;right:0;height:60px;display:flex;align-items:center;gap:11px;padding:0 16px;z-index:40;background:rgba(255,255,255,.72);-webkit-backdrop-filter:blur(22px) saturate(1.8);backdrop-filter:blur(22px) saturate(1.8);box-shadow:inset 0 -0.5px 0 var(--hair)}
.tmark{width:34px;height:34px;border-radius:11px;background:var(--ink);color:#fff;display:grid;place-items:center;font-weight:800;font-size:12.5px;flex:none}
.tname{font-weight:700;font-size:14.5px;line-height:1.2;letter-spacing:-.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tstatus{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--ink2);white-space:nowrap}
.tstatus .dot{width:7px;height:7px;border-radius:50%;background:var(--amber);animation:pulse 1.6s infinite}
.tstatus .dot.on{background:var(--green)}
.topbar .spacer{flex:1}
.pillbtn{font-size:11.5px;font-weight:600;color:var(--ink2);background:rgba(0,0,0,.045);padding:7px 13px;border-radius:999px;transition:.15s;flex:none}
.pillbtn:active{transform:scale(.96)}
.pillbtn:hover{background:rgba(0,0,0,.07);color:var(--ink)}

/* ---------- chat ---------- */
.chat-wrap{height:100dvh;display:flex;flex-direction:column;padding-top:60px;max-width:660px;margin:0 auto;animation:fade .2s ease}
.chatlist{flex:1;overflow-y:auto;overscroll-behavior:contain;padding:20px 14px 12px;scrollbar-width:thin}
.day-sep{text-align:center;font-size:10px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--ink3);margin:16px 0 8px}
.msg{display:flex;padding:4px 0;animation:pop .18s ease}
.msg.me{justify-content:flex-end}
.mbubble{max-width:78%;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-sm);border-radius:18px;border-top-left-radius:6px;padding:10px 14px;font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.msg.me .mbubble{background:var(--ink);border-color:var(--ink);color:#fff;border-radius:18px;border-top-right-radius:6px}
.mtime{display:block;font-size:9px;margin-top:5px;opacity:.5;text-align:right;letter-spacing:.2px}
.sys{text-align:center;padding:8px 0;animation:pop .18s ease}
.sys span{display:inline-block;font-size:10.5px;color:var(--ink2);background:rgba(255,255,255,.72);box-shadow:inset 0 0 0 .5px var(--hair);border-radius:999px;padding:6px 14px}
.composer{display:flex;gap:9px;padding:12px 14px calc(12px + env(safe-area-inset-bottom));background:rgba(255,255,255,.72);-webkit-backdrop-filter:blur(22px) saturate(1.8);backdrop-filter:blur(22px) saturate(1.8);box-shadow:inset 0 .5px 0 var(--hair)}
.composer input{flex:1;min-width:0;border:1.5px solid var(--line);border-radius:999px;padding:11px 17px;background:#fafafc;outline:none;transition:border-color .15s, box-shadow .15s}
.composer input:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.sendbtn{width:44px;height:44px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;flex:none;transition:transform .12s, opacity .15s}
.sendbtn:active{transform:scale(.92)}
.sendbtn:disabled{opacity:.35}
.sendbtn svg{width:17px;height:17px}

/* ---------- control ---------- */
.ctrl-wrap{padding:78px 16px 30px;max-width:660px;margin:0 auto;animation:fade .2s ease}
.ctrl-wrap h2{font-size:16px;font-weight:800;letter-spacing:-.2px;margin:2px 0 12px}
.kv{display:flex;justify-content:space-between;align-items:center;padding:11px 0;font-size:12.5px;border-bottom:1px solid var(--line)}
.kv:last-child{border-bottom:none}
.kv b{font-weight:650;letter-spacing:-.1px}
.kv span{color:var(--ink2)}
.note{font-size:11.5px;color:var(--ink2);line-height:1.6;background:#eef3fb;border:1px solid #dde8f7;border-radius:var(--r-md);padding:12px 14px;margin-top:14px}
