*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;background-color:#f5f5f5;min-height:100vh}.loading-container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100vh;background:linear-gradient(135deg,#667eea,#764ba2)}.loading-spinner{width:50px;height:50px;border:5px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-container p{margin-top:20px;color:#fff;font-size:16px}.app-container{display:flex;height:100vh}.sidebar{width:300px;background-color:#fff;border-right:1px solid #e0e0e0;display:flex;flex-direction:column}.sidebar-header{padding:20px;border-bottom:1px solid #e0e0e0}.sidebar-header h1{font-size:18px;color:#333}.user-list{flex:1;overflow-y:auto}.user-item{display:flex;align-items:center;padding:12px 16px;cursor:pointer;border-bottom:1px solid #f0f0f0;transition:background-color .2s}.user-item:hover{background-color:#f5f5f5}.user-item.active{background-color:#e3f2fd}.status-dot{width:10px;height:10px;border-radius:50%;margin-right:12px}.status-dot.online{background-color:#4caf50}.status-dot.offline{background-color:#9e9e9e}.user-info{flex:1}.user-info h3{font-size:14px;color:#333;margin-bottom:2px}.user-info p{font-size:12px;color:#999}.chat-area{flex:1;display:flex;flex-direction:column;background-color:#f5f5f5}.chat-header{padding:20px;background-color:#fff;border-bottom:1px solid #e0e0e0;display:flex;justify-content:space-between;align-items:center}.chat-header h2{font-size:16px;color:#333;margin:0}.messages-container{flex:1;overflow-y:auto;padding:20px}.message{display:flex;margin-bottom:16px;max-width:70%}.message.sent{margin-left:auto;flex-direction:row-reverse}.message.received{margin-right:auto}.message-bubble{background-color:#fff;padding:12px 16px;border-radius:18px;box-shadow:0 1px 2px #0000001a}.message.sent .message-bubble{background-color:#e3f2fd}.message-content{font-size:14px;color:#333;line-height:1.5}.message-time{font-size:11px;color:#999;margin-top:4px;display:block}.message.sent .message-time{text-align:right}.message.offline .message-bubble{opacity:.7}.message.offline .message-content:before{content:"[离线] ";color:#ff5722}.input-area{padding:16px;background-color:#fff;border-top:1px solid #e0e0e0;display:flex;gap:12px;position:relative}.input-area input{flex:1;padding:12px 16px;border:1px solid #e0e0e0;border-radius:24px;font-size:14px;outline:none;transition:border-color .2s}.input-area input:focus{border-color:#4a90e2}.input-area button{padding:12px 24px;background-color:#4a90e2;color:#fff;border:none;border-radius:24px;font-size:14px;cursor:pointer;transition:background-color .2s}.input-area button:hover{background-color:#3a80d2}.input-area button:disabled{background-color:#ccc;cursor:not-allowed}.input-tools{display:flex;gap:8px;margin-bottom:8px}.tool-btn{width:36px;height:36px;border:none;background-color:#f0f0f0;border-radius:8px;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.tool-btn:hover{background-color:#e0e0e0}.image-upload-input{display:none}.emoji-picker-wrapper{position:absolute;bottom:100%;left:16px;right:16px;margin-bottom:8px;z-index:100}.emoji-picker{display:flex;flex-wrap:wrap;gap:4px;max-width:100%;max-height:200px;overflow-y:auto;padding:8px;background-color:#fff;border:1px solid #e0e0e0;border-radius:8px;box-shadow:0 -2px 10px #0000001a}.emoji-btn{width:32px;height:32px;border:none;background:none;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:background-color .2s}.emoji-btn:hover{background-color:#f0f0f0}.message-image{max-width:200px;max-height:200px;border-radius:8px;object-fit:cover}.login-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;background-color:#f5f5f5}.login-box{background-color:#fff;padding:40px;border-radius:12px;box-shadow:0 2px 10px #0000001a}.login-box h1{font-size:24px;color:#333;margin-bottom:24px;text-align:center}.login-box .form-group{margin-bottom:16px}.login-box .form-group label{display:block;font-size:14px;color:#333;margin-bottom:8px;font-weight:500}.login-box .form-group input{width:300px;padding:12px 16px;border:1px solid #e0e0e0;border-radius:8px;font-size:14px;outline:none}.login-box .form-group input:focus{border-color:#4a90e2}.login-box button{width:100%;padding:12px;background-color:#4a90e2;color:#fff;border:none;border-radius:8px;font-size:14px;cursor:pointer}.login-box button:hover{background-color:#3a80d2}.login-error{color:#f44336;font-size:12px;margin-bottom:12px;text-align:center}.toast-notification{position:fixed;top:20px;right:20px;background-color:#4caf50;color:#fff;padding:12px 24px;border-radius:8px;box-shadow:0 2px 10px #0003;z-index:1000;animation:slideIn .3s ease-out}@keyframes slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;color:#999}.empty-state p{font-size:16px}.unread-badge{background-color:#ff5722;color:#fff;font-size:12px;padding:2px 6px;border-radius:10px;margin-left:8px;min-width:20px;text-align:center}.clear-chat-btn{background:linear-gradient(135deg,#ff6b6b,#ee5a5a);border:none;padding:8px 16px;border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;color:#fff;transition:all .2s;box-shadow:0 2px 8px #ff6b6b4d}.clear-chat-btn:hover{background:linear-gradient(135deg,#ff5252,#d63031);box-shadow:0 4px 12px #ff6b6b80;transform:translateY(-1px)}.clear-chat-btn:active{transform:translateY(0);box-shadow:0 2px 6px #ff6b6b66}.confirm-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.confirm-dialog{background-color:#fff;padding:24px;border-radius:12px;box-shadow:0 4px 20px #00000026;max-width:360px;width:90%}.confirm-dialog h3{margin:0 0 12px;font-size:18px;color:#333}.confirm-dialog p{margin:0;color:#666;font-size:14px}.confirm-buttons{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.confirm-cancel{padding:8px 16px;background-color:#f5f5f5;border:none;border-radius:6px;font-size:14px;cursor:pointer;color:#666}.confirm-cancel:hover{background-color:#e0e0e0}.confirm-ok{padding:8px 16px;background-color:#ff4d4f;border:none;border-radius:6px;font-size:14px;cursor:pointer;color:#fff}.confirm-ok:hover{background-color:#ff7875}.image-preview-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000e6;display:flex;align-items:center;justify-content:center;z-index:2000;cursor:pointer}.image-preview-content{position:relative;max-width:90vw;max-height:90vh;display:flex;flex-direction:column;align-items:center;touch-action:none}.image-preview-content img{max-width:90vw;max-height:85vh;object-fit:contain;border-radius:8px;cursor:grab;transition:transform .1s ease-out;touch-action:none}.image-preview-controls{position:absolute;bottom:-50px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;background:#000000b3;padding:8px 16px;border-radius:20px;white-space:nowrap}.image-preview-controls button{width:28px;height:28px;background:#fff3;border:none;border-radius:4px;color:#fff;font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center}.image-preview-controls button:hover{background:#ffffff4d}.image-preview-controls span{color:#fff;font-size:14px;min-width:45px;text-align:center}.image-preview-close{position:absolute;top:-40px;right:0;width:32px;height:32px;background:#fff3;border:none;border-radius:50%;color:#fff;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center}.image-preview-close:hover{background:#ffffff4d}
