/* CSS Variables for theming */ :root { /* Light theme (default) */ --bg-primary: #ffffff; --bg-secondary: #f5f5f5; --bg-tertiary: #e8e8e8; --text-primary: #1a1a1a; --text-secondary: #666666; --text-muted: #999999; --border-color: #dddddd; --accent-color: #4a90d9; --accent-hover: #3a7bc8; --success-color: #28a745; --warning-color: #ffc107; --error-color: #dc3545; --message-own-bg: #e3f2fd; --message-other-bg: #f5f5f5; --message-system-bg: #fff3cd; --shadow-sm: 0 1px 3px rgba(0,0,0,0.1); --shadow-md: 0 4px 6px rgba(0,0,0,0.1); --shadow-lg: 0 10px 25px rgba(0,0,0,0.15); } [data-theme="dark"] { --bg-primary: #1a1a2e; --bg-secondary: #16213e; --bg-tertiary: #0f3460; --text-primary: #eaeaea; --text-secondary: #b0b0b0; --text-muted: #707070; --border-color: #2a2a4a; --accent-color: #4a90d9; --accent-hover: #5ba0e9; --message-own-bg: #1e3a5f; --message-other-bg: #2a2a4a; --message-system-bg: #3d3d1a; --shadow-sm: 0 1px 3px rgba(0,0,0,0.3); --shadow-md: 0 4px 6px rgba(0,0,0,0.3); --shadow-lg: 0 10px 25px rgba(0,0,0,0.4); } /* Reset & Base */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif; font-size: 14px; line-height: 1.5; background: var(--bg-primary); color: var(--text-primary); } /* Utility */ .hidden { display: none !important; } /* Screens */ .screen { height: 100%; width: 100%; } /* Login Screen */ #login-screen { display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-primary) 100%); } .login-container { background: var(--bg-primary); padding: 2.5rem; border-radius: 12px; box-shadow: var(--shadow-lg); width: 100%; max-width: 400px; text-align: center; } .login-header h1 { font-size: 2rem; margin-bottom: 0.25rem; color: var(--accent-color); } .login-header .subtitle { color: var(--text-secondary); margin-bottom: 2rem; } .form-group { margin-bottom: 1.5rem; text-align: left; } .form-group label { display: block; margin-bottom: 0.5rem; font-weight: 500; color: var(--text-secondary); } input[type="text"] { width: 100%; padding: 0.75rem 1rem; border: 2px solid var(--border-color); border-radius: 8px; font-size: 1rem; background: var(--bg-primary); color: var(--text-primary); transition: border-color 0.2s, box-shadow 0.2s; } input[type="text"]:focus { outline: none; border-color: var(--accent-color); box-shadow: 0 0 0 3px rgba(74, 144, 217, 0.15); } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.75rem 1.5rem; border: none; border-radius: 8px; font-size: 1rem; font-weight: 500; cursor: pointer; transition: all 0.2s; } .btn-primary { background: var(--accent-color); color: white; } .btn-primary:hover { background: var(--accent-hover); } .btn-secondary { background: var(--bg-tertiary); color: var(--text-primary); } .btn-secondary:hover { background: var(--border-color); } .btn-icon { width: 32px; height: 32px; padding: 0; border: none; border-radius: 6px; background: transparent; color: var(--text-secondary); cursor: pointer; font-size: 1.2rem; transition: all 0.2s; } .btn-icon:hover { background: var(--bg-tertiary); color: var(--text-primary); } .pagi-info { margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid var(--border-color); color: var(--text-muted); } .pagi-info .small { font-size: 0.85rem; } /* Chat Layout */ .chat-layout { display: flex; height: 100%; } /* Sidebar */ .sidebar { width: 260px; background: var(--bg-secondary); border-right: 1px solid var(--border-color); display: flex; flex-direction: column; overflow: hidden; } .sidebar-header { display: flex; align-items: center; justify-content: space-between; padding: 1rem; border-bottom: 1px solid var(--border-color); } .sidebar-header h2 { font-size: 1.25rem; color: var(--accent-color); } /* Connection Status */ .connection-status { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1rem; background: var(--bg-tertiary); font-size: 0.85rem; } .status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--warning-color); } .connection-status.connected .status-dot { background: var(--success-color); } .connection-status.disconnected .status-dot { background: var(--error-color); } /* User Info */ .user-info { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; border-bottom: 1px solid var(--border-color); } .user-avatar { width: 36px; height: 36px; border-radius: 50%; background: var(--accent-color); color: white; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 1rem; } .user-name { font-weight: 500; } /* Sidebar Sections */ .sidebar-section { padding: 1rem; border-bottom: 1px solid var(--border-color); } .sidebar-section:last-child { border-bottom: none; margin-top: auto; } .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.75rem; } .section-header h3 { font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); } .badge { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 10px; background: var(--bg-tertiary); color: var(--text-secondary); font-size: 0.75rem; font-weight: 500; } /* Navigation Lists */ .nav-list { list-style: none; max-height: 200px; overflow-y: auto; } .nav-list li { padding: 0.5rem 0.75rem; border-radius: 6px; cursor: pointer; transition: background 0.2s; display: flex; align-items: center; gap: 0.5rem; } .nav-list li:hover { background: var(--bg-tertiary); } .nav-list li.active { background: var(--accent-color); color: white; } .nav-list li .room-users { margin-left: auto; font-size: 0.75rem; color: var(--text-muted); } .nav-list li.active .room-users { color: rgba(255,255,255,0.7); } .nav-list li .typing-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent-color); animation: pulse 1s infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } } /* Stats */ .stats-section { background: var(--bg-tertiary); border-radius: 8px; margin: 0.5rem; padding: 1rem !important; } .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.5rem; text-align: center; } .stat-value { display: block; font-size: 1.25rem; font-weight: 600; color: var(--accent-color); } .stat-label { font-size: 0.7rem; color: var(--text-muted); text-transform: uppercase; } /* Main Chat Area */ .chat-main { flex: 1; display: flex; flex-direction: column; overflow: hidden; } .chat-header { display: flex; align-items: center; justify-content: space-between; padding: 1rem 1.5rem; border-bottom: 1px solid var(--border-color); background: var(--bg-primary); } .room-info h2 { font-size: 1.25rem; } .typing-indicator { font-size: 0.85rem; color: var(--text-muted); font-style: italic; } /* Messages Container */ .messages-container { flex: 1; overflow-y: auto; padding: 1rem; background: var(--bg-secondary); } .messages { display: flex; flex-direction: column; gap: 0.5rem; } /* Message Styles */ .message { max-width: 70%; padding: 0.75rem 1rem; border-radius: 12px; position: relative; } .message.own { align-self: flex-end; background: var(--message-own-bg); border-bottom-right-radius: 4px; } .message.other { align-self: flex-start; background: var(--message-other-bg); border-bottom-left-radius: 4px; } .message.system { align-self: center; background: var(--message-system-bg); font-size: 0.85rem; color: var(--text-secondary); padding: 0.5rem 1rem; max-width: 90%; } .message.action { align-self: center; background: transparent; font-style: italic; color: var(--text-secondary); } .message.pm { border-left: 3px solid var(--accent-color); } .message-header { display: flex; align-items: baseline; gap: 0.5rem; margin-bottom: 0.25rem; } .message-author { font-weight: 600; font-size: 0.85rem; } .message-time { font-size: 0.7rem; color: var(--text-muted); } .message-text { word-wrap: break-word; } /* Help text styling */ .message-text pre { white-space: pre-wrap; font-family: inherit; margin: 0; } /* Message Input */ .message-input-container { padding: 1rem; background: var(--bg-primary); border-top: 1px solid var(--border-color); } #message-form { display: flex; gap: 0.75rem; } #message-input { flex: 1; } /* Modal */ .modal { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal-backdrop { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.5); } .modal-content { position: relative; background: var(--bg-primary); padding: 1.5rem; border-radius: 12px; box-shadow: var(--shadow-lg); width: 100%; max-width: 400px; } .modal-content h3 { margin-bottom: 1rem; } .modal-actions { display: flex; gap: 0.75rem; justify-content: flex-end; margin-top: 1.5rem; } /* Toast Notifications */ .toast-container { position: fixed; bottom: 1rem; right: 1rem; display: flex; flex-direction: column; gap: 0.5rem; z-index: 1001; } .toast { padding: 0.75rem 1rem; border-radius: 8px; background: var(--bg-primary); box-shadow: var(--shadow-md); border-left: 4px solid var(--accent-color); animation: slideIn 0.3s ease; } .toast.success { border-left-color: var(--success-color); } .toast.error { border-left-color: var(--error-color); } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Scrollbar */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: var(--bg-secondary); } ::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } /* Responsive */ @media (max-width: 768px) { .sidebar { width: 200px; } .message { max-width: 85%; } } @media (max-width: 600px) { .chat-layout { flex-direction: column; } .sidebar { width: 100%; height: auto; max-height: 40vh; } .nav-list { max-height: 100px; } .stats-section { display: none; } }