:root{color-scheme:dark;--bg: #0d1014;--bg-panel: #13171c;--bg-elev: #191e25;--bg-input: #1c222a;--bg-hover: #1f262f;--border: #252d37;--border-strong: #323c48;--text: #e8edf2;--text-dim: #8a96a3;--text-faint: #5c6773;--accent: #2fb8a6;--accent-hover: #3ccbb8;--accent-soft: rgba(47, 184, 166, .14);--accent-2: #f0b45a;--on-accent: #06201d;--bubble-mine: linear-gradient(135deg, #1f6f66, #195a54);--bubble-mine-text: #eafaf7;--bubble-mine-meta: rgba(234, 250, 247, .6);--bubble-mine-check: #8ff0de;--bubble-theirs: #1d232b;--bubble-failed: #3d2426;--bubble-failed-text: #f6dede;--bubble-failed-border: rgba(255, 107, 107, .35);--green: #4cc38a;--amber: #f0b45a;--amber-soft: rgba(240, 180, 90, .08);--amber-border: rgba(240, 180, 90, .45);--red: #ff6b6b;--red-soft: rgba(255, 107, 107, .12);--glow-1: rgba(47, 184, 166, .12);--glow-2: rgba(240, 180, 90, .07);--glow-chat: rgba(47, 184, 166, .06);--chip-bg: rgba(25, 30, 37, .9);--overlay: rgba(5, 7, 10, .7);--radius-sm: 8px;--radius: 12px;--radius-lg: 18px;--sidebar-w: 300px;--shadow: 0 10px 40px rgba(0, 0, 0, .45);--ease: cubic-bezier(.2, .7, .2, 1)}:root[data-theme=light]{color-scheme:light;--bg: #eef1f4;--bg-panel: #ffffff;--bg-elev: #f6f8fa;--bg-input: #eef1f4;--bg-hover: #f0f3f6;--border: #e0e5ea;--border-strong: #c5ced7;--text: #15202b;--text-dim: #5a6876;--text-faint: #8a96a3;--accent: #0e8f81;--accent-hover: #0b7d70;--accent-soft: rgba(14, 143, 129, .11);--accent-2: #e0952a;--on-accent: #ffffff;--bubble-mine: linear-gradient(135deg, #14a090, #0e877a);--bubble-mine-text: #ffffff;--bubble-mine-meta: rgba(255, 255, 255, .78);--bubble-mine-check: #ffffff;--bubble-theirs: #ffffff;--bubble-failed: #fdecec;--bubble-failed-text: #7a2424;--bubble-failed-border: rgba(214, 69, 69, .35);--green: #23935f;--amber: #a8680f;--amber-soft: rgba(224, 149, 42, .1);--amber-border: rgba(196, 128, 30, .5);--red: #cf3c3c;--red-soft: rgba(207, 60, 60, .09);--glow-1: rgba(14, 143, 129, .1);--glow-2: rgba(224, 149, 42, .08);--glow-chat: rgba(14, 143, 129, .05);--chip-bg: rgba(255, 255, 255, .92);--overlay: rgba(20, 32, 44, .35);--shadow: 0 10px 36px rgba(20, 32, 44, .12)}@media(prefers-color-scheme:light){:root:not([data-theme=dark]){color-scheme:light;--bg: #eef1f4;--bg-panel: #ffffff;--bg-elev: #f6f8fa;--bg-input: #eef1f4;--bg-hover: #f0f3f6;--border: #e0e5ea;--border-strong: #c5ced7;--text: #15202b;--text-dim: #5a6876;--text-faint: #8a96a3;--accent: #0e8f81;--accent-hover: #0b7d70;--accent-soft: rgba(14, 143, 129, .11);--accent-2: #e0952a;--on-accent: #ffffff;--bubble-mine: linear-gradient(135deg, #14a090, #0e877a);--bubble-mine-text: #ffffff;--bubble-mine-meta: rgba(255, 255, 255, .78);--bubble-mine-check: #ffffff;--bubble-theirs: #ffffff;--bubble-failed: #fdecec;--bubble-failed-text: #7a2424;--bubble-failed-border: rgba(214, 69, 69, .35);--green: #23935f;--amber: #a8680f;--amber-soft: rgba(224, 149, 42, .1);--amber-border: rgba(196, 128, 30, .5);--red: #cf3c3c;--red-soft: rgba(207, 60, 60, .09);--glow-1: rgba(14, 143, 129, .1);--glow-2: rgba(224, 149, 42, .08);--glow-chat: rgba(14, 143, 129, .05);--chip-bg: rgba(255, 255, 255, .92);--overlay: rgba(20, 32, 44, .35);--shadow: 0 10px 36px rgba(20, 32, 44, .12)}}body,.sidebar,.chat-head,.composer,.bubble,.contact,.login-card{transition-property:background-color,border-color,color;transition-duration:.2s}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);font-size:15px;-webkit-font-smoothing:antialiased}button,input,textarea{font:inherit;color:inherit}button{-webkit-tap-highlight-color:transparent}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}svg{display:block}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:8px}::-webkit-scrollbar-track{background:transparent}.avatar{position:relative;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;color:#fff;font-weight:600;letter-spacing:.3px;-webkit-user-select:none;user-select:none}.avatar-sm{width:32px;height:32px;font-size:12px}.avatar-md{width:42px;height:42px;font-size:14px}.avatar-lg{width:56px;height:56px;font-size:18px}.avatar .dot{position:absolute;right:-1px;bottom:-1px;width:12px;height:12px;border:2.5px solid var(--bg-panel)}.dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}.dot.on{background:var(--green)}.dot.off{background:var(--text-faint)}.login-wrap{position:relative;min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px 16px;background:radial-gradient(600px 400px at 20% 10%,var(--glow-1),transparent 70%),radial-gradient(500px 400px at 85% 90%,var(--glow-2),transparent 70%),var(--bg)}.login-card{width:100%;max-width:360px;display:flex;flex-direction:column;gap:14px;padding:32px 28px 24px;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.login-brand{display:flex;flex-direction:column;align-items:center;text-align:center;margin-bottom:8px}.logo-mark{width:56px;height:56px;color:var(--accent);margin-bottom:10px}.login-card h1{margin:0;font-size:26px;font-weight:700;letter-spacing:-.3px}.login-sub{margin:6px 0 0;font-size:13px;color:var(--text-dim);line-height:1.45}.field{display:flex;flex-direction:column;gap:6px}.field-label{font-size:12px;color:var(--text-dim);font-weight:500}.field input{height:44px;padding:0 14px;background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-sm);transition:border-color .15s,background .15s}.field input::placeholder{color:var(--text-faint)}.field input:focus{outline:none;border-color:var(--accent);background:var(--bg-elev)}.login-error{padding:10px 12px;background:var(--red-soft);color:var(--red);border-radius:var(--radius-sm);font-size:13px}.btn-primary{height:46px;margin-top:4px;background:var(--accent);color:var(--on-accent);font-weight:600;border:none;border-radius:var(--radius-sm);cursor:pointer;transition:background .15s,transform .1s}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-primary:active:not(:disabled){transform:scale(.985)}.btn-primary:disabled{opacity:.45;cursor:default}.login-foot{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:6px;font-size:12px;color:var(--text-faint)}.login-foot svg{width:13px;height:13px;color:var(--accent)}.icon-btn.login-theme{position:absolute;top:16px;right:16px;background:var(--bg-panel);border:1px solid var(--border)}.layout{height:100vh;height:100dvh;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-w);flex-shrink:0;background:var(--bg-panel);border-right:1px solid var(--border);display:flex;flex-direction:column;min-height:0}.sidebar-head{padding:16px;display:flex;align-items:center;gap:12px}.me-info{flex:1;min-width:0}.me-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conn{display:flex;align-items:center;gap:6px;margin-top:2px;font-size:12px;color:var(--amber)}.conn-dot{width:6px;height:6px;border-radius:50%;background:currentColor;animation:pulse 1.4s ease-in-out infinite}.conn-online{color:var(--green)}.conn-online .conn-dot{animation:none}@keyframes pulse{50%{opacity:.3}}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;background:none;border:none;border-radius:50%;color:var(--text-dim);cursor:pointer;transition:background .15s,color .15s}.icon-btn svg{width:19px;height:19px}.icon-btn:hover{background:var(--bg-hover);color:var(--text)}.key-error{margin:0 12px 10px;padding:10px 12px;background:var(--red-soft);color:var(--red);border-radius:var(--radius-sm);font-size:12px;line-height:1.4}.search{position:relative;margin:0 12px 8px}.search svg{position:absolute;left:11px;top:50%;width:16px;height:16px;transform:translateY(-50%);color:var(--text-faint);pointer-events:none}.search input{width:100%;height:38px;padding:0 12px 0 34px;background:var(--bg-input);border:1px solid transparent;border-radius:999px;font-size:14px;transition:border-color .15s}.search input::placeholder{color:var(--text-faint)}.search input:focus{outline:none;border-color:var(--border-strong)}.contact-list{overflow-y:auto;flex:1;padding:4px 8px 12px}.contact{display:flex;align-items:center;gap:12px;width:100%;padding:9px 10px;margin-bottom:2px;background:none;border:none;border-radius:var(--radius);cursor:pointer;text-align:left;transition:background .12s}.contact:hover{background:var(--bg-hover)}.contact.active{background:var(--accent-soft)}.contact.active .contact-name{color:var(--accent-hover)}.contact .avatar .dot{border-color:var(--bg-panel)}.contact:hover .avatar .dot{border-color:var(--bg-hover)}.contact-text{display:flex;flex-direction:column;min-width:0}.contact-name{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.contact-status{font-size:12px;color:var(--text-faint);margin-top:1px}.contact-empty{padding:24px 12px;color:var(--text-dim);font-size:13px;text-align:center;line-height:1.5}.empty-chat{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;color:var(--text-dim);background:radial-gradient(500px 360px at 50% 45%,var(--glow-chat),transparent 70%),var(--bg)}.empty-chat:before{content:"";width:64px;height:64px;border-radius:20px;background:var(--bg-elev) center / 32px no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Crect x='4' y='14' width='24' height='20' rx='10' fill='none' stroke='%232fb8a6' stroke-width='4'/%3E%3Crect x='20' y='14' width='24' height='20' rx='10' fill='none' stroke='%23f0b45a' stroke-width='4'/%3E%3C/svg%3E");border:1px solid var(--border)}.chat{flex:1;display:flex;flex-direction:column;min-width:0;background:var(--bg)}.chat-head{padding:12px 20px;background:var(--bg-panel);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px}.chat-head .avatar .dot{border-color:var(--bg-panel)}.chat-head-text{display:flex;flex-direction:column;min-width:0;flex:1}.chat-title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-status{font-size:12px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-status.is-online{color:var(--green)}.chat-offline-note{color:var(--text-faint)}.verify-btn{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;background:var(--bg-input);border:1px solid var(--border);border-radius:999px;color:var(--text-dim);font-size:13px;cursor:pointer;transition:color .15s,border-color .15s}.verify-btn svg{width:16px;height:16px;color:var(--accent)}.verify-btn:hover{color:var(--text);border-color:var(--accent)}.messages{flex:1;overflow-y:auto;padding:16px 20px 20px;display:flex;flex-direction:column}.messages-empty{margin:auto;max-width:320px;text-align:center;color:var(--text-dim);display:flex;flex-direction:column;align-items:center;gap:8px}.messages-empty svg{width:36px;height:36px;color:var(--accent);margin-bottom:4px}.messages-empty-title{color:var(--text);font-weight:600}.messages-empty-sub{font-size:13px;line-height:1.5}.day-sep{display:flex;justify-content:center;margin:14px 0 10px;position:sticky;top:0;z-index:1}.day-sep span{padding:4px 12px;background:var(--chip-bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border:1px solid var(--border);border-radius:999px;font-size:12px;color:var(--text-dim)}.bubble-row{display:flex;margin-top:2px}.bubble-row.group-start{margin-top:10px}.bubble-row.row-mine{justify-content:flex-end}.bubble{max-width:min(65%,560px);padding:8px 12px 6px;border-radius:var(--radius-lg);line-height:1.42;white-space:pre-wrap;word-break:break-word;animation:bubble-in .18s var(--ease)}@keyframes bubble-in{0%{opacity:0;transform:translateY(4px)}}.bubble.theirs{background:var(--bubble-theirs);border:1px solid var(--border)}.bubble.mine{background:var(--bubble-mine);color:var(--bubble-mine-text)}.row-theirs .bubble{border-top-left-radius:6px;border-bottom-left-radius:6px}.row-theirs.group-start .bubble{border-top-left-radius:var(--radius-lg)}.row-theirs.group-end .bubble{border-bottom-left-radius:4px}.row-mine .bubble{border-top-right-radius:6px;border-bottom-right-radius:6px}.row-mine.group-start .bubble{border-top-right-radius:var(--radius-lg)}.row-mine.group-end .bubble{border-bottom-right-radius:4px}.bubble-row.failed .bubble.mine{background:var(--bubble-failed);border:1px solid var(--bubble-failed-border);color:var(--bubble-failed-text)}.bubble.undecrypted{background:var(--amber-soft);border:1px dashed var(--amber-border);color:var(--amber);font-size:13px}.bubble-meta{display:flex;align-items:center;justify-content:flex-end;gap:4px;font-size:11px;color:var(--text-dim);margin-top:2px;-webkit-user-select:none;user-select:none}.bubble.mine .bubble-meta{color:var(--bubble-mine-meta)}.bubble-row.failed .bubble.mine .bubble-meta{color:var(--text-dim)}.st{width:14px;height:14px}.st-sent{color:var(--bubble-mine-check)}.st-failed{color:var(--red);font-weight:500}.st-undecrypted{margin-right:4px;color:var(--amber)}.composer{display:flex;align-items:flex-end;gap:10px;padding:12px 16px;padding-bottom:max(12px,env(safe-area-inset-bottom));background:var(--bg-panel);border-top:1px solid var(--border)}.composer textarea{flex:1;min-height:44px;max-height:160px;field-sizing:content;resize:none;background:var(--bg-input);border:1px solid var(--border);border-radius:22px;padding:11px 16px;line-height:1.4;transition:border-color .15s}.composer textarea::placeholder{color:var(--text-faint)}.composer textarea:focus{outline:none;border-color:var(--border-strong)}.composer button{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;background:var(--accent);color:var(--on-accent);border:none;border-radius:50%;cursor:pointer;transition:background .15s,transform .1s,opacity .15s}.composer button svg{width:20px;height:20px;margin-left:-2px}.composer button:hover:not(:disabled){background:var(--accent-hover)}.composer button:active:not(:disabled){transform:scale(.94)}.composer button:disabled{opacity:.35;cursor:default}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:16px;z-index:100;animation:fade-in .15s ease}@keyframes fade-in{0%{opacity:0}}.modal{width:min(560px,100%);max-height:100%;overflow-y:auto;background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:24px;display:flex;flex-direction:column;gap:16px;animation:modal-in .2s var(--ease)}@keyframes modal-in{0%{opacity:0;transform:translateY(8px) scale(.98)}}.modal h2{margin:0;font-size:18px}.verify-hint{color:var(--text-dim);font-size:13px;line-height:1.5;margin:0}.verify-label{font-size:12px;color:var(--text-dim);margin-bottom:6px}.verify-number{font-family:ui-monospace,JetBrains Mono,Cascadia Mono,Consolas,monospace;font-size:19px;letter-spacing:1px;line-height:1.6;color:var(--accent-hover);background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;word-spacing:8px;text-align:center}.verify-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.verify-grid>div{background:var(--bg-elev);border-radius:var(--radius-sm);padding:10px 12px}.verify-fp{font-family:ui-monospace,JetBrains Mono,Cascadia Mono,Consolas,monospace;font-size:12px;color:var(--text-dim);word-break:break-all;line-height:1.5}.verify-close{align-self:flex-end;height:40px;padding:0 20px;background:var(--accent);color:var(--on-accent);font-weight:600;border:none;border-radius:var(--radius-sm);cursor:pointer}.verify-close:hover{background:var(--accent-hover)}@media(max-width:900px){:root{--sidebar-w: 260px}.bubble{max-width:78%}}@media(max-width:640px){:root{--sidebar-w: 68px}.sidebar-head{flex-direction:column;padding:12px 0 8px;gap:6px}.me-info,.search,.contact-text,.verify-label-text,.chat-offline-note{display:none}.key-error{margin:0 10px 8px;padding:4px 0;font-size:0;text-align:center}.key-error:before{content:"!";font-size:13px;font-weight:700}.contact-list{padding:4px 6px 12px}.contact{justify-content:center;padding:8px 0}.chat-head{padding:10px 12px}.verify-btn{width:36px;padding:0;justify-content:center}.messages{padding:12px 10px 16px}.bubble{max-width:86%}.composer{padding:8px 10px;padding-bottom:max(8px,env(safe-area-inset-bottom));gap:8px}.login-card{padding:28px 20px 20px}.verify-grid{grid-template-columns:1fr}.verify-number{font-size:16px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
