:root{
  --bg:#0a1226;
  --card:rgba(14,24,46,.62);
  --card-solid:#101c36;
  --ink:#e9eefb; --sub:#9db0d0;
  --me:#2f7f6b; --me-ink:#f2fbf7;
  --fish:rgba(255,255,255,.10);
  --line:rgba(255,255,255,.12);
  --accent:#8fd3ff;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;margin:0}
body{
  background:#0a1226 url("/web/bg.jpg") center/cover no-repeat;
  color:var(--ink); font:16px/1.55 "PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  height:100dvh; overflow:hidden;
  -webkit-font-smoothing:antialiased;
}
.hidden{display:none!important}

/* 登录 */
.login{height:100%;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(6,10,22,.35)}
.login-card{width:100%;max-width:340px;background:rgba(12,20,40,.78);border:1px solid var(--line);border-radius:20px;padding:28px 22px;text-align:center}
.logo{width:64px;height:64px;line-height:64px;margin:0 auto 12px;border-radius:20px;background:linear-gradient(150deg,#2f7f6b,#2b5f8f);color:#fff;font-size:32px;font-weight:700}
.hint{color:var(--sub);font-size:14px;margin:0 0 18px}
input,textarea{width:100%;border:1px solid var(--line);border-radius:12px;padding:12px 14px;font:inherit;color:var(--ink);background:rgba(255,255,255,.08);outline:none}
input::placeholder,textarea::placeholder{color:#8296b8}
input:focus,textarea:focus{border-color:var(--accent)}
button{border:none;border-radius:12px;padding:12px 18px;font:inherit;background:var(--me);color:#fff;font-weight:600}
button:active{opacity:.85}
.login-card button{width:100%;margin-top:12px}
.err{color:#ff9a86;font-size:13px;min-height:18px;margin:8px 0 0}

/* 主体 */
.app{height:100%;display:flex;flex-direction:column}
.bar{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:rgba(8,14,30,.72);border-bottom:1px solid var(--line);padding-top:calc(10px + env(safe-area-inset-top))}
.who{display:flex;align-items:center;gap:8px;font-size:15px}
.dot{width:8px;height:8px;border-radius:50%;background:#5be0a6;box-shadow:0 0 8px #5be0a6}
.status{color:var(--sub);font-size:12px}
.tabs{display:flex;gap:6px}
.tabs button{background:transparent;color:var(--sub);padding:8px 14px;font-weight:500;border-radius:10px}
.tabs button.on{background:rgba(143,211,255,.16);color:var(--accent);font-weight:700}
.gear{background:rgba(255,255,255,.1);color:var(--ink);border:1px solid var(--line);
  border-radius:10px;padding:6px 10px;font-size:15px;line-height:1;margin-left:8px}
.view{flex:1;min-height:0;display:flex;flex-direction:column}

/* 消息 */
.list{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:14px 12px 6px;display:flex;flex-direction:column;gap:10px}
.row{display:flex;gap:8px;align-items:flex-end;contain:layout style}
.row.me{justify-content:flex-end}
.bubble{max-width:76%;padding:9px 13px;border-radius:16px;background:var(--card);border:1px solid var(--line);
  white-space:pre-wrap;word-break:break-word;contain:content;
  box-shadow:0 4px 14px rgba(0,0,0,.18)}
.row.me .bubble{background:var(--me);border-color:rgba(255,255,255,.16);color:var(--me-ink)}
.bubble.media{padding:4px;background:transparent;border:none;box-shadow:none}
.bubble img{max-width:160px;max-height:160px;border-radius:12px;display:block}
.row.me .bubble.media img{background:transparent}
.time{font-size:11px;color:var(--sub);text-align:center;margin:6px 0}
.typing{padding:0 18px 8px;color:var(--sub);font-size:13px}

/* 对话里的「正在打字」气泡 */
.typing-bubble{display:inline-flex;align-items:center;gap:4px;padding:11px 14px;min-width:52px}
.typing-bubble i{width:6px;height:6px;border-radius:50%;background:var(--sub);opacity:.55;animation:typeblink 1.2s infinite}
.typing-bubble i:nth-child(2){animation-delay:.18s}
.typing-bubble i:nth-child(3){animation-delay:.36s}
@keyframes typeblink{0%,60%,100%{opacity:.25;transform:translateY(0)}30%{opacity:.95;transform:translateY(-2px)}}
.empty{padding:40px 18px;color:var(--sub);font-size:14px;text-align:center}

/* 输入 */
.composer{display:flex;align-items:flex-end;gap:8px;padding:10px 12px calc(10px + env(safe-area-inset-bottom));background:rgba(8,14,30,.78);border-top:1px solid var(--line)}
.composer textarea{flex:1;resize:none;max-height:120px;border-radius:16px;padding:10px 14px;background:rgba(255,255,255,.08)}
.icon{background:rgba(143,211,255,.14);color:var(--accent);font-size:20px;padding:8px 12px;border-radius:14px}
.send{background:var(--me)}

/* 表情 */
.emoji-panel{height:42vh;display:flex;flex-direction:column;background:rgba(8,14,30,.9);border-top:1px solid var(--line)}
.emoji-head{display:flex;gap:8px;padding:8px 10px}
.emoji-head button{background:rgba(143,211,255,.14);color:var(--ink);padding:8px 12px;font-weight:500}
.emoji-grid{flex:1;overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:8px;padding:10px}
.emoji-grid img{width:100%;height:72px;object-fit:contain;background:rgba(255,255,255,.06);border-radius:10px;padding:4px}

/* 日志 */
.diary{padding:14px;display:flex;flex-direction:column;gap:10px;flex:1;min-height:0}
.diary textarea{border-radius:14px}
.post-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:10px;padding-bottom:20px}
.post{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:12px 14px}
.post .meta{color:var(--sub);font-size:12px;margin-bottom:6px}
.post-img{display:block;width:100%;max-width:420px;margin-top:10px;border-radius:12px}

/* 语音条 */
.bubble.voice{padding:8px 10px;min-width:210px}
.bubble.voice audio{width:100%;height:34px}
.voice-cap{margin-top:6px;font-size:12px;opacity:.72;line-height:1.45}

/* 旧记录（QQ 时期，只读） */
.oldwrap{padding:12px 14px;display:flex;flex-direction:column;gap:10px;flex:1;min-height:0}
.old-hint{margin:0;color:var(--sub);font-size:12px;text-align:center}
.old-list{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding-bottom:16px;contain:layout style}
.old-row{max-width:78%;padding:9px 12px;border-radius:14px;background:var(--card);border:1px solid var(--line)}
.old-row.me{align-self:flex-end;background:rgba(47,127,107,.42)}
.old-row.fish{align-self:flex-start}
.old-meta{font-size:11px;color:var(--sub);margin-bottom:4px}
.old-text{font-size:14.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word;color:var(--ink)}
.old-more{align-self:center;margin:0 auto 18px;padding:8px 18px;border-radius:999px;background:rgba(143,211,255,.16);color:var(--accent);border:1px solid rgba(143,211,255,.3)}
