:root{--bg:#0e1621;--bg-panel:#17212b;--bg-panel-2:#1e2c3a;--bg-hover:#202b36;--bg-active:#2b5278;--accent:#2aabee;--accent-hover:#229ed9;--text:#f5f5f5;--text-dim:#8696a8;--text-faint:#5f6e7d;--bubble-in:#182533;--bubble-out:#2b5278;--danger:#e05252;--ok:#4fae4e;--border:#0d1520;--radius:10px}*{box-sizing:border-box;margin:0;padding:0}body,html{height:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1.45}a{color:var(--accent);text-decoration:none}button{font:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select,textarea{font:inherit;color:var(--text);background:var(--bg-panel-2);border:1px solid transparent;border-radius:var(--radius);padding:10px 12px;outline:none;width:100%}input:focus,select:focus,textarea:focus{border-color:var(--accent)}::placeholder{color:var(--text-faint)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:#2f3d4a;border-radius:3px}::-webkit-scrollbar-track{background:transparent}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--accent);color:#fff;border-radius:var(--radius);padding:10px 16px;font-weight:600;transition:background .15s}.btn:hover{background:var(--accent-hover)}.btn:disabled{opacity:.55;cursor:default}.btn-ghost{background:transparent;color:var(--accent)}.btn-ghost:hover{background:var(--bg-hover)}.avatar{flex:none;display:flex;align-items:center;justify-content:center;border-radius:50%;color:#fff;font-weight:600;-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden}.avatar-edit{position:relative;flex:none;padding:0;border:none;background:none;border-radius:50%;cursor:pointer}.avatar-edit:disabled{cursor:default}.avatar-edit-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;border-radius:50%;background:rgba(0,0,0,.45);font-size:20px;opacity:0;transition:opacity .15s ease}.avatar-edit:hover:not(:disabled) .avatar-edit-overlay{opacity:1}.badge{flex:none;min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:var(--accent);color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center}.error-text{color:var(--danger);font-size:13px}.muted{color:var(--text-dim)}.empty-state{flex-direction:column;gap:8px;height:100%;color:var(--text-dim)}.auth-wrap,.empty-state{display:flex;align-items:center;justify-content:center}.auth-wrap{min-height:100vh;padding:24px}.auth-card{width:380px;background:var(--bg-panel);border-radius:16px;padding:32px 28px;display:flex;flex-direction:column;gap:14px;box-shadow:0 10px 40px rgba(0,0,0,.4)}.auth-logo{width:72px;height:72px;border-radius:50%;background:var(--accent);color:#fff;font-size:30px;font-weight:700;display:flex;align-items:center;justify-content:center;margin:0 auto 6px}.auth-title{text-align:center;font-size:20px;font-weight:700}.auth-sub{text-align:center;color:var(--text-dim);font-size:13px;margin-bottom:8px}.field label{display:block;font-size:12px;color:var(--text-dim);margin-bottom:5px}.captcha-row{display:flex;gap:10px;align-items:stretch}.captcha-img{border-radius:var(--radius);background:#fff;border:1px solid var(--bg-panel-2);object-fit:contain}.captcha-img,.captcha-placeholder{flex:none;width:120px;cursor:pointer}.captcha-placeholder{border-radius:var(--radius);background:var(--bg-panel-2);color:var(--text-faint);font-size:12px;display:flex;align-items:center;justify-content:center}.remember-row{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:var(--text-dim)}.remember-row label{display:flex;align-items:center;gap:7px;cursor:pointer}.remember-row input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent)}.shell{display:flex;height:100vh;overflow:hidden}.nav-rail{flex:none;width:64px;background:var(--bg-panel);border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;padding:14px 0;gap:6px}.nav-rail .spacer{flex:1 1}.nav-item{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--text-dim);transition:background .15s}.nav-item:hover{background:var(--bg-hover)}.nav-item.active{background:var(--bg-active);color:#fff}.sidebar{flex:none;width:320px;background:var(--bg-panel);border-right:1px solid var(--border);flex-direction:column;min-width:0}.sidebar,.sidebar-header{display:flex;position:relative}.sidebar-header{padding:12px;gap:8px;align-items:center}.icon-btn{flex:none;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:transparent;color:var(--text-dim);transition:background .12s ease,color .12s ease}.icon-btn.active,.icon-btn:hover{background:var(--bg-hover);color:var(--text)}.popup-menu{position:absolute;z-index:40;min-width:210px;padding:6px;border-radius:12px;background:rgba(23,33,43,.98);border:1px solid var(--border);box-shadow:0 8px 32px rgba(0,0,0,.55);display:flex;flex-direction:column;transform-origin:top left;animation:ui-pop-in .16s cubic-bezier(.2,.8,.2,1)}.main-menu{top:54px;left:12px}.compose-menu{bottom:76px;right:18px;transform-origin:bottom right}.fab{position:absolute;bottom:18px;right:18px;z-index:30;width:54px;height:54px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--accent);color:#fff;font-size:18px;box-shadow:0 6px 20px rgba(0,0,0,.45);transition:transform .12s ease,filter .12s ease}.fab:hover{filter:brightness(1.1)}.fab.open{transform:rotate(90deg)}.search-input{background:var(--bg-panel-2);border-radius:18px;padding:8px 14px;font-size:13px}.conv-list{flex:1 1;overflow-y:auto}.conv-item{display:flex;gap:12px;padding:10px 12px;cursor:pointer;align-items:center;min-width:0}.conv-item:hover{background:var(--bg-hover)}.conv-item.active{background:var(--bg-active)}.conv-item.active .conv-time,.conv-item.active .muted{color:#cfe3f2}.conv-body{flex:1 1;min-width:0}.conv-top{display:flex;justify-content:space-between;gap:8px}.conv-title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conv-time{flex:none;font-size:12px;color:var(--text-faint)}.conv-bottom{display:flex;justify-content:space-between;gap:8px;margin-top:2px}.conv-preview{color:var(--text-dim);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conv-sender{color:var(--text)}.conv-preview.typing{color:var(--accent);font-style:italic}.chat-pane{flex:1 1;display:flex;flex-direction:column;min-width:0;background:radial-gradient(ellipse at top,rgba(42,171,238,.05),transparent 60%),var(--bg)}.chat-header{flex:none;height:58px;background:var(--bg-panel);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:0 16px}.chat-header .title{font-weight:600}.chat-header .sub{font-size:12px;color:var(--text-dim)}.msg-scroll{flex:1 1;overflow-y:auto;padding:18px 16px;display:flex;flex-direction:column;gap:4px}.msg-scroll>*{width:100%;max-width:720px;margin-left:auto;margin-right:auto}.msg-row{display:flex;position:relative;align-items:center;transition:padding-left .15s ease}.msg-row.mine{justify-content:flex-end}.msg-row.select-mode{padding-left:36px;cursor:pointer;border-radius:10px}.msg-row.select-mode.selected{background:rgba(42,171,238,.14)}.select-dot{position:absolute;left:4px;top:50%;transform:translateY(-50%);width:22px;height:22px;border-radius:50%;border:2px solid var(--text-faint);background:transparent;color:#fff;font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .12s ease,border-color .12s ease}.select-dot.on{background:var(--accent);border-color:var(--accent)}.bubble-wrap{position:relative;display:flex;flex-direction:column;max-width:62%}.bubble-wrap .bubble{max-width:100%}.msg-row.mine .bubble-wrap{align-items:flex-end}.emoji-bar{position:absolute;top:50%;z-index:5;display:flex;opacity:0;pointer-events:none;transform:translateY(-50%) scale(.8);transition:opacity .12s ease,transform .12s ease}.msg-row:not(.mine) .emoji-bar{left:calc(100% - 14px)}.msg-row.mine .emoji-bar{right:calc(100% - 14px)}.bubble-wrap:hover .emoji-bar{opacity:1;pointer-events:auto;transform:translateY(-50%) scale(1)}.emoji-bar .emoji-btn{width:34px;height:34px;background:rgba(23,33,43,.98);border:1px solid var(--border);box-shadow:0 4px 14px rgba(0,0,0,.45)}.emoji-bar .emoji-btn:hover{background:var(--bg-hover);transform:scale(1.15)}.emoji-btn{width:30px;height:30px;border-radius:50%;background:transparent;font-size:17px;line-height:1;display:flex;align-items:center;justify-content:center;transition:transform .1s ease,background .1s ease}.emoji-btn:hover{background:var(--bg-hover);transform:scale(1.25)}.bubble-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:5px}.bubble-footer .meta{float:none;margin:0;white-space:nowrap;align-self:flex-end}.reaction-chips{display:flex;flex-wrap:wrap;gap:4px}.reaction-chip{display:flex;align-items:center;gap:5px;padding:3px 8px 3px 7px;border-radius:14px;background:rgba(0,0,0,.22);border:1px solid transparent;color:var(--text);font-size:14px;line-height:1.4;transition:background .14s ease,color .14s ease,transform .14s ease;animation:ui-pop-in .16s cubic-bezier(.2,.8,.2,1)}.reaction-chip:hover{background:rgba(0,0,0,.34);transform:translateY(-1px)}.reaction-chip.mine{background:hsla(0,0%,100%,.85);color:#222}.reaction-chip.mine:hover{background:hsla(0,0%,100%,.7)}.chip-emoji{font-size:15px;line-height:1}.chip-count{font-size:12.5px;font-weight:600}.chip-avatars{display:flex}.chip-avatars .avatar{border:1.5px solid rgba(0,0,0,.35)}.chip-avatars .avatar+.avatar{margin-left:-7px}.chat-header.select-bar{gap:8px}.chat-header.clickable{cursor:pointer;transition:background .12s ease}.chat-header.clickable:hover{background:var(--bg-hover)}.details-panel{position:relative}.details-close{position:absolute;top:10px;right:10px;width:30px;height:30px;border-radius:50%;background:transparent;color:var(--text-dim);font-size:15px;display:flex;align-items:center;justify-content:center;transition:background .12s ease,color .12s ease}.details-close:hover{background:var(--bg-hover);color:var(--text)}.ctx-wrap{position:fixed;z-index:60;transform-origin:top left;animation:ui-pop-in .16s cubic-bezier(.2,.8,.2,1)}.ctx-wrap .ctx-menu{position:static;animation:none}.ctx-emoji-row{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);margin-bottom:6px;gap:2px;padding:4px 6px;border-radius:20px;border:1px solid var(--border);box-shadow:0 6px 24px rgba(0,0,0,.5)}.ctx-emoji-row,.ctx-menu{display:flex;background:rgba(23,33,43,.98)}.ctx-menu{position:fixed;z-index:60;min-width:190px;padding:6px;border-radius:12px;border:1px solid hsla(0,0%,100%,.06);box-shadow:0 8px 32px rgba(0,0,0,.55);flex-direction:column;animation:ui-pop-in .16s cubic-bezier(.2,.8,.2,1)}@keyframes ui-pop-in{0%{opacity:0;transform:translateY(4px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.ctx-item{display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:8px;background:transparent;color:var(--text);font-size:14px;font-weight:500;text-align:left;white-space:nowrap}.ctx-item:hover{background:var(--bg-hover)}.ctx-item svg{flex:none;color:var(--text-dim)}.ctx-item.danger,.ctx-item.danger svg{color:var(--danger)}.ctx-sep{height:1px;margin:4px 8px;background:hsla(0,0%,100%,.07)}.bubble{max-width:62%;padding:7px 12px 6px;border-radius:14px;background:var(--bubble-in);word-break:break-word;white-space:pre-wrap}.msg-row.mine .bubble{background:var(--bubble-out);border-bottom-right-radius:4px}.msg-row:not(.mine) .bubble{border-bottom-left-radius:4px}.bubble .sender{font-size:12.5px;font-weight:600;color:var(--accent);margin-bottom:1px}.bubble .meta{float:right;margin:8px 0 0 8px;font-size:11px;color:hsla(0,0%,100%,.45)}.bubble.pending{opacity:.6}.bubble.muted{opacity:.65}.recalled-placeholder{font-style:italic;color:var(--text-dim)}.recall-mark{display:inline-flex;align-items:center;vertical-align:-2px;margin-right:4px}.recall-mark svg{display:block}.reply-banner{display:flex;align-items:center;gap:12px;width:100%;padding:4px 4px 8px;border-bottom:1px solid var(--bg-panel-2);margin-bottom:6px;color:var(--accent);animation:ui-pop-in .16s cubic-bezier(.2,.8,.2,1)}.reply-banner>svg{flex:none}.reply-body{flex:1 1;min-width:0;border-left:2px solid var(--accent);padding-left:10px}.reply-name{font-size:13px;font-weight:600;color:var(--accent)}.reply-text{font-size:13px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reply-close{flex:none;width:30px;height:30px;border-radius:50%;background:transparent;color:var(--text-dim);font-size:14px;display:flex;align-items:center;justify-content:center;transition:background .12s ease,color .12s ease}.reply-close:hover{background:var(--bg-hover);color:var(--text)}.composer{flex:none;padding:10px 16px 16px;width:100%;max-width:752px;margin:0 auto}.composer-box{display:flex;flex-direction:column;background:var(--bg-panel);border-radius:16px;padding:8px 10px}.composer-row{display:flex;gap:8px;align-items:flex-end}.composer textarea,.composer textarea:focus{flex:1 1;resize:none;max-height:500px;overflow-y:auto;background:transparent;border:none;border-radius:0;padding:8px 6px;scrollbar-width:none}.composer textarea::-webkit-scrollbar{display:none}@media (max-height:600px),(max-width:768px){.composer textarea{max-height:200px}}.send-btn{flex:none;width:40px;height:40px;border-radius:50%;background:var(--accent);color:#fff;font-size:16px;display:flex;align-items:center;justify-content:center;transition:background .12s ease,transform .12s ease}.send-btn:hover{background:var(--accent-hover)}.send-btn:disabled{opacity:.5}.details-panel{flex:none;width:300px;background:var(--bg-panel);border-left:1px solid var(--border);padding:24px 18px;display:flex;flex-direction:column;align-items:center;gap:10px;overflow-y:auto;animation:details-enter .18s cubic-bezier(.2,.8,.2,1)}@keyframes details-enter{0%{opacity:0;transform:translateX(16px)}to{opacity:1;transform:translateX(0)}}.details-panel .kv{width:100%;padding:10px 0;border-bottom:1px solid var(--bg-panel-2)}.details-panel .kv .k{font-size:12px;color:var(--text-dim)}.page-pane{flex:1 1;overflow-y:auto;padding:28px 32px}.page-pane h1{font-size:20px;margin-bottom:18px}.card{background:var(--bg-panel);border-radius:14px;padding:20px;margin-bottom:18px;max-width:640px}.list-row{display:flex;align-items:center;gap:12px;padding:10px 4px;border-bottom:1px solid var(--bg-panel-2)}.list-row:last-child{border-bottom:none}.row-inline{display:flex;gap:10px}.conn-dot{width:8px;height:8px;border-radius:50%;background:var(--danger)}.conn-dot.on{background:var(--ok)}.search-wrap{position:relative;flex:1 1;display:flex}.search-wrap .search-input{width:100%}.search-wrap .spinner{position:absolute;right:12px;top:50%;transform:translateY(-50%);width:14px;height:14px;border-radius:50%;border:2px solid var(--text-dim);border-top:2px solid transparent;animation:spinner-enter .14s ease-out,spin .8s linear .14s infinite}@keyframes spinner-enter{0%{opacity:0}to{opacity:1}}@keyframes spin{to{transform:translateY(-50%) rotate(1turn)}}@media (prefers-reduced-motion:reduce){*,:after,:before{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}