:root { --bg-color: #0f172a; --card-bg: #1e293b; --primary: #3b82f6; --primary-hover: #2563eb; --text-main: #f8fafc; --text-muted: #94a3b8; --border-color: #334155; --status-online: #10b981; --status-offline: #ef4444; --status-sent: #3b82f6; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Inter', sans-serif; background-color: var(--bg-color); color: var(--text-main); line-height: 1.5; -webkit-font-smoothing: antialiased; } .container { max-width: 800px; margin: 0 auto; padding: 2rem; } header { margin-bottom: 2rem; display: flex; justify-content: space-between; align-items: center; } .login-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--bg-color); display: flex; justify-content: center; align-items: center; z-index: 1000; } .login-card { background-color: var(--card-bg); border: 1px solid var(--border-color); border-radius: 12px; padding: 2rem; width: 100%; max-width: 400px; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3); } .main-nav { display: flex; gap: 1rem; margin-bottom: 1.5rem; border-bottom: 1px solid var(--border-color); padding-bottom: 1rem; } .nav-item { background: transparent; border: none; color: var(--text-muted); font-size: 0.875rem; font-weight: 600; cursor: pointer; padding: 0.5rem 1rem; border-radius: 6px; transition: all 0.2s; } .nav-item:hover { color: var(--text-main); background-color: rgba(255, 255, 255, 0.05); } .nav-item.active { color: var(--primary); background-color: rgba(59, 130, 246, 0.1); } .tab-content { display: none; } .tab-content.active { display: block; } .login-card .logo { justify-content: center; margin-bottom: 2rem; } .login-error { color: var(--status-offline); font-size: 0.875rem; margin-top: 1rem; text-align: center; } .logo { display: flex; align-items: center; gap: 1rem; } .logo svg { color: var(--primary); } .logo h1 { font-size: 1.5rem; font-weight: 600; } .card { background-color: var(--card-bg); border: 1px solid var(--border-color); border-radius: 12px; padding: 1.5rem; margin-bottom: 2rem; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } .card h2 { font-size: 1.25rem; margin-bottom: 1.5rem; font-weight: 600; } .form-group { margin-bottom: 1rem; } .form-row { display: flex; gap: 1rem; } .form-row .form-group { flex: 1; } label { display: block; font-size: 0.875rem; color: var(--text-muted); margin-bottom: 0.5rem; font-weight: 500; } input { width: 100%; background-color: var(--bg-color); border: 1px solid var(--border-color); color: var(--text-main); padding: 0.75rem 1rem; border-radius: 8px; font-family: inherit; font-size: 1rem; transition: border-color 0.2s, box-shadow 0.2s; } input:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.25); } .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.75rem 1.5rem; font-weight: 500; border-radius: 8px; cursor: pointer; border: none; transition: background-color 0.2s, transform 0.1s; font-family: inherit; font-size: 1rem; } .btn-primary { background-color: var(--primary); color: white; } .login-card .btn-primary { width: 100%; margin-top: 1rem; } .btn-primary:hover { background-color: var(--primary-hover); } .btn-primary:active { transform: translateY(1px); } .btn-icon { padding: 0.5rem; background: transparent; color: var(--text-muted); border-radius: 6px; } .btn-icon:hover { background-color: rgba(255, 255, 255, 0.1); color: var(--text-main); } .instances-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; } .instances-header h2 { margin-bottom: 0; } .instances-list { display: flex; flex-direction: column; gap: 1rem; } .instance-item { background-color: var(--bg-color); border: 1px solid var(--border-color); border-radius: 8px; padding: 1rem; display: flex; justify-content: space-between; align-items: center; transition: transform 0.2s; } .instance-item:hover { transform: translateX(4px); border-color: rgba(255, 255, 255, 0.2); } .instance-info h3 { font-size: 1rem; margin-bottom: 0.25rem; } .instance-meta { font-size: 0.875rem; color: var(--text-muted); display: flex; gap: 1rem; } .status-badge { display: inline-flex; align-items: center; gap: 0.375rem; font-size: 0.75rem; font-weight: 600; padding: 0.25rem 0.5rem; border-radius: 999px; background-color: rgba(255, 255, 255, 0.1); } .status-badge::before { content: ''; width: 8px; height: 8px; border-radius: 50%; } .status-badge.status-offline::before { background-color: var(--status-offline); } .status-badge.status-sent::before { background-color: var(--status-sent); } .status-badge.status-unknown::before { background-color: var(--text-muted); } .delete-btn { color: var(--status-offline); background: transparent; border: none; padding: 0.5rem; cursor: pointer; border-radius: 6px; transition: background-color 0.2s; } .delete-btn:hover { background-color: rgba(239, 68, 68, 0.1); } .empty-state { text-align: center; padding: 2rem; color: var(--text-muted); } .helper-text { font-size: 0.875rem; color: var(--text-muted); margin-bottom: 1rem; } .code-block { background-color: #0f172a; border: 1px solid var(--border-color); border-radius: 6px; padding: 0.75rem; margin-bottom: 0.75rem; position: relative; font-family: monospace; font-size: 0.875rem; display: flex; flex-direction: column; } .code-label { font-size: 0.7rem; color: var(--text-muted); text-transform: uppercase; font-weight: 700; margin-bottom: 0.25rem; font-family: 'Inter', sans-serif; } .code-block code { color: #34d399; word-break: break-all; } .code-wrapper { display: flex; justify-content: space-between; align-items: center; gap: 1rem; } .btn-copy { background: transparent; border: none; color: var(--text-muted); cursor: pointer; padding: 0.25rem; border-radius: 4px; transition: all 0.2s; display: flex; align-items: center; justify-content: center; } .btn-copy:hover { background-color: rgba(255, 255, 255, 0.1); color: var(--text-main); } .btn-copy:active { transform: scale(0.95); } .btn-copy.copied { color: var(--status-online); } .users-list { margin-top: 2rem; display: flex; flex-direction: column; gap: 1rem; } .user-item { background-color: var(--bg-color); border: 1px solid var(--border-color); border-radius: 8px; padding: 1rem; display: flex; justify-content: space-between; align-items: center; } .user-info h3 { font-size: 1rem; margin-bottom: 0.25rem; } .user-actions { display: flex; gap: 0.5rem; } .btn-sm { padding: 0.35rem 0.75rem; font-size: 0.75rem; height: auto; } .user-create-form, #add-form { display: flex; flex-direction: column; gap: 1.25rem; width: 100%; } .user-create-form .btn-primary, #add-form .btn-primary { align-self: flex-end; margin-top: 0.5rem; } .checkbox-container { display: flex; align-items: center; gap: 0.75rem; cursor: pointer; user-select: none; padding: 0.5rem 0; } .checkbox-container input { width: 18px; height: 18px; accent-color: var(--primary); cursor: pointer; } .checkbox-label { font-size: 0.875rem; color: var(--text-muted); } .profile-form { display: flex; flex-direction: column; gap: 1.25rem; max-width: 400px; } .profile-form .btn-primary { align-self: flex-start; } .divider { height: 1px; background-color: var(--border-color); margin: 2rem 0; } .success-msg { color: var(--status-online); text-align: center; margin-top: 1rem; font-size: 0.875rem; } /* Modals */ .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.7); backdrop-filter: blur(4px); z-index: 2000; justify-content: center; align-items: center; padding: 1rem; } .modal.active { display: flex; } .modal-content { width: 100%; max-width: 500px; margin: 0; position: relative; } .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; } .modal-header h2 { margin: 0; } .btn-close { background: transparent; border: none; color: var(--text-muted); font-size: 1.5rem; cursor: pointer; line-height: 1; } .btn-close:hover { color: var(--text-main); } .header-actions { display: flex; gap: 0.5rem; } .instances-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; } .instances-header .actions { display: flex; gap: 0.5rem; } .btn-sm { padding: 0.4rem 0.8rem; font-size: 0.75rem; }