:root{--bg: #000;--panel: #161616;--panel-2: #1c1c1e;--bubble-other: #262626;--bubble-mine: #0095f6;--accent: #0095f6;--accent-2: #bb9af7;--text: #f5f5f5;--muted: #8e8e8e;--border: #262626;--danger: #ed4956;--ok: #31c24d;--ig-grad: linear-gradient(45deg, #feda75 0%, #fa7e1e 25%, #d62976 50%, #962fbf 75%, #4f5bd5 100%);--radius: 18px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang TC,Noto Sans TC,Microsoft JhengHei,sans-serif}.muted{color:var(--muted);font-size:.85em}.error-box{background:#ed49561f;color:var(--danger);border:1px solid rgba(237,73,86,.4);border-radius:8px;padding:8px 12px;font-size:.9em;margin:8px 0;word-break:break-all}.app{height:100%;display:flex;flex-direction:column;max-width:900px;margin:0 auto}.splash{height:100%;display:flex;align-items:center;justify-content:center;color:var(--muted)}.avatar{width:44px;height:44px;border-radius:50%;object-fit:cover;flex-shrink:0;display:block}.avatar-fallback{display:flex;align-items:center;justify-content:center;background:var(--panel-2);color:var(--text);font-weight:600}.avatar-ring{background:var(--ig-grad);padding:2.5px;border-radius:50%;display:inline-block;flex-shrink:0;line-height:0}.avatar-ring.offline{background:#3a3a3a}.avatar-ring>.avatar{border:3px solid #000;width:40px;height:40px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 16px;border-radius:8px;border:none;cursor:pointer;text-decoration:none;font-size:.95em;font-weight:600;color:var(--text);background:var(--panel-2)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary,.btn-google{background:var(--accent);color:#fff}.btn-github{background:var(--bubble-other);color:#fff}.icon-btn{background:none;border:none;color:var(--text);font-size:1.1em;cursor:pointer;padding:6px 8px;border-radius:8px;text-decoration:none;display:inline-flex;align-items:center}.icon-btn:hover{background:var(--panel-2)}.icon-btn.danger{color:var(--danger)}.input{background:var(--bubble-other);border:none;color:var(--text);border-radius:12px;padding:10px 14px;font-size:.95em;outline:none;font-family:inherit}.input:focus{border-color:var(--accent)}.input::placeholder{color:var(--muted)}.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;padding:16px}.login-card{width:100%;max-width:360px;display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center}.ig-logo{background:var(--ig-grad);-webkit-background-clip:text;background-clip:text;color:transparent;font-size:2.6em;font-weight:800;letter-spacing:-.5px;font-style:italic}.login-sub{color:var(--muted);margin:-8px 0 4px}.login-card .btn{width:100%;border-radius:8px}.or-divider{display:flex;align-items:center;gap:12px;width:100%;color:var(--muted);font-size:.8em}.or-divider:before,.or-divider:after{content:"";flex:1;height:1px;background:var(--border)}.login-note{font-size:.75em;color:var(--muted);margin-top:8px}.topbar{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0}.ig-topbar{padding:10px 8px}.topbar-title{font-weight:700;font-size:1.1em;flex:1;background:var(--ig-grad);-webkit-background-clip:text;background-clip:text;color:transparent;font-style:italic}.topbar-actions{display:flex;align-items:center;gap:2px}.me{display:flex;align-items:center;gap:8px;margin-left:6px}.me .avatar{width:32px;height:32px}.me-name{max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.room-title{flex:1;display:flex;align-items:center;gap:10px;background:none;border:none;color:var(--text);font-size:1em;font-weight:600;cursor:pointer;text-align:left;min-width:0}.room-title-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.room-title small{display:block;font-weight:400}.room-list{flex:1;overflow-y:auto;padding:4px 0}.room-item{display:flex;align-items:center;gap:12px;padding:10px 14px;text-decoration:none;color:var(--text)}.room-item:hover{background:var(--panel)}.room-item.unread .room-name{font-weight:700}.room-main{flex:1;min-width:0}.room-name{font-weight:500;font-size:.95em}.room-preview{color:var(--muted);font-size:.85em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.room-side{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.room-time{color:var(--muted);font-size:.72em}.badge{background:var(--accent);color:#fff;border-radius:50%;min-width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;font-size:.72em;font-weight:600;padding:0 5px}.empty{text-align:center;color:var(--muted);padding:48px 16px;display:flex;flex-direction:column;gap:14px;align-items:center}.empty-heart{font-size:2.4em;background:var(--ig-grad);-webkit-background-clip:text;background-clip:text;color:transparent}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}.modal{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:20px;width:100%;max-width:420px;max-height:80vh;overflow-y:auto;display:flex;flex-direction:column;gap:12px}.modal-head{display:flex;align-items:center;justify-content:space-between}.modal-head h3{margin:0;font-size:1.05em}.tabs{display:flex;gap:6px;background:var(--panel-2);border-radius:8px;padding:3px}.tab{flex:1;padding:7px;border:none;background:transparent;color:var(--muted);border-radius:6px;cursor:pointer;font-weight:600;font-size:.9em}.tab.active{background:var(--bubble-other);color:var(--text)}.user-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.user-list li{display:flex;align-items:center}.user-row{flex:1;display:flex;align-items:center;gap:10px;background:none;border:none;color:var(--text);padding:8px 6px;border-radius:8px;cursor:pointer;font-size:.95em;width:100%;text-align:left}.user-row:hover{background:var(--panel-2)}.user-row input[type=checkbox]{accent-color:var(--accent);width:18px;height:18px}.allow-row{justify-content:space-between}.group-form{display:flex;flex-direction:column;gap:12px}.dot{width:10px;height:10px;border-radius:50%;background:var(--border);margin-left:auto}.dot.online{background:var(--ok)}.chat{flex:1;overflow-y:auto;padding:16px 14px;display:flex;flex-direction:column;gap:6px}.msg{display:flex}.msg.mine{justify-content:flex-end}.msg-body{max-width:78%;background:var(--bubble-other);border-radius:var(--radius);border-bottom-left-radius:6px;padding:8px 14px;display:flex;flex-direction:column;gap:4px}.msg.mine .msg-body{background:var(--bubble-mine);border-bottom-left-radius:var(--radius);border-bottom-right-radius:6px}.msg-sender{font-size:.75em;color:var(--accent-2)}.msg-text{white-space:pre-wrap;word-break:break-word;line-height:1.45}.msg.mine .msg-text{color:#fff}.msg-image{max-width:260px;max-height:320px;border-radius:12px;cursor:zoom-in;display:block}.msg-meta{display:flex;gap:8px;align-items:center;justify-content:flex-end;font-size:.7em;color:#ffffffa6}.msg:not(.mine) .msg-meta{color:var(--muted)}.retry{background:#ed495626;border:1px solid var(--danger);color:var(--danger);border-radius:6px;font-size:.8em;padding:2px 8px;cursor:pointer}.typing{color:var(--accent);font-size:.8em;padding:2px 4px;font-weight:500}.voice{display:flex;align-items:center;gap:10px;min-width:200px;max-width:260px;padding:4px 0}.voice-play{width:38px;height:38px;border-radius:50%;border:none;background:#00000040;color:#fff;font-size:.8em;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.msg.mine .voice-play{background:#ffffff40}.voice-wave{flex:1;display:flex;align-items:center;gap:2.5px;height:28px}.voice-wave i{flex:1;background:#ffffff8c;border-radius:2px;transition:height .2s}.msg:not(.mine) .voice-wave i{background:#ffffff8c}.voice-wave i.play{background:#fff;animation:wave-bounce .8s ease-in-out infinite;animation-delay:calc(var(--i, 0) * .06s)}@keyframes wave-bounce{0%,to{transform:scaleY(.5)}50%{transform:scaleY(1)}}.voice-time{font-size:.75em;color:#ffffffbf;min-width:32px;text-align:right}.msg:not(.mine) .voice-time{color:var(--muted)}.composer{display:flex;align-items:flex-end;gap:8px;padding:10px 12px;background:var(--panel);border-top:1px solid var(--border);flex-shrink:0}.ig-composer{align-items:center}.composer-input{flex:1;resize:none;max-height:120px;line-height:1.4;border-radius:24px;padding:10px 16px}.upload-btn{font-size:1.3em}.mic-btn{width:40px;height:40px;border-radius:50%;border:none;background:var(--bubble-other);font-size:1.1em;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mic-btn:hover{background:var(--panel-2)}.send-btn{width:40px;height:40px;border-radius:50%;border:none;background:var(--ig-grad);color:#fff;font-size:1em;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.send-btn:disabled{opacity:.4;cursor:not-allowed}.recording-bar{flex:1;display:flex;align-items:center;gap:12px;background:var(--bubble-other);border-radius:24px;padding:8px 12px}.rec-dot{width:12px;height:12px;border-radius:50%;background:var(--danger);animation:rec-pulse 1s ease-in-out infinite}@keyframes rec-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.85)}}.rec-time{font-weight:700;font-variant-numeric:tabular-nums;color:var(--text);min-width:36px}.rec-wave{flex:1;display:flex;align-items:center;gap:3px;height:24px}.rec-wave i{flex:1;background:var(--accent);border-radius:2px;animation:wave-bounce .7s ease-in-out infinite;animation-delay:calc(var(--i, 0) * .1s)}.rec-btn{width:36px;height:36px;border-radius:50%;border:none;font-size:.95em;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.rec-btn.cancel{background:var(--bubble-other);color:var(--danger);font-size:.8em}.rec-btn.send{background:var(--accent);color:#fff;font-weight:700}.bump-badge{position:fixed;bottom:90px;left:50%;transform:translate(-50%);background:var(--accent);color:#fff;border:none;border-radius:20px;padding:8px 16px;font-weight:600;cursor:pointer;box-shadow:0 4px 16px #00000080;z-index:40}.lightbox img{max-width:92vw;max-height:88vh;border-radius:8px}.allow-add{display:flex;gap:8px}.allow-add .input{flex:1}
