*{box-sizing:border-box;margin:0;padding:0}:root{--blue:#2563eb;--blue-dark:#1d4ed8;--bg:#eef2fb;--card:#fff;--ink:#0f172a;--ink-2:#44506d;--muted:#64748b;--hair:#0f172a1f;--line:#e2e8f0;--green:#16a34a;--bubble-self:linear-gradient(135deg, #2563eb, #1d4ed8);--shadow:0 10px 34px #2563eb1f;--font-display:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono:"IBM Plex Mono", "JetBrains Mono", "SFMono-Regular", Consolas, monospace;--ease:cubic-bezier(.16, 1, .3, 1);--ground:#fff;--ground-dim:#f8fafc;--accent:#2563eb;--accent-lift:#7c97ff;--success:#16a34a;--warning:#f0a020;--danger:#e5484d;--bg-tertiary:#eff6ff;--border:var(--line)}html,body,#root{width:100%;height:100%;font-family:var(--font-display);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}::selection{background:var(--blue);color:#fff}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#c3d0ea;border-radius:100px}.hairline-t{border-top:1px solid var(--hair)}.hairline-b{border-bottom:1px solid var(--hair)}.hairline-l{border-left:1px solid var(--hair)}.hairline-r{border-right:1px solid var(--hair)}.btn{border:1px solid var(--blue);font-family:var(--font-display);cursor:pointer;transition:background .2s var(--ease), color .2s var(--ease), opacity .2s;white-space:nowrap;border-radius:12px;justify-content:center;align-items:center;gap:6px;padding:9px 18px;font-size:13px;font-weight:700;display:inline-flex}.btn--fill{background:var(--bubble-self);color:#fff;border-color:#0000;box-shadow:0 4px 12px #2563eb47}.btn--fill:hover{opacity:.92}.btn--outline{color:var(--blue);background:0 0}.btn--outline:hover{background:#eff6ff}.btn:disabled{opacity:.35;cursor:not-allowed}.pill{font-family:var(--font-mono);letter-spacing:.15em;text-transform:uppercase;white-space:nowrap;border-radius:100px;align-items:center;gap:5px;padding:3px 10px;font-size:10px;font-weight:500;line-height:1;display:inline-flex}.pill .dot{border-radius:100px;flex-shrink:0;width:5px;height:5px}.pill--accent{background:var(--blue);color:#fff}.pill--accent .dot{background:#fff}.pill--online{color:var(--blue);background:#e2edff}.pill--online .dot{background:var(--green)}.pill--id{color:var(--muted);border:1px solid var(--hair);background:0 0}.pill--id:hover{color:var(--blue);border-color:var(--blue)}.pill--offline{color:var(--muted);background:#edf0f6}.pill--offline .dot{background:var(--muted)}.pill--read{color:var(--blue);background:0 0}.pill--read .dot{background:var(--blue)}.pill--unread{color:var(--muted);background:0 0}.pill--unread .dot{background:var(--muted)}.meta{font-family:var(--font-mono);letter-spacing:.15em;text-transform:uppercase;color:var(--muted);font-size:10px;font-weight:500}.auth-page{background:linear-gradient(160deg,#2563eb 0%,#1d4ed8 55%,#0f172a 130%);justify-content:center;align-items:center;height:100%;padding:24px;display:flex}.auth-form-wrap{flex-direction:column;align-items:center;width:100%;max-width:360px;padding:40px 0;display:flex}.auth-brand{align-items:center;gap:8px;margin-bottom:6px;display:flex}.auth-brand .logo{filter:drop-shadow(0 6px 16px #00000040);width:64px;height:64px}.auth-brand .text{font-family:var(--font-display);color:#fff;font-size:26px;font-weight:900}.auth-brand .dot{display:none}.auth-subtitle{font-family:var(--font-mono);color:#ffffffd9;margin-bottom:28px;font-size:14px;font-weight:400}.auth-form{background:#fff;border-radius:18px;flex-direction:column;gap:12px;width:100%;padding:22px;display:flex;box-shadow:0 20px 60px #00000040}.auth-field{flex-direction:column;gap:4px;display:flex}.auth-field label{font-family:var(--font-mono);letter-spacing:.05em;color:var(--blue);font-size:11px;font-weight:600}.auth-input{border:1px solid var(--line);width:100%;height:48px;font-family:var(--font-display);color:var(--ink);transition:border-color .15s var(--ease);background:#fff;border-radius:12px;outline:none;padding:0 14px;font-size:15px;font-weight:400}.auth-input::placeholder{color:var(--muted)}.auth-input:focus{border-color:var(--blue)}.auth-error{font-family:var(--font-mono);color:#ef4444;text-align:center;padding:6px 8px;font-size:11px;font-weight:500}.auth-link{font-family:var(--font-display);color:#ffffffe6;margin-top:16px;font-size:13px}.auth-link a{color:#fff;border-bottom:1px solid #ffffff80;font-weight:700;text-decoration:none}.auth-link a:hover{color:#e6eeff}.chat-page{background:var(--bg);height:100%;display:flex}.chat-sidebar{border-right:1px solid var(--line);background:#f8fafc;flex-direction:column;flex-shrink:0;width:300px;display:flex}.sidebar-header{border-bottom:1px solid var(--line);background:#f8fafc;flex-direction:column;gap:4px;padding:16px;display:flex}.sidebar-brand-row{justify-content:space-between;align-items:baseline;display:flex}.sidebar-brand{font-family:var(--font-display);color:var(--ink);align-items:baseline;gap:1px;font-size:16px;font-weight:900;display:flex}.sidebar-brand .brand-dot{color:var(--blue)}.sidebar-user-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.sidebar-username{font-family:var(--font-display);color:var(--ink-2);font-size:13px;font-weight:700}.sidebar-meta{justify-content:space-between;align-items:center;margin-top:2px;display:flex}.sidebar-secure{font-family:var(--font-mono);letter-spacing:.15em;text-transform:uppercase;color:var(--muted);font-size:10px;font-weight:400}.logout-btn{color:var(--muted);border:1px solid var(--hair);font-family:var(--font-display);cursor:pointer;transition:all .15s var(--ease);background:0 0;border-radius:8px;padding:4px 12px;font-size:12px;font-weight:600}.logout-btn:hover{color:var(--blue);border-color:var(--blue)}.view-toggle{border-top:1px solid var(--line);align-items:center;gap:4px;margin-top:8px;padding-top:8px;display:flex}.view-toggle-label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-right:2px;font-size:10px;font-weight:500}.view-toggle button{border:1px solid var(--line);color:var(--muted);font-family:var(--font-display);cursor:pointer;transition:all .15s var(--ease);background:0 0;border-radius:8px;padding:3px 10px;font-size:12px}.view-toggle button:hover{color:var(--blue);border-color:var(--blue)}.view-toggle button.active{background:var(--bubble-self);color:#fff;border-color:#0000}.chat-back-btn{border:1px solid var(--line);width:30px;height:30px;color:var(--blue);cursor:pointer;background:#fff;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;font-size:22px;line-height:1;display:inline-flex}.chat-back-btn:hover{border-color:var(--blue)}.modal-panel{width:360px;max-width:92vw;box-shadow:var(--shadow)}.chat-main{background:var(--bg);flex-direction:column;flex:1;min-width:0;display:flex}.contact-list{flex-direction:column;flex:1;display:flex;overflow:hidden}.contact-search{flex-shrink:0;padding:10px 14px}.contact-search input{border:1px solid var(--line);width:100%;height:40px;font-family:var(--font-display);color:var(--ink);background:#fff;border-radius:12px;outline:none;padding:0 14px;font-size:14px;font-weight:400;transition:border-color .15s}.contact-search input::placeholder{color:var(--muted)}.contact-search input:focus{border-color:var(--blue)}.contact-items{flex:1;padding:4px 8px;overflow-y:auto}.contact-item{cursor:pointer;border-radius:12px;align-items:center;gap:10px;margin-bottom:2px;padding:10px 12px;transition:background .15s;display:flex}.contact-item:hover{background:#eff6ff}.contact-item.active{background:var(--bubble-self)}.contact-avatar{background:var(--bubble-self);color:#fff;width:40px;height:40px;font-family:var(--font-display);border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:15px;font-weight:800;display:flex;position:relative}.online-dot{border:2px solid #fff;border-radius:100px;flex-shrink:0;width:11px;height:11px;position:absolute;bottom:0;right:0}.online-dot.online{background:var(--green)}.online-dot.offline{background:#cbd3df}.contact-info{flex:1;min-width:0;overflow:hidden}.contact-name-row{justify-content:space-between;align-items:center;gap:6px;display:flex}.contact-name{font-family:var(--font-display);color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:700;overflow:hidden}.contact-item.active .contact-name{color:#fff}.contact-item.active .contact-id,.contact-item.active .contact-time,.contact-item.active .contact-last-msg{color:#ffffffd1}.contact-id{font-family:var(--font-mono);color:var(--muted);border:1px solid var(--hair);cursor:pointer;border-radius:4px;flex-shrink:0;padding:1px 4px;font-size:9px;font-weight:500;transition:color .15s,border-color .15s}.contact-id:hover{color:var(--blue);border-color:var(--blue)}.contact-last-msg{font-family:var(--font-display);color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:12px;font-weight:400;display:block;overflow:hidden}.contact-item.active .contact-last-msg{color:#ffffffd9}.contact-unread{color:#fff;min-width:18px;height:18px;font-family:var(--font-display);background:#f5222d;border-radius:100px;flex-shrink:0;justify-content:center;align-items:center;padding:0 6px;font-size:10px;font-weight:700;display:flex}.contact-item.active .contact-unread{color:var(--blue);background:#fff}.contact-time{font-family:var(--font-mono);color:var(--muted);white-space:nowrap;flex-shrink:0;margin-left:4px;font-size:10px}.contact-empty{text-align:center;font-family:var(--font-display);color:var(--muted);padding:32px 24px;font-size:13px;font-weight:500}.chat-window{flex-direction:column;flex:1;min-width:0;height:100%;display:flex}.chat-header{border-bottom:1px solid var(--line);background:#fff;flex-shrink:0;justify-content:space-between;align-items:center;padding:10px 20px;display:flex}.chat-header-left{align-items:center;gap:10px;min-width:0;display:flex}.chat-header-name{font-family:var(--font-display);color:var(--ink);font-size:16px;font-weight:800}.chat-header-secure{font-family:var(--font-mono);letter-spacing:.15em;text-transform:uppercase;color:var(--muted);font-size:10px;font-weight:400}.chat-empty-state{flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;display:flex}.chat-empty-state .empty-mark{border:1px solid var(--line);width:44px;height:44px;color:var(--blue);border-radius:12px;justify-content:center;align-items:center;display:flex}.chat-empty-state .empty-text{font-family:var(--font-display);color:var(--ink);font-size:15px;font-weight:700}.chat-empty-state .empty-hint{font-family:var(--font-display);color:var(--muted);font-size:12px;font-weight:400}.chat-messages{background:var(--bg);flex:1;padding:16px 20px;overflow-y:auto}.chat-input-area{border-top:1px solid var(--line);background:#fff;flex-shrink:0;align-items:center;gap:10px;padding:12px 20px;display:flex}.chat-input-area input{border:1px solid var(--line);height:44px;font-family:var(--font-display);color:var(--ink);background:#f8fafc;border-radius:12px;outline:none;flex:1;padding:0 16px;font-size:15px;font-weight:400;transition:border-color .15s}.chat-input-area input::placeholder{color:var(--muted)}.chat-input-area input:focus{border-color:var(--blue)}.chat-input-area .send-btn{background:var(--bubble-self);color:#fff;height:44px;font-family:var(--font-display);cursor:pointer;transition:opacity .15s var(--ease);white-space:nowrap;border:none;border-radius:12px;padding:0 22px;font-size:14px;font-weight:800;box-shadow:0 4px 12px #2563eb47}.chat-input-area .send-btn:hover{opacity:.92}.chat-input-area .send-btn:disabled{opacity:.4;cursor:not-allowed}.message-row{margin-bottom:10px;padding:0 2px;display:flex}.message-mine{justify-content:flex-end}.message-other{justify-content:flex-start}.message-bubble{word-break:break-all;border-radius:14px;max-width:70%;padding:10px 14px;line-height:1.5;position:relative}.bubble-mine{background:var(--bubble-self);color:#fff;border-bottom-right-radius:4px;box-shadow:0 3px 10px #2563eb2e}.bubble-other{border:1px solid var(--line);color:var(--ink);background:#fff;border-bottom-left-radius:4px;box-shadow:0 1px 3px #0000000f}.message-content{font-size:14px;line-height:1.5}.message-image{cursor:zoom-in;object-fit:contain;border-radius:10px;max-width:260px;max-height:320px;display:block}.message-meta{justify-content:flex-end;align-items:center;gap:6px;margin-top:4px;display:flex}.message-time{font-family:var(--font-mono);letter-spacing:.14em;color:var(--muted);font-size:10px;font-weight:400}.bubble-mine .message-time{color:#fff9}.message-status{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;font-size:10px;font-weight:500}.message-status--read{color:var(--blue)}.bubble-mine .message-status--read{color:#cfe0ff}.message-status--unread{color:var(--muted)}.bubble-mine .message-status--unread{color:#ffffff80}.bubble-recalled{border:1px dashed var(--muted);color:var(--muted);box-shadow:none;background:0 0!important}.bubble-recalled .message-content{font-size:12px;font-style:italic}.context-menu{border:1px solid var(--line);box-shadow:var(--shadow);background:#fff;border-radius:12px;min-width:100px;overflow:hidden}.context-menu-item{width:100%;font-family:var(--font-display);color:var(--ink);text-align:left;cursor:pointer;background:0 0;border:none;padding:8px 16px;font-size:13px;font-weight:500;transition:background .1s;display:block}.context-menu-item:hover{background:#f1f5f9}.context-menu-item.danger{color:#d32f2f}.context-menu-item.danger:hover{background:#fce4e4}.quote-bar{-webkit-user-select:none;user-select:none}.modal-panel{border:1px solid var(--line);background:#fff}@media (width<=768px){html{-webkit-text-size-adjust:100%}.auth-form-wrap{padding:28px 20px}.auth-input{font-size:16px}.chat-page{height:100dvh}.chat-page--mobile .chat-sidebar{border-right:none;width:100%}.chat-page--mobile .chat-main,.chat-page--mobile.chat-page--chat-open .chat-sidebar{display:none}.chat-page--mobile.chat-page--chat-open .chat-main{display:flex}.sidebar-header{padding:12px}.sidebar-brand-row{flex-wrap:wrap;gap:6px}.sidebar-user-row{gap:6px}.contact-item{padding:12px}.contact-avatar{width:40px;height:40px}.chat-header{padding:8px 12px}.chat-header-name{text-overflow:ellipsis;white-space:nowrap;max-width:55vw;font-size:14px;overflow:hidden}.chat-header-secure{display:none}.chat-messages{padding:12px 10px}.message-bubble{max-width:86%}.message-image{max-width:210px;max-height:260px}.chat-input-area{padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));gap:8px}.chat-input-area input{padding:0 12px;font-size:16px}.chat-input-area .send-btn{padding:0 16px;font-size:13px}.modal-panel{padding:20px}}@media (width>=769px) and (width<=960px){.chat-sidebar{width:260px}}
